Files
ST-Amily2-Chat-Optimisation/core/historiographer.js
2025-07-15 01:00:45 +08:00

2 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const _0x246793=_0x474b;(function(_0xfdad77,_0x4bc066){const _0x306435=_0x474b,_0x372095=_0xfdad77();while(!![]){try{const _0x515e16=-parseInt(_0x306435(0xc1))/0x1+-parseInt(_0x306435(0x10c))/0x2*(parseInt(_0x306435(0xe0))/0x3)+-parseInt(_0x306435(0xe8))/0x4+-parseInt(_0x306435(0xf7))/0x5+-parseInt(_0x306435(0x10d))/0x6*(parseInt(_0x306435(0x11d))/0x7)+parseInt(_0x306435(0xc9))/0x8+parseInt(_0x306435(0xa2))/0x9;if(_0x515e16===_0x4bc066)break;else _0x372095['push'](_0x372095['shift']());}catch(_0xb77fb){_0x372095['push'](_0x372095['shift']());}}}(_0x3ea8,0x4c826));import{getContext,extension_settings}from'/scripts/extensions.js';import{characters}from'/script.js';import{world_names,loadWorldInfo,createNewWorldInfo,createWorldInfoEntry,saveWorldInfo}from'/scripts/world-info.js';import{extensionName}from'../utils/settings.js';import{getChatIdentifier}from'./lore.js';let isExpeditionRunning=![],manualStopRequested=![];async function callAmily2Model(_0x4378d3){const _0x4cf82f=_0x474b,_0x57d578=extension_settings[extensionName],{apiUrl:_0x29f12d,apiKey:_0x4a87d2,model:_0x4e2d5e,temperature:_0x42bf7d,maxTokens:_0x11166a}=_0x57d578;if(!_0x29f12d||!_0x4e2d5e)return toastr['error']('API\x20URL或模型未配置大史官无法召唤模型B。',_0x4cf82f(0x9f)),null;let _0x2e65fe=_0x29f12d[_0x4cf82f(0xa0)]();try{const _0xa7f7e0=new URL(_0x2e65fe),_0x4ffeae=_0xa7f7e0['pathname'][_0x4cf82f(0xdb)](_0x4cf82f(0xa7))||_0xa7f7e0[_0x4cf82f(0x108)][_0x4cf82f(0xdb)]('/v1beta/openai');if(!_0x4ffeae){let _0x4d2d2a=_0xa7f7e0['pathname'];if(_0x4d2d2a[_0x4cf82f(0xdb)](_0x4cf82f(0xb8)))_0x4d2d2a=_0x4d2d2a[_0x4cf82f(0xad)](0x0,-0x1);else _0x4d2d2a[_0x4cf82f(0xdb)]('/v1')&&(_0x4d2d2a=_0x4d2d2a[_0x4cf82f(0xad)](0x0,-0x2));_0xa7f7e0[_0x4cf82f(0x108)]=_0x4d2d2a[_0x4cf82f(0xc2)](/\/$/,'')+_0x4cf82f(0xa7);}_0x2e65fe=_0xa7f7e0[_0x4cf82f(0xd6)];}catch(_0x5b6387){return console[_0x4cf82f(0xf0)](_0x4cf82f(0xc3),_0x5b6387),toastr[_0x4cf82f(0xf0)](_0x4cf82f(0xe9),_0x4cf82f(0x11f)),null;}console[_0x4cf82f(0x113)](_0x4cf82f(0xec)+new Date()['toLocaleTimeString']()),console[_0x4cf82f(0xf2)]('【目标地址】:\x20'+_0x2e65fe),console[_0x4cf82f(0xf2)]('【信函参数】',{'model':_0x4e2d5e,'temperature':_0x42bf7d,'maxTokens':_0x11166a}),console['log']('【信函正文\x20(messages)】:'),console[_0x4cf82f(0xcd)](_0x4378d3),console[_0x4cf82f(0x122)]();try{const _0x600e22=await fetch(_0x2e65fe,{'method':'POST','headers':{'Content-Type':_0x4cf82f(0xb1),'Authorization':_0x4cf82f(0x102)+_0x4a87d2},'body':JSON[_0x4cf82f(0xcc)]({'model':_0x4e2d5e,'messages':_0x4378d3,'temperature':_0x42bf7d,'max_tokens':_0x11166a,'stream':![]})});if(!_0x600e22['ok']){const _0x5cb74e=await _0x600e22[_0x4cf82f(0xa3)]();console['error'](_0x4cf82f(0xfa),_0x600e22[_0x4cf82f(0x118)],_0x5cb74e);throw new Error(_0x4cf82f(0xed)+_0x600e22[_0x4cf82f(0x118)]+_0x4cf82f(0xf1)+_0x5cb74e);}const _0x57cc62=await _0x600e22[_0x4cf82f(0xa4)]();return _0x57cc62[_0x4cf82f(0x116)][0x0]['message'][_0x4cf82f(0xa1)];}catch(_0x495bed){return console[_0x4cf82f(0xf0)](_0x4cf82f(0xaa),_0x495bed),toastr['error'](_0x4cf82f(0xe3)+_0x495bed[_0x4cf82f(0x10e)],_0x4cf82f(0xe4)),null;}}const RUNNING_LOG_COMMENT=_0x246793(0xe7),PROGRESS_SEAL_REGEX=/本条勿动【前(\d+)楼总结已完成】否则后续总结无法进行。$/;function _0x474b(_0x2cace1,_0x539d52){const _0x3ea814=_0x3ea8();return _0x474b=function(_0x474b6a,_0x385b51){_0x474b6a=_0x474b6a-0x9f;let _0x2aa9ab=_0x3ea814[_0x474b6a];return _0x2aa9ab;},_0x474b(_0x2cace1,_0x539d52);}async function readGoldenLedgerProgress(_0x384e55){const _0x438b3b=_0x246793;if(!_0x384e55)return 0x0;try{const _0x43eb57=await loadWorldInfo(_0x384e55);if(!_0x43eb57||!_0x43eb57[_0x438b3b(0x11c)])return 0x0;const _0x4e12e0=Object[_0x438b3b(0xeb)](_0x43eb57['entries'])[_0x438b3b(0xe1)](_0x2ea678=>_0x2ea678[_0x438b3b(0xd8)]===RUNNING_LOG_COMMENT&&!_0x2ea678[_0x438b3b(0x106)]);if(!_0x4e12e0)return 0x0;const _0x2dbee7=_0x4e12e0[_0x438b3b(0xa1)]['match'](PROGRESS_SEAL_REGEX);return _0x2dbee7?parseInt(_0x2dbee7[0x1],0xa):0x0;}catch(_0x376f80){return console[_0x438b3b(0xf0)](_0x438b3b(0xd1)+_0x384e55+_0x438b3b(0xdd),_0x376f80),0x0;}}export async function checkAndTriggerAutoSummary(){const _0x285901=_0x246793,_0x4d2581=extension_settings[extensionName];if(!_0x4d2581[_0x285901(0x105)])return;const _0x48912d=getContext();let _0x20b54e=null;switch(_0x4d2581['lorebookTarget']){case'character_main':_0x20b54e=characters[_0x48912d['characterId']]?.[_0x285901(0x121)]?.[_0x285901(0xd9)]?.[_0x285901(0xd5)];break;case _0x285901(0xb7):const _0x22c44c=await getChatIdentifier();_0x20b54e=_0x285901(0x100)+_0x22c44c;break;default:return;}if(!_0x20b54e)return;const _0x9ccd6d=await readGoldenLedgerProgress(_0x20b54e),_0x2e5290=_0x48912d[_0x285901(0xba)][_0x285901(0x10b)],_0x1fc8b3=_0x2e5290-_0x9ccd6d;if(_0x1fc8b3>=_0x4d2581['historiographySmallTriggerThreshold']){const _0x12636e=_0x9ccd6d+0x1,_0x4977c7=_0x2e5290;await executeManualSummary(_0x12636e,_0x4977c7,!![]);}}export async function getAvailableWorldbooks(){return[...world_names];}export async function getLoresForWorldbook(_0x4a2929){const _0x2c94be=_0x246793;if(!_0x4a2929)return[];try{const _0x3cbdb5=await loadWorldInfo(_0x4a2929);if(!_0x3cbdb5||!_0x3cbdb5[_0x2c94be(0x11c)])return[];return Object[_0x2c94be(0x11c)](_0x3cbdb5['entries'])[_0x2c94be(0xc5)](([,_0x3ae959])=>!_0x3ae959['disable'])[_0x2c94be(0xff)](([_0x59cdb3,_0x4eadac])=>({'key':_0x59cdb3,'comment':_0x4eadac[_0x2c94be(0xd8)]||_0x2c94be(0x10f)}));}catch(_0x1049c1){return console['error'](_0x2c94be(0x109)+_0x4a2929+_0x2c94be(0xd7),_0x1049c1),[];}}export async function executeManualSummary(_0x4daf44,_0x5d7ccf,_0x2eae69=![]){const _0x128c00=_0x246793,_0x500f9c=_0x2eae69?_0x128c00(0x111):_0x128c00(0xc8);toastr['info'](_0x128c00(0xe5)+_0x4daf44+_0x128c00(0xf9)+_0x5d7ccf+_0x128c00(0x110),_0x500f9c);const _0x10bdbf=getContext(),_0x2e0c8e=_0x10bdbf[_0x128c00(0xba)],_0x1376a0=extension_settings[extensionName],_0x2a90a9=_0x2e0c8e['slice'](_0x4daf44,_0x5d7ccf+0x1);if(_0x2a90a9[_0x128c00(0x10b)]===0x0){toastr['warning'](_0x128c00(0xef),_0x128c00(0x11f));return;}const _0xe57255=_0x10bdbf[_0x128c00(0xae)]||'用户',_0x24a47e=_0x10bdbf['name2']||'角色',_0x13b345=_0x2a90a9[_0x128c00(0xff)](_0x513968=>{const _0x277ae8=_0x128c00,_0x4e44d5=_0x513968['is_user']?_0xe57255:_0x24a47e;return _0x4e44d5+':\x20'+_0x513968[_0x277ae8(0xbb)][_0x277ae8(0xa0)]();})[_0x128c00(0xa5)]('\x0a'),_0x42acf0=[{'role':_0x128c00(0x11e),'content':_0x1376a0[_0x128c00(0xd2)]},{'role':_0x128c00(0x11e),'content':_0x1376a0[_0x128c00(0xac)]},{'role':'user','content':'请严格根据以下“对话记录”中的内容进行总结,不要添加任何额外信息。\x0a\x0a<对话记录>\x0a'+_0x13b345+_0x128c00(0xfb)}],_0x508bfc=await callAmily2Model(_0x42acf0);if(!_0x508bfc)return;try{let _0x488b1d=null;switch(_0x1376a0[_0x128c00(0x104)]){case _0x128c00(0xb0):_0x488b1d=characters[_0x10bdbf[_0x128c00(0x117)]]?.[_0x128c00(0x121)]?.[_0x128c00(0xd9)]?.[_0x128c00(0xd5)];if(!_0x488b1d){toastr[_0x128c00(0xf0)](_0x128c00(0xcb),_0x128c00(0xce));return;}break;case _0x128c00(0xb7):const _0x4b1880=await getChatIdentifier();_0x488b1d=_0x128c00(0x100)+_0x4b1880;!world_names[_0x128c00(0xde)](_0x488b1d)&&await createNewWorldInfo(_0x488b1d);break;default:toastr[_0x128c00(0xf0)](_0x128c00(0xaf),_0x128c00(0x10a));return;}const _0x5c703f=await loadWorldInfo(_0x488b1d),_0xf344ca=Object[_0x128c00(0xeb)](_0x5c703f[_0x128c00(0x11c)])['find'](_0xc74eeb=>_0xc74eeb[_0x128c00(0xd8)]===RUNNING_LOG_COMMENT&&!_0xc74eeb['disable']),_0xff3489=_0x128c00(0xd0)+_0x5d7ccf+_0x128c00(0xab),_0x994677=_0x128c00(0xb2)+_0x4daf44+'楼至'+_0x5d7ccf+'楼详细总结记录】\x0a'+_0x508bfc;if(_0xf344ca){const _0x51a454=_0xf344ca['content'][_0x128c00(0xc2)](PROGRESS_SEAL_REGEX,'')[_0x128c00(0xa0)]();_0xf344ca[_0x128c00(0xa1)]=_0x51a454+_0x994677+_0xff3489;}else{const _0x3b8b56='以下是依照顺序已发生剧情'+_0x994677,_0x275bb4=createWorldInfoEntry(_0x488b1d,_0x5c703f),_0x22eade=_0x1376a0[_0x128c00(0xe2)][_0x128c00(0xb4)](',')['map'](_0x521b7f=>_0x521b7f[_0x128c00(0xa0)]())[_0x128c00(0xc5)](Boolean),_0x415d40=_0x1376a0['loreActivationMode']===_0x128c00(0x101),_0x67087d={'before_char':0x0,'after_char':0x1,'before_an':0x2,'after_an':0x3,'at_depth':0x4};Object[_0x128c00(0xf4)](_0x275bb4,{'comment':RUNNING_LOG_COMMENT,'content':_0x3b8b56+_0xff3489,'key':_0x22eade,'constant':_0x415d40,'position':_0x67087d[_0x1376a0[_0x128c00(0xf8)]]??0x4,'depth':_0x1376a0[_0x128c00(0xf5)],'disable':![]});}await saveWorldInfo(_0x488b1d,_0x5c703f,!![]),toastr[_0x128c00(0xb5)](_0x128c00(0xf3),_0x500f9c+'完毕');}catch(_0x41f8b8){console[_0x128c00(0xf0)]('[大史官]\x20'+_0x500f9c+_0x128c00(0xe6),_0x41f8b8),toastr[_0x128c00(0xf0)]('写入'+_0x500f9c+'时发生错误。',_0x128c00(0xce));}}export async function executeRefinement(_0x61c44c,_0x4f3f6b){const _0x5866a1=_0x246793;toastr[_0x5866a1(0xb6)]('遵旨!正在为您重铸《'+_0x61c44c+_0x5866a1(0xbd),'宏史卷重铸');try{const _0x368166=await loadWorldInfo(_0x61c44c),_0x123024=_0x368166?.[_0x5866a1(0x11c)][_0x4f3f6b];if(!_0x123024){toastr[_0x5866a1(0xf0)](_0x5866a1(0xf6),_0x5866a1(0x11f));return;}const _0x29dd07=_0x123024[_0x5866a1(0xa1)],_0x2f8679=extension_settings[extensionName];let _0x44d445=_0x29dd07,_0x22b236='',_0x48b7d4=0x0;const _0x2b2d95=_0x29dd07[_0x5866a1(0xea)](PROGRESS_SEAL_REGEX);_0x2b2d95&&(_0x22b236=_0x2b2d95[0x0],_0x48b7d4=parseInt(_0x2b2d95[0x1],0xa),_0x44d445=_0x29dd07['replace'](PROGRESS_SEAL_REGEX,'')[_0x5866a1(0xa0)]());if(!_0x44d445[_0x5866a1(0xa0)]()){toastr[_0x5866a1(0x120)](_0x5866a1(0x114),_0x5866a1(0xbe));return;}const _0x184201=[{'role':_0x5866a1(0x11e),'content':_0x2f8679[_0x5866a1(0xca)]},{'role':_0x5866a1(0x11e),'content':_0x2f8679[_0x5866a1(0xa9)]},{'role':'user','content':_0x5866a1(0x11a)+_0x44d445}],_0x2f320d=await callAmily2Model(_0x184201);if(!_0x2f320d)return;const _0x27d8fd=_0x5866a1(0xbf)+_0x48b7d4+_0x5866a1(0xc7),_0x29a594=_0x27d8fd+_0x2f320d;_0x123024[_0x5866a1(0xa1)]=_0x29a594+('\x0a\x0a'+_0x22b236),_0x123024['comment']=_0x123024[_0x5866a1(0xd8)][_0x5866a1(0xc2)](/\s*\(已精炼\)|\s*\(宏史卷重铸\)/g,''),_0x123024['comment']+=_0x5866a1(0x107),await saveWorldInfo(_0x61c44c,_0x368166,!![]),toastr[_0x5866a1(0xb5)]('史册已成功重铸,并保存于《'+_0x61c44c+'》!',_0x5866a1(0xfd));}catch(_0x26c21f){console[_0x5866a1(0xf0)](_0x5866a1(0xda),_0x26c21f),toastr['error'](_0x5866a1(0xfe),_0x5866a1(0xce));}}function _0x3ea8(){const _0x15a5c5=['4iuJQXP','426qGrapY','message','无标题条目','\x20层的对话历史...','微言录\x20(自动)','远征失败','groupCollapsed','史册条目中无可供重铸的内容。','远征已在准备阶段遵令暂停!','choices','characterId','status','远征军已开拔!目标:','请将以下多个零散的“详细总结记录”提炼并融合成一段连贯的章节历史。原文如下:\x0a\x0a','dispatchEvent','entries','19523YIKzXq','system','圣谕有误','warning','data','groupEnd','通讯中断','trim','content','20270682IDrUSX','text','json','join','[大史官-远征失败]','/v1/chat/completions','鸣金收兵','historiographyLargeRefinePrompt','[大史官-通讯异常]','楼总结已完成】否则后续总结无法进行。','historiographySmallSummaryPrompt','slice','name1','未知的史册写入指令','character_main','application/json','\x0a\x0a---\x0a\x0a【','远征已遵从您的敕令暂停!随时可以【继续远征】。','split','success','info','dedicated','/v1/','停战敕令已下达!远征军将在完成当前批次的任务后休整。','chat','mes','historiographySmallTriggerThreshold','》中的【微言录合集】...','国库空虚','以下内容是【1楼-','国史已是最新,远征军无需出动。','573149QSrxEX','replace','[大史官-通讯异常]\x20您提供的API\x20URL格式不正确无法解析。','远征军已在营中,无需下达停战敕令。','filter','amily2-expedition-state-change','楼】已发生的剧情回顾。\x0a\x0a---\x0a\x0a','微言录\x20(手动)','197832KCXZni','historiographyLargeJailbreakPrompt','当前角色未绑定主世界书,无法写入总结。','stringify','table','国史馆','圣谕传达','\x0a\x0a本条勿动【前','[大史官]\x20阅览《','historiographySmallJailbreakPrompt','\x20层历史分\x20','远征途中遭遇重大挫折,任务中止!您可以随时【继续远征】。','world','href','》时出错:','comment','extensions','[大史官]\x20重铸任务失败:','endsWith','远征完毕','》天机时出错:','includes','远征军已在途中,无需重复下令。','911724sfQWBU','find','loreKeywords','与模型B通讯时发生异常:\x20','通讯异常','遵旨!正在为您熔铸\x20','写入失败:','【敕史局】对话流水总帐','1696084fImbHj','API\x20URL格式错误大史官无法出征。','match','values','[Amily2-大史官]\x20准备向模型B发送机密信函...\x20@\x20','模型B召唤失败:\x20','min','选定的楼层范围内无有效对话。','error','\x20-\x20','log','编年史已成功更新!','assign','loreDepth','找不到指定的史册条目,重铸任务中止。','803200ZEPFZJ','loreInsertionPosition','\x20至\x20','[大史官-通讯失败]','\x0a</对话记录>','圣谕悉知','宏史卷重铸完毕','重铸史册时发生错误。','map','Amily2-Lore-','always','Bearer\x20','当前角色未绑定主世界书,远征军无法开拔!','lorebookTarget','historiographySmallAutoEnable','disable','\x20(宏史卷重铸)','pathname','[大史官]\x20检阅《','圣谕不明','length'];_0x3ea8=function(){return _0x15a5c5;};return _0x3ea8();}export async function executeExpedition(){const _0x466ee1=_0x246793;if(isExpeditionRunning){toastr[_0x466ee1(0xb6)](_0x466ee1(0xdf),_0x466ee1(0xfc));return;}isExpeditionRunning=!![],manualStopRequested=![],document[_0x466ee1(0x11b)](new CustomEvent(_0x466ee1(0xc6),{'detail':{'isRunning':!![]}}));try{const _0x276a84=extension_settings[extensionName],_0x2117db=getContext();let _0x17fed4=null;switch(_0x276a84[_0x466ee1(0x104)]){case'character_main':_0x17fed4=characters[_0x2117db[_0x466ee1(0x117)]]?.['data']?.['extensions']?.['world'];if(!_0x17fed4){toastr[_0x466ee1(0xf0)](_0x466ee1(0x103),_0x466ee1(0x10a)),isExpeditionRunning=![],document['dispatchEvent'](new CustomEvent(_0x466ee1(0xc6),{'detail':{'isRunning':![],'manualStop':![]}}));return;}break;case _0x466ee1(0xb7):const _0xd5a2c2=await getChatIdentifier();_0x17fed4=_0x466ee1(0x100)+_0xd5a2c2;break;default:toastr[_0x466ee1(0xf0)]('未知的史册写入目标,远征军无法开拔!',_0x466ee1(0x10a)),isExpeditionRunning=![],document[_0x466ee1(0x11b)](new CustomEvent(_0x466ee1(0xc6),{'detail':{'isRunning':![],'manualStop':![]}}));return;}const _0x3a2af6=await readGoldenLedgerProgress(_0x17fed4),_0x3e48ac=_0x2117db['chat'][_0x466ee1(0x10b)],_0x5ac9b2=_0x3e48ac-_0x3a2af6;if(_0x5ac9b2<=0x0){toastr['info'](_0x466ee1(0xc0),'凯旋'),isExpeditionRunning=![],document[_0x466ee1(0x11b)](new CustomEvent(_0x466ee1(0xc6),{'detail':{'isRunning':![],'manualStop':![]}}));return;}const _0x5deb27=_0x276a84[_0x466ee1(0xbc)],_0x19598d=Math['ceil'](_0x5ac9b2/_0x5deb27);toastr[_0x466ee1(0xb6)](_0x466ee1(0x119)+_0x5ac9b2+_0x466ee1(0xd3)+_0x19598d+'\x20批次征服','远征开始');let _0x45260c=_0x3a2af6;for(let _0x439965=0x0;_0x439965<_0x19598d;_0x439965++){if(manualStopRequested){toastr[_0x466ee1(0x120)](_0x466ee1(0xb3),_0x466ee1(0xa8));break;}const _0x4a92d7=_0x45260c+0x1,_0xe9e01a=Math[_0x466ee1(0xee)](_0x45260c+_0x5deb27,_0x3e48ac),_0x4d83a2='远征战役\x20('+(_0x439965+0x1)+'/'+_0x19598d+')',_0x519c9c=0x7d0;_0x439965>0x0&&(toastr['info']('第\x20'+(_0x439965+0x1)+'\x20批次战役准备中...\x20('+_0x519c9c/0x3e8+'秒后接敌)',_0x4d83a2),await new Promise(_0x50f050=>setTimeout(_0x50f050,_0x519c9c)));if(manualStopRequested){toastr[_0x466ee1(0x120)](_0x466ee1(0x115),_0x466ee1(0xa8));break;}await executeManualSummary(_0x4a92d7,_0xe9e01a,!![]),_0x45260c=_0xe9e01a;}!manualStopRequested&&toastr['success']('凯旋!远征大捷!所有未载之史均已化为帝国永恒的记忆!',_0x466ee1(0xdc));}catch(_0x41ce96){console['error'](_0x466ee1(0xa6),_0x41ce96),toastr[_0x466ee1(0xf0)](_0x466ee1(0xd4),_0x466ee1(0x112));}finally{isExpeditionRunning=![],document[_0x466ee1(0x11b)](new CustomEvent(_0x466ee1(0xc6),{'detail':{'isRunning':![],'manualStop':manualStopRequested}}));}}export function stopExpedition(){const _0x2d7915=_0x246793;isExpeditionRunning?(manualStopRequested=!![],toastr[_0x2d7915(0xb6)](_0x2d7915(0xb9),_0x2d7915(0xcf))):toastr[_0x2d7915(0x120)](_0x2d7915(0xc4),_0x2d7915(0xfc));}