const defaultConfig = { tokenExpireHours: 24, llmTokenExpireHours: 24, llmWorkspaceName: "部门知识库", apiConfig: { materialPublicUrl: { name: "材料公开地址", url: "http://share.wisdompulse.cn/public", requestParams: [], responseParams: [] }, esSearch: { name: "ES 搜索接口", url: "http://app.wisdompulse.cn/api/v1/doc/search", requestParams: [ { label: "关键词组", field: "keywordGroups" }, { label: "页码", field: "page" }, { label: "分页大小", field: "size" } ], responseParams: [ { label: "结果字段", field: "results" }, { label: "总条数字段", field: "total" }, { label: "分页大小字段", field: "size" } ] }, login: { name: "登录接口", url: "http://app.wisdompulse.cn/api/v1/user/login", requestParams: [ { label: "用户名字段", field: "username" }, { label: "密码字段", field: "password" } ], responseParams: [ { label: "Token 字段", field: "token" }, { label: "用户名字段", field: "username" } ] }, logout: { name: "登出接口", url: "http://app.wisdompulse.cn/api/v1/user/logout", requestParams: [], responseParams: [] }, filePath: { name: "获取文件路径接口(批量)", url: "http://app.wisdompulse.cn/api/v1/doc/file-path", requestParams: [ { label: "文件名数组字段", field: "fileNames" } ], responseParams: [ { label: "路径映射字段", field: "filePaths" } ] }, llmToken: { name: "获取 AnythingLLM Token 接口", url: "http://llm.wisdompulse.cn/api/request-token", requestParams: [ { label: "密码字段", field: "password" } ], responseParams: [ { label: "Token 字段", field: "token" } ] }, workspaces: { name: "获取工作区接口", url: "http://llm.wisdompulse.cn/api/workspaces", requestParams: [], responseParams: [ { label: "工作区数组字段", field: "workspaces" } ] }, llmChat: { name: "指定工作区对话接口", url: "http://llm.wisdompulse.cn/api/workspace/${workId}/stream-chat", requestParams: [ { label: "问题字段", field: "message" }, { label: "历史字段", field: "attachments" } ], responseParams: [] } } }; function loadMergedConfig() { return new Promise((resolve) => { chrome.storage.local.get(["customConfig"], (res) => { const merged = JSON.parse(JSON.stringify(defaultConfig)); if (res.customConfig && typeof res.customConfig === "object") { merged.tokenExpireHours = res.customConfig.tokenExpireHours != null ? res.customConfig.tokenExpireHours : merged.tokenExpireHours; merged.llmTokenExpireHours = res.customConfig.llmTokenExpireHours != null ? res.customConfig.llmTokenExpireHours : merged.llmTokenExpireHours; merged.llmWorkspaceName = res.customConfig.llmWorkspaceName != null ? res.customConfig.llmWorkspaceName : merged.llmWorkspaceName; for (const key in merged.apiConfig) { const override = res.customConfig.apiConfig?.[key]; if (override) { merged.apiConfig[key].url = override.url || merged.apiConfig[key].url; merged.apiConfig[key].requestParams.forEach((param, i) => { if (override.requestParams?.[i]?.field) param.field = override.requestParams[i].field; }); merged.apiConfig[key].responseParams.forEach((param, i) => { if (override.responseParams?.[i]?.field) param.field = override.responseParams[i].field; }); } } } resolve(merged); }); }); }