release: v2.2.5 [2026-06-10 12:41:11]

### 修复
- **翰林院(RAG)API Key 污染**:
  - 修复 `saveSettingsFromUI` 无差别遍历翰林院面板内全部 `[data-setting-key]` 输入(包含被 `profile-sync` 接管隐藏的字段),导致掩码占位符 `••••••••` 被当作真值写回 `settings.rerank.apiKey` / `settings.retrieval.apiKey`,URL / model 也被 Profile 值覆盖到 legacy 字段。修复后会跳过祖先带 `data-profile-hidden` 的输入
  - `getRerankSettings` / `getEmbedRetrievalSettings` 同时加入防御性还原:识别历史污染留下的 `••••••••` 时归为空字符串,避免取消 Profile 分配后实际请求带占位符 token 被 401
---
This commit is contained in:
Jenkins CI
2026-06-10 12:41:11 +08:00
parent 347016d5ac
commit 1a4a10d42d
15 changed files with 412 additions and 25 deletions

View File

@@ -16,6 +16,7 @@ import { resolveHistoriographyRuleConfig } from "../utils/config/RuleProfileMana
import { getPresetPrompts, getMixedOrder } from '../PresetSettings/index.js';
import { callAI, generateRandomSeed } from './api.js';
import { callConcurrentAI } from './api/ConcurrentApi.js';
import { applyToTemplates } from './memory-blocks/index.js';
export async function processOptimization(latestMessage, previousMessages) {
if (window.AMILY2_SYSTEM_PARALYZED === true) {
@@ -276,22 +277,18 @@ export async function processPlotOptimization(currentUserMessage, contextMessage
const userName = context.name1 || '用户';
const charName = context.name2 || '角色';
const replacements = {
'sulv1': settings.plotOpt_rateMain ?? 1.0,
'sulv2': settings.plotOpt_ratePersonal ?? 1.0,
'sulv3': settings.plotOpt_rateErotic ?? 1.0,
'sulv4': settings.plotOpt_rateCuckold ?? 1.0,
};
let mainPrompt = settings.plotOpt_mainPrompt || '';
let systemPrompt = settings.plotOpt_systemPrompt || '';
for (const key in replacements) {
const value = replacements[key];
const regex = new RegExp(key.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g');
mainPrompt = mainPrompt.replace(regex, value);
systemPrompt = systemPrompt.replace(regex, value);
}
// 【Phase 1 重构】sulv1-4 占位符替换迁入记忆块工作流。
// 块定义见 core/memory-blocks/builtin-blocks.js行为与旧硬编码字节级一致
// - 同一 context 内 Promise.all 并发执行 generator
// - 模板批量替换,块只跑一次复用结果
// - 后续新增占位符(含战斗系统)走 register({...}),此处零改动
const { mainPrompt, systemPrompt } = await applyToTemplates(
{
mainPrompt: settings.plotOpt_mainPrompt || '',
systemPrompt: settings.plotOpt_systemPrompt || '',
},
{ context: 'plotOptimization', settings },
);
onProgress(getRandomText(['正在进行情感光谱分析...', '正在解析情绪波动频率...', '正在捕捉微表情信号...']), false);
onProgress(getRandomText(['正在进行情感光谱分析...', '正在解析情绪波动频率...', '正在捕捉微表情信号...']), true);