@jesonliu/lark-claudecode-bridge 1.3.7 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/assets/web/js/main.js +2 -1
- package/assets/web/js/pages/memory.js +561 -0
- package/config.example.yaml +34 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.js +133 -1
- package/dist/config.js.map +1 -1
- package/dist/executor/claude-executor.d.ts +26 -3
- package/dist/executor/claude-executor.js +718 -293
- package/dist/executor/claude-executor.js.map +1 -1
- package/dist/executor/notify-server.d.ts +10 -0
- package/dist/executor/notify-server.js +11 -0
- package/dist/executor/notify-server.js.map +1 -1
- package/dist/executor/permission-gate.d.ts +8 -1
- package/dist/executor/permission-gate.js +7 -3
- package/dist/executor/permission-gate.js.map +1 -1
- package/dist/gateway/card-builder.d.ts +15 -3
- package/dist/gateway/card-builder.js +21 -10
- package/dist/gateway/card-builder.js.map +1 -1
- package/dist/gateway/feishu-gateway.d.ts +13 -0
- package/dist/gateway/feishu-gateway.js +34 -2
- package/dist/gateway/feishu-gateway.js.map +1 -1
- package/dist/gateway/progress-card.d.ts +4 -2
- package/dist/gateway/progress-card.js +52 -25
- package/dist/gateway/progress-card.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +225 -32
- package/dist/index.js.map +1 -1
- package/dist/memory-installer.d.ts +174 -0
- package/dist/memory-installer.js +1035 -0
- package/dist/memory-installer.js.map +1 -0
- package/dist/memory.d.ts +88 -0
- package/dist/memory.js +195 -0
- package/dist/memory.js.map +1 -0
- package/dist/security/paths.d.ts +3 -1
- package/dist/security/paths.js +28 -4
- package/dist/security/paths.js.map +1 -1
- package/dist/session/session-store.d.ts +15 -0
- package/dist/session/session-store.js +16 -0
- package/dist/session/session-store.js.map +1 -1
- package/dist/types.d.ts +56 -1
- package/dist/web/config-api.js +32 -0
- package/dist/web/config-api.js.map +1 -1
- package/dist/web/memory-api.d.ts +25 -0
- package/dist/web/memory-api.js +197 -0
- package/dist/web/memory-api.js.map +1 -0
- package/dist/web/server.js +73 -2
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -137,6 +137,39 @@ export interface ClaudeConfig {
|
|
|
137
137
|
/** 多厂商档案库(不直接生效;Web 页「设为当前」拷贝到顶层) */
|
|
138
138
|
profiles?: ClaudeProfile[];
|
|
139
139
|
}
|
|
140
|
+
/** 记忆模型配置(memory.model 子段):OpenAI 协议端点(embedding/vlm),与厂商档案(Anthropic 协议)
|
|
141
|
+
* 分属两个协议域,不做隐式推导——零耦合是生命周期方案 §6.8 的定稿原则。B2 配置页消费(渲染 ov.conf),
|
|
142
|
+
* B1 仅解析透传 */
|
|
143
|
+
export interface MemoryModelConfig {
|
|
144
|
+
/** 服务商预设(填表助手语义:预设只预填 endpoint/模型名,值仍可见可改) */
|
|
145
|
+
provider?: 'glm' | 'volcengine' | 'openai-compatible' | 'ollama';
|
|
146
|
+
apiBase?: string;
|
|
147
|
+
/** 配置页输入;GET 脱敏回显(对齐 app_secret 惯例),不参与日志 */
|
|
148
|
+
apiKey?: string;
|
|
149
|
+
/** 提炼模型(会话归档时用),独立于对话模型可指定更强档位 */
|
|
150
|
+
vlmModel?: string;
|
|
151
|
+
embeddingModel?: string;
|
|
152
|
+
}
|
|
153
|
+
/** 长期记忆段(整体可选;生命周期方案 §6):缺省/enabled=false = 零开销——不下发 env、不注入插件、
|
|
154
|
+
* 不产生告警,LCB 行为与无此段完全一致(总验收「可插拔」条款)。热生效:env 下发与插件装配均每任务
|
|
155
|
+
* 现读,改盘后下一条消息即生效(常驻进程经配置指纹回收重建) */
|
|
156
|
+
export interface MemoryConfig {
|
|
157
|
+
/** 总开关;缺省 false。开启后:所有 bot 下发 OPENVIKING_* ns env + 记忆插件自动注入(含 deputy,§6.9) */
|
|
158
|
+
enabled: boolean;
|
|
159
|
+
/** embedded(B3 落地:LCB 受管本地服务)/ remote(B1 起可用:外部已跑的 server) */
|
|
160
|
+
mode: 'embedded' | 'remote';
|
|
161
|
+
/** 服务与插件 pin 版本(B3 安装器消费;B1 仅记录回显) */
|
|
162
|
+
version?: string;
|
|
163
|
+
/** remote 模式的 server 地址;embedded 由 LCB 分配后回写。缺省 http://127.0.0.1:1933 */
|
|
164
|
+
endpoint?: string;
|
|
165
|
+
/** OPENVIKING_ACCOUNT(全局账号轴);缺省 "lcb" */
|
|
166
|
+
account?: string;
|
|
167
|
+
/** OPENVIKING_API_KEY:root key 只进 LCB 侧(配置盘 + 子进程 env),永不出现在浏览器/日志。
|
|
168
|
+
* dev 模式服务可为空;Admin API user key 自动签发落地前先承接手填值(B1-4 演进) */
|
|
169
|
+
apiKey?: string;
|
|
170
|
+
/** 记忆模型(B2 消费;与厂商档案零耦合) */
|
|
171
|
+
model?: MemoryModelConfig;
|
|
172
|
+
}
|
|
140
173
|
/** 飞书斜杠命令注册定义(同步到开放平台 app_slash_commands;command 不含 / 前缀) */
|
|
141
174
|
export interface SlashCommandDef {
|
|
142
175
|
command: string;
|
|
@@ -170,6 +203,8 @@ export interface BridgeConfig {
|
|
|
170
203
|
claude?: ClaudeConfig;
|
|
171
204
|
/** 飞书斜杠命令同步;缺省仅内置命令集 */
|
|
172
205
|
slashCommands?: SlashCommandsConfig;
|
|
206
|
+
/** 长期记忆段(生命周期方案 §6,v2.3):缺省关 = 零开销;热生效(每任务现读) */
|
|
207
|
+
memory?: MemoryConfig;
|
|
173
208
|
/** 会话行为微调;缺省 contextRemindTokens 用 config.ts 的内置默认 */
|
|
174
209
|
session?: SessionConfig;
|
|
175
210
|
/** 卡片展示;缺省 width=default(飞书默认宽度) */
|
|
@@ -195,6 +230,26 @@ export interface SessionConfig {
|
|
|
195
230
|
/** 工具可用性说明注入 appendSystemPrompt(软约束):对抗 Claude Code 2.1.117+ dynamic tool loading
|
|
196
231
|
* 下模型用 ToolSearch 自查时误判「Read/Write 等核心工具不存在」。缺省 true */
|
|
197
232
|
toolHint?: boolean;
|
|
233
|
+
/** 常驻进程池(生命周期方案 A2):同通道消息亲和复用同一 CLI 子进程,冷启动税从
|
|
234
|
+
* 「每消息一次」摊薄为「每会话一次」。配置指纹(人设/模型/plan/env/MCP/插件/档案
|
|
235
|
+
* settings/cwd)任一变化即回收重建,保住「每任务现读热生效」语义。false = 每消息冷启
|
|
236
|
+
* (旧行为)。缺省 true */
|
|
237
|
+
residentProcess?: boolean;
|
|
238
|
+
/** 常驻进程空闲回收阈值(分钟):通道空闲超阈值杀进程释放内存(每进程数百 MB),只影响
|
|
239
|
+
* 下次响应速度、不影响会话(指针与 transcript 均落盘,追问时冷启 + resume 无缝续上)。
|
|
240
|
+
* 0 = 不自动回收(仅受 resident_max_processes 上限约束);缺省 60 */
|
|
241
|
+
residentIdleMinutes?: number;
|
|
242
|
+
/** 常驻进程池上限(按 app 统计):超出按 LRU 回收最久未用的空闲进程(忙进程不动)。
|
|
243
|
+
* 缺省 = 该 app 的并发数(concurrency) */
|
|
244
|
+
residentMaxProcesses?: number;
|
|
245
|
+
/** 群聊会话空闲滚动阈值(小时)(生命周期方案 A3):话题切换天然伴随时间间隔,空闲超阈值
|
|
246
|
+
* 自动开新话题(业务无感)。0 = 关闭空闲滚动;缺省 4。私聊不受影响(手动 /new 最优) */
|
|
247
|
+
groupIdleResetHours?: number;
|
|
248
|
+
/** 群聊会话轮次滚动阈值(任务数):兜底单话题超长,满阈值主动滚动(赶在 auto-compact 之前,
|
|
249
|
+
* token 线性可控)。0 = 关闭轮次滚动;缺省 30 */
|
|
250
|
+
groupMaxTurns?: number;
|
|
251
|
+
/** 群聊滚动后首条回复尾部的轻注记开关(「🍃 已开启新话题」仅一条);缺省 true */
|
|
252
|
+
groupRollNotify?: boolean;
|
|
198
253
|
}
|
|
199
254
|
export interface IncomingMessage {
|
|
200
255
|
chatId: string;
|
|
@@ -223,7 +278,7 @@ export interface RejectedMessage {
|
|
|
223
278
|
};
|
|
224
279
|
}
|
|
225
280
|
/** 卡片回调决策:allow/deny/allow-session 为写工具确认卡;plan-* 为计划确认卡(feedback = 按意见修改时的用户输入);
|
|
226
|
-
* plan-view-file =
|
|
281
|
+
* plan-view-file = legacy「查看完整方案」按钮(存量卡片残留),计划正文已改为卡片直发,回调等价重发内容卡片;
|
|
227
282
|
* qa-* 为提问卡;ws-switch 为工作区切换卡 */
|
|
228
283
|
export type CardDecision = 'allow' | 'deny' | 'allow-session' | 'plan-approve' | 'plan-revise' | 'plan-reject' | 'plan-view-file' | 'qa-pick' | 'qa-submit' | 'ws-switch';
|
|
229
284
|
export interface CardActionValue {
|
package/dist/web/config-api.js
CHANGED
|
@@ -55,6 +55,28 @@ export function applySecrets(newDoc, oldDoc) {
|
|
|
55
55
|
}
|
|
56
56
|
doc.claude = newClaude;
|
|
57
57
|
}
|
|
58
|
+
// memory 段(§6.8 记忆增强):memory.api_key(root key)与 memory.model.api_key(模型 key)
|
|
59
|
+
// 未修改时回填磁盘现值——与 claude 段同款语义,页面「打开直接保存」不丢已配 Key
|
|
60
|
+
if (doc.memory && typeof doc.memory === 'object' && !Array.isArray(doc.memory)) {
|
|
61
|
+
const newMemory = { ...doc.memory };
|
|
62
|
+
const oldMemory = oldDoc.memory && typeof oldDoc.memory === 'object' && !Array.isArray(oldDoc.memory)
|
|
63
|
+
? oldDoc.memory
|
|
64
|
+
: {};
|
|
65
|
+
if (isUnchangedSecret(newMemory.api_key))
|
|
66
|
+
newMemory.api_key = oldMemory.api_key;
|
|
67
|
+
if (newMemory.model && typeof newMemory.model === 'object' && !Array.isArray(newMemory.model)) {
|
|
68
|
+
const oldModel = oldMemory.model && typeof oldMemory.model === 'object' && !Array.isArray(oldMemory.model)
|
|
69
|
+
? oldMemory.model
|
|
70
|
+
: {};
|
|
71
|
+
newMemory.model = {
|
|
72
|
+
...newMemory.model,
|
|
73
|
+
...(isUnchangedSecret(newMemory.model.api_key)
|
|
74
|
+
? { api_key: oldModel.api_key }
|
|
75
|
+
: {}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
doc.memory = newMemory;
|
|
79
|
+
}
|
|
58
80
|
return doc;
|
|
59
81
|
}
|
|
60
82
|
/** GET /api/config 响应构建:深拷贝 doc 并把 secret 字段替换为脱敏提示 */
|
|
@@ -80,6 +102,16 @@ export function docForClient(doc) {
|
|
|
80
102
|
}
|
|
81
103
|
out.claude = c;
|
|
82
104
|
}
|
|
105
|
+
// memory 段脱敏(§6.8):root key / 模型 key 只回显尾 4 位提示
|
|
106
|
+
if (out.memory && typeof out.memory === 'object' && !Array.isArray(out.memory)) {
|
|
107
|
+
const m = { ...out.memory };
|
|
108
|
+
m.api_key = maskSecret(typeof m.api_key === 'string' ? m.api_key : undefined);
|
|
109
|
+
if (m.model && typeof m.model === 'object' && !Array.isArray(m.model)) {
|
|
110
|
+
const mm = m.model;
|
|
111
|
+
m.model = { ...mm, api_key: maskSecret(typeof mm.api_key === 'string' ? mm.api_key : undefined) };
|
|
112
|
+
}
|
|
113
|
+
out.memory = m;
|
|
114
|
+
}
|
|
83
115
|
return out;
|
|
84
116
|
}
|
|
85
117
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-api.js","sourceRoot":"","sources":["../../src/web/config-api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-api.js","sourceRoot":"","sources":["../../src/web/config-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BridgeConfig } from '../types.js';
|
|
2
|
+
/** GET /api/memory/status 响应:服务探活 + 插件加载状态 + per-bot ns 摘要(全部只读) */
|
|
3
|
+
export declare function memoryStatus(config: BridgeConfig): Promise<Record<string, unknown>>;
|
|
4
|
+
/** 单项连接测试结果 */
|
|
5
|
+
export interface ConnCheck {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
detail: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* POST /api/memory/test-connection:模型表单 [测试连接] 后端(§6.8 双绿门禁)。
|
|
11
|
+
* body 为表单现值(不落盘)——用户可先测通再保存/开启;双绿 = embedding 与 vlm 各真调一次。
|
|
12
|
+
* Ollama 等零 Key 端点:api_key 可空(不带 Authorization 头)。key 只进本次请求,不落日志。
|
|
13
|
+
* savedApiKey:配置中已保存的 Key——输入框脱敏不回显,表单 Key 留空时回退用它测试
|
|
14
|
+
* (否则已配置过的用户点测试必 401);表单填了新值则测新值(换 Key 前先验证)。
|
|
15
|
+
*/
|
|
16
|
+
export declare function testMemoryConnection(body: {
|
|
17
|
+
api_base?: unknown;
|
|
18
|
+
api_key?: unknown;
|
|
19
|
+
vlm_model?: unknown;
|
|
20
|
+
embedding_model?: unknown;
|
|
21
|
+
}, savedApiKey?: string): Promise<{
|
|
22
|
+
embedding: ConnCheck;
|
|
23
|
+
vlm: ConnCheck;
|
|
24
|
+
ok: boolean;
|
|
25
|
+
}>;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { DEFAULT_MEMORY_ENDPOINT, MEMORY_PLUGIN_NAME, memoryEndpoint, probeMemoryHealth, } from '../memory.js';
|
|
3
|
+
import { EXTERNAL_OV_CONF, MANAGED_OV_CONF, OVCLI_CONF, classifyClientConf, detectUv, isManagedRunning, locateMemoryPlugin, managedStartedAt, resolveServerBin, } from '../memory-installer.js';
|
|
4
|
+
import { maskSecret } from './config-api.js';
|
|
5
|
+
/** 承诺限时(安装探测里 uv 检测最坏要 spawn 子进程,超时按未检出降级,不拖慢 status) */
|
|
6
|
+
function withTimeout(p, ms) {
|
|
7
|
+
return Promise.race([p, new Promise((_, rej) => setTimeout(() => rej(new Error(`检测超时(>${ms}ms)`)), ms))]);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 服务安装摘要(配置页四态状态机的探测源):bin 存在性(uv → openviking-server)、conf 存在性
|
|
11
|
+
* (受管 / 外部任一)、LCB 受管进程是否在跑。全程容错 + 限时——探测失败按「未检出」展示,
|
|
12
|
+
* 不阻塞 status 其余字段。
|
|
13
|
+
*/
|
|
14
|
+
async function detectInstallSummary() {
|
|
15
|
+
const confFound = existsSync(MANAGED_OV_CONF) || existsSync(EXTERNAL_OV_CONF);
|
|
16
|
+
let serverBin = null;
|
|
17
|
+
try {
|
|
18
|
+
const uv = await withTimeout(detectUv(), 8_000);
|
|
19
|
+
serverBin = uv ? await withTimeout(resolveServerBin(uv), 8_000) : null;
|
|
20
|
+
}
|
|
21
|
+
catch { /* uv 不在/查询超时:按未装展示(一键安装会补齐运行时) */ }
|
|
22
|
+
return {
|
|
23
|
+
serverFound: !!serverBin,
|
|
24
|
+
...(serverBin ? { serverBin } : {}),
|
|
25
|
+
confFound,
|
|
26
|
+
managedRunning: isManagedRunning(),
|
|
27
|
+
// 受管实例本次拉起时间(前端「运行时间」展示源;外部自管服务无从得知,不输出)
|
|
28
|
+
...(isManagedRunning() ? { managedSince: managedStartedAt() } : {}),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** GET /api/memory/status 响应:服务探活 + 插件加载状态 + per-bot ns 摘要(全部只读) */
|
|
32
|
+
export async function memoryStatus(config) {
|
|
33
|
+
const memory = config.memory;
|
|
34
|
+
// 探活始终执行(未开启也探):用户「配好 endpoint 还没开」时页面即能预览服务状态
|
|
35
|
+
const endpoint = memory ? memoryEndpoint(memory) : DEFAULT_MEMORY_ENDPOINT;
|
|
36
|
+
const health = await probeMemoryHealth(endpoint);
|
|
37
|
+
// 插件检测与 executeTask 装配同口径(locateMemoryPlugin 三渠道定位;managed 副本未被引用
|
|
38
|
+
// 不计入——运行时不会加载它,报了会与实际装配错位)。历史缺陷:只看 marketplace 自动发现,
|
|
39
|
+
// CLI 卸载清掉登记后,config.yaml 显式引用仍在正常工作的插件被误报「未安装」
|
|
40
|
+
// 客户端启用状态(插件 isPluginEnabled 口径的近似):env 通道(memory.enabled → OPENVIKING_
|
|
41
|
+
// MEMORY_ENABLED 强制启用)+ 文件通道(外部 ov.conf / LCB 骨架 / 用户手配 ovcli.conf)。
|
|
42
|
+
// 历史盲区:此前只展示 LCB 侧加载渠道,「一键安装完成、状态灯全绿但 hooks 实际静默空转」
|
|
43
|
+
// 不可见(插件启用判定根本不看 LCB 的身份三键 env)
|
|
44
|
+
const client = classifyClientConf({ ovcli: OVCLI_CONF, ovConf: EXTERNAL_OV_CONF });
|
|
45
|
+
const clientEnabled = memory?.enabled === true
|
|
46
|
+
|| client.state === 'external' || client.state === 'lcb-managed' || client.state === 'user-managed';
|
|
47
|
+
let plugin = {
|
|
48
|
+
found: false, name: MEMORY_PLUGIN_NAME,
|
|
49
|
+
clientEnabled, clientConfState: client.state, clientConfPath: client.path,
|
|
50
|
+
};
|
|
51
|
+
try {
|
|
52
|
+
const located = await locateMemoryPlugin(config);
|
|
53
|
+
if (located) {
|
|
54
|
+
plugin = {
|
|
55
|
+
found: true, name: MEMORY_PLUGIN_NAME,
|
|
56
|
+
...(located.version ? { version: located.version } : {}),
|
|
57
|
+
...(located.marketplace ? { marketplace: located.marketplace } : {}),
|
|
58
|
+
path: located.path,
|
|
59
|
+
// 加载渠道(前端据此标注来源):marketplace=CLI 安装启用;explicit=config.yaml 显式引用
|
|
60
|
+
source: located.where,
|
|
61
|
+
clientEnabled, clientConfState: client.state, clientConfPath: client.path,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch { /* 插件发现全程容错(plugin-discovery 契约):失败按未发现展示 */ }
|
|
66
|
+
return {
|
|
67
|
+
memory: memory
|
|
68
|
+
? {
|
|
69
|
+
enabled: memory.enabled,
|
|
70
|
+
mode: memory.mode,
|
|
71
|
+
...(memory.endpoint ? { endpoint: memory.endpoint } : { endpoint: DEFAULT_MEMORY_ENDPOINT }),
|
|
72
|
+
...(memory.version ? { version: memory.version } : {}),
|
|
73
|
+
...(memory.account ? { account: memory.account } : {}),
|
|
74
|
+
apiKey: maskSecret(memory.apiKey),
|
|
75
|
+
model: memory.model
|
|
76
|
+
? {
|
|
77
|
+
...(memory.model.provider ? { provider: memory.model.provider } : {}),
|
|
78
|
+
...(memory.model.apiBase ? { apiBase: memory.model.apiBase } : {}),
|
|
79
|
+
apiKey: maskSecret(memory.model.apiKey),
|
|
80
|
+
...(memory.model.vlmModel ? { vlmModel: memory.model.vlmModel } : {}),
|
|
81
|
+
...(memory.model.embeddingModel ? { embeddingModel: memory.model.embeddingModel } : {}),
|
|
82
|
+
}
|
|
83
|
+
: undefined,
|
|
84
|
+
}
|
|
85
|
+
: { enabled: false, mode: 'remote', endpoint: DEFAULT_MEMORY_ENDPOINT },
|
|
86
|
+
health,
|
|
87
|
+
// auth_mode 语义提示(页面直出):dev=本机回环免鉴权(身份经 X-OpenViking-User header 隔离);
|
|
88
|
+
// api_key=user key 已由 LCB 自动签发(B1)——key 明细不出进程
|
|
89
|
+
authNote: health.authMode === 'api_key'
|
|
90
|
+
? 'api_key 模式:LCB 已为每个机器人自动签发独立 user key(root key 不出本进程)'
|
|
91
|
+
: health.authMode === 'dev'
|
|
92
|
+
? 'dev 模式(本机默认):服务仅回环可达、免鉴权,机器人身份经命名空间 header 隔离'
|
|
93
|
+
: undefined,
|
|
94
|
+
plugin,
|
|
95
|
+
// 安装摘要(页面据此渲染「一键安装 / 启动服务 / 停止」唯一主行动,消除状态与动作错位)
|
|
96
|
+
install: await detectInstallSummary(),
|
|
97
|
+
bots: config.apps.map((a) => ({
|
|
98
|
+
name: a.name,
|
|
99
|
+
appId: a.appId,
|
|
100
|
+
role: a.role ?? 'primary',
|
|
101
|
+
// 记忆 ns 用户轴前缀(完整 user = 前缀 + 飞书 userId,群聊按人隔离)
|
|
102
|
+
userPrefix: `${a.appId}-`,
|
|
103
|
+
...(a.role === 'deputy' && a.allowedPlugins !== undefined
|
|
104
|
+
? {
|
|
105
|
+
allowedPlugins: a.allowedPlugins,
|
|
106
|
+
// §6.9 L1:白名单不含记忆插件时由 LCB 装配时自动注入(页面如实标注而非静默改写配置)
|
|
107
|
+
memoryPluginInjected: !a.allowedPlugins.includes(MEMORY_PLUGIN_NAME),
|
|
108
|
+
}
|
|
109
|
+
: {}),
|
|
110
|
+
})),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** OpenAI 协议 embeddings 真调一次(最小输入);2xx + data[0].embedding 非空才算绿 */
|
|
114
|
+
async function checkEmbedding(apiBase, apiKey, model) {
|
|
115
|
+
try {
|
|
116
|
+
const res = await fetch(`${apiBase.replace(/\/+$/, '')}/embeddings`, {
|
|
117
|
+
method: 'POST',
|
|
118
|
+
headers: {
|
|
119
|
+
'Content-Type': 'application/json',
|
|
120
|
+
...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),
|
|
121
|
+
},
|
|
122
|
+
body: JSON.stringify({ model, input: 'lcb-connectivity-test' }),
|
|
123
|
+
signal: AbortSignal.timeout(15_000),
|
|
124
|
+
});
|
|
125
|
+
const body = (await res.json().catch(() => ({})));
|
|
126
|
+
if (!res.ok) {
|
|
127
|
+
return { ok: false, detail: `HTTP ${res.status}${body.error?.message ? `:${body.error.message}` : ''}` };
|
|
128
|
+
}
|
|
129
|
+
if (!Array.isArray(body.data) || !body.data[0]?.embedding) {
|
|
130
|
+
return { ok: false, detail: `响应无 embedding 数据(model=${model} 是否为向量模型?)` };
|
|
131
|
+
}
|
|
132
|
+
return { ok: true, detail: `向量维度 ${Array.isArray(body.data[0].embedding) ? body.data[0].embedding.length : '?'}` };
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
return { ok: false, detail: e instanceof Error ? (e.name === 'TimeoutError' || e.name === 'AbortError' ? '超时(>15s)' : e.message) : String(e) };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** OpenAI 协议 chat/completions 真调一次(max_tokens=8);2xx + choices[0] 才算绿 */
|
|
139
|
+
async function checkVlm(apiBase, apiKey, model) {
|
|
140
|
+
try {
|
|
141
|
+
const res = await fetch(`${apiBase.replace(/\/+$/, '')}/chat/completions`, {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
headers: {
|
|
144
|
+
'Content-Type': 'application/json',
|
|
145
|
+
...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),
|
|
146
|
+
},
|
|
147
|
+
body: JSON.stringify({
|
|
148
|
+
model,
|
|
149
|
+
messages: [{ role: 'user', content: '连通性测试,请回复 OK' }],
|
|
150
|
+
max_tokens: 8,
|
|
151
|
+
}),
|
|
152
|
+
signal: AbortSignal.timeout(20_000),
|
|
153
|
+
});
|
|
154
|
+
const body = (await res.json().catch(() => ({})));
|
|
155
|
+
if (!res.ok) {
|
|
156
|
+
return { ok: false, detail: `HTTP ${res.status}${body.error?.message ? `:${body.error.message}` : ''}` };
|
|
157
|
+
}
|
|
158
|
+
if (!Array.isArray(body.choices) || !body.choices[0]?.message) {
|
|
159
|
+
return { ok: false, detail: '响应无 choices(模型名或端点路径是否正确?)' };
|
|
160
|
+
}
|
|
161
|
+
return { ok: true, detail: `模型已应答(${typeof body.choices[0].message.content === 'string' ? body.choices[0].message.content.slice(0, 20) : 'ok'})` };
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
return { ok: false, detail: e instanceof Error ? (e.name === 'TimeoutError' || e.name === 'AbortError' ? '超时(>20s)' : e.message) : String(e) };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* POST /api/memory/test-connection:模型表单 [测试连接] 后端(§6.8 双绿门禁)。
|
|
169
|
+
* body 为表单现值(不落盘)——用户可先测通再保存/开启;双绿 = embedding 与 vlm 各真调一次。
|
|
170
|
+
* Ollama 等零 Key 端点:api_key 可空(不带 Authorization 头)。key 只进本次请求,不落日志。
|
|
171
|
+
* savedApiKey:配置中已保存的 Key——输入框脱敏不回显,表单 Key 留空时回退用它测试
|
|
172
|
+
* (否则已配置过的用户点测试必 401);表单填了新值则测新值(换 Key 前先验证)。
|
|
173
|
+
*/
|
|
174
|
+
export async function testMemoryConnection(body, savedApiKey) {
|
|
175
|
+
const str = (v) => (typeof v === 'string' ? v.trim() : '');
|
|
176
|
+
const apiBase = str(body.api_base);
|
|
177
|
+
const apiKey = str(body.api_key) || savedApiKey?.trim() || undefined;
|
|
178
|
+
const vlmModel = str(body.vlm_model);
|
|
179
|
+
const embeddingModel = str(body.embedding_model);
|
|
180
|
+
const bad = (detail) => ({ ok: false, detail });
|
|
181
|
+
if (!apiBase) {
|
|
182
|
+
const e = bad('api_base 未填写');
|
|
183
|
+
return { embedding: e, vlm: e, ok: false };
|
|
184
|
+
}
|
|
185
|
+
if (!/^https?:\/\//.test(apiBase)) {
|
|
186
|
+
const e = bad('api_base 必须以 http(s):// 开头');
|
|
187
|
+
return { embedding: e, vlm: e, ok: false };
|
|
188
|
+
}
|
|
189
|
+
const embedding = embeddingModel
|
|
190
|
+
? await checkEmbedding(apiBase, apiKey, embeddingModel)
|
|
191
|
+
: bad('embedding 模型未填写');
|
|
192
|
+
const vlm = vlmModel
|
|
193
|
+
? await checkVlm(apiBase, apiKey, vlmModel)
|
|
194
|
+
: bad('vlm 模型未填写');
|
|
195
|
+
return { embedding, vlm, ok: embedding.ok && vlm.ok };
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=memory-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-api.js","sourceRoot":"","sources":["../../src/web/memory-api.ts"],"names":[],"mappings":"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"}
|
package/dist/web/server.js
CHANGED
|
@@ -28,9 +28,12 @@ import { invalidatePluginCache, listAvailablePlugins, listInstalledPlugins, load
|
|
|
28
28
|
import { bridgeStatus, resolveLcbEntry, restartBridgeWithHelper, spawnBridgeDetached, stopBridgeByPid } from './lifecycle.js';
|
|
29
29
|
import { getAutostartStatus, setAutostartEnabled } from './autostart.js';
|
|
30
30
|
import { checkUpdate, hasNewerVersion, installMode, runUpdate } from './update.js';
|
|
31
|
+
import { memoryStatus, testMemoryConnection } from './memory-api.js';
|
|
32
|
+
import { MANAGED_OV_CONF, getInstallState, runInstall, runStartPipeline, stopManagedServer } from '../memory-installer.js';
|
|
31
33
|
import { checkLarkCliAuth, checkLarkCliLatest, detectLarkCli, detectLarkCliSkill, getLarkCliConfigStatus, getLarkCliDeviceStatus, runLarkCliActionFlow, startLarkCliConfigFlow, startLarkCliDeviceAuth, } from '../lark-cli-manager.js';
|
|
32
|
-
/** PUT /api/config 参与整段替换的顶级键;body
|
|
33
|
-
|
|
34
|
+
/** PUT /api/config 参与整段替换的顶级键;body 未携带的键保持磁盘原文(含注释)。
|
|
35
|
+
* memory(记忆增强 §6.8):模型表单/开关经标准 config 管道提交,自动获得注释保留与写前校验 */
|
|
36
|
+
const PUT_SECTIONS = ['apps', 'workspaces', 'defaults', 'concurrency', 'permissions', 'security', 'server', 'claude', 'slash_commands', 'transcripts', 'session', 'card', 'autostart', 'memory'];
|
|
34
37
|
const WEB_ROOT = fileURLToPath(new URL('../../assets/web', import.meta.url));
|
|
35
38
|
const INDEX_HTML_PATH = join(WEB_ROOT, 'index.html');
|
|
36
39
|
/** 静态模块仅限 js/css 两前缀 + 扩展名白名单(纵深防御:目录内误放的敏感文件不可被 serve) */
|
|
@@ -366,6 +369,74 @@ async function handle(req, res, ctx) {
|
|
|
366
369
|
syncManagedClaude(after);
|
|
367
370
|
return json(res, 200, { ok: true, restartRequired });
|
|
368
371
|
}
|
|
372
|
+
// ---- 记忆增强(生命周期方案 §6.8):状态聚合 + 模型连接测试;配置读写走标准 /api/config ----
|
|
373
|
+
if (path === '/api/memory/status' && req.method === 'GET') {
|
|
374
|
+
if (firstRun)
|
|
375
|
+
return json(res, 404, { error: '尚无配置文件(首次安装),请先提交 bootstrap 向导' });
|
|
376
|
+
try {
|
|
377
|
+
return json(res, 200, await memoryStatus(loadConfig(ctx.configPath)));
|
|
378
|
+
}
|
|
379
|
+
catch (e) {
|
|
380
|
+
return json(res, 500, { error: `配置读取失败:${e instanceof Error ? e.message : String(e)}` });
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (path === '/api/memory/test-connection' && req.method === 'POST') {
|
|
384
|
+
// 表单现值直测(不落盘):把 Key/端点/模型名错误挡在开启之前(§6.8 双绿门禁)
|
|
385
|
+
const body = await readJsonBody(req);
|
|
386
|
+
// Key 输入框脱敏不回显:表单 Key 留空时回退配置已保存值(firstRun/配置损坏按无保存值直测)
|
|
387
|
+
let savedKey;
|
|
388
|
+
if (!firstRun) {
|
|
389
|
+
try {
|
|
390
|
+
savedKey = loadConfig(ctx.configPath).memory?.model?.apiKey;
|
|
391
|
+
}
|
|
392
|
+
catch { /* 按无保存值直测 */ }
|
|
393
|
+
}
|
|
394
|
+
try {
|
|
395
|
+
return json(res, 200, await testMemoryConnection(body, savedKey));
|
|
396
|
+
}
|
|
397
|
+
catch (e) {
|
|
398
|
+
return json(res, 400, { error: e instanceof Error ? e.message : String(e) });
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
// ---- B3 一键安装(§6.7 嵌入式流水线):后台执行 + 进度轮询;失败步骤可整链重跑(幂等跳过) ----
|
|
402
|
+
if (path === '/api/memory/install' && req.method === 'POST') {
|
|
403
|
+
if (firstRun)
|
|
404
|
+
return json(res, 404, { error: '尚无配置文件(首次安装),请先提交 bootstrap 向导' });
|
|
405
|
+
try {
|
|
406
|
+
const config = loadConfig(ctx.configPath);
|
|
407
|
+
// 首装前置校验(同步 400,不让用户撞「生成服务配置」步骤失败才发现缺模型):
|
|
408
|
+
// 受管 conf 不存在 = 首装,必须有三件套;conf 已存在 = 重跑/修复,沿用现值放行
|
|
409
|
+
const m = config.memory?.model;
|
|
410
|
+
if (!existsSync(MANAGED_OV_CONF) && (!m || !m.apiBase || !m.vlmModel || !m.embeddingModel)) {
|
|
411
|
+
return json(res, 400, { error: '首装需要记忆模型三件套(API 端点 / 提炼模型 / 向量模型)——请先在「模型配置」卡填写并保存,再执行安装' });
|
|
412
|
+
}
|
|
413
|
+
// 模型三件套取自 memory 段(页面通常已保存过表单);缺省也允许(沿用现有受管 conf 重跑场景)
|
|
414
|
+
void runInstall({
|
|
415
|
+
configPath: ctx.configPath,
|
|
416
|
+
model: config.memory?.model,
|
|
417
|
+
pin: config.memory?.version,
|
|
418
|
+
});
|
|
419
|
+
return json(res, 200, { ok: true, started: true, note: '流水线后台执行中,轮询 /api/memory/install/status 查看进度' });
|
|
420
|
+
}
|
|
421
|
+
catch (e) {
|
|
422
|
+
return json(res, 400, { error: e instanceof Error ? e.message : String(e) });
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
if (path === '/api/memory/install/status' && req.method === 'GET') {
|
|
426
|
+
return json(res, 200, getInstallState());
|
|
427
|
+
}
|
|
428
|
+
if (path === '/api/memory/stop' && req.method === 'POST') {
|
|
429
|
+
stopManagedServer();
|
|
430
|
+
return json(res, 200, { ok: true });
|
|
431
|
+
}
|
|
432
|
+
// 启动服务 = LCB 接管式启动流水线(检查 → 拉起探活 → 接入插件):后台执行 + 同款进度轮询,
|
|
433
|
+
// 结束即完整接管态(无须再点「检查修复」补插件);与安装流水线共用状态机(kind='start')
|
|
434
|
+
if (path === '/api/memory/start' && req.method === 'POST') {
|
|
435
|
+
if (getInstallState().running)
|
|
436
|
+
return json(res, 409, { error: '流水线执行中,请等待当前流程完成' });
|
|
437
|
+
void runStartPipeline({ configPath: ctx.configPath });
|
|
438
|
+
return json(res, 200, { ok: true, started: true, note: '启动流水线后台执行中,轮询 /api/memory/install/status 查看进度' });
|
|
439
|
+
}
|
|
369
440
|
// ---- 模型列表拉取(厂商无关;凭证用磁盘现值或本次表单输入,响应只含模型 id,绝不回传凭证) ----
|
|
370
441
|
if (path === '/api/models/fetch' && req.method === 'POST') {
|
|
371
442
|
if (firstRun)
|