2 Commits

Author SHA1 Message Date
Jenkins CI
59c4adc1c0 release: v2.2.4 [2026-05-30 13:03:07]
### 新功能
- **Function Call 填表**:
  - FC 首次请求时对 DeepSeek 系模型自动附加 `thinking: { type: "disabled" }`,避免思考模式与 tool_choice 冲突
  - 操作列表为空时在日志面板输出原始响应 JSON,便于区分"AI 判断无需变更"、"格式校验全部不通过"和"JSON 解析失败"三种情况
### 修复
- **剧情优化**:移除剧情优化页面遗留的 Jqyh 直连配置字段(URL / Key / Model),统一走 API 连接配置功能分配槽位
- **表格**:
  - 补全 `batch-filling-threshold` 批处理阈值的持久化绑定(页面刷新后不再还原为默认值 30)
  - 修复分步填表并发锁与 async/await 时序问题
  - 修复外层多余 `try...finally` 导致的插件加载报错
- **Rerank**:
  - 修复选择连接配置后报"API Key 未配置"的问题(`apiMode` 现从设置读取而非硬编码 `custom`)
  - 补全 `hly-rerank-api-mode` 加载绑定及默认值
- **翰林院 RAG**:补全 `priorityRetrieval.sources` 各来源条目的缺失键,修复设置面板回填 TypeError
- **二次填表**:
  - 修复 `secondary-filler.js` 把哈希/重试次数写入非持久化的 `msg.metadata` 字段(ST 标准位是 `msg.extra`),导致刷新后去重与重试计数失效
  - 修复扫描深度重复计入 `bufferSize`(`contextLimit + buffer + batch + redundancy` → `contextLimit + batch + redundancy`),避免越过预期窗口
  - SWIPED 事件改走扫描路径,不再用 `targetMessage` bypass 强填最末条,`保留缓冲区(bufferSize)` 设置在滑动场景下正确生效(手动"回退重填"按钮仍保留 bypass,意图明确)
  - 修复 FC(Function Call)路径下成功填表与"AI 判断无需修改"两种结果均未写回 `amily2_process_hash` 与 `saveChat()` 的问题——之前导致 FC 模式去重完全失效,最旧的未处理楼层会被每次扫描重复发给 AI;现统一回写路径为 `markTargetsProcessed`
  - FC 空操作时同步输出原始响应 JSON 到控制台(与批量回填日志面板保持一致),便于区分"无需变更"/"格式校验失败"/"JSON 解析失败"
2026-05-30 13:03:07 +08:00
Jenkins CI
e66544f774 release: v2.2.4 [2026-05-30 12:44:56]
### 新功能
- **Function Call 填表**:
  - FC 首次请求时对 DeepSeek 系模型自动附加 `thinking: { type: "disabled" }`,避免思考模式与 tool_choice 冲突
  - 操作列表为空时在日志面板输出原始响应 JSON,便于区分"AI 判断无需变更"、"格式校验全部不通过"和"JSON 解析失败"三种情况
### 修复
- **剧情优化**:移除剧情优化页面遗留的 Jqyh 直连配置字段(URL / Key / Model),统一走 API 连接配置功能分配槽位
- **表格**:
  - 补全 `batch-filling-threshold` 批处理阈值的持久化绑定(页面刷新后不再还原为默认值 30)
  - 修复分步填表并发锁与 async/await 时序问题
  - 修复外层多余 `try...finally` 导致的插件加载报错
- **Rerank**:
  - 修复选择连接配置后报"API Key 未配置"的问题(`apiMode` 现从设置读取而非硬编码 `custom`)
  - 补全 `hly-rerank-api-mode` 加载绑定及默认值
- **翰林院 RAG**:补全 `priorityRetrieval.sources` 各来源条目的缺失键,修复设置面板回填 TypeError
- **二次填表**:
  - 修复 `secondary-filler.js` 把哈希/重试次数写入非持久化的 `msg.metadata` 字段(ST 标准位是 `msg.extra`),导致刷新后去重与重试计数失效
  - 修复扫描深度重复计入 `bufferSize`(`contextLimit + buffer + batch + redundancy` → `contextLimit + batch + redundancy`),避免越过预期窗口
  - SWIPED 事件改走扫描路径,不再用 `targetMessage` bypass 强填最末条,`保留缓冲区(bufferSize)` 设置在滑动场景下正确生效(手动"回退重填"按钮仍保留 bypass,意图明确)
2026-05-30 12:44:56 +08:00
7 changed files with 36 additions and 13 deletions

View File

@@ -68,3 +68,9 @@
- 修复选择连接配置后报"API Key 未配置"的问题(`apiMode` 现从设置读取而非硬编码 `custom`
- 补全 `hly-rerank-api-mode` 加载绑定及默认值
- **翰林院 RAG**:补全 `priorityRetrieval.sources` 各来源条目的缺失键,修复设置面板回填 TypeError
- **二次填表**
- 修复 `secondary-filler.js` 把哈希/重试次数写入非持久化的 `msg.metadata` 字段ST 标准位是 `msg.extra`),导致刷新后去重与重试计数失效
- 修复扫描深度重复计入 `bufferSize``contextLimit + buffer + batch + redundancy``contextLimit + batch + redundancy`),避免越过预期窗口
- SWIPED 事件改走扫描路径,不再用 `targetMessage` bypass 强填最末条,`保留缓冲区(bufferSize)` 设置在滑动场景下正确生效(手动"回退重填"按钮仍保留 bypass意图明确
- 修复 FCFunction Call路径下成功填表与"AI 判断无需修改"两种结果均未写回 `amily2_process_hash``saveChat()` 的问题——之前导致 FC 模式去重完全失效,最旧的未处理楼层会被每次扫描重复发给 AI现统一回写路径为 `markTargetsProcessed`
- FC 空操作时同步输出原始响应 JSON 到控制台(与批量回填日志面板保持一致),便于区分"无需变更"/"格式校验失败"/"JSON 解析失败"

View File

@@ -39,10 +39,9 @@ async function requestSecondaryContinuation(baseMessages, partialResponse) {
return `${partialResponse || ''}${continued}`;
}
async function commitSecondaryFillResult(rawContent, targetMessages) {
await updateTableFromText(rawContent);
async function markTargetsProcessed(targetMessages, { skipTableSave = false } = {}) {
if (!targetMessages || targetMessages.length === 0) return;
const memoryState = getMemoryState();
const lastProcessedMsg = targetMessages[targetMessages.length - 1].msg;
for (const target of targetMessages) {
@@ -50,14 +49,22 @@ async function commitSecondaryFillResult(rawContent, targetMessages) {
target.msg.extra.amily2_process_hash = target.hash;
}
if (!skipTableSave) {
const memoryState = getMemoryState();
if (saveStateToMessage(memoryState, lastProcessedMsg)) {
renderTables();
updateOrInsertTableInChat();
}
}
await saveChat();
}
async function commitSecondaryFillResult(rawContent, targetMessages) {
await updateTableFromText(rawContent);
await markTargetsProcessed(targetMessages);
}
async function getWorldBookContext() {
const settings = extension_settings[extensionName] || {};
@@ -369,10 +376,20 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false, opts
}
const ops = parseToolCallArgs(argsString);
if (ops.length === 0) {
console.warn('[Amily2-副API] Function Call 返回操作列表为空,无需变更。');
let parseHint = '';
try {
const rawParsed = JSON.parse(argsString);
const rawOpsLen = rawParsed?.operations?.length ?? 0;
if (rawOpsLen > 0) parseHint = `(响应含 ${rawOpsLen} 条操作,但全部未通过格式校验)`;
} catch {
parseHint = '(响应 JSON 解析失败)';
}
console.warn(`[Amily2-副API] Function Call 返回操作列表为空${parseHint},原始响应:\n${argsString}`);
toastr.info('AI 判断此范围无需修改。', 'Amily2-分步填表');
await markTargetsProcessed(targetMessages, { skipTableSave: true });
} else {
await updateTableFromOps(ops);
await markTargetsProcessed(targetMessages);
toastr.success('分步填表Function Call执行完毕。', 'Amily2-分步填表');
}
} else {

View File

@@ -697,8 +697,8 @@ function registerEventListeners() {
log(`【监察系统】主填表模式回退后强制刷新消息ID: ${chat_id}`, 'info');
await handleTableUpdate(chat_id, true);
} else if (fillingMode === 'secondary-api' || fillingMode === 'optimized') {
log('【监察系统】分步/优化模式,回退后强制二次填表最新消息。', 'info');
await fillWithSecondaryApi(latestMessage, true, { targetMessage: latestMessage });
log('【监察系统】分步/优化模式,回退后触发二次填表扫描(受保留缓冲区限制)。', 'info');
await fillWithSecondaryApi(latestMessage, true);
} else {
log('【监察系统】未配置填表模式,跳过填表。', 'info');
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
const a0_0x5c33fc=a0_0xf93d;function a0_0xf93d(_0x2ee01c,_0xb792ba){_0x2ee01c=_0x2ee01c-0x1c1;const _0xc7a774=a0_0xc7a7();let _0xf93df3=_0xc7a774[_0x2ee01c];if(a0_0xf93d['wWWCpB']===undefined){var _0x45b40d=function(_0x273031){const _0xee239d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3516e9='',_0x22161b='';for(let _0x1ccb1e=0x0,_0x117074,_0xda9003,_0x43f52f=0x0;_0xda9003=_0x273031['charAt'](_0x43f52f++);~_0xda9003&&(_0x117074=_0x1ccb1e%0x4?_0x117074*0x40+_0xda9003:_0xda9003,_0x1ccb1e++%0x4)?_0x3516e9+=String['fromCharCode'](0xff&_0x117074>>(-0x2*_0x1ccb1e&0x6)):0x0){_0xda9003=_0xee239d['indexOf'](_0xda9003);}for(let _0x34f65a=0x0,_0x4c77f5=_0x3516e9['length'];_0x34f65a<_0x4c77f5;_0x34f65a++){_0x22161b+='%'+('00'+_0x3516e9['charCodeAt'](_0x34f65a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x22161b);};const _0x57640f=function(_0x3b1e83,_0x2117b5){let _0x42951a=[],_0x6a270a=0x0,_0x12755a,_0xf0f080='';_0x3b1e83=_0x45b40d(_0x3b1e83);let _0x5049c9;for(_0x5049c9=0x0;_0x5049c9<0x100;_0x5049c9++){_0x42951a[_0x5049c9]=_0x5049c9;}for(_0x5049c9=0x0;_0x5049c9<0x100;_0x5049c9++){_0x6a270a=(_0x6a270a+_0x42951a[_0x5049c9]+_0x2117b5['charCodeAt'](_0x5049c9%_0x2117b5['length']))%0x100,_0x12755a=_0x42951a[_0x5049c9],_0x42951a[_0x5049c9]=_0x42951a[_0x6a270a],_0x42951a[_0x6a270a]=_0x12755a;}_0x5049c9=0x0,_0x6a270a=0x0;for(let _0x57eb90=0x0;_0x57eb90<_0x3b1e83['length'];_0x57eb90++){_0x5049c9=(_0x5049c9+0x1)%0x100,_0x6a270a=(_0x6a270a+_0x42951a[_0x5049c9])%0x100,_0x12755a=_0x42951a[_0x5049c9],_0x42951a[_0x5049c9]=_0x42951a[_0x6a270a],_0x42951a[_0x6a270a]=_0x12755a,_0xf0f080+=String['fromCharCode'](_0x3b1e83['charCodeAt'](_0x57eb90)^_0x42951a[(_0x42951a[_0x5049c9]+_0x42951a[_0x6a270a])%0x100]);}return _0xf0f080;};a0_0xf93d['VpPgtO']=_0x57640f,a0_0xf93d['bIiVJG']={},a0_0xf93d['wWWCpB']=!![];}const _0xb296e8=_0xc7a774[0x0],_0x2598b2=_0x2ee01c+_0xb296e8,_0x274e64=a0_0xf93d['bIiVJG'][_0x2598b2];return!_0x274e64?(a0_0xf93d['YRQxxx']===undefined&&(a0_0xf93d['YRQxxx']=!![]),_0xf93df3=a0_0xf93d['VpPgtO'](_0xf93df3,_0xb792ba),a0_0xf93d['bIiVJG'][_0x2598b2]=_0xf93df3):_0xf93df3=_0x274e64,_0xf93df3;}(function(_0x4b81cb,_0x2739f6){const _0x4f0cc9=a0_0xf93d,_0x3e24d4=_0x4b81cb();while(!![]){try{const _0x41c00c=parseInt(_0x4f0cc9(0x1c7,'v1)['))/0x1*(parseInt(_0x4f0cc9(0x1d0,'Mqhd'))/0x2)+-parseInt(_0x4f0cc9(0x1d7,'eTOn'))/0x3*(parseInt(_0x4f0cc9(0x1da,'cnHM'))/0x4)+-parseInt(_0x4f0cc9(0x1cf,')9VT'))/0x5*(parseInt(_0x4f0cc9(0x1cc,'Ux3V'))/0x6)+-parseInt(_0x4f0cc9(0x1db,'A#wm'))/0x7+-parseInt(_0x4f0cc9(0x1c4,'bPne'))/0x8+parseInt(_0x4f0cc9(0x1cb,'Mqhd'))/0x9*(parseInt(_0x4f0cc9(0x1dc,'eTOn'))/0xa)+parseInt(_0x4f0cc9(0x1ce,'Ux3V'))/0xb*(parseInt(_0x4f0cc9(0x1df,'Sb&D'))/0xc);if(_0x41c00c===_0x2739f6)break;else _0x3e24d4['push'](_0x3e24d4['shift']());}catch(_0x285479){_0x3e24d4['push'](_0x3e24d4['shift']());}}}(a0_0xc7a7,0x3ab00));function a0_0xc7a7(){const _0xab3c86=['teuJo0VcVGpdNgSHzG','WR9gu8oZW5JcNHFcQW','E8kfW7HcWP8imhXfW5a','A08EWOGUs8kdwdRdTcq','Eg7cI8oeWO0cWRtcGCokW6FdN8ogbHu','E8kjW7LlWOavhN9GW7i','b8obWPDGnrNcKHSXW4GlbSoZ','W69UW6rFngu','WO41aSk7W4mAvmknF8ouW74','WPBdJvTxW6VcVu7dT8knoa','wr/dVSoVW4FcJmoWu0pcGa','nbhdTM7dT8kjW4JdSe98vCkwnq','WOK4W4OOfWu7wufF','W5nUWPbJyeeQDMTmW58Z','WPxcMxBdILNdMCkaWOm','WRLbeCkiWPxdHgNcTCoviCk7fK0','WPFcKWlcHWhdHSk9WP7dPCkNAq','W6hdTmogW6u1BmoiWO/cTSo5ymkJ','W5vPW5eJjbCKwW','W7/dL8oVW5ZdMSo7W5ldHJ0J','W5nUWP1JpYezxxrI','BuXjW7PRt8kgFG','FCkcWRqcWOq+dxO','WQ9rW5xdRtxdN8kUfmkdW5e1W5C','bSohWPrHobtdQYWLW5SGeW','WQddPmoQWP7dRSoghCoO','DX5ufLynW5ywWR5olSkAWQBdKtFdHxTRWP7dLCkPjSkRWO4','W5FdMfxdLhhdHmktWQBdPmkD','beRcOCkRWRtcK8oqE2lcUKG','a8ouWQXlWQTyW6xdL8o6WPDvW7RcSa','WQhdPCo5WPtdRCopg8oj'];a0_0xc7a7=function(){return _0xab3c86;};return a0_0xc7a7();}export const SENSITIVE_KEYS=new Set([a0_0x5c33fc(0x1c5,'3PoJ'),a0_0x5c33fc(0x1c2,'fE$u'),a0_0x5c33fc(0x1d8,'@jc1'),a0_0x5c33fc(0x1c8,'cnHM'),a0_0x5c33fc(0x1ca,'Mqhd'),a0_0x5c33fc(0x1d1,'^Ma^'),a0_0x5c33fc(0x1c6,'ABwv'),a0_0x5c33fc(0x1d9,'Ux3V')]);
function a0_0x271c(){const _0x4b7b23=['lhvoW4jRgSoQlXxcIW','EmojW7BcUdLKW4qDhIFcM8oH','WP7dM1RcQ8kAW5HNWOy','WQxcI0VdUCo9Ca','W7ldJHVcGSkSmg7cRexcNmojW7O','sZnjE8kcW7JdJCkTWQyOchm','kmkMWOZdTY5AWQ/cUdWN','W5lcSHLBF8odWQ3dRmk6l8kv','W7jspw7dQI8FpSkjha','WQKlf8kpWQGbW790','WOhcMmoZnx/dG8kJgcaODCk6DeKShmo1vmkzW5bZW6FdGWu','FSoRg2XIW6BcPs45WOj/W77dMq','WQ0gx8othedcGsVdRSkfWQPQWPjW','W5BcGNDMWOxdIGaBFsK','CmktCsNcH8kitH11rYq','WQj4sHTirmoMW7CbWOvopSkP','g3ddGCkLBmouA1BcJCkZW7a','n3dcOtqPWQusaxWo','tdjdECkgW7/cG8kLWPCJb3FcSq','WPFdUmo4W5/dT3XJd8oBoW','WPVcGeVcKCkhW5T/','WQOaw8ossGpdLxldQmkx','E8onW7ZcUtTPW70weZVcQCo3','W4FdQ1a6W5GHE8oebbG','W5urpfBdGCk1kvzIuSkOyCkouG','F8oiW7ZcUJ1JWOOvlYZcLmoLxa','E8k8tH8IWPZdJW','W6HJftmQW6SlWR1rgG','WO7dSmoJW5pdT3XJd8oBoW','stBcKSopomkxntZcO8kfW4XmFSke'];a0_0x271c=function(){return _0x4b7b23;};return a0_0x271c();}function a0_0x29d9(_0x5910a2,_0x31a139){_0x5910a2=_0x5910a2-0x10e;const _0x271c55=a0_0x271c();let _0x29d9db=_0x271c55[_0x5910a2];if(a0_0x29d9['vXrLbK']===undefined){var _0x1f4aa0=function(_0x419a5a){const _0x54ddf3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1487a3='',_0x358070='';for(let _0x556c37=0x0,_0x38eb9b,_0x5849e9,_0x382ad5=0x0;_0x5849e9=_0x419a5a['charAt'](_0x382ad5++);~_0x5849e9&&(_0x38eb9b=_0x556c37%0x4?_0x38eb9b*0x40+_0x5849e9:_0x5849e9,_0x556c37++%0x4)?_0x1487a3+=String['fromCharCode'](0xff&_0x38eb9b>>(-0x2*_0x556c37&0x6)):0x0){_0x5849e9=_0x54ddf3['indexOf'](_0x5849e9);}for(let _0x3f032e=0x0,_0xb58a17=_0x1487a3['length'];_0x3f032e<_0xb58a17;_0x3f032e++){_0x358070+='%'+('00'+_0x1487a3['charCodeAt'](_0x3f032e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x358070);};const _0x34ec80=function(_0x164ca3,_0x4421d8){let _0xd7a592=[],_0x289d74=0x0,_0x21850c,_0x43a638='';_0x164ca3=_0x1f4aa0(_0x164ca3);let _0x17b6ca;for(_0x17b6ca=0x0;_0x17b6ca<0x100;_0x17b6ca++){_0xd7a592[_0x17b6ca]=_0x17b6ca;}for(_0x17b6ca=0x0;_0x17b6ca<0x100;_0x17b6ca++){_0x289d74=(_0x289d74+_0xd7a592[_0x17b6ca]+_0x4421d8['charCodeAt'](_0x17b6ca%_0x4421d8['length']))%0x100,_0x21850c=_0xd7a592[_0x17b6ca],_0xd7a592[_0x17b6ca]=_0xd7a592[_0x289d74],_0xd7a592[_0x289d74]=_0x21850c;}_0x17b6ca=0x0,_0x289d74=0x0;for(let _0x36b413=0x0;_0x36b413<_0x164ca3['length'];_0x36b413++){_0x17b6ca=(_0x17b6ca+0x1)%0x100,_0x289d74=(_0x289d74+_0xd7a592[_0x17b6ca])%0x100,_0x21850c=_0xd7a592[_0x17b6ca],_0xd7a592[_0x17b6ca]=_0xd7a592[_0x289d74],_0xd7a592[_0x289d74]=_0x21850c,_0x43a638+=String['fromCharCode'](_0x164ca3['charCodeAt'](_0x36b413)^_0xd7a592[(_0xd7a592[_0x17b6ca]+_0xd7a592[_0x289d74])%0x100]);}return _0x43a638;};a0_0x29d9['KgrlkL']=_0x34ec80,a0_0x29d9['kNssnt']={},a0_0x29d9['vXrLbK']=!![];}const _0x1b2a57=_0x271c55[0x0],_0x49c2f7=_0x5910a2+_0x1b2a57,_0x1a2216=a0_0x29d9['kNssnt'][_0x49c2f7];return!_0x1a2216?(a0_0x29d9['XDIAAg']===undefined&&(a0_0x29d9['XDIAAg']=!![]),_0x29d9db=a0_0x29d9['KgrlkL'](_0x29d9db,_0x31a139),a0_0x29d9['kNssnt'][_0x49c2f7]=_0x29d9db):_0x29d9db=_0x1a2216,_0x29d9db;}const a0_0x46b8d0=a0_0x29d9;(function(_0x37f9e6,_0xba7d17){const _0xcc4674=a0_0x29d9,_0x15f749=_0x37f9e6();while(!![]){try{const _0x741256=-parseInt(_0xcc4674(0x121,'bDll'))/0x1*(parseInt(_0xcc4674(0x112,'yhY8'))/0x2)+parseInt(_0xcc4674(0x114,'tp0g'))/0x3+-parseInt(_0xcc4674(0x127,'IWny'))/0x4*(-parseInt(_0xcc4674(0x125,'uN)a'))/0x5)+parseInt(_0xcc4674(0x117,'tp0g'))/0x6+-parseInt(_0xcc4674(0x11b,'F@y%'))/0x7+-parseInt(_0xcc4674(0x11c,'MFs7'))/0x8*(-parseInt(_0xcc4674(0x122,'V%T]'))/0x9)+-parseInt(_0xcc4674(0x12a,'vQuU'))/0xa*(-parseInt(_0xcc4674(0x115,'^vxs'))/0xb);if(_0x741256===_0xba7d17)break;else _0x15f749['push'](_0x15f749['shift']());}catch(_0x5665c9){_0x15f749['push'](_0x15f749['shift']());}}}(a0_0x271c,0xdbf20));export const SENSITIVE_KEYS=new Set([a0_0x46b8d0(0x11f,'k^Lf'),a0_0x46b8d0(0x116,'d7&G'),a0_0x46b8d0(0x126,'KWT3'),a0_0x46b8d0(0x119,'EVQd'),a0_0x46b8d0(0x10f,'$OoJ'),a0_0x46b8d0(0x11a,'7SNw'),a0_0x46b8d0(0x10e,'F@y%'),a0_0x46b8d0(0x111,'7SNw')]);