mirror of
https://github.com/Wx-2025/ST-Amily2-Chat-Optimisation.git
synced 2026-06-06 17:25:51 +00:00
2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
(function(_0x394d3a,_0x48b7e4){const _0x7f35d2=_0x2c94,_0x1f43cd=_0x394d3a();while(!![]){try{const _0x2b61b1=parseInt(_0x7f35d2(0x136))/0x1*(-parseInt(_0x7f35d2(0x102))/0x2)+parseInt(_0x7f35d2(0x112))/0x3+parseInt(_0x7f35d2(0x150))/0x4+-parseInt(_0x7f35d2(0x139))/0x5+parseInt(_0x7f35d2(0x104))/0x6+parseInt(_0x7f35d2(0x141))/0x7+parseInt(_0x7f35d2(0x146))/0x8*(-parseInt(_0x7f35d2(0x13a))/0x9);if(_0x2b61b1===_0x48b7e4)break;else _0x1f43cd['push'](_0x1f43cd['shift']());}catch(_0x5da001){_0x1f43cd['push'](_0x1f43cd['shift']());}}}(_0x285f,0x7c9dc));function _0x285f(){const _0x522507=['some','世界钟','\x20个索引','push','4190032amfVWx','\x20条记忆数据','\x20个详情','includes','plugin_user_type','128mwrkso','getLorebookEntries','Log','toastr','[Amily2-SuperMemory]\x20没有可同步的表格数据。','\x20(Role:\x20','addEventListener','#sm-index-count','chat','error','1736332fROHBS','[Amily2-SuperMemory]\x20未在聊天记录中发现历史状态,使用默认/当前状态。','[Amily2-SuperMemory]\x20致命错误:AmilyHelper\x20未就绪。','getItem','[Amily2-SuperMemory]\x20权限不足\x20(Type\x20<\x202),拒绝初始化超级记忆系统。','1052806LfMSkP','set','4342836syKqoQ','已清空\x20','[Amily2]','startsWith','\x20个事件合并为\x20','已禁用','info','length','[Amily2-SuperMemory]\x20功能已禁用\x20(super_memory_enabled\x20=\x20false)。','[Amily2-SuperMemory]\x20队列优化:\x20将\x20','[Amily2-SuperMemory]\x20应用主动记忆提示:\x20','findIndex','name','text','1616835GZLHUW','[Amily2-SuperMemory]\x20世界书为空,无需清理。','headers','rowStatuses','deleteLorebookEntries','function','[Amily2-SuperMemory]\x20正在执行全量同步...','[Amily2-SuperMemory]\x20table-system\x20缺少\x20loadMemoryState\x20方法,无法恢复状态。','css','red','pending-deletion','[Amily2-SuperMemory]\x20清空失败:','comment','size','rows','stringify','CHAT_CHANGED','anchor','message','没有发现需要清空的Amily2记忆数据','运行中','#4caf50','[Amily2-SuperMemory]\x20检测到表格更新:\x20','metadata','super_memory_enabled','#sm-system-status','values','color','[Amily2-SuperMemory]\x20处理更新队列失败:','[Amily2-SuperMemory]\x20检测到聊天切换,正在刷新记忆状态...','success','log','[Amily2-SuperMemory]\x20任务完成:\x20','reduce','#sm-detail-count','uid','1VbWbFQ','tableName','saveChat','4983375QuohuO','147321qfvjtl','【Amily2','filter'];_0x285f=function(){return _0x522507;};return _0x285f();}function _0x2c94(_0x2be1ea,_0x481382){_0x2be1ea=_0x2be1ea-0x100;const _0x285f1c=_0x285f();let _0x2c944f=_0x285f1c[_0x2be1ea];return _0x2c944f;}import{extension_settings,getContext}from'/scripts/extensions.js';import{extensionName}from'../../utils/settings.js';import{amilyHelper}from'../tavern-helper/main.js';import{generateIndex}from'./smart-indexer.js';import{syncToLorebook,ensureMemoryBook,updateTransientHint,getMemoryBookName}from'./lorebook-bridge.js';import{getMemoryState,loadMemoryState,saveMemoryState}from'../table-system/manager.js';import{eventSource,event_types}from'/script.js';let isInitialized=![],updateQueue=[],isProcessing=![],lastChatId=null;const METADATA_KEY='Amily2_Memory_Data';export async function initializeSuperMemory(){const _0x21aec1=_0x2c94,_0x2d9b38=parseInt(localStorage[_0x21aec1(0x100)](_0x21aec1(0x145))||'0');if(_0x2d9b38<0x2){console['warn'](_0x21aec1(0x101));if(window['$'])$(_0x21aec1(0x12b))[_0x21aec1(0x111)]('未授权')['css'](_0x21aec1(0x12d),_0x21aec1(0x11b));return;}const _0x4ddb4e=extension_settings[extensionName]||{};if(_0x4ddb4e[_0x21aec1(0x12a)]===![]){console[_0x21aec1(0x131)](_0x21aec1(0x10c));if(window['$'])$(_0x21aec1(0x12b))[_0x21aec1(0x111)](_0x21aec1(0x109))[_0x21aec1(0x11a)](_0x21aec1(0x12d),'gray');return;}if(isInitialized){if(window['$'])$(_0x21aec1(0x12b))[_0x21aec1(0x111)](_0x21aec1(0x126))[_0x21aec1(0x11a)]('color',_0x21aec1(0x127));return;}console[_0x21aec1(0x131)]('[Amily2-SuperMemory]\x20初始化核心管理器...');if(!amilyHelper){console['error'](_0x21aec1(0x152));return;}document[_0x21aec1(0x14c)]('AMILY2_TABLE_UPDATED',handleTableUpdate),eventSource['on'](event_types[_0x21aec1(0x122)],async()=>{const _0xd1da9b=_0x21aec1,_0x45c940=extension_settings[extensionName]||{};if(_0x45c940[_0xd1da9b(0x12a)]===![])return;console[_0xd1da9b(0x131)](_0xd1da9b(0x12f)),await checkWorldBookStatus(),await tryRestoreStateFromMetadata(),await forceSyncAll();}),await checkWorldBookStatus(),await tryRestoreStateFromMetadata(),await forceSyncAll(),isInitialized=!![],console[_0x21aec1(0x131)]('[Amily2-SuperMemory]\x20核心管理器初始化完成。'),window['$']&&$('#sm-system-status')[_0x21aec1(0x111)](_0x21aec1(0x126))[_0x21aec1(0x11a)]('color',_0x21aec1(0x127));}async function checkWorldBookStatus(){const _0x1c3569=_0x2c94;try{await ensureMemoryBook();}catch(_0x25792b){console[_0x1c3569(0x14f)]('[Amily2-SuperMemory]\x20检查世界书状态失败:',_0x25792b);}}function handleTableUpdate(_0x237276){const _0x5a6a65=_0x2c94,_0x42e2f9=extension_settings[extensionName]||{};if(_0x42e2f9[_0x5a6a65(0x12a)]===![])return;const {tableName:_0x3ba038,data:_0x3f385d,role:_0x1fe4bb,hint:_0x43a11a,headers:_0x5759af,rowStatuses:_0x3d9625}=_0x237276['detail'];console[_0x5a6a65(0x131)](_0x5a6a65(0x128)+_0x3ba038+_0x5a6a65(0x14b)+_0x1fe4bb+')'),updateQueue[_0x5a6a65(0x140)]({'tableName':_0x3ba038,'data':_0x3f385d,'role':_0x1fe4bb,'hint':_0x43a11a,'headers':_0x5759af,'rowStatuses':_0x3d9625}),processQueue();}async function processQueue(){const _0x113ca8=_0x2c94;if(isProcessing||updateQueue[_0x113ca8(0x10b)]===0x0)return;isProcessing=!![];try{while(updateQueue[_0x113ca8(0x10b)]>0x0){const _0x50c396=new Map(),_0x1f140f=[...updateQueue];updateQueue[_0x113ca8(0x10b)]=0x0;for(const _0x363c7d of _0x1f140f){_0x50c396[_0x113ca8(0x103)](_0x363c7d[_0x113ca8(0x137)],_0x363c7d);}_0x1f140f['length']>_0x50c396['size']&&console[_0x113ca8(0x131)](_0x113ca8(0x10d)+_0x1f140f['length']+_0x113ca8(0x108)+_0x50c396[_0x113ca8(0x11f)]+'\x20个操作。');for(const _0x398c6c of _0x50c396[_0x113ca8(0x12c)]()){await processUpdateTask(_0x398c6c);}}await saveStateToMetadata();}catch(_0x338ae2){console['error'](_0x113ca8(0x12e),_0x338ae2);}finally{isProcessing=![],updateQueue[_0x113ca8(0x10b)]>0x0&&processQueue();}}async function processUpdateTask(_0x118e1c){const _0x402585=_0x2c94,{tableName:_0x22b1b8,data:_0x314cb7,role:_0x1d45a0,hint:_0x4e5fa0,headers:_0x3d658c,rowStatuses:_0x5a43cb}=_0x118e1c,_0x331bcf=_0x314cb7[_0x402585(0x13c)]((_0x20dfee,_0x5b05e5)=>!_0x5a43cb||_0x5a43cb[_0x5b05e5]!==_0x402585(0x11c)),_0x3c28fc=generateIndex(_0x331bcf,_0x3d658c,_0x1d45a0,_0x22b1b8),_0x5e4de3=getMemoryState(),_0x4c9329=_0x5e4de3[_0x402585(0x10f)](_0x2189cb=>_0x2189cb['name']===_0x22b1b8),_0x1158e2=0x1f41+(_0x4c9329>=0x0?_0x4c9329:0x63);await syncToLorebook(_0x22b1b8,_0x314cb7,_0x3c28fc,_0x1d45a0,_0x3d658c,_0x5a43cb,_0x1158e2),_0x4e5fa0&&(console['log'](_0x402585(0x10e)+_0x4e5fa0),await updateTransientHint(_0x4e5fa0)),console[_0x402585(0x131)](_0x402585(0x132)+_0x22b1b8),updateDashboardCounters();}async function saveStateToMetadata(){const _0x578620=_0x2c94,_0x46feae=getContext();if(!_0x46feae['chat']||_0x46feae[_0x578620(0x14e)][_0x578620(0x10b)]===0x0)return;const _0x35428d=_0x46feae[_0x578620(0x14e)][_0x578620(0x10b)]-0x1,_0x181347=_0x46feae[_0x578620(0x14e)][_0x35428d],_0x2602a8=getMemoryState();if(!_0x181347[_0x578620(0x129)])_0x181347[_0x578620(0x129)]={};_0x181347['metadata'][METADATA_KEY]=JSON['parse'](JSON[_0x578620(0x121)](_0x2602a8)),_0x46feae['saveChat']&&await _0x46feae[_0x578620(0x138)](),console[_0x578620(0x131)]('[Amily2-SuperMemory]\x20状态已保存至消息\x20#'+_0x35428d);}export async function tryRestoreStateFromMetadata(){const _0x4aa4b1=_0x2c94,_0x18c117=getContext();if(!_0x18c117[_0x4aa4b1(0x14e)]||_0x18c117[_0x4aa4b1(0x14e)][_0x4aa4b1(0x10b)]===0x0)return;let _0x4cac8b=null,_0x1480b5=-0x1;for(let _0x4681d3=_0x18c117[_0x4aa4b1(0x14e)][_0x4aa4b1(0x10b)]-0x1;_0x4681d3>=0x0;_0x4681d3--){const _0x3c81f=_0x18c117['chat'][_0x4681d3];if(_0x3c81f[_0x4aa4b1(0x129)]&&_0x3c81f['metadata'][METADATA_KEY]){_0x4cac8b=_0x3c81f[_0x4aa4b1(0x129)][METADATA_KEY],_0x1480b5=_0x4681d3;break;}}_0x4cac8b?(console[_0x4aa4b1(0x131)]('[Amily2-SuperMemory]\x20发现历史状态\x20(Msg\x20#'+_0x1480b5+'),正在恢复...'),typeof loadMemoryState===_0x4aa4b1(0x117)?(loadMemoryState(_0x4cac8b),await forceSyncAll()):console['warn'](_0x4aa4b1(0x119))):console[_0x4aa4b1(0x131)](_0x4aa4b1(0x151));}function updateDashboardCounters(){const _0x22ddad=_0x2c94,_0x42f8a8=getMemoryState();if(_0x42f8a8&&window['$']){$(_0x22ddad(0x14d))[_0x22ddad(0x111)](_0x42f8a8[_0x22ddad(0x10b)]+_0x22ddad(0x13f));const _0x4a4c85=_0x42f8a8[_0x22ddad(0x133)]((_0x4187d1,_0x11e94f)=>_0x4187d1+(_0x11e94f[_0x22ddad(0x120)]?_0x11e94f['rows'][_0x22ddad(0x10b)]:0x0),0x0);$(_0x22ddad(0x134))[_0x22ddad(0x111)](_0x4a4c85+_0x22ddad(0x143));}}export async function forceSyncAll(){const _0x15f5ce=_0x2c94;console[_0x15f5ce(0x131)](_0x15f5ce(0x118));const _0x5799ed=getMemoryState();if(!_0x5799ed||_0x5799ed[_0x15f5ce(0x10b)]===0x0){console['warn'](_0x15f5ce(0x14a));return;}for(const _0xe7572e of _0x5799ed){let _0x47a019='database';if(_0xe7572e['name'][_0x15f5ce(0x144)]('时空')||_0xe7572e[_0x15f5ce(0x110)][_0x15f5ce(0x144)](_0x15f5ce(0x13e)))_0x47a019=_0x15f5ce(0x123);if(_0xe7572e[_0x15f5ce(0x110)][_0x15f5ce(0x144)]('日志')||_0xe7572e['name'][_0x15f5ce(0x144)](_0x15f5ce(0x148)))_0x47a019='log';updateQueue[_0x15f5ce(0x140)]({'tableName':_0xe7572e[_0x15f5ce(0x110)],'data':_0xe7572e[_0x15f5ce(0x120)],'headers':_0xe7572e[_0x15f5ce(0x114)],'rowStatuses':_0xe7572e[_0x15f5ce(0x115)]||[],'role':_0x47a019});}await processQueue(),console[_0x15f5ce(0x131)]('[Amily2-SuperMemory]\x20全量同步完成。');}export async function purgeSuperMemory(){const _0x1aef44=_0x2c94;try{console[_0x1aef44(0x131)]('[Amily2-SuperMemory]\x20开始清空记忆...');const _0x55c843=getMemoryBookName(),_0x42f86c=await amilyHelper[_0x1aef44(0x147)](_0x55c843);if(!_0x42f86c||_0x42f86c[_0x1aef44(0x10b)]===0x0){console[_0x1aef44(0x131)](_0x1aef44(0x113));return;}const _0x1f68ac=[],_0x12abe1=[_0x1aef44(0x106),_0x1aef44(0x13b)];for(const _0x950aca of _0x42f86c){_0x950aca[_0x1aef44(0x11e)]&&_0x12abe1[_0x1aef44(0x13d)](_0x16a87e=>_0x950aca['comment'][_0x1aef44(0x107)](_0x16a87e))&&_0x1f68ac[_0x1aef44(0x140)](_0x950aca[_0x1aef44(0x135)]);}if(_0x1f68ac[_0x1aef44(0x10b)]>0x0){await amilyHelper[_0x1aef44(0x116)](_0x55c843,_0x1f68ac),console[_0x1aef44(0x131)]('[Amily2-SuperMemory]\x20已清空\x20'+_0x1f68ac['length']+'\x20个条目。');if(window[_0x1aef44(0x149)])toastr[_0x1aef44(0x130)](_0x1aef44(0x105)+_0x1f68ac[_0x1aef44(0x10b)]+_0x1aef44(0x142));}else{if(window[_0x1aef44(0x149)])toastr[_0x1aef44(0x10a)](_0x1aef44(0x125));}updateDashboardCounters();}catch(_0x1a556c){console['error'](_0x1aef44(0x11d),_0x1a556c);if(window[_0x1aef44(0x149)])toastr[_0x1aef44(0x14f)]('清空失败:\x20'+_0x1a556c[_0x1aef44(0x124)]);}}
|