diff --git a/ui/bindings.js b/ui/bindings.js index e374e5c..3489cf5 100644 --- a/ui/bindings.js +++ b/ui/bindings.js @@ -1 +1,526 @@ -const _0x3271f6=_0x3af2;function _0x3af2(_0xd8b3df,_0x10222c){const _0x1cf7e1=_0x1cf7();return _0x3af2=function(_0x3af2ef,_0x4fb12d){_0x3af2ef=_0x3af2ef-0x17e;let _0x5bbae2=_0x1cf7e1[_0x3af2ef];return _0x5bbae2;},_0x3af2(_0xd8b3df,_0x10222c);}(function(_0x146755,_0x314426){const _0x3686c7=_0x3af2,_0x235580=_0x146755();while(!![]){try{const _0x239769=parseInt(_0x3686c7(0x1ce))/0x1*(parseInt(_0x3686c7(0x1fa))/0x2)+parseInt(_0x3686c7(0x1e3))/0x3*(-parseInt(_0x3686c7(0x1d2))/0x4)+parseInt(_0x3686c7(0x19c))/0x5*(-parseInt(_0x3686c7(0x193))/0x6)+parseInt(_0x3686c7(0x1c6))/0x7+-parseInt(_0x3686c7(0x20a))/0x8*(-parseInt(_0x3686c7(0x1b6))/0x9)+-parseInt(_0x3686c7(0x1eb))/0xa+parseInt(_0x3686c7(0x215))/0xb*(parseInt(_0x3686c7(0x1b4))/0xc);if(_0x239769===_0x314426)break;else _0x235580['push'](_0x235580['shift']());}catch(_0x5cf182){_0x235580['push'](_0x235580['shift']());}}}(_0x1cf7,0x8a0b4));import{extension_settings}from'/scripts/extensions.js';import{saveSettingsDebounced}from'/script.js';import{defaultSettings,extensionName}from'../utils/settings.js';import{pluginAuthStatus,activatePluginAuthorization,getPasswordForDate}from'../utils/auth.js';function _0x1cf7(){const _0x271db1=['prop','loreDepth','success','319Agtarl','amily2_optimization_exclusion_enabled','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20在这里定义需要从优化内容中排除的文本片段。例如,排除HTML注释,可以设置开始字符为\x20``。

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','#amily2_unified_save_button','click.amily2.unified_save','\x20执行失败:','addEventListener','#amily2_force_proxy','length','#amily2_model_autofetch_wrapper','textContent','amily2_manual_unhide_confirm','#amily2_main_prompt','cached_models_amily2','amily2_','amily2_back_to_main_settings','number','操作失败:\x20','manual_hide','模型ID\x20[','#amily2_unified_editor','off','input[type=\x22radio\x22][name^=\x22amily2_\x22]:not([name=\x22amily2_icon_location\x22])','data','[Amily-谕令确认]\x20收到指令:\x20将\x20[','amily2_back_to_main_from_hanlinyuan','#amily2_lore_depth_container','change.amily2.lore_settings','join','scripts/extensions/third-party/ST-Amily2-Chat-Optimisation/NeiGe.md','amily2_unhide_all_button','temperature','click.amily2.chamber_nav','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20正在编辑:\x20','click','first','find','#amily2_save_lore_settings','log','click.amily2.lore_save','#amily2_chat_optimiser','info','toUpperCase',']...','input[name=\x22amily2_icon_location\x22]','unhide_all','#amily2_drawer_content','#amily2_update_indicator','writeText','18330TmBzMj','排除规则已更新。','model','map','change.amily2.checkbox','close','.popup-button-cancel','#optimization-exclusion-rules-container',']\x20已镌刻!','755xjBLBo','内阁使用教程','value','编辑内容排除规则','events-bound','replace','[Amily-谕令镌刻]\x20[','trim','checked','\x20已确认','hide','授权码已复制到剪贴板!','forceProxyForCustomApi','#optimization-add-rule-btn','stopPropagation','disabled',']\x20已自动保存!','html','#optimization-rules-list','click.amily2.tutorial','复制失败,请手动复制。','#amily2_manual_unhide_to','title','fadeIn','368616NfxBLH','push','186291sLfMws','includes','then','#amily2_open_tutorial,\x20#amily2_open_neige_tutorial','change.amily2.select','showModal','未能获取到云端情报,请稍后再试。','#amily2_api_url,\x20#amily2_api_key,\x20#amily2_optimization_target_tag','stringify','.plugin-features','#amily2_unhide_all_button,\x20#amily2_manual_hide_confirm,\x20#amily2_manual_unhide_confirm','\x20确认敕令','谕令\x20[','click.amily2.unified_restore','text','#amily2_additional_features_panel','778995sWDNul','show','#amily2_expand_editor',']\x20设置为\x20->','#amily2_prompt_selector','change.amily2.radio','amily2_manual_hide_confirm','val','825686RdGgWM','authorized','amily2_refresh_models','amily2_lore_insertion_position','3688496LviiXK','slideDown','at_depth','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20添加新规则\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','#amily2_main_drawer','.opt-exclusion-rule-row','select#amily2_model',']\x20已镌刻!','change','3mPBnxI','amily2_open_rag_palace','manual_unhide','请输入授权码','#amily2_manual_hide_to','name','changelog','扩展区','6861970ttACcE','input[name=\x22','click.amily2.update','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20帝国最新情报\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','_value','圣意已在您每次更改时自动镌刻。','remove','optimizationExclusionRules','click.amily2.actions','change.amily2.prompt_selector','click.amily2.expand_editor','Amily2号','click.amily2.update_new','click.amily2.auth','closest','2gUUkTS','#amily2_manual_unhide_from','#amily2_update_button','#amily2_system_prompt','\x22]:checked','#amily2_refresh_models,\x20#amily2_test,\x20#amily2_fix_now','change.amily2.force_proxy','body','clipboard','type','#amily2_manual_model_input','topbar','error','loreDepthInput','#amily2_update_button_new','span[data-i18n=\x22Manage\x20extensions\x22]','312YjQsXl','warning','getElementById','正在将帝国徽记迁往\x20[','input[type=\x22range\x22][id^=\x22amily2_\x22]','mousedown.amily2Drawer','change.amily2.text','input.amily2.range'];_0x1cf7=function(){return _0x271db1;};return _0x1cf7();}import{fetchSupportedModels}from'../core/api.js';import{setAvailableModels,populateModelDropdown,getLatestUpdateInfo}from'./state.js';import{fixCommand,testReplyChecker}from'../core/commands.js';import{createDrawer}from'../ui/drawer.js';import{messageFormatting}from'/script.js';import{executeManualCommand}from'../core/autoHideManager.js';import{showContentModal,showHtmlModal}from'./page-window.js';function displayDailyAuthCode(){const _0x58986e=_0x3af2,_0x4fe86c=document[_0x58986e(0x20c)]('amily2_daily_code_display'),_0x2d9b6f=document['getElementById']('amily2_copy_daily_code');if(_0x4fe86c&&_0x2d9b6f){const _0xbaae09=getPasswordForDate(new Date());_0x4fe86c[_0x58986e(0x224)]=_0xbaae09,_0x2d9b6f[_0x58986e(0x220)](_0x58986e(0x184),()=>{const _0xf2b1eb=_0x58986e;navigator[_0xf2b1eb(0x202)][_0xf2b1eb(0x192)](_0xbaae09)[_0xf2b1eb(0x1b8)](()=>{const _0xf3e9e9=_0xf2b1eb;toastr[_0xf3e9e9(0x214)](_0xf3e9e9(0x1a7));},()=>{const _0xbd09d6=_0xf2b1eb;toastr[_0xbd09d6(0x206)](_0xbd09d6(0x1b0));});});}}export function bindModalEvents(){const _0x52b1f6=_0x3af2,_0xfc02f7=$('#amily2_drawer_content')[_0x52b1f6(0x222)]?$(_0x52b1f6(0x190)):$(_0x52b1f6(0x18a));displayDailyAuthCode();function _0xb14184(){const _0x154660=_0x52b1f6,_0x556be2=extension_settings[extensionName]||{},_0x257e65=_0x556be2[_0x154660(0x1a8)]===!![],_0x33f5f5=_0x556be2[_0x154660(0x195)]||'';_0xfc02f7[_0x154660(0x186)]('#amily2_force_proxy')[_0x154660(0x212)](_0x154660(0x1a4),_0x257e65),_0xfc02f7[_0x154660(0x186)]('#amily2_manual_model_input')[_0x154660(0x1cd)](_0x33f5f5);const _0x302710=_0xfc02f7[_0x154660(0x186)](_0x154660(0x223)),_0x15ecc8=_0xfc02f7[_0x154660(0x186)]('#amily2_manual_model_input');_0x257e65?(_0x302710[_0x154660(0x1a6)](),_0x15ecc8['show']()):(_0x302710['show'](),_0x15ecc8['hide']());}if(!_0xfc02f7[_0x52b1f6(0x222)]||_0xfc02f7[_0x52b1f6(0x231)](_0x52b1f6(0x1a0)))return;const _0x1f7a53=_0x458780=>_0x458780[_0x52b1f6(0x1a1)](/_([a-z])/g,_0x1ab7b4=>_0x1ab7b4[0x1][_0x52b1f6(0x18c)]()),_0x54cf65=(_0x3c1b21,_0x260132)=>{const _0x37572e=_0x52b1f6;console['log'](_0x37572e(0x232)+_0x3c1b21+_0x37572e(0x1c9),_0x260132),!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName]={...extension_settings[extensionName],[_0x3c1b21]:_0x260132},saveSettingsDebounced(),console[_0x37572e(0x188)](_0x37572e(0x1a2)+_0x3c1b21+_0x37572e(0x219));};_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x200))['on'](_0x52b1f6(0x200),_0x52b1f6(0x221),function(){const _0x2a49c4=_0x52b1f6;if(!pluginAuthStatus[_0x2a49c4(0x1cf)])return;_0x54cf65(_0x2a49c4(0x1a8),this[_0x2a49c4(0x1a4)]),_0xb14184();}),_0xfc02f7[_0x52b1f6(0x22f)]('change.amily2.manual_model')['on']('change.amily2.manual_model',_0x52b1f6(0x204),function(){const _0x2f1973=_0x52b1f6;if(!pluginAuthStatus[_0x2f1973(0x1cf)])return;_0x54cf65(_0x2f1973(0x195),this[_0x2f1973(0x19e)]),toastr[_0x2f1973(0x214)](_0x2f1973(0x22d)+this[_0x2f1973(0x19e)]+_0x2f1973(0x1ac),'Amily2号');}),_0xfc02f7['off'](_0x52b1f6(0x1f8))['on'](_0x52b1f6(0x1f8),'#auth_submit',async function(){const _0x4b89f0=_0x52b1f6,_0x1617f8=$('#amily2_auth_code')[_0x4b89f0(0x1cd)]()['trim']();_0x1617f8?await activatePluginAuthorization(_0x1617f8):toastr[_0x4b89f0(0x20b)](_0x4b89f0(0x1e6),_0x4b89f0(0x1f6));}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x1f3))['on'](_0x52b1f6(0x1f3),_0x52b1f6(0x1ff),async function(){const _0x3e5a35=_0x52b1f6;if(!pluginAuthStatus[_0x3e5a35(0x1cf)])return;const _0x224d3e=$(this),_0x524a30=_0x224d3e[_0x3e5a35(0x1ad)]();_0x224d3e['prop'](_0x3e5a35(0x1ab),!![])[_0x3e5a35(0x1ad)]('\x20处理中');try{switch(this['id']){case _0x3e5a35(0x1d0):const _0x1265e0=await fetchSupportedModels();_0x1265e0[_0x3e5a35(0x222)]>0x0&&(setAvailableModels(_0x1265e0),localStorage['setItem'](_0x3e5a35(0x227),JSON[_0x3e5a35(0x1be)](_0x1265e0)),populateModelDropdown());break;case'amily2_test':await testReplyChecker();break;case _0x3e5a35(0x1d9):await fixCommand();break;}}catch(_0x34b641){console[_0x3e5a35(0x206)]('[Amily2-工部]\x20操作按钮\x20'+this['id']+_0x3e5a35(0x21f),_0x34b641),toastr[_0x3e5a35(0x206)](_0x3e5a35(0x22b)+_0x34b641['message'],_0x3e5a35(0x1f6));}finally{_0x224d3e['prop'](_0x3e5a35(0x1ab),![])[_0x3e5a35(0x1ad)](_0x524a30);}}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x1f5))['on'](_0x52b1f6(0x1f5),_0x52b1f6(0x1c8),function(_0x1b8609){const _0x11bd27=_0x52b1f6;if(!pluginAuthStatus[_0x11bd27(0x1cf)])return;_0x1b8609[_0x11bd27(0x1aa)]();const _0x2d369d=$(_0x11bd27(0x1ca))[_0x11bd27(0x1cd)](),_0x117801=$(_0x11bd27(0x22e))[_0x11bd27(0x1cd)](),_0x242589=_0x11bd27(0x183)+_0x2d369d+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20保存并关闭取消\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x3a94eb=$(_0x242589)[_0x11bd27(0x1d7)](_0x11bd27(0x201)),_0x3e0d96=_0x3a94eb['find']('#amily2_dialog_editor');_0x3e0d96[_0x11bd27(0x1cd)](_0x117801);const _0x4e85b3=()=>{const _0xce1151=_0x11bd27;_0x3a94eb[0x0][_0xce1151(0x198)](),_0x3a94eb[_0xce1151(0x1f1)]();};_0x3a94eb[_0x11bd27(0x186)](_0x11bd27(0x1db))['on'](_0x11bd27(0x184),()=>{const _0x24c797=_0x11bd27,_0x2e80aa=_0x3e0d96[_0x24c797(0x1cd)]();$(_0x24c797(0x22e))[_0x24c797(0x1cd)](_0x2e80aa),_0x54cf65(_0x2d369d,_0x2e80aa),toastr[_0x24c797(0x214)](_0x24c797(0x1c2)+_0x2d369d+_0x24c797(0x19b),_0x24c797(0x1f6)),_0x4e85b3();}),_0x3a94eb['find'](_0x11bd27(0x199))['on'](_0x11bd27(0x184),_0x4e85b3),_0x3a94eb[0x0][_0x11bd27(0x1bb)]();}),_0xfc02f7['off'](_0x52b1f6(0x1af))['on'](_0x52b1f6(0x1af),_0x52b1f6(0x1b9),function(){const _0xae2ae0=_0x52b1f6;if(!pluginAuthStatus[_0xae2ae0(0x1cf)])return;const _0x5b9939={'amily2_open_tutorial':{'title':'主殿使用教程','url':'scripts/extensions/third-party/ST-Amily2-Chat-Optimisation/ZhuDian.md'},'amily2_open_neige_tutorial':{'title':_0xae2ae0(0x19d),'url':_0xae2ae0(0x17f)}},_0x386548=_0x5b9939[this['id']];_0x386548&&showContentModal(_0x386548[_0xae2ae0(0x1b2)],_0x386548[_0xae2ae0(0x21b)]);}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x1ed))['on'](_0x52b1f6(0x1ed),_0x52b1f6(0x1fc),function(){const _0x1061ae=_0x52b1f6;$(_0x1061ae(0x191))[_0x1061ae(0x1a6)]();const _0xd11550=getLatestUpdateInfo();if(_0xd11550&&_0xd11550[_0x1061ae(0x1e9)]){const _0x59683c=messageFormatting(_0xd11550[_0x1061ae(0x1e9)]),_0x250b9f=_0x1061ae(0x1ee)+_0x59683c+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20朕已阅\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x50f72a=$(_0x250b9f)['appendTo'](_0x1061ae(0x201)),_0x103c38=()=>{const _0x511873=_0x1061ae;_0x50f72a[0x0][_0x511873(0x198)](),_0x50f72a[_0x511873(0x1f1)]();};_0x50f72a['find']('.popup-button-ok')['on'](_0x1061ae(0x184),_0x103c38),_0x50f72a[0x0][_0x1061ae(0x1bb)]();}else toastr[_0x1061ae(0x18b)](_0x1061ae(0x1bc),'情报部回报');}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x1f7))['on'](_0x52b1f6(0x1f7),_0x52b1f6(0x208),function(){const _0x2e1dd1=_0x52b1f6;$(_0x2e1dd1(0x209))[_0x2e1dd1(0x185)]()[_0x2e1dd1(0x184)]();}),_0xfc02f7[_0x52b1f6(0x22f)]('click.amily2.manual_command')['on']('click.amily2.manual_command',_0x52b1f6(0x1c0),async function(){const _0x4020c3=_0x52b1f6;if(!pluginAuthStatus['authorized'])return;const _0x1992f2=this['id'];let _0x3624ec='',_0x2291af={};switch(_0x1992f2){case _0x4020c3(0x180):_0x3624ec=_0x4020c3(0x18f);break;case _0x4020c3(0x1cc):_0x3624ec=_0x4020c3(0x22c),_0x2291af={'from':$(_0x4020c3(0x218))[_0x4020c3(0x1cd)](),'to':$(_0x4020c3(0x1e7))['val']()};break;case _0x4020c3(0x225):_0x3624ec=_0x4020c3(0x1e5),_0x2291af={'from':$(_0x4020c3(0x1fb))[_0x4020c3(0x1cd)](),'to':$(_0x4020c3(0x1b1))[_0x4020c3(0x1cd)]()};break;}_0x3624ec&&await executeManualCommand(_0x3624ec,_0x2291af);}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x182))['on'](_0x52b1f6(0x182),'#amily2_open_additional_features,\x20#amily2_open_rag_palace,\x20#amily2_back_to_main_settings,\x20#amily2_back_to_main_from_hanlinyuan',function(){const _0xf3a19d=_0x52b1f6;if(!pluginAuthStatus[_0xf3a19d(0x1cf)])return;const _0x39bf6b=_0xfc02f7[_0xf3a19d(0x186)](_0xf3a19d(0x1bf)),_0x3ca4ac=_0xfc02f7[_0xf3a19d(0x186)](_0xf3a19d(0x1c5)),_0x5609a8=_0xfc02f7[_0xf3a19d(0x186)]('#amily2_hanlinyuan_panel');_0x39bf6b[_0xf3a19d(0x1a6)](),_0x3ca4ac['hide'](),_0x5609a8[_0xf3a19d(0x1a6)]();switch(this['id']){case _0xf3a19d(0x1da):_0x3ca4ac[_0xf3a19d(0x1c7)]();break;case _0xf3a19d(0x1e4):_0x5609a8['show']();break;case _0xf3a19d(0x229):case _0xf3a19d(0x233):_0x39bf6b[_0xf3a19d(0x1c7)]();break;}}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x197))['on']('change.amily2.checkbox','input[type=\x22checkbox\x22][id^=\x22amily2_\x22]',function(_0x2da3af){const _0x205003=_0x52b1f6;if(!pluginAuthStatus[_0x205003(0x1cf)])return;const _0x1dc21f=this['id'],_0x4f75e4=$(this),_0x2eee3c=_0x1f7a53(_0x1dc21f[_0x205003(0x1a1)]('amily2_',''));_0x54cf65(_0x2eee3c,_0x4f75e4['prop'](_0x205003(0x1a4)));if(_0x1dc21f===_0x205003(0x216)&&_0x4f75e4['prop'](_0x205003(0x1a4))){const _0x2a810d=extension_settings[extensionName],_0x194d41=_0x2a810d[_0x205003(0x1f2)]||[],_0x2db4ef=(_0x336403={'start':'','end':''},_0x397a4c)=>_0x205003(0x1d5)+_0x397a4c+_0x205003(0x217)+_0x336403['start']+_0x205003(0x21a)+_0x336403['end']+'\x22\x20placeholder=\x22结束字符,\x20如\x20-->\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20×\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',_0x46bd0a=_0x194d41[_0x205003(0x196)](_0x2db4ef)[_0x205003(0x17e)](''),_0x5e9226=_0x205003(0x21c)+_0x46bd0a+_0x205003(0x1dd);showHtmlModal(_0x205003(0x19f),_0x5e9226,{'okText':'确认','cancelText':'取消','onOk':_0x50252d=>{const _0x58421c=_0x205003,_0x17d19e=[];_0x50252d[_0x58421c(0x186)](_0x58421c(0x1df))['each'](function(){const _0x5a1044=_0x58421c,_0x37e06d=$(this)[_0x5a1044(0x186)](_0x5a1044(0x1dc))['eq'](0x0)[_0x5a1044(0x1cd)]()[_0x5a1044(0x1a3)](),_0x1dbeea=$(this)['find'](_0x5a1044(0x1dc))['eq'](0x1)['val']()[_0x5a1044(0x1a3)]();if(_0x37e06d&&_0x1dbeea)_0x17d19e[_0x5a1044(0x1b5)]({'start':_0x37e06d,'end':_0x1dbeea});}),_0x54cf65(_0x58421c(0x1f2),_0x17d19e),toastr[_0x58421c(0x214)](_0x58421c(0x194),_0x58421c(0x1f6));},'onCancel':()=>{}});const _0x310b5f=$(_0x205003(0x19a)),_0x23ab35=_0x310b5f[_0x205003(0x186)](_0x205003(0x1ae));_0x310b5f[_0x205003(0x186)](_0x205003(0x1a9))['on'](_0x205003(0x184),()=>{const _0x55992e=_0x23ab35['children']()['length'];_0x23ab35['append'](_0x2db4ef(undefined,_0x55992e));}),_0x23ab35['on']('click','.delete-rule-btn',function(){const _0x7df127=_0x205003;$(this)[_0x7df127(0x1f9)]('.opt-exclusion-rule-row')[_0x7df127(0x1f1)]();});}}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x1cb))['on'](_0x52b1f6(0x1cb),_0x52b1f6(0x230),function(){const _0x1cb1e9=_0x52b1f6;if(!pluginAuthStatus[_0x1cb1e9(0x1cf)])return;const _0x3d3f06=_0x1f7a53(this[_0x1cb1e9(0x1e8)][_0x1cb1e9(0x1a1)]('amily2_','')),_0x488e78=$(_0x1cb1e9(0x1ec)+this[_0x1cb1e9(0x1e8)]+_0x1cb1e9(0x1fe))[_0x1cb1e9(0x1cd)]();_0x54cf65(_0x3d3f06,_0x488e78);}),_0xfc02f7['off']('change.amily2.text')['on'](_0x52b1f6(0x210),_0x52b1f6(0x1bd),function(){const _0x15e2bb=_0x52b1f6;if(!pluginAuthStatus['authorized'])return;const _0x381bec=_0x1f7a53(this['id']['replace'](_0x15e2bb(0x228),''));_0x54cf65(_0x381bec,this['value']),toastr[_0x15e2bb(0x214)]('配置\x20['+_0x381bec+_0x15e2bb(0x1ac),_0x15e2bb(0x1f6));}),_0xfc02f7['off'](_0x52b1f6(0x1ba))['on']('change.amily2.select',_0x52b1f6(0x1e0),function(){const _0x43ddf6=_0x52b1f6;if(!pluginAuthStatus[_0x43ddf6(0x1cf)])return;const _0x5b7b36=_0x1f7a53(this['id'][_0x43ddf6(0x1a1)](_0x43ddf6(0x228),''));_0x54cf65(_0x5b7b36,this[_0x43ddf6(0x19e)]),populateModelDropdown();}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x211))['on'](_0x52b1f6(0x211),_0x52b1f6(0x20e),function(){const _0xd40281=_0x52b1f6;if(!pluginAuthStatus['authorized'])return;const _0x4d4c5c=_0x1f7a53(this['id'][_0xd40281(0x1a1)](_0xd40281(0x228),'')),_0x547865=this['id'][_0xd40281(0x1b7)](_0xd40281(0x181))?parseFloat(this[_0xd40281(0x19e)]):parseInt(this['value'],0xa);$('#'+this['id']+_0xd40281(0x1ef))[_0xd40281(0x1c4)](_0x547865),_0x54cf65(_0x4d4c5c,_0x547865);});const _0x90bd78={'mainPrompt':_0x52b1f6(0x226),'systemPrompt':_0x52b1f6(0x1fd),'outputFormatPrompt':'#amily2_output_format_prompt'},_0xb4de8=_0x52b1f6(0x1ca),_0xf701fc='#amily2_unified_editor',_0x1ef581=_0x52b1f6(0x21d);function _0x4af64c(){const _0x2b0625=_0x52b1f6;if(!$(_0xb4de8)[_0x2b0625(0x222)])return;const _0x49a571=$(_0xb4de8)[_0x2b0625(0x1cd)]();if(!_0x49a571)return;const _0x5d00c0=extension_settings[extensionName][_0x49a571]||'';$(_0xf701fc)[_0x2b0625(0x1cd)](_0x5d00c0);}_0xfc02f7[_0x52b1f6(0x22f)]('change.amily2.prompt_selector')['on'](_0x52b1f6(0x1f4),_0xb4de8,_0x4af64c),_0xfc02f7[_0x52b1f6(0x22f)]('click.amily2.unified_save')['on'](_0x52b1f6(0x21e),_0x1ef581,function(){const _0x3eb3c0=_0x52b1f6,_0x2eeb90=$(_0xb4de8)['val']();if(!_0x2eeb90)return;const _0x18b600=$(_0xf701fc)[_0x3eb3c0(0x1cd)]();_0x54cf65(_0x2eeb90,_0x18b600),toastr[_0x3eb3c0(0x214)](_0x3eb3c0(0x1c2)+_0x2eeb90+_0x3eb3c0(0x1e1),_0x3eb3c0(0x1f6));}),_0xfc02f7['off'](_0x52b1f6(0x1c3))['on'](_0x52b1f6(0x1c3),'#amily2_unified_restore_button',function(){const _0x3cc657=_0x52b1f6,_0x19e4f4=$(_0xb4de8)[_0x3cc657(0x1cd)]();if(!_0x19e4f4)return;const _0x13de0f=defaultSettings[_0x19e4f4];$(_0xf701fc)[_0x3cc657(0x1cd)](_0x13de0f),_0x54cf65(_0x19e4f4,_0x13de0f),toastr[_0x3cc657(0x214)](_0x3cc657(0x1c2)+_0x19e4f4+']\x20已成功恢复为帝国初始蓝图。',_0x3cc657(0x1f6));}),_0xfc02f7[_0x52b1f6(0x22f)](_0x52b1f6(0x235))['on'](_0x52b1f6(0x235),'select[id^=\x22amily2_lore_\x22],\x20input#amily2_lore_depth_input',function(){const _0x594256=_0x52b1f6;if(!pluginAuthStatus[_0x594256(0x1cf)])return;let _0x515555=_0x1f7a53(this['id'][_0x594256(0x1a1)](_0x594256(0x228),''));_0x515555===_0x594256(0x207)&&(_0x515555=_0x594256(0x213));const _0x4dc30a=this[_0x594256(0x203)]===_0x594256(0x22a)?parseInt(this[_0x594256(0x19e)],0xa):this[_0x594256(0x19e)];_0x54cf65(_0x515555,_0x4dc30a);if(this['id']===_0x594256(0x1d1)){const _0xdddee3=$(_0x594256(0x234));this['value']===_0x594256(0x1d4)?_0xdddee3[_0x594256(0x1d3)](0xc8):_0xdddee3['slideUp'](0xc8);}}),_0xfc02f7['off']('click.amily2.lore_save')['on'](_0x52b1f6(0x189),_0x52b1f6(0x187),function(){const _0x3d589d=_0x52b1f6;if(!pluginAuthStatus['authorized'])return;const _0x212205=$(this),_0x5c44b6=$('#amily2_lore_save_status');_0x212205[_0x3d589d(0x212)]('disabled',!![])[_0x3d589d(0x1ad)](_0x3d589d(0x1a5)),_0x5c44b6[_0x3d589d(0x1c4)](_0x3d589d(0x1f0))['stop']()[_0x3d589d(0x1b3)](),setTimeout(()=>{const _0xf6b3c4=_0x3d589d;_0x212205[_0xf6b3c4(0x212)](_0xf6b3c4(0x1ab),![])[_0xf6b3c4(0x1ad)](_0xf6b3c4(0x1c1)),_0x5c44b6['fadeOut']();},0x9c4);}),setTimeout(_0x4af64c,0x64),_0xb14184(),_0xfc02f7[_0x52b1f6(0x231)](_0x52b1f6(0x1a0),!![]);}$(document)['on'](_0x3271f6(0x1e2),_0x3271f6(0x18e),function(){const _0x2e307e=_0x3271f6;if(!pluginAuthStatus[_0x2e307e(0x1cf)])return;const _0x4afd0f=$(this)[_0x2e307e(0x1cd)]();extension_settings[extensionName]['iconLocation']=_0x4afd0f,saveSettingsDebounced(),console[_0x2e307e(0x188)]('[Amily-禁卫军]\x20收到迁都指令\x20->\x20'+_0x4afd0f+'。圣意已存档。'),toastr['info'](_0x2e307e(0x20d)+(_0x4afd0f===_0x2e307e(0x205)?'顶栏':_0x2e307e(0x1ea))+_0x2e307e(0x18d),_0x2e307e(0x1d6),{'timeOut':0x7d0}),$(_0x2e307e(0x1de))[_0x2e307e(0x1f1)](),$(document)[_0x2e307e(0x22f)](_0x2e307e(0x20f)),$(_0x2e307e(0x1d8))[_0x2e307e(0x1f1)](),setTimeout(createDrawer,0x32);}); +import { extension_settings } from "/scripts/extensions.js"; +import { saveSettingsDebounced } from "/script.js"; +import { defaultSettings, extensionName } from "../utils/settings.js"; +import { pluginAuthStatus, activatePluginAuthorization, getPasswordForDate } from "../utils/auth.js"; +import { fetchSupportedModels } from "../core/api.js"; + +import { setAvailableModels, populateModelDropdown, getLatestUpdateInfo } from "./state.js"; +import { fixCommand, testReplyChecker } from "../core/commands.js"; +import { createDrawer } from '../ui/drawer.js'; +import { messageFormatting } from '/script.js'; +import { executeManualCommand } from '../core/autoHideManager.js'; +import { showContentModal, showHtmlModal } from './page-window.js'; + +function displayDailyAuthCode() { + const displayEl = document.getElementById('amily2_daily_code_display'); + const copyBtn = document.getElementById('amily2_copy_daily_code'); + + if (displayEl && copyBtn) { + const todayCode = getPasswordForDate(new Date()); + displayEl.textContent = todayCode; + + copyBtn.addEventListener('click', () => { + navigator.clipboard.writeText(todayCode).then(() => { + toastr.success('授权码已复制到剪贴板!'); + }, () => { + toastr.error('复制失败,请手动复制。'); + }); + }); + } +} + +export function bindModalEvents() { + const container = $("#amily2_drawer_content").length ? $("#amily2_drawer_content") : $("#amily2_chat_optimiser"); + displayDailyAuthCode(); // 在绑定事件时就显示今日授权码 + function updateModelInputView() { + const settings = extension_settings[extensionName] || {}; + const forceProxy = settings.forceProxyForCustomApi === true; + const model = settings.model || ''; + + container.find('#amily2_force_proxy').prop('checked', forceProxy); + container.find('#amily2_manual_model_input').val(model); + + const autoFetchWrapper = container.find('#amily2_model_autofetch_wrapper'); + const manualInput = container.find('#amily2_manual_model_input'); + + if (forceProxy) { + autoFetchWrapper.hide(); + manualInput.show(); + } else { + autoFetchWrapper.show(); + manualInput.hide(); + } + } + + if (!container.length || container.data("events-bound")) return; + + const snakeToCamel = (s) => s.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); + const updateAndSaveSetting = (key, value) => { + console.log(`[Amily-谕令确认] 收到指令: 将 [${key}] 设置为 ->`, value); + if (!extension_settings[extensionName]) { + extension_settings[extensionName] = {}; + } + extension_settings[extensionName] = { ...extension_settings[extensionName], [key]: value }; + saveSettingsDebounced(); + console.log(`[Amily-谕令镌刻] [${key}] 的新状态已保存。`); + }; + + // 在这里添加以下代码 + container + .off("change.amily2.force_proxy") + .on("change.amily2.force_proxy", '#amily2_force_proxy', function () { + if (!pluginAuthStatus.authorized) return; + // 镌刻圣意 + updateAndSaveSetting('forceProxyForCustomApi', this.checked); + // 立即执行仪式,切换界面 + updateModelInputView(); + }); + // 在这里添加以下代码 + container + .off("change.amily2.manual_model") + .on("change.amily2.manual_model", '#amily2_manual_model_input', function() { + if (!pluginAuthStatus.authorized) return; + // 将您御笔钦定的模型名称,镌刻入“model”这条核心法典 + updateAndSaveSetting('model', this.value); + toastr.success(`模型ID [${this.value}] 已自动保存!`, "Amily2号"); + }); + + + container + .off("click.amily2.auth") + .on("click.amily2.auth", "#auth_submit", async function () { + const authCode = $("#amily2_auth_code").val().trim(); + if (authCode) { + await activatePluginAuthorization(authCode); + } else { + toastr.warning("请输入授权码", "Amily2号"); + } + }); + + container + .off("click.amily2.actions") + .on( + "click.amily2.actions", + "#amily2_refresh_models, #amily2_test, #amily2_fix_now", + async function () { + if (!pluginAuthStatus.authorized) return; + const button = $(this); + const originalHtml = button.html(); + button + .prop("disabled", true) + .html(' 处理中'); + try { + switch (this.id) { + case "amily2_refresh_models": + const models = await fetchSupportedModels(); + if (models.length > 0) { + setAvailableModels(models); + localStorage.setItem( + "cached_models_amily2", + JSON.stringify(models), + ); + populateModelDropdown(); + } + break; + case "amily2_test": + await testReplyChecker(); + break; + case "amily2_fix_now": + await fixCommand(); + break; + } + } catch (error) { + console.error(`[Amily2-工部] 操作按钮 ${this.id} 执行失败:`, error); + toastr.error(`操作失败: ${error.message}`, "Amily2号"); + } finally { + button.prop("disabled", false).html(originalHtml); + } + }, + ); + + container + .off("click.amily2.expand_editor") + .on("click.amily2.expand_editor", "#amily2_expand_editor", function (event) { + if (!pluginAuthStatus.authorized) return; + event.stopPropagation(); + const selectedKey = $("#amily2_prompt_selector").val(); + const currentContent = $("#amily2_unified_editor").val(); + const dialogHtml = ` + + + `; + const dialogElement = $(dialogHtml).appendTo('body'); + const dialogTextarea = dialogElement.find('#amily2_dialog_editor'); + dialogTextarea.val(currentContent); + const closeDialog = () => { dialogElement[0].close(); dialogElement.remove(); }; + dialogElement.find('.popup-button-ok').on('click', () => { + const newContent = dialogTextarea.val(); + $("#amily2_unified_editor").val(newContent); + updateAndSaveSetting(selectedKey, newContent); + toastr.success(`谕令 [${selectedKey}] 已镌刻!`, "Amily2号"); + closeDialog(); + }); + dialogElement.find('.popup-button-cancel').on('click', closeDialog); + dialogElement[0].showModal(); + }); + + container + .off("click.amily2.tutorial") + .on("click.amily2.tutorial", "#amily2_open_tutorial, #amily2_open_neige_tutorial", function() { + if (!pluginAuthStatus.authorized) return; + + const tutorials = { + "amily2_open_tutorial": { + title: "主殿使用教程", + url: "scripts/extensions/third-party/ST-Amily2-Chat-Optimisation/ZhuDian.md" + }, + "amily2_open_neige_tutorial": { + title: "内阁使用教程", + url: "scripts/extensions/third-party/ST-Amily2-Chat-Optimisation/NeiGe.md" + } + }; + + const tutorial = tutorials[this.id]; + if (tutorial) { + showContentModal(tutorial.title, tutorial.url); + } + }); + + container + .off("click.amily2.update") + .on("click.amily2.update", "#amily2_update_button", function() { + $("#amily2_update_indicator").hide(); + const updateInfo = getLatestUpdateInfo(); + if (updateInfo && updateInfo.changelog) { + const formattedChangelog = messageFormatting(updateInfo.changelog); + + + const dialogHtml = ` + + `; + const dialogElement = $(dialogHtml).appendTo('body'); + const closeDialog = () => { dialogElement[0].close(); dialogElement.remove(); }; + dialogElement.find('.popup-button-ok').on('click', closeDialog); + dialogElement[0].showModal(); + } else { + toastr.info("未能获取到云端情报,请稍后再试。", "情报部回报"); + } + }); + + container + .off("click.amily2.update_new") + .on("click.amily2.update_new", "#amily2_update_button_new", function() { + // 最终修正:根据用户提供的元素信息,使用属性选择器定位并点击“管理扩展”按钮 + $('span[data-i18n="Manage extensions"]').first().click(); + }); + + // This block is intentionally left empty as the logic is now handled + // within the 'change.amily2.checkbox' event listener below. + + + + container + .off("click.amily2.manual_command") + .on( + "click.amily2.manual_command", + "#amily2_unhide_all_button, #amily2_manual_hide_confirm, #amily2_manual_unhide_confirm", + async function () { + if (!pluginAuthStatus.authorized) return; + + const buttonId = this.id; + let commandType = ''; + let params = {}; + + switch (buttonId) { + case 'amily2_unhide_all_button': + commandType = 'unhide_all'; + break; + + case 'amily2_manual_hide_confirm': + commandType = 'manual_hide'; + params = { + from: $('#amily2_manual_hide_from').val(), + to: $('#amily2_manual_hide_to').val() + }; + break; + + case 'amily2_manual_unhide_confirm': + commandType = 'manual_unhide'; + params = { + from: $('#amily2_manual_unhide_from').val(), + to: $('#amily2_manual_unhide_to').val() + }; + break; + } + + if (commandType) { + await executeManualCommand(commandType, params); + } + } + ); + +container + .off("click.amily2.chamber_nav") + .on("click.amily2.chamber_nav", "#amily2_open_additional_features, #amily2_open_rag_palace, #amily2_back_to_main_settings, #amily2_back_to_main_from_hanlinyuan", function () { + if (!pluginAuthStatus.authorized) return; + + const mainPanel = container.find('.plugin-features'); + const additionalPanel = container.find('#amily2_additional_features_panel'); + const hanlinyuanPanel = container.find('#amily2_hanlinyuan_panel'); + + // Hide all panels first + mainPanel.hide(); + additionalPanel.hide(); + hanlinyuanPanel.hide(); + + switch (this.id) { + case 'amily2_open_additional_features': + additionalPanel.show(); + break; + case 'amily2_open_rag_palace': + hanlinyuanPanel.show(); + break; + case 'amily2_back_to_main_settings': + case 'amily2_back_to_main_from_hanlinyuan': + mainPanel.show(); + break; + } + }); + + container + .off("change.amily2.checkbox") + .on( + "change.amily2.checkbox", + 'input[type="checkbox"][id^="amily2_"]', + function (event) { + if (!pluginAuthStatus.authorized) return; + + const elementId = this.id; + const mainToggle = $(this); + const key = snakeToCamel(elementId.replace("amily2_", "")); + + // Default behavior for all checkboxes: save their state immediately. + updateAndSaveSetting(key, mainToggle.prop('checked')); + + // Special action for the exclusion toggle: also open the modal, but only when turning it ON. + if (elementId === 'amily2_optimization_exclusion_enabled' && mainToggle.prop('checked')) { + const settings = extension_settings[extensionName]; + const rules = settings.optimizationExclusionRules || []; + + const createRuleRowHtml = (rule = { start: '', end: '' }, index) => ` +
+ + + + +
`; + + const rulesHtml = rules.map(createRuleRowHtml).join(''); + const modalHtml = ` +
+

在这里定义需要从优化内容中排除的文本片段。例如,排除HTML注释,可以设置开始字符为 \`\`。

+
${rulesHtml}
+
+ +
+
`; + + showHtmlModal('编辑内容排除规则', modalHtml, { + okText: '确认', + cancelText: '取消', + onOk: (dialog) => { + const newRules = []; + dialog.find('.opt-exclusion-rule-row').each(function() { + const start = $(this).find('input').eq(0).val().trim(); + const end = $(this).find('input').eq(1).val().trim(); + if (start && end) newRules.push({ start, end }); + }); + updateAndSaveSetting('optimizationExclusionRules', newRules); + toastr.success('排除规则已更新。', 'Amily2号'); + }, + onCancel: () => { + // Do nothing, just close the modal. + } + }); + + const modalContent = $('#optimization-exclusion-rules-container'); + const rulesList = modalContent.find('#optimization-rules-list'); + + modalContent.find('#optimization-add-rule-btn').on('click', () => { + const newIndex = rulesList.children().length; + rulesList.append(createRuleRowHtml(undefined, newIndex)); + }); + + rulesList.on('click', '.delete-rule-btn', function() { + $(this).closest('.opt-exclusion-rule-row').remove(); + }); + } + }, + ); + + container + .off("change.amily2.radio") + .on( + "change.amily2.radio", + 'input[type="radio"][name^="amily2_"]:not([name="amily2_icon_location"])', + function () { + if (!pluginAuthStatus.authorized) return; + const key = snakeToCamel(this.name.replace("amily2_", "")); + const value = $(`input[name="${this.name}"]:checked`).val(); + updateAndSaveSetting(key, value); + }, + ); + + container + .off("change.amily2.text") + .on("change.amily2.text", "#amily2_api_url, #amily2_api_key, #amily2_optimization_target_tag", function () { + if (!pluginAuthStatus.authorized) return; + const key = snakeToCamel(this.id.replace("amily2_", "")); + updateAndSaveSetting(key, this.value); + toastr.success(`配置 [${key}] 已自动保存!`, "Amily2号"); + }); + + container + .off("change.amily2.select") + .on("change.amily2.select", "select#amily2_model", function () { + if (!pluginAuthStatus.authorized) return; + const key = snakeToCamel(this.id.replace("amily2_", "")); + updateAndSaveSetting(key, this.value); + populateModelDropdown(); + }); + + container + .off("input.amily2.range") + .on( + "input.amily2.range", + 'input[type="range"][id^="amily2_"]', + function () { + if (!pluginAuthStatus.authorized) return; + const key = snakeToCamel(this.id.replace("amily2_", "")); + const value = this.id.includes("temperature") + ? parseFloat(this.value) + : parseInt(this.value, 10); + $(`#${this.id}_value`).text(value); + updateAndSaveSetting(key, value); + }, + ); + + const promptMap = { + mainPrompt: "#amily2_main_prompt", + systemPrompt: "#amily2_system_prompt", + outputFormatPrompt: "#amily2_output_format_prompt", + }; + const selector = "#amily2_prompt_selector"; + const editor = "#amily2_unified_editor"; + const unifiedSaveButton = "#amily2_unified_save_button"; + + function updateEditorView() { + if (!$(selector).length) return; + const selectedKey = $(selector).val(); + if (!selectedKey) return; + const content = extension_settings[extensionName][selectedKey] || ""; + $(editor).val(content); + } + + container + .off("change.amily2.prompt_selector") + .on("change.amily2.prompt_selector", selector, updateEditorView); + + container + .off("click.amily2.unified_save") + .on("click.amily2.unified_save", unifiedSaveButton, function () { + const selectedKey = $(selector).val(); + if (!selectedKey) return; + const newContent = $(editor).val(); + updateAndSaveSetting(selectedKey, newContent); + toastr.success(`谕令 [${selectedKey}] 已镌刻!`, "Amily2号"); + }); + + container + .off("click.amily2.unified_restore") + .on("click.amily2.unified_restore", "#amily2_unified_restore_button", function () { + const selectedKey = $(selector).val(); + if (!selectedKey) return; + const defaultValue = defaultSettings[selectedKey]; + $(editor).val(defaultValue); + updateAndSaveSetting(selectedKey, defaultValue); + toastr.success(`谕令 [${selectedKey}] 已成功恢复为帝国初始蓝图。`, "Amily2号"); + }); + + container + .off("change.amily2.lore_settings") + .on("change.amily2.lore_settings", + 'select[id^="amily2_lore_"], input#amily2_lore_depth_input', + function () { + if (!pluginAuthStatus.authorized) return; + + + + let key = snakeToCamel(this.id.replace("amily2_", "")); + if (key === 'loreDepthInput') { + key = 'loreDepth'; + } + + const value = (this.type === 'number') ? parseInt(this.value, 10) : this.value; + updateAndSaveSetting(key, value); + + + if (this.id === 'amily2_lore_insertion_position') { + const depthContainer = $('#amily2_lore_depth_container'); + + if (this.value === 'at_depth') { + depthContainer.slideDown(200); + } else { + depthContainer.slideUp(200); + } + } + } + ); + + container + .off("click.amily2.lore_save") + .on("click.amily2.lore_save", '#amily2_save_lore_settings', function () { + if (!pluginAuthStatus.authorized) return; + + const button = $(this); + const statusElement = $('#amily2_lore_save_status'); + + button.prop('disabled', true).html(' 已确认'); + statusElement.text('圣意已在您每次更改时自动镌刻。').stop().fadeIn(); + + setTimeout(() => { + button.prop('disabled', false).html(' 确认敕令'); + statusElement.fadeOut(); + }, 2500); + }); + + setTimeout(updateEditorView, 100); + updateModelInputView(); // 首次加载时执行仪式,初始化界面 + + container.data("events-bound", true); + + +} +$(document).on('change', 'input[name="amily2_icon_location"]', function() { + if (!pluginAuthStatus.authorized) return; + const newLocation = $(this).val(); + extension_settings[extensionName]['iconLocation'] = newLocation; + saveSettingsDebounced(); + console.log(`[Amily-禁卫军] 收到迁都指令 -> ${newLocation}。圣意已存档。`); + toastr.info(`正在将帝国徽记迁往 [${newLocation === 'topbar' ? '顶栏' : '扩展区'}]...`, "迁都令", { timeOut: 2000 }); + $('#amily2_main_drawer').remove(); + $(document).off("mousedown.amily2Drawer"); + $('#amily2_extension_frame').remove(); + + setTimeout(createDrawer, 50); +}); diff --git a/ui/drawer.js b/ui/drawer.js index 5d9855b..34c2256 100644 --- a/ui/drawer.js +++ b/ui/drawer.js @@ -1 +1,221 @@ -const _0x13dfc3=_0x9c01;(function(_0x4b8171,_0xee852d){const _0x5c0433=_0x9c01,_0x46b8da=_0x4b8171();while(!![]){try{const _0x12ab3f=-parseInt(_0x5c0433(0x11e))/0x1+-parseInt(_0x5c0433(0x10c))/0x2+parseInt(_0x5c0433(0x114))/0x3+parseInt(_0x5c0433(0x104))/0x4*(parseInt(_0x5c0433(0x117))/0x5)+-parseInt(_0x5c0433(0xf1))/0x6+-parseInt(_0x5c0433(0x11f))/0x7*(-parseInt(_0x5c0433(0x126))/0x8)+parseInt(_0x5c0433(0x130))/0x9*(parseInt(_0x5c0433(0x127))/0xa);if(_0x12ab3f===_0xee852d)break;else _0x46b8da['push'](_0x46b8da['shift']());}catch(_0xf9e38){_0x46b8da['push'](_0x46b8da['shift']());}}}(_0x57cd,0xe2ee1));import{getSlideToggleOptions}from'/script.js';import{slideToggle}from'/lib.js';import{extension_settings,renderExtensionTemplateAsync}from'/scripts/extensions.js';import{extensionName,defaultSettings}from'../utils/settings.js';import{checkAuthorization,displayExpiryInfo,pluginAuthStatus}from'../utils/auth.js';import{updateUI,setAvailableModels,populateModelDropdown,applyUpdateIndicator}from'./state.js';import{bindModalEvents}from'./bindings.js';import{fetchSupportedModels}from'../core/api.js';import{bindHistoriographyEvents}from'./historiography-bindings.js';import{bindHanlinyuanEvents}from'./hanlinyuan-bindings.js';import{showContentModal}from'./page-window.js';const extensionFolderPath=_0x13dfc3(0x106)+extensionName;function _0x9c01(_0x3a48e6,_0x15833c){const _0x57cde1=_0x57cd();return _0x9c01=function(_0x9c019,_0x1bd3b4){_0x9c019=_0x9c019-0xe7;let _0x109f49=_0x57cde1[_0x9c019];return _0x109f49;},_0x9c01(_0x3a48e6,_0x15833c);}async function loadSettings(){const _0x219a83=_0x13dfc3;extension_settings[extensionName]={...defaultSettings,...extension_settings[extensionName]||{}},checkAuthorization();const _0x9540a6=localStorage[_0x219a83(0x123)](_0x219a83(0x10b))===_0x219a83(0xe8);console[_0x219a83(0x12a)](_0x219a83(0xf4)+pluginAuthStatus[_0x219a83(0x10e)]+_0x219a83(0x10d)+_0x9540a6);_0x9540a6&&pluginAuthStatus[_0x219a83(0x10e)]&&console[_0x219a83(0x12a)](_0x219a83(0x122));$(_0x219a83(0xe7))[_0x219a83(0x112)](displayExpiryInfo()),updateUI();if(pluginAuthStatus[_0x219a83(0x10e)]&&extension_settings[extensionName]['apiUrl']){const _0x1435eb=localStorage['getItem'](_0x219a83(0x11b));if(_0x1435eb){const _0x25b9a6=JSON['parse'](_0x1435eb);console[_0x219a83(0x12a)]('[Amily2号]\x20从缓存加载模型列表\x20('+_0x25b9a6[_0x219a83(0x10a)]+'个)'),setAvailableModels(_0x25b9a6),populateModelDropdown();}else toastr[_0x219a83(0xef)](_0x219a83(0xfa),'Amily2号'),setTimeout(async()=>{const _0x4e6d08=_0x219a83,_0x283b94=await fetchSupportedModels();_0x283b94[_0x4e6d08(0x10a)]>0x0&&(setAvailableModels(_0x283b94),localStorage[_0x4e6d08(0xeb)](_0x4e6d08(0x11b),JSON[_0x4e6d08(0x120)](_0x283b94)),populateModelDropdown());},0x1f4);}}async function initializePanel(_0x218990,_0x26f0e1){const _0x29c0b8=_0x13dfc3;if(_0x218990[_0x29c0b8(0xf2)]('initialized'))return;try{const _0x1064cc=await $[_0x29c0b8(0x12e)](extensionFolderPath+_0x29c0b8(0xec));_0x218990[_0x29c0b8(0x112)](_0x1064cc);const _0x338045=_0x218990['find'](_0x29c0b8(0x109));if(_0x338045[_0x29c0b8(0x10a)]){const _0x378022=await $[_0x29c0b8(0x12e)](extensionFolderPath+_0x29c0b8(0xf3)),_0x3649d9=_0x29c0b8(0x116)+_0x378022+_0x29c0b8(0x12b);_0x338045[_0x29c0b8(0x124)](_0x3649d9);const _0x320230=await $[_0x29c0b8(0x12e)](extensionFolderPath+_0x29c0b8(0xea)),_0x2d0d66=''+_0x320230+_0x29c0b8(0x12b);_0x338045[_0x29c0b8(0x124)](_0x2d0d66);}await loadSettings(),bindModalEvents(),bindHistoriographyEvents(),bindHanlinyuanEvents(),_0x218990[_0x29c0b8(0xf2)]('initialized',!![]),console[_0x29c0b8(0x12a)]('[Amily-重构]\x20宫殿模块已按蓝图竣工。'),applyUpdateIndicator();}catch(_0x63dab2){console[_0x29c0b8(0xfb)]('[Amily-建设部]\x20紧急报告:加载模块化蓝图时发生意外:',_0x63dab2);const _0x4e64c7=_0x26f0e1?_0x29c0b8(0xee):_0x29c0b8(0xfd);_0x26f0e1?_0x26f0e1[_0x29c0b8(0x124)](_0x4e64c7):_0x218990['html'](_0x4e64c7);}}function toggleDrawerFallback(){const _0x56dce5=_0x13dfc3,_0x4b69dd=$('#amily2_drawer_icon'),_0x1fdc23=$(_0x56dce5(0x12f));_0x4b69dd[_0x56dce5(0x105)](_0x56dce5(0x12d))&&!_0x1fdc23['is'](_0x56dce5(0x111))&&_0x4b69dd[_0x56dce5(0x107)](_0x56dce5(0x12d))[_0x56dce5(0x102)](_0x56dce5(0x110)),_0x4b69dd['hasClass'](_0x56dce5(0x110))?($(_0x56dce5(0xfc))[_0x56dce5(0xfe)](_0x1fdc23)[_0x56dce5(0xfe)](_0x56dce5(0xff))[_0x56dce5(0x102)]('resizing')[_0x56dce5(0x11c)]((_0x29eb10,_0x36c9f8)=>{slideToggle(_0x36c9f8,{...getSlideToggleOptions(),'onAnimationEnd':function(_0x3d85cf){const _0x145f16=_0x9c01;_0x3d85cf[_0x145f16(0xe9)](_0x145f16(0x129))['classList'][_0x145f16(0x108)]('resizing');}});}),$(_0x56dce5(0x118))[_0x56dce5(0xfe)](_0x4b69dd)[_0x56dce5(0xfe)]('.drawerPinnedOpen')[_0x56dce5(0x103)](_0x56dce5(0x125)),$(_0x56dce5(0xfc))['not'](_0x1fdc23)[_0x56dce5(0xfe)](_0x56dce5(0xff))['toggleClass'](_0x56dce5(0x100)),_0x4b69dd[_0x56dce5(0x103)](_0x56dce5(0x125)),_0x1fdc23[_0x56dce5(0x103)](_0x56dce5(0x100)),_0x1fdc23[_0x56dce5(0x102)]('resizing')[_0x56dce5(0x11c)]((_0x346405,_0xd739aa)=>{slideToggle(_0xd739aa,{...getSlideToggleOptions(),'onAnimationEnd':function(_0x23fa6b){const _0x43beaa=_0x9c01;_0x23fa6b['closest'](_0x43beaa(0x129))[_0x43beaa(0x10f)][_0x43beaa(0x108)](_0x43beaa(0x101));}});})):(_0x4b69dd[_0x56dce5(0x103)](_0x56dce5(0xed)),_0x1fdc23[_0x56dce5(0x103)]('openDrawer\x20closedDrawer'),_0x1fdc23[_0x56dce5(0x102)](_0x56dce5(0x101))['each']((_0x386455,_0x58d74c)=>{slideToggle(_0x58d74c,{...getSlideToggleOptions(),'onAnimationEnd':function(_0x5db078){const _0x1f7ded=_0x9c01;_0x5db078[_0x1f7ded(0xe9)](_0x1f7ded(0x129))['classList'][_0x1f7ded(0x108)](_0x1f7ded(0x101));}});}));}function _0x57cd(){const _0x4a7ac9=['info','#amily2_main_drawer\x20.drawer-toggle','6983874syNPiT','data','/assets/Amily2-AdditionalFeatures.html','[Amily2-调试]\x20授权状态:\x20','.inline-drawer-content','/script.js','\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Amily2号\x20优化中枢\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','iconLocation','doNavbarIconClick\x20is\x20not\x20a\x20function','正在自动加载模型列表...','error','.openDrawer','紧急报告:无法加载Amily2号府邸内饰。

','not','.pinnedOpen','closedDrawer\x20openDrawer','resizing','addClass','toggleClass','1550380jgSHvo','hasClass','scripts/extensions/third-party/','removeClass','remove','#amily2_chat_optimiser','length','plugin_auto_login','2485662IsTQLV',',\x20自动登录标志:\x20','authorized','classList','closedIcon',':visible','html','[Amily2-兼容性]\x20检测到旧版环境\x20(无法导入\x20doNavbarIconClick),已绑定后备点击事件。','4875864PTlnSk','#amily2_main_drawer','','20zQwlQp','.openIcon','#extensions_settings2','#extensions_settings2\x20#amily2_chat_optimiser','cached_models_amily2','each','click','756874NeDPKj','1273874jPDtPL','stringify','extensions','[Amily2号]\x20检测到有效授权,将执行自动UI更新。','getItem','append','closedIcon\x20openIcon','8nigTVM','1190BfJSlU','[Amily2-兼容性]\x20检测到新版环境,已绑定官方点击事件。','.drawer-content','log','','topbar','openIcon','get','#amily2_drawer_content','55629WMNnsn','#expiry_info','true','closest','/assets/hanlinyuan.html','setItem','/assets/amily2-modal.html','openIcon\x20closedIcon','紧急报告:在扩展区域建造Amily2号府邸时发生意外。

'];_0x57cd=function(){return _0x4a7ac9;};return _0x57cd();}export async function createDrawer(){const _0x5abbd1=_0x13dfc3,_0x2170da=extension_settings[extensionName],_0x326ec6=_0x2170da[_0x5abbd1(0xf8)]||_0x5abbd1(0x12c);if(_0x326ec6===_0x5abbd1(0x12c)){if($(_0x5abbd1(0x115))[_0x5abbd1(0x10a)]>0x0)return;const _0xf540c2='\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20';$('#sys-settings-button')['after'](_0xf540c2);const _0x3614b1=$(_0x5abbd1(0x12f));await initializePanel(_0x3614b1);try{const {doNavbarIconClick:_0x1ead75}=await import(_0x5abbd1(0xf6));if(typeof _0x1ead75==='function')$(_0x5abbd1(0xf0))['on']('click',_0x1ead75),console[_0x5abbd1(0x12a)](_0x5abbd1(0x128));else throw new Error(_0x5abbd1(0xf9));}catch(_0x5cb93a){$(_0x5abbd1(0xf0))['on'](_0x5abbd1(0x11d),toggleDrawerFallback),console['log'](_0x5abbd1(0x113));}}else{if(_0x326ec6===_0x5abbd1(0x121)){if($(_0x5abbd1(0x11a))[_0x5abbd1(0x10a)]>0x0)return;const _0x3826bb=_0x5abbd1(0xf7),_0x1a6abf=$(_0x3826bb);$(_0x5abbd1(0x119))[_0x5abbd1(0x124)](_0x1a6abf);const _0x34e10d=_0x1a6abf['find'](_0x5abbd1(0xf5));initializePanel(_0x34e10d,_0x1a6abf);}}} +import { getSlideToggleOptions } from '/script.js'; +import { slideToggle } from '/lib.js'; +import { extension_settings, renderExtensionTemplateAsync } from "/scripts/extensions.js"; +import { extensionName, defaultSettings } from "../utils/settings.js"; +import { + checkAuthorization, + displayExpiryInfo, + pluginAuthStatus, +} from "../utils/auth.js"; +import { + updateUI, + setAvailableModels, + populateModelDropdown, + applyUpdateIndicator, +} from "./state.js"; +import { bindModalEvents } from "./bindings.js"; +import { fetchSupportedModels } from "../core/api.js"; +import { bindHistoriographyEvents } from "./historiography-bindings.js"; +import { bindHanlinyuanEvents } from "./hanlinyuan-bindings.js"; +import { showContentModal } from "./page-window.js"; +const extensionFolderPath = `scripts/extensions/third-party/${extensionName}`; + + +async function loadSettings() { + extension_settings[extensionName] = { + ...defaultSettings, + ...(extension_settings[extensionName] || {}), + }; + + + checkAuthorization(); + + + const autoLogin = localStorage.getItem("plugin_auto_login") === "true"; + console.log( + `[Amily2-调试] 授权状态: ${pluginAuthStatus.authorized}, 自动登录标志: ${autoLogin}`, + ); + if (autoLogin && pluginAuthStatus.authorized) { + console.log("[Amily2号] 检测到有效授权,将执行自动UI更新。"); + } + + $("#expiry_info").html(displayExpiryInfo()); + updateUI(); + + if (pluginAuthStatus.authorized && extension_settings[extensionName].apiUrl) { + const cachedModels = localStorage.getItem("cached_models_amily2"); + if (cachedModels) { + const models = JSON.parse(cachedModels); + console.log(`[Amily2号] 从缓存加载模型列表 (${models.length}个)`); + setAvailableModels(models); + populateModelDropdown(); + } else { + toastr.info("正在自动加载模型列表...", "Amily2号"); + setTimeout(async () => { + const models = await fetchSupportedModels(); + if (models.length > 0) { + setAvailableModels(models); + localStorage.setItem("cached_models_amily2", JSON.stringify(models)); + populateModelDropdown(); + } + }, 500); + } + } +} + +async function initializePanel(contentPanel, errorContainer) { + if (contentPanel.data("initialized")) return; + + try { + const modalContent = await $.get(`${extensionFolderPath}/assets/amily2-modal.html`); + contentPanel.html(modalContent); + const mainContainer = contentPanel.find('#amily2_chat_optimiser'); + + if (mainContainer.length) { + const additionalFeaturesContent = await $.get(`${extensionFolderPath}/assets/Amily2-AdditionalFeatures.html`); + const additionalPanelHtml = ``; + mainContainer.append(additionalPanelHtml); + + const hanlinyuanContent = await $.get(`${extensionFolderPath}/assets/hanlinyuan.html`); + const hanlinyuanPanelHtml = ``; + mainContainer.append(hanlinyuanPanelHtml); + } + + await loadSettings(); + bindModalEvents(); + bindHistoriographyEvents(); + bindHanlinyuanEvents(); + contentPanel.data("initialized", true); + console.log("[Amily-重构] 宫殿模块已按蓝图竣工。"); + applyUpdateIndicator(); + } catch (error) { + console.error("[Amily-建设部] 紧急报告:加载模块化蓝图时发生意外:", error); + const errorMessage = errorContainer + ? '

紧急报告:在扩展区域建造Amily2号府邸时发生意外。

' + : '

紧急报告:无法加载Amily2号府邸内饰。

'; + + if (errorContainer) { + errorContainer.append(errorMessage); + } else { + contentPanel.html(errorMessage); + } + } +} + +/** + * 【兼容性核心】为旧版SillyTavern提供的抽屉切换后备方案。 + * 这个函数综合了我们之前所有调试的经验,确保了稳定和兼容。 + */ +function toggleDrawerFallback() { + const drawerIcon = $('#amily2_drawer_icon'); + const contentPanel = $('#amily2_drawer_content'); + + // 状态同步:如果图标和面板状态不一致(被外部关闭),先强制同步 + if (drawerIcon.hasClass('openIcon') && !contentPanel.is(':visible')) { + drawerIcon.removeClass('openIcon').addClass('closedIcon'); + } + + // 核心逻辑:基于图标的 class 来判断 + if (drawerIcon.hasClass('closedIcon')) { + // 打开抽屉 + // 1. 关闭其他所有打开的抽屉(使用正确的 toggleClass,确保非破坏性) + $('.openDrawer').not(contentPanel).not('.pinnedOpen').addClass('resizing').each((_, el) => { + slideToggle(el, { + ...getSlideToggleOptions(), + onAnimationEnd: function (el) { + el.closest('.drawer-content').classList.remove('resizing'); + }, + }); + }); + $('.openIcon').not(drawerIcon).not('.drawerPinnedOpen').toggleClass('closedIcon openIcon'); + $('.openDrawer').not(contentPanel).not('.pinnedOpen').toggleClass('closedDrawer openDrawer'); + + // 2. 打开当前抽屉 + drawerIcon.toggleClass('closedIcon openIcon'); + contentPanel.toggleClass('closedDrawer openDrawer'); + + contentPanel.addClass('resizing').each((_, el) => { + slideToggle(el, { + ...getSlideToggleOptions(), + onAnimationEnd: function (el) { + el.closest('.drawer-content').classList.remove('resizing'); + }, + }); + }); + } else { + // 关闭当前抽屉 + drawerIcon.toggleClass('openIcon closedIcon'); + contentPanel.toggleClass('openDrawer closedDrawer'); + + contentPanel.addClass('resizing').each((_, el) => { + slideToggle(el, { + ...getSlideToggleOptions(), + onAnimationEnd: function (el) { + el.closest('.drawer-content').classList.remove('resizing'); + }, + }); + }); + } +} + + +export async function createDrawer() { + const settings = extension_settings[extensionName]; + const location = settings.iconLocation || 'topbar'; + + if (location === 'topbar') { + if ($("#amily2_main_drawer").length > 0) return; + + // 使用与st-memory-enhancement完全一致的HTML结构,确保兼容性 + const amily2DrawerHtml = ` +
+
+
+
+
+
+
+ `; + $("#sys-settings-button").after(amily2DrawerHtml); + + const contentPanel = $("#amily2_drawer_content"); + await initializePanel(contentPanel); + + // 【兼容性核心】使用动态导入来判断环境并绑定点击事件 + try { + const { doNavbarIconClick } = await import('/script.js'); + if (typeof doNavbarIconClick === 'function') { + // 新版SillyTavern:使用官方函数 + $('#amily2_main_drawer .drawer-toggle').on('click', doNavbarIconClick); + console.log('[Amily2-兼容性] 检测到新版环境,已绑定官方点击事件。'); + } else { + // 理论上不存在的导出项会直接抛出错误,但作为双重保险 + throw new Error('doNavbarIconClick is not a function'); + } + } catch (error) { + // 旧版SillyTavern:动态导入失败,使用我们的后备方案 + $('#amily2_main_drawer .drawer-toggle').on('click', toggleDrawerFallback); + console.log('[Amily2-兼容性] 检测到旧版环境 (无法导入 doNavbarIconClick),已绑定后备点击事件。'); + } + + } else if (location === 'extensions') { + if ($("#extensions_settings2 #amily2_chat_optimiser").length > 0) return; + const amilyFrameHtml = ` +
+
+
+ Amily2号 优化中枢 +
+
+ +
+
+ `; + + const frame = $(amilyFrameHtml); + $('#extensions_settings2').append(frame); + const contentPanel = frame.find('.inline-drawer-content'); + initializePanel(contentPanel, frame); + } +} diff --git a/ui/hanlinyuan-bindings.js b/ui/hanlinyuan-bindings.js index 73e99ae..d8af22d 100644 --- a/ui/hanlinyuan-bindings.js +++ b/ui/hanlinyuan-bindings.js @@ -1 +1,1180 @@ -const _0x2266ff=_0xe4df;(function(_0x51c9f4,_0x4827ef){const _0xcabd6c=_0xe4df,_0x1640e3=_0x51c9f4();while(!![]){try{const _0x4e2c2f=-parseInt(_0xcabd6c(0x73))/0x1+parseInt(_0xcabd6c(0x70))/0x2+-parseInt(_0xcabd6c(0x194))/0x3*(-parseInt(_0xcabd6c(0xd8))/0x4)+parseInt(_0xcabd6c(0x145))/0x5+-parseInt(_0xcabd6c(0xe6))/0x6+-parseInt(_0xcabd6c(0xaf))/0x7*(-parseInt(_0xcabd6c(0x7b))/0x8)+-parseInt(_0xcabd6c(0x1a9))/0x9*(-parseInt(_0xcabd6c(0x88))/0xa);if(_0x4e2c2f===_0x4827ef)break;else _0x1640e3['push'](_0x1640e3['shift']());}catch(_0x2db168){_0x1640e3['push'](_0x1640e3['shift']());}}}(_0x982b,0xac483));import{getContext}from'/scripts/extensions.js';import*as _0x446b00 from'../core/rag-processor.js';import*as _0x5dd961 from'../core/historiographer.js';import*as _0x3bb428 from'../core/utils/context-utils.js';import*as _0x148be7 from'../core/ingestion-manager.js';import{showContentModal,showHtmlModal}from'./page-window.js';import{extractBlocksByTags,applyExclusionRules}from'../core/utils/rag-tag-extractor.js';'use\x20strict';function setupGlobalEventHandlers(){const _0x297e9e=_0xe4df;window[_0x297e9e(0xa4)]=()=>saveSettingsFromUI(![]),window['resetHLYSettings']=resetSettingsToUI,window[_0x297e9e(0x8e)]=testApi,window[_0x297e9e(0xb6)]=fetchHLYEmbeddingModels,window['fetchHLYRerankModels']=fetchHLYRerankModels,window['updateHLYMemoryCount']=updatePanelStatus,window['purgeHLYStorage']=purgeStorage,window[_0x297e9e(0x1ac)]=startCondensation,window[_0x297e9e(0x166)]=previewCondensation,window[_0x297e9e(0x1b2)]=ingestManualText,window[_0x297e9e(0x169)]=log,window['showHLYStats']=showStats,window['startHLYHistoriography']=startHistoriography;}function updateAndSaveSetting(_0x431c38,_0xdd2572){const _0x408a76=_0xe4df,_0x4f8ba6=_0x446b00['getSettings']();if(!_0x4f8ba6)return;const _0x4e89b4=_0x431c38[_0x408a76(0x159)]('.');let _0x4f9b7a=_0x4f8ba6;for(let _0xf36892=0x0;_0xf36892<_0x4e89b4[_0x408a76(0x100)]-0x1;_0xf36892++){_0x4f9b7a=_0x4f9b7a[_0x4e89b4[_0xf36892]]=_0x4f9b7a[_0x4e89b4[_0xf36892]]||{};}_0x4f9b7a[_0x4e89b4[_0x4e89b4['length']-0x1]]=_0xdd2572,_0x446b00[_0x408a76(0x182)](),log('[自动保存]\x20设置项\x20\x27'+_0x431c38+'\x27\x20已更新为:\x20'+JSON[_0x408a76(0xbf)](_0xdd2572),_0x408a76(0x160));}function bindAutoSaveEvents(){const _0x3f4a12=_0xe4df,_0xcac93e=document[_0x3f4a12(0x82)]('hly-modal-container');if(!_0xcac93e)return;_0xcac93e[_0x3f4a12(0x133)](_0x3f4a12(0x113),_0xcac8d6=>{const _0xa0931a=_0x3f4a12,_0x2b23d1=_0xcac8d6[_0xa0931a(0xbc)],_0xdd73b6=_0x2b23d1[_0xa0931a(0x79)][_0xa0931a(0x105)];if(!_0xdd73b6)return;let _0x41cd16;const _0x57bcd7=_0x2b23d1[_0xa0931a(0x79)][_0xa0931a(0x19a)]||'string';if(_0x2b23d1[_0xa0931a(0x19a)]==='checkbox')_0x41cd16=_0x2b23d1[_0xa0931a(0xbd)];else{if(_0x2b23d1[_0xa0931a(0x19a)]===_0xa0931a(0xd7)){if(_0x2b23d1['checked']){const _0x46b2d3=_0xcac93e[_0xa0931a(0x9e)](_0xa0931a(0x11e)+_0x2b23d1[_0xa0931a(0xc8)]+'\x22]'),_0x1f57e5=Array[_0xa0931a(0x1ad)](_0x46b2d3)[_0xa0931a(0x1b3)](_0x57ae64=>_0x57ae64[_0xa0931a(0xbd)]);_0x41cd16=_0x1f57e5['value'];}else return;}else _0x41cd16=_0x2b23d1['value'];}switch(_0x57bcd7){case _0xa0931a(0xa2):_0x41cd16=parseInt(_0x41cd16,0xa);break;case _0xa0931a(0x85):_0x41cd16=parseFloat(_0x41cd16);break;case _0xa0931a(0x1de):typeof _0x41cd16!==_0xa0931a(0x1de)&&(_0x41cd16=_0x41cd16===_0xa0931a(0x72));break;}if(_0x2b23d1[_0xa0931a(0x19a)]===_0xa0931a(0xd7)&&!_0x2b23d1[_0xa0931a(0xbd)])return;updateAndSaveSetting(_0xdd73b6,_0x41cd16);});}export function bindHanlinyuanEvents(){const _0xcb494b=_0xe4df,_0x125e53=getContext();if(!_0x125e53){console[_0xcb494b(0x16e)]('[翰林院-枢纽]\x20未能获取SillyTavern上下文,绑定失败。');return;}setupGlobalEventHandlers(),bindPanelToggleEvents(),bindInternalUIEvents(),bindTutorialEvents(),bindAutoSaveEvents(),bindSessionLockEvent();if(_0x446b00[_0xcb494b(0x10b)])_0x446b00['initialize']();else{console[_0xcb494b(0x16e)](_0xcb494b(0x19d));return;}loadSettingsToUI(),loadWorldbookList(),log(_0xcb494b(0xdc),_0xcb494b(0x1bd));const _0x48cb8c=document[_0xcb494b(0x82)]('hanlinyuan-ingest-novel-file-input'),_0x422871=document[_0xcb494b(0x82)](_0xcb494b(0x17f)),_0x2597b7=document[_0xcb494b(0x82)](_0xcb494b(0x15d)),_0x3a1101=document['getElementById'](_0xcb494b(0x196)),_0x50b5f4=document[_0xcb494b(0x82)]('hanlinyuan-ingest-progress-container'),_0x1c73fe=document[_0xcb494b(0x82)](_0xcb494b(0x1c5)),_0x2f4792=document[_0xcb494b(0x82)](_0xcb494b(0x120)),_0x4e9518=document[_0xcb494b(0x82)](_0xcb494b(0xef));let _0x1d862c=null,_0x2eb5b9=null;_0x48cb8c[_0xcb494b(0x133)]('change',_0x274137=>{const _0x8cba88=_0xcb494b;_0x1d862c=_0x274137[_0x8cba88(0xbc)][_0x8cba88(0x129)][0x0],_0x1d862c?(_0x422871[_0x8cba88(0x1c8)]=_0x1d862c[_0x8cba88(0xc8)],_0x422871[_0x8cba88(0x7e)]=_0x1d862c[_0x8cba88(0xc8)]):_0x422871[_0x8cba88(0x1c8)]=_0x8cba88(0xcb);}),_0x2597b7[_0xcb494b(0x133)]('click',async()=>{const _0x111fcc=_0xcb494b;if(!_0x1d862c){toastr[_0x111fcc(0x1d0)]('请先选择一个\x20.txt\x20文件');return;}let _0x2ac56e=0x0;const _0x3fff98=_0x148be7['generateJobId'](_0x1d862c),_0x1fca3d=_0x148be7[_0x111fcc(0xb7)](_0x3fff98);if(_0x1fca3d){const _0x5ca988=(_0x1fca3d[_0x111fcc(0x95)]/_0x1fca3d[_0x111fcc(0x178)]*0x64)[_0x111fcc(0x112)](0x1),_0x47464f=confirm(_0x111fcc(0xb4)+_0x5ca988+_0x111fcc(0x1b5));_0x47464f?(_0x2ac56e=_0x1fca3d['processedChunks'],toastr[_0x111fcc(0x1bd)](_0x111fcc(0x1ce)+(_0x2ac56e+0x1)+_0x111fcc(0x16f),_0x111fcc(0xa3)),log(_0x111fcc(0x149)+_0x3fff98+_0x111fcc(0x19f)+_0x2ac56e+_0x111fcc(0xf8),'info')):(_0x148be7[_0x111fcc(0x1a5)](_0x3fff98),toastr[_0x111fcc(0x1bd)](_0x111fcc(0x130),_0x111fcc(0xa3)),log(_0x111fcc(0x75)+_0x3fff98+_0x111fcc(0xc1),_0x111fcc(0x1c2)));}_0x2eb5b9=new AbortController();const _0x4d1b5b=_0x2eb5b9['signal'];_0x4e9518['style'][_0x111fcc(0x128)]=_0x111fcc(0x18f),_0x50b5f4[_0x111fcc(0x84)]['display']='block',_0x2f4792[_0x111fcc(0x1c8)]='正在读取文件...',_0x1c73fe['value']=0x0;try{const _0x514e19=await _0x1d862c[_0x111fcc(0x1a0)](),_0x294335=_0x132d3f=>{const _0x15d654=_0x111fcc;_0x2f4792['textContent']=_0x15d654(0x89)+_0x132d3f[_0x15d654(0x122)]+'\x20('+_0x132d3f[_0x15d654(0x1af)]+'/'+_0x132d3f[_0x15d654(0x110)]+')',_0x1c73fe[_0x15d654(0x7a)]=_0x132d3f[_0x15d654(0x1af)]/_0x132d3f['total']*0x64;},_0x213087=()=>{const _0x5726f9=_0x111fcc;updatePanelStatus(),log(_0x5726f9(0x147),'info');},_0x370fc4=await _0x446b00[_0x111fcc(0x16a)](_0x514e19,'novel',_0x1d862c['name'],_0x294335,_0x4d1b5b,log,_0x213087,_0x3fff98,_0x2ac56e);if(_0x370fc4[_0x111fcc(0x160)])toastr[_0x111fcc(0x160)](_0x111fcc(0xc6)+_0x370fc4['count']+_0x111fcc(0x192)),_0x2f4792[_0x111fcc(0x1c8)]=_0x111fcc(0x163)+_0x370fc4[_0x111fcc(0x1a6)]+'\x20个知识块。',_0x1c73fe[_0x111fcc(0x7a)]=0x64,updatePanelStatus();else throw new Error(_0x370fc4['error']||_0x111fcc(0x1b4));}catch(_0x36db1d){_0x36db1d[_0x111fcc(0xc8)]===_0x111fcc(0x173)?(toastr[_0x111fcc(0x1bd)](_0x111fcc(0x137)),_0x2f4792[_0x111fcc(0x1c8)]=_0x111fcc(0x101)):(toastr[_0x111fcc(0x16e)](_0x111fcc(0x8a)+_0x36db1d[_0x111fcc(0x122)]+_0x111fcc(0xf0)),_0x2f4792[_0x111fcc(0x1c8)]=_0x111fcc(0x9a)+_0x36db1d[_0x111fcc(0x122)]);}finally{setTimeout(()=>{const _0x3e08a7=_0x111fcc;_0x4e9518[_0x3e08a7(0x84)][_0x3e08a7(0x128)]='flex',_0x50b5f4[_0x3e08a7(0x84)]['display']='none',_0x48cb8c['value']='',_0x1d862c=null,_0x422871['textContent']=_0x3e08a7(0xcb);},0xbb8);}}),_0x3a1101[_0xcb494b(0x133)]('click',()=>{const _0x165af3=_0xcb494b;_0x2eb5b9&&_0x2eb5b9[_0x165af3(0x1d7)]();});}function bindSessionLockEvent(){const _0x3e4e9a=_0xe4df,_0x4f8b27=document['getElementById'](_0x3e4e9a(0x185));if(!_0x4f8b27)return;_0x4f8b27[_0x3e4e9a(0x133)](_0x3e4e9a(0x156),()=>{const _0x23932c=_0x3e4e9a,_0x26ae44=_0x446b00[_0x23932c(0xff)]();updateSessionLockUI(_0x26ae44);if(_0x26ae44){const _0x5b82d1=_0x446b00['getLockedSessionInfo']();toastr[_0x23932c(0x160)](_0x23932c(0x1b9)+_0x5b82d1['id'],_0x23932c(0x1cd)),log(_0x23932c(0x198)+_0x5b82d1['id'],_0x23932c(0x160));}else toastr[_0x23932c(0x1bd)](_0x23932c(0x81),'诏曰'),log(_0x23932c(0x116),_0x23932c(0x1bd));updatePanelStatus();}),updateSessionLockUI(_0x446b00['isSessionLocked']());}function updateSessionLockUI(_0x2ba246){const _0x18aee2=_0xe4df,_0x27967f=document[_0x18aee2(0x82)](_0x18aee2(0x185));if(!_0x27967f)return;const _0x40d650=_0x27967f[_0x18aee2(0xf7)]('i'),_0x25e48f=_0x27967f[_0x18aee2(0xf7)](_0x18aee2(0x74));_0x2ba246?(_0x27967f[_0x18aee2(0x190)][_0x18aee2(0x1ae)]('active'),_0x40d650[_0x18aee2(0x15a)]=_0x18aee2(0x10d),_0x25e48f[_0x18aee2(0x1c8)]=_0x18aee2(0x188),_0x27967f[_0x18aee2(0x7e)]=_0x18aee2(0x1c0)):(_0x27967f[_0x18aee2(0x190)]['remove'](_0x18aee2(0x13a)),_0x40d650['className']='fas\x20fa-lock-open',_0x25e48f[_0x18aee2(0x1c8)]=_0x18aee2(0x174),_0x27967f[_0x18aee2(0x7e)]='点击以锁定,让翰林院固定操作当前角色的宝库');}function bindPanelToggleEvents(){const _0x134949=_0xe4df,_0xc8348a=document[_0x134949(0x82)]('amily2_open_rag_palace');if(_0xc8348a){}}function bindTutorialEvents(){const _0x4858c2=_0xe4df,_0x23015b=document['getElementById'](_0x4858c2(0x168));_0x23015b&&_0x23015b[_0x4858c2(0x133)](_0x4858c2(0x156),()=>{const _0x394963=_0x4858c2;showContentModal(_0x394963(0xad),_0x394963(0x8b));});}function bindInternalUIEvents(){const _0x16cdc9=_0xe4df,_0x12eb60=document['querySelectorAll']('.hly-nav-item');_0x12eb60[_0x16cdc9(0x164)](_0x3e55f6=>{const _0x29a7c0=_0x16cdc9;_0x3e55f6[_0x29a7c0(0x133)](_0x29a7c0(0x156),()=>{const _0x2ece03=_0x29a7c0,_0x2c555f=_0x3e55f6['dataset']['tab'],_0x135c9d=_0x2ece03(0x13c)+_0x2c555f+'-tab';document['querySelectorAll'](_0x2ece03(0x93))[_0x2ece03(0x164)](_0x2dd09f=>{const _0x3f7edf=_0x2ece03;_0x2dd09f[_0x3f7edf(0x190)][_0x3f7edf(0x1b7)](_0x3f7edf(0x13a),_0x2dd09f['id']===_0x135c9d);}),_0x12eb60[_0x2ece03(0x164)](_0x5754dc=>_0x5754dc[_0x2ece03(0x190)]['toggle'](_0x2ece03(0x13a),_0x5754dc===_0x3e55f6));});});const _0x2b1250=document[_0x16cdc9(0x82)](_0x16cdc9(0x98));_0x2b1250&&_0x2b1250[_0x16cdc9(0x133)](_0x16cdc9(0x113),toggleCustomEndpointDocket);const _0x266de3=document[_0x16cdc9(0x9e)](_0x16cdc9(0xc9));_0x266de3['forEach'](_0x341585=>{const _0x100098=_0x16cdc9;_0x341585[_0x100098(0x133)]('change',toggleInjectionDetails);});const _0x46311e=document[_0x16cdc9(0x82)]('hly-tag-extraction-toggle'),_0x5b4162=document['getElementById']('hly-tag-input-container');_0x46311e&&_0x5b4162&&_0x46311e[_0x16cdc9(0x133)](_0x16cdc9(0x113),()=>{const _0x1d3c7c=_0x16cdc9;_0x5b4162[_0x1d3c7c(0x84)]['display']=_0x46311e[_0x1d3c7c(0xbd)]?_0x1d3c7c(0x1d2):_0x1d3c7c(0x18f);});const _0x4012e3=document['getElementById'](_0x16cdc9(0xe8));_0x4012e3&&_0x4012e3[_0x16cdc9(0x133)](_0x16cdc9(0x113),handleWorldbookSelectionChange);const _0x348784=document['getElementById']('hly-exclusion-rules-btn');_0x348784&&_0x348784[_0x16cdc9(0x133)](_0x16cdc9(0x156),showExclusionRulesModal);}function toggleInjectionDetails(){const _0x2c7ab5=_0xe4df,_0x4cf708=document[_0x2c7ab5(0xf7)]('input[name=\x22hly-injection-position\x22]:checked')[_0x2c7ab5(0x7a)],_0x3ad8ab=document[_0x2c7ab5(0x82)]('hly-injection-depth'),_0x21895f=document['getElementById'](_0x2c7ab5(0xb2)),_0x2768eb=_0x4cf708==='1';_0x3ad8ab[_0x2c7ab5(0xf2)]=!_0x2768eb,_0x21895f[_0x2c7ab5(0xf2)]=!_0x2768eb;}function toggleCustomEndpointDocket(){const _0x29aacd=_0xe4df,_0x260b08=document[_0x29aacd(0x82)](_0x29aacd(0x98))[_0x29aacd(0x7a)],_0x46679e=document['getElementById']('hly-custom-endpoint-docket');_0x46679e&&(_0x46679e[_0x29aacd(0x84)]['display']=_0x260b08===_0x29aacd(0xb3)||_0x260b08===_0x29aacd(0x134)?_0x29aacd(0x1d2):_0x29aacd(0x18f));}function loadSettingsToUI(){const _0x45a151=_0xe4df,_0x21f61f=_0x446b00[_0x45a151(0x1be)]();if(!_0x21f61f)return;document[_0x45a151(0x82)](_0x45a151(0x167))[_0x45a151(0xbd)]=_0x21f61f['retrieval'][_0x45a151(0x7f)],document[_0x45a151(0x82)]('hly-api-endpoint')[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0xda)][_0x45a151(0x195)],document[_0x45a151(0x82)](_0x45a151(0x83))[_0x45a151(0x7a)]=_0x21f61f['retrieval'][_0x45a151(0xfd)],document[_0x45a151(0x82)]('hly-api-key')[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0xda)][_0x45a151(0xed)];const _0x24ad7c=document[_0x45a151(0x82)](_0x45a151(0xf5));if(_0x24ad7c[_0x45a151(0x126)][_0x45a151(0x100)]===0x0){const _0x448944=_0x21f61f[_0x45a151(0xda)][_0x45a151(0xe3)],_0x19bca0=new Option(_0x448944,_0x448944,!![],!![]);_0x24ad7c[_0x45a151(0x1ae)](_0x19bca0);}_0x24ad7c[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0xda)]['embeddingModel'],document[_0x45a151(0x82)](_0x45a151(0x1a8))[_0x45a151(0xbd)]=_0x21f61f[_0x45a151(0xda)][_0x45a151(0x13d)],document[_0x45a151(0x82)](_0x45a151(0x107))[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0x146)]['chunkSize'],document[_0x45a151(0x82)](_0x45a151(0x1b6))['value']=_0x21f61f[_0x45a151(0x146)][_0x45a151(0xe9)],document['getElementById'](_0x45a151(0x76))['value']=_0x21f61f[_0x45a151(0x146)]['matchThreshold'],document[_0x45a151(0x82)](_0x45a151(0x1aa))[_0x45a151(0x7a)]=_0x21f61f['advanced'][_0x45a151(0x172)],document['getElementById'](_0x45a151(0x11f))[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0x146)][_0x45a151(0xae)],document[_0x45a151(0x82)](_0x45a151(0xf9))[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0xda)]['batchSize'],document[_0x45a151(0x82)]('hly-injection-template')[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0x197)][_0x45a151(0x8c)];const _0x56415c=document[_0x45a151(0xf7)](_0x45a151(0x117)+_0x21f61f[_0x45a151(0x197)]['position']+'\x22]');_0x56415c&&(_0x56415c[_0x45a151(0xbd)]=!![]);document['getElementById'](_0x45a151(0xc5))[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0x197)][_0x45a151(0x86)],document[_0x45a151(0x82)]('hly-injection-role')[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0x197)]['depth_role'],toggleInjectionDetails(),document['getElementById'](_0x45a151(0x1ba))[_0x45a151(0xbd)]=_0x21f61f['condensation'][_0x45a151(0x7f)],document['getElementById'](_0x45a151(0x18e))[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0x12d)][_0x45a151(0xe0)],document[_0x45a151(0x82)](_0x45a151(0x1c7))[_0x45a151(0x7a)]=_0x21f61f['condensation']['layerEnd'],document['getElementById'](_0x45a151(0xc2))[_0x45a151(0xbd)]=_0x21f61f['condensation'][_0x45a151(0xb9)]['user'],document['getElementById'](_0x45a151(0x1d1))[_0x45a151(0xbd)]=_0x21f61f['condensation'][_0x45a151(0xb9)]['ai'];const _0x4e7e93=document['getElementById'](_0x45a151(0x1d4)),_0x477f98=document[_0x45a151(0x82)](_0x45a151(0x99)),_0x5e77c6=document[_0x45a151(0x82)](_0x45a151(0x1cf));_0x4e7e93[_0x45a151(0xbd)]=_0x21f61f['condensation'][_0x45a151(0x17a)],_0x477f98[_0x45a151(0x7a)]=_0x21f61f['condensation']['tags'],_0x5e77c6[_0x45a151(0x84)][_0x45a151(0x128)]=_0x4e7e93[_0x45a151(0xbd)]?_0x45a151(0x1d2):_0x45a151(0x18f),document['getElementById'](_0x45a151(0x153))[_0x45a151(0xbd)]=_0x21f61f[_0x45a151(0xcc)][_0x45a151(0x7f)],document[_0x45a151(0x82)](_0x45a151(0x181))['value']=_0x21f61f[_0x45a151(0xcc)][_0x45a151(0xb0)],document[_0x45a151(0x82)](_0x45a151(0x10e))[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0xcc)][_0x45a151(0xed)];const _0x213a44=document[_0x45a151(0x82)](_0x45a151(0x1b8));if(_0x213a44[_0x45a151(0x126)][_0x45a151(0x100)]===0x0){const _0x306848=_0x21f61f[_0x45a151(0xcc)][_0x45a151(0x10a)];if(_0x306848){const _0xab9346=new Option(_0x306848,_0x306848,!![],!![]);_0x213a44['add'](_0xab9346);}}_0x213a44[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0xcc)][_0x45a151(0x10a)],document[_0x45a151(0x82)](_0x45a151(0x9f))[_0x45a151(0x7a)]=_0x21f61f['rerank'][_0x45a151(0xce)],document[_0x45a151(0x82)](_0x45a151(0x154))[_0x45a151(0x7a)]=_0x21f61f[_0x45a151(0xcc)][_0x45a151(0x127)],document[_0x45a151(0x82)](_0x45a151(0x11b))[_0x45a151(0xbd)]=_0x21f61f[_0x45a151(0xcc)][_0x45a151(0x13d)],toggleCustomEndpointDocket();}function saveSettingsFromUI(_0x19226d=!![]){const _0x513bdb=_0xe4df,_0x52b915=document[_0x513bdb(0x82)](_0x513bdb(0x13b));if(!_0x52b915)return;const _0x85201b=_0x52b915[_0x513bdb(0x9e)](_0x513bdb(0x17c));_0x85201b['forEach'](_0x5820f3=>{const _0x1808ad=_0x513bdb,_0x11f8cc=_0x5820f3[_0x1808ad(0x79)][_0x1808ad(0x105)];if(!_0x11f8cc)return;let _0x18d765;const _0xf9283a=_0x5820f3[_0x1808ad(0x79)][_0x1808ad(0x19a)]||'string';if(_0x5820f3[_0x1808ad(0x19a)]===_0x1808ad(0x8f))_0x18d765=_0x5820f3[_0x1808ad(0xbd)];else{if(_0x5820f3[_0x1808ad(0x19a)]==='radio'){if(!_0x5820f3[_0x1808ad(0xbd)])return;_0x18d765=_0x5820f3[_0x1808ad(0x7a)];}else _0x18d765=_0x5820f3[_0x1808ad(0x7a)];}switch(_0xf9283a){case _0x1808ad(0xa2):_0x18d765=parseInt(_0x18d765,0xa);break;case _0x1808ad(0x85):_0x18d765=parseFloat(_0x18d765);break;case _0x1808ad(0x1de):if(typeof _0x18d765!==_0x1808ad(0x1de))_0x18d765=_0x18d765===_0x1808ad(0x72);break;}const _0x5987bb=_0x446b00[_0x1808ad(0x1be)](),_0x873577=_0x11f8cc[_0x1808ad(0x159)]('.');let _0x32cf82=_0x5987bb;for(let _0x5106e3=0x0;_0x5106e3<_0x873577[_0x1808ad(0x100)]-0x1;_0x5106e3++){_0x32cf82=_0x32cf82[_0x873577[_0x5106e3]]=_0x32cf82[_0x873577[_0x5106e3]]||{};}_0x32cf82[_0x873577[_0x873577[_0x1808ad(0x100)]-0x1]]=_0x18d765;}),_0x446b00[_0x513bdb(0x182)](),!_0x19226d&&(log(_0x513bdb(0xba),_0x513bdb(0x160)),toastr[_0x513bdb(0x160)](_0x513bdb(0x183),'圣旨已达'));}function _0xe4df(_0x2423b2,_0x205c9d){const _0x982b4c=_0x982b();return _0xe4df=function(_0xe4df61,_0x569f27){_0xe4df61=_0xe4df61-0x6e;let _0x2412ce=_0x982b4c[_0xe4df61];return _0x2412ce;},_0xe4df(_0x2423b2,_0x205c9d);}function resetSettingsToUI(){const _0x38ba04=_0xe4df;confirm('您确定要将所有设定恢复为出厂默认值吗?')&&(_0x446b00[_0x38ba04(0xe5)](),loadSettingsToUI(),toastr[_0x38ba04(0x1bd)](_0x38ba04(0x16d),'诏曰'));}async function updatePanelStatus(){const _0x20a86f=_0xe4df,_0x507248=_0x446b00[_0x20a86f(0xa9)](),_0x4873d9=document[_0x20a86f(0x82)](_0x20a86f(0xe2)),_0x18bb88=document['getElementById'](_0x20a86f(0xa7));if(_0x507248){const _0x180a47=_0x446b00[_0x20a86f(0x1a2)]();_0x4873d9['textContent']=_0x20a86f(0x125),_0x18bb88[_0x20a86f(0x1c8)]=_0x180a47['id'],_0x18bb88[_0x20a86f(0x7e)]=_0x20a86f(0xcf)+_0x180a47['id'],_0x4873d9[_0x20a86f(0x190)]['add']('hly-locked-status'),_0x18bb88[_0x20a86f(0x190)][_0x20a86f(0x1ae)](_0x20a86f(0x11a));}else _0x4873d9[_0x20a86f(0x1c8)]=_0x3bb428[_0x20a86f(0x6e)](),_0x18bb88['textContent']=_0x3bb428[_0x20a86f(0x13f)]()||'无',_0x18bb88[_0x20a86f(0x7e)]='',_0x4873d9[_0x20a86f(0x190)][_0x20a86f(0x94)](_0x20a86f(0x11a)),_0x18bb88[_0x20a86f(0x190)][_0x20a86f(0x94)](_0x20a86f(0x11a));const _0x2836c7=document[_0x20a86f(0x82)](_0x20a86f(0x14f));_0x2836c7[_0x20a86f(0x1c8)]='...';try{const _0xdadd14=await _0x446b00[_0x20a86f(0xfc)]();_0x2836c7[_0x20a86f(0x1c8)]=_0xdadd14;}catch(_0x575aa0){console[_0x20a86f(0x16e)](_0x20a86f(0xfa),_0x575aa0),_0x2836c7[_0x20a86f(0x1c8)]='N/A',_0x2836c7[_0x20a86f(0x7e)]=_0x20a86f(0xbb)+_0x575aa0[_0x20a86f(0x122)];}const _0x4ce26d=document[_0x20a86f(0x82)](_0x20a86f(0x177));if(_0x4ce26d&&!_0x4ce26d[_0x20a86f(0x79)][_0x20a86f(0x119)]){const _0x80e78c=_0x446b00[_0x20a86f(0x1be)](),_0xb2da04=_0x446b00['getCollectionId']();if(_0x80e78c[_0x20a86f(0xf4)]&&_0x80e78c[_0x20a86f(0xf4)][_0xb2da04]){const _0x56ff2c=_0x80e78c[_0x20a86f(0xf4)][_0xb2da04];_0x4ce26d['innerHTML']=_0x20a86f(0x158)+_0x56ff2c[_0x20a86f(0xe4)]+_0x20a86f(0xab)+_0x56ff2c[_0x20a86f(0xd6)]+_0x20a86f(0x193);}else _0x4ce26d[_0x20a86f(0x1a1)]='可在此预览凝识结果。

';}}async function testApi(){const _0x1099d9=_0xe4df;toastr[_0x1099d9(0x1bd)](_0x1099d9(0x11d),'圣旨');try{await _0x446b00[_0x1099d9(0x102)](),toastr[_0x1099d9(0x160)](_0x1099d9(0x180),'圣意');}catch(_0x5ba85b){toastr['error'](_0x1099d9(0xc0)+_0x5ba85b['message'],'警报');}}async function fetchHLYEmbeddingModels(){const _0x10cf9c=_0xe4df,_0x354eb2=document[_0x10cf9c(0x82)](_0x10cf9c(0xf5)),_0x5af2a6=_0x354eb2[_0x10cf9c(0x7a)];_0x354eb2['innerHTML']='',_0x354eb2['disabled']=!![];try{log(_0x10cf9c(0xfe),_0x10cf9c(0x1bd));const _0x109f0d=await _0x446b00[_0x10cf9c(0x7d)]();_0x354eb2[_0x10cf9c(0x1a1)]='';if(_0x109f0d[_0x10cf9c(0x100)]===0x0){_0x354eb2[_0x10cf9c(0x1a1)]=_0x10cf9c(0x150),toastr[_0x10cf9c(0x1c2)](_0x10cf9c(0x14c),'翰林院启奏'),log(_0x10cf9c(0x14c),'warn');return;}_0x109f0d[_0x10cf9c(0x164)](_0x3a64f4=>{const _0x130a07=_0x10cf9c,_0x91d9ad=new Option(_0x3a64f4,_0x3a64f4);_0x354eb2[_0x130a07(0x1ae)](_0x91d9ad);}),_0x109f0d[_0x10cf9c(0x1d9)](_0x5af2a6)?_0x354eb2[_0x10cf9c(0x7a)]=_0x5af2a6:_0x354eb2[_0x10cf9c(0x1c4)]=0x0,toastr[_0x10cf9c(0x160)](_0x10cf9c(0x19e)+_0x109f0d[_0x10cf9c(0x100)]+_0x10cf9c(0x1c6),'圣意'),log('成功获取\x20'+_0x109f0d[_0x10cf9c(0x100)]+_0x10cf9c(0x1c6),'success');}catch(_0x2a1dbd){console[_0x10cf9c(0x16e)](_0x10cf9c(0x140),_0x2a1dbd),toastr[_0x10cf9c(0x16e)](_0x10cf9c(0x19b)+_0x2a1dbd['message'],_0x10cf9c(0xa0)),log(_0x10cf9c(0x19b)+_0x2a1dbd['message'],'error'),_0x354eb2[_0x10cf9c(0x1a1)]=_0x10cf9c(0xdb);}finally{_0x354eb2[_0x10cf9c(0xf2)]=![];}}async function fetchHLYRerankModels(){const _0x144f09=_0xe4df,_0x539ba2=document[_0x144f09(0x82)]('hly-rerank-model'),_0x40a39a=_0x539ba2['value'];_0x539ba2[_0x144f09(0x1a1)]=_0x144f09(0x87),_0x539ba2['disabled']=!![];try{log(_0x144f09(0xd5),_0x144f09(0x1bd));const _0x4b3389=await _0x446b00[_0x144f09(0xc7)]();_0x539ba2['innerHTML']='';if(_0x4b3389[_0x144f09(0x100)]===0x0){_0x539ba2[_0x144f09(0x1a1)]='',toastr[_0x144f09(0x1c2)]('未能获取到任何Rerank模型。','翰林院启奏'),log('未能获取到任何Rerank模型。',_0x144f09(0x1c2));return;}_0x4b3389[_0x144f09(0x164)](_0x210fbd=>{const _0x3ede5e=_0x144f09,_0x43f146=new Option(_0x210fbd,_0x210fbd);_0x539ba2[_0x3ede5e(0x1ae)](_0x43f146);}),_0x4b3389[_0x144f09(0x1d9)](_0x40a39a)?_0x539ba2[_0x144f09(0x7a)]=_0x40a39a:_0x539ba2['selectedIndex']=0x0,toastr[_0x144f09(0x160)](_0x144f09(0x19e)+_0x4b3389[_0x144f09(0x100)]+_0x144f09(0xbe),'圣意'),log(_0x144f09(0x19e)+_0x4b3389[_0x144f09(0x100)]+_0x144f09(0xbe),_0x144f09(0x160));}catch(_0x4c3146){console[_0x144f09(0x16e)](_0x144f09(0x162),_0x4c3146),toastr[_0x144f09(0x16e)](_0x144f09(0xa5)+_0x4c3146[_0x144f09(0x122)],_0x144f09(0xa0)),log('获取Rerank模型失败:\x20'+_0x4c3146[_0x144f09(0x122)],_0x144f09(0x16e)),_0x539ba2[_0x144f09(0x1a1)]=_0x144f09(0xdb);}finally{_0x539ba2[_0x144f09(0xf2)]=![];}}async function purgeStorage(){const _0xca5c34=_0xe4df;if(confirm(_0xca5c34(0x114))){toastr[_0xca5c34(0x1bd)](_0xca5c34(0x141),'圣旨');const _0x29a198=await _0x446b00[_0xca5c34(0x155)]();_0x29a198?toastr[_0xca5c34(0x160)](_0xca5c34(0x18c),'圣意'):toastr[_0xca5c34(0x16e)](_0xca5c34(0xa1),'警报'),await updatePanelStatus();}}async function startCondensation(){const _0x17137c=_0xe4df,_0xaca8de=document[_0x17137c(0x82)]('hly-condensation-results'),_0x1c1b27=_0xaca8de[_0x17137c(0x79)][_0x17137c(0x119)],_0x18d299=document[_0x17137c(0x82)](_0x17137c(0x18e))[_0x17137c(0x7a)],_0x34716e=document['getElementById']('hly-layer-end')[_0x17137c(0x7a)],_0x46e5f4={'start':parseInt(_0x18d299),'end':parseInt(_0x34716e)};try{if(_0x1c1b27&&_0x1c1b27[_0x17137c(0x104)]()){log(_0x17137c(0x16b),_0x17137c(0x1bd)),toastr[_0x17137c(0x1bd)]('正在处理您确认后的文书...','圣旨'),_0xaca8de[_0x17137c(0x1c8)]=_0x17137c(0x184);const _0x4087a0=await _0x446b00['ingestTextToHanlinyuan'](_0x1c1b27,_0x17137c(0x115),_0x17137c(0x124)+_0x46e5f4[_0x17137c(0xe4)]+'-'+_0x46e5f4['end'],()=>{},null,log,()=>{},null,0x0,_0x46e5f4);if(_0x4087a0[_0x17137c(0x160)]){toastr[_0x17137c(0x160)](_0x17137c(0x148)+_0x4087a0[_0x17137c(0x1a6)]+'\x20条忆识。',_0x17137c(0x1bf)),log(_0x17137c(0x136)+_0x4087a0['count']+_0x17137c(0x176),_0x17137c(0x160));const _0x11bb1f=_0x46e5f4[_0x17137c(0xd6)]===0x0?getContext()[_0x17137c(0xf1)]['length']:_0x46e5f4[_0x17137c(0xd6)];_0xaca8de['textContent']=_0x17137c(0x161)+_0x46e5f4['start']+_0x17137c(0x15b)+_0x11bb1f+_0x17137c(0x91)+_0x4087a0[_0x17137c(0x1a6)]+_0x17137c(0x176),delete _0xaca8de[_0x17137c(0x79)]['finalText'];}else throw new Error(_0x4087a0[_0x17137c(0x16e)]||_0x17137c(0x1b4));}else{_0xaca8de['textContent']=_0x17137c(0x10c),toastr[_0x17137c(0x1bd)](_0x17137c(0x13e),'圣旨'),log(_0x17137c(0x1bc),_0x17137c(0x1bd));const _0x2672f4=_0x446b00[_0x17137c(0x78)]();if(!_0x2672f4||_0x2672f4['length']===0x0){toastr[_0x17137c(0x1d0)](_0x17137c(0x1d3),_0x17137c(0xea)),_0xaca8de[_0x17137c(0x1c8)]=_0x17137c(0x12e);return;}_0xaca8de[_0x17137c(0x1c8)]=_0x17137c(0xde)+_0x2672f4[_0x17137c(0x100)]+_0x17137c(0x1a7),toastr[_0x17137c(0x1bd)]('已采集\x20'+_0x2672f4[_0x17137c(0x100)]+'\x20条消息,开始凝识...',_0x17137c(0xea));const _0x134922=await _0x446b00[_0x17137c(0xac)](_0x2672f4,log,_0x46e5f4);if(_0x134922['success']){toastr['success'](_0x17137c(0xf3)+_0x134922[_0x17137c(0x1a6)]+_0x17137c(0x176),_0x17137c(0x1bf));const _0x486c6e=_0x46e5f4[_0x17137c(0xd6)]===0x0?getContext()[_0x17137c(0xf1)][_0x17137c(0x100)]:_0x46e5f4[_0x17137c(0xd6)];_0xaca8de[_0x17137c(0x1c8)]='聊天记录从第\x20'+_0x46e5f4[_0x17137c(0xe4)]+_0x17137c(0x15b)+_0x486c6e+_0x17137c(0x91)+_0x134922[_0x17137c(0x1a6)]+_0x17137c(0x176);}else throw new Error(_0x134922[_0x17137c(0x16e)]||'未知错误');}}catch(_0x2c4c01){console[_0x17137c(0x16e)](_0x17137c(0x1c9),_0x2c4c01),toastr['error'](_0x17137c(0x96)+_0x2c4c01[_0x17137c(0x122)],_0x17137c(0xa0)),_0xaca8de['textContent']=_0x17137c(0x96)+_0x2c4c01[_0x17137c(0x122)];}finally{await updatePanelStatus();}}function _0x982b(){const _0x1a51fb=['》的条目失败:','previewHLYCondensation','hly-retrieval-enabled','amily2_open_hanlin_tutorial','hlyLog','ingestTextToHanlinyuan','检测到预览后待处理的文本,开始直接凝识...','input','翰林院设定已重置为初始状态。','error','\x20块继续录入。','hly-exclusion-rules-container','.hly-preview-item-v2','queryMessageCount','AbortError','锁定会话','根据当前勾选条件,未找到符合的消息可供预览。','\x20条忆识。','hly-condensation-results','totalChunks','join','tagExtractionEnabled','hly-log-entry\x20','[data-setting-key]','log-error','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20第\x20','hanlinyuan-ingest-novel-file-name','神力连接通畅!','hly-rerank-url','saveSettings','翰林院设定已存档封印。','正在处理预览后的文本...','hly-session-lock-btn','编辑内容排除规则','收到手动录入请求,文本长度:\x20','解锁会话','\x0a
\x0a翰林院宝库状态\x0a--------------------\x0a集合ID:\x20','请选择一个书库...','fa-exclamation-triangle','宝库已清空。','开始对《','hly-layer-start','none','classList','正在查询宝库状态...','\x20个知识块','\x20楼。

','219735TiJIZg','apiEndpoint','hanlinyuan-ingest-abort','injection','会话已锁定到宝库:\x20','预览内容已更新,可随时开始凝识。','type','获取模型失败:\x20','val','[翰林院-枢纽]\x20核心法典未能提供初始化圣旨!','成功获取\x20',',从第\x20','text','innerHTML','getLockedSessionInfo','正在获取可用书库列表...','》中的条目\x20(Key:\x20','clearJob','count','\x20条消息,开始凝识...','hly-retrieval-notify','261BhhITY','hly-query-message-count','log-warn','startHLYCondensation','from','add','processed','executeCompilation','查询宝库状态失败:\x20','ingestHLYManualText','find','未知错误','%。是否从上次中断之处继续?','hly-overlap-size','toggle','hly-rerank-model','会话已锁定到:\x20','hly-condensation-enabled','[翰林院-枢纽]\x20手动录入过程发生错误:','未检测到预览文本,按标准流程采集消息...','info','getSettings','大功告成','点击以解锁,让翰林院跟随当前角色','fa-check-circle','warn','正在为《','selectedIndex','hanlinyuan-ingest-progress-bar','\x20个模型。','hly-layer-end','textContent','[翰林院-枢纽]\x20凝识过程发生错误:','createElement','hly-log-output','\x20进行编纂...','圣旨已下','遵命,将从第\x20','hly-tag-input-container','warning','hly-include-ai','block','未找到符合条件的消息可供凝识。','hly-tag-extraction-toggle','\x22>\x20[','contains','abort','正在加载条目...','includes','预览失败:\x20','fa-circle-info','用户请求查看宝库状态。','加载失败','boolean',')\x20进行编纂...','.hly-log-placeholder','圣谕不明','getCharacterName','getCollectionId','224810HraRBe','getLoresForWorldbook','true','76568gOBnnV','span','[断点续传]\x20用户选择放弃旧任务\x20','hly-match-threshold',']\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','getMessagesForCondensation','dataset','value','314072lPUNpA','手动录入','fetchEmbeddingModels','title','enabled','[翰林院-枢纽]\x20加载《','会话已解锁,将跟随当前角色。','getElementById','hly-custom-api-url','style','float','depth','','146540SSdfOG','处理中:\x20','录入失败:\x20','scripts/extensions/third-party/ST-Amily2-Chat-Optimisation/HanLin.md','template','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20添加新规则\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','testHLYApi','checkbox','preventDefault','\x20楼已成功凝识,新增\x20',',\x20忆识总数=','.hly-tab-pane','remove','processedChunks','凝识失败:\x20','scrollHeight','hly-api-endpoint','hly-tag-input','错误:\x20','\x0a--------------------\x0aAPI端点:\x20',')\x20的编纂任务已完成。','comment','querySelectorAll','hly-rerank-top-n','严重错误','清空宝库失败。','integer','圣旨已达','saveHLYSettings','获取Rerank模型失败:\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20获取失败','[翰林院-枢纽]\x20已成功连接各部,政令畅通。','.hly-exclusion-rule-row','已采集\x20','已选择\x20','layerStart','成功加载\x20','hly-current-character-name','embeddingModel','start','resetSettings','5639346iJDueo','beforeend','hly-hist-select-library','overlap','翰林院启奏','手动录入失败:\x20','加载书库列表失败:\x20','apiKey','此书库为空','hanlinyuan-ingest-novel-controls','。进度已保存,可稍后重试。','chat','disabled','凝识完成!新增\x20','condensationHistory','hly-embedding-model','\x0a\x0a---\x0a\x0a','querySelector','\x20块开始。','hly-batch-size','[翰林院-枢纽]\x20更新忆识数量失败:','mes','getVectorCount','customApiUrl','开始获取模型列表...','toggleSessionLock','length','任务已中止。','testApiConnection','手动录入成功,新增\x20','trim','settingKey','\x22\x20placeholder=\x22结束字符,\x20如\x20-->\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20×\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','hly-chunk-size','\x20(Key:\x20','\x20条有效条目),请点击“开始凝识”进入自动向量化流程。','model','initialize','正在采集消息...','fas\x20fa-lock','hly-rerank-api-key','exclusionRules','total','log-success','toFixed','change','此操作将彻底清空当前角色的所有忆识(向量),且无法恢复。您确定要继续吗?','chat_history','会话已解锁。','input[name=\x22hly-injection-position\x22][value=\x22','确认并更新预览','finalText','hly-locked-status','hly-rerank-notify','】已成功编纂入库。','正在测试神力连接...','input[name=\x22','hly-max-results','hanlinyuan-ingest-status','未知的编纂错误','message','toLocaleTimeString','聊天记录\x20','会话已锁定','options','hybrid_alpha','display','files','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20在这里定义需要从提取内容中排除的文本片段。例如,排除HTML注释,可以设置开始字符为\x20``。

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','active','hly-modal-container','hly-','notify','正在准备凝识...','getChatId','[翰林院-枢纽]\x20获取模型列表失败:','正在清空宝库...','hly-manual-text','hly-hist-select-entry','map','1567180iYuHsL','advanced','[实时刷新]\x20批次完成,忆识总数已更新。','文书已成功录入宝库,新增\x20','[断点续传]\x20用户选择继续任务\x20','.hly-preview-textarea','\x20楼到\x20','未能获取到任何模型。','each','请先选择书库','hly-current-vector-count','','保存规则','编纂任务已开始...','hly-rerank-enabled','hly-rerank-hybrid-alpha','purgeStorage','click','scrollTop','上次已从第\x20','split','className','\x20楼到第\x20','文书录入失败:\x20','hanlinyuan-ingest-novel-start','insertAdjacentHTML','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20未找到任何书库';return;}_0xa41904[_0x434ec2(0x164)](_0x251560=>{const _0x268ccf=_0x434ec2,_0x266c7a=new Option(_0x251560,_0x251560);_0x5c67fa[_0x268ccf(0x1ae)](_0x266c7a);}),log(_0x434ec2(0xe1)+_0xa41904[_0x434ec2(0x100)]+'\x20个书库。',_0x434ec2(0x160));}catch(_0x37cf44){console[_0x434ec2(0x16e)]('[翰林院-枢纽]\x20加载书库列表失败:',_0x37cf44),log(_0x434ec2(0xec)+_0x37cf44[_0x434ec2(0x122)],'error'),_0x5c67fa['innerHTML']=_0x434ec2(0x1dd);}}async function handleWorldbookSelectionChange(){const _0x4bb412=_0xe4df,_0x121c31=document[_0x4bb412(0x82)]('hly-hist-select-library'),_0x5a4022=document[_0x4bb412(0x82)](_0x4bb412(0x143)),_0x33b91f=_0x121c31[_0x4bb412(0x7a)];_0x5a4022[_0x4bb412(0x1a1)]=_0x4bb412(0x1d8),_0x5a4022[_0x4bb412(0xf2)]=!![];if(!_0x33b91f){_0x5a4022['innerHTML']=_0x4bb412(0x14e);return;}try{log(_0x4bb412(0x1c3)+_0x33b91f+'》获取条目列表...',_0x4bb412(0x1bd));const _0x46e33c=await _0x5dd961[_0x4bb412(0x71)](_0x33b91f);_0x5a4022[_0x4bb412(0x1a1)]='请选择一个条目...';if(_0x46e33c[_0x4bb412(0x100)]===0x0){_0x5a4022['innerHTML']=_0x4bb412(0xee);return;}_0x46e33c[_0x4bb412(0x164)](_0x59d4d9=>{const _0x50fd1e=_0x4bb412,_0x350dfc=new Option(_0x59d4d9[_0x50fd1e(0x9d)]+_0x50fd1e(0x108)+_0x59d4d9[_0x50fd1e(0x12f)]+')',_0x59d4d9[_0x50fd1e(0x12f)]);_0x5a4022['add'](_0x350dfc);}),log(_0x4bb412(0xe1)+_0x46e33c[_0x4bb412(0x100)]+_0x4bb412(0x131),_0x4bb412(0x160));}catch(_0x672744){console[_0x4bb412(0x16e)](_0x4bb412(0x80)+_0x33b91f+_0x4bb412(0x165),_0x672744),log('加载条目失败:\x20'+_0x672744[_0x4bb412(0x122)],_0x4bb412(0x16e)),_0x5a4022[_0x4bb412(0x1a1)]=_0x4bb412(0x1dd);}finally{_0x5a4022[_0x4bb412(0xf2)]=![];}}async function startHistoriography(){const _0x53a861=_0xe4df,_0x4b4ac6=document[_0x53a861(0x82)](_0x53a861(0xe8))[_0x53a861(0x7a)],_0x4cb47f=document['getElementById']('hly-hist-select-entry')[_0x53a861(0x7a)],_0x4b8b89=document['getElementById']('hly-historiography-results');if(!_0x4b4ac6||!_0x4cb47f){toastr[_0x53a861(0x1d0)]('请先选择一个书库和要编纂的条目。',_0x53a861(0x1e1));return;}_0x4b8b89[_0x53a861(0x1c8)]='准备对《'+_0x4b4ac6+_0x53a861(0x1a4)+_0x4cb47f+_0x53a861(0x1df),toastr[_0x53a861(0x1bd)](_0x53a861(0x152),'圣旨'),log(_0x53a861(0x18d)+_0x4b4ac6+'》-'+_0x4cb47f+_0x53a861(0x1cc),_0x53a861(0x1bd));try{const _0x2d1f29=await _0x5dd961[_0x53a861(0x1b0)](_0x4b4ac6,_0x4cb47f);if(_0x2d1f29['success']){const _0x4e7571=document[_0x53a861(0x82)](_0x53a861(0x143)),_0x289806=_0x4e7571['options'][_0x4e7571['selectedIndex']][_0x53a861(0x1a0)],_0x3b41ef='《'+_0x4b4ac6+'》中的条目【'+_0x289806+_0x53a861(0x11c);_0x4b8b89[_0x53a861(0x1c8)]=_0x3b41ef,toastr[_0x53a861(0x160)]('编纂任务已完成。',_0x53a861(0x1bf)),log('对《'+_0x4b4ac6+'》中条目\x20(Key:\x20'+_0x4cb47f+_0x53a861(0x9c),_0x53a861(0x160));}else throw new Error(_0x2d1f29['error']||_0x53a861(0x121));}catch(_0x4ef586){console[_0x53a861(0x16e)](_0x53a861(0xb8),_0x4ef586),toastr[_0x53a861(0x16e)]('编纂失败:\x20'+_0x4ef586[_0x53a861(0x122)],'严重错误'),_0x4b8b89[_0x53a861(0x1c8)]=_0x53a861(0xaa)+_0x4ef586[_0x53a861(0x122)];}}async function showStats(){const _0x18a382=_0xe4df;try{log(_0x18a382(0x1dc),_0x18a382(0x1bd)),toastr[_0x18a382(0x1bd)](_0x18a382(0x191),'圣旨');const _0x428b49=await _0x446b00['getVectorCount'](),_0x1fbf95=_0x446b00[_0x18a382(0x6f)](),_0x2de0d9=_0x446b00[_0x18a382(0x1be)](),_0x23db33=_0x18a382(0x189)+_0x1fbf95+'\x0a忆识总数:\x20'+_0x428b49+_0x18a382(0x9b)+_0x2de0d9[_0x18a382(0xda)][_0x18a382(0x195)]+'\x0a所用模型:\x20'+_0x2de0d9[_0x18a382(0xda)][_0x18a382(0xe3)]+'\x0a
\x0a\x20\x20\x20\x20\x20\x20\x20\x20';toastr['info'](_0x23db33,_0x18a382(0xd0),{'timeOut':0x3a98,'extendedTimeOut':0x1388,'tapToDismiss':!![],'closeButton':!![]}),log(_0x18a382(0x138)+_0x1fbf95+_0x18a382(0x92)+_0x428b49,_0x18a382(0x160));}catch(_0x3025b8){console[_0x18a382(0x16e)]('[翰林院-枢纽]\x20查询宝库状态失败:',_0x3025b8),toastr['error'](_0x18a382(0x1b1)+_0x3025b8[_0x18a382(0x122)],_0x18a382(0xa0)),log(_0x18a382(0x1b1)+_0x3025b8[_0x18a382(0x122)],_0x18a382(0x16e));}}function showExclusionRulesModal(){const _0x17548f=_0xe4df,_0x590508=_0x446b00[_0x17548f(0x1be)](),_0x560839=_0x590508[_0x17548f(0x12d)]['exclusionRules']||[],_0x2102e5=(_0x5cce00={'start':'','end':''},_0x71c993)=>_0x17548f(0xa6)+_0x71c993+_0x17548f(0x12a)+_0x5cce00['start']+'\x22\x20placeholder=\x22开始字符,\x20如\x20"> + + + `; + + // Build the initial HTML for all existing rules + const rulesHtml = rules.map(createRuleRowHtml).join(''); + + const modalHtml = ` +
+

在这里定义需要从提取内容中排除的文本片段。例如,排除HTML注释,可以设置开始字符为 \`\`。

+
${rulesHtml}
+ +
+ + `; + + showHtmlModal('编辑内容排除规则', modalHtml, { + okText: '保存规则', + onOk: (dialogElement) => { + const newRules = []; + dialogElement.find('.hly-exclusion-rule-row').each(function() { + const start = $(this).find('input').eq(0).val().trim(); + const end = $(this).find('input').eq(1).val().trim(); + if (start && end) { + newRules.push({ start, end }); + } + }); + updateAndSaveSetting('condensation.exclusionRules', newRules); + toastr.success('内容排除规则已保存。', '圣旨已达'); + } + }); + + // Event listeners for the modal content (add/delete) + const modalContent = document.getElementById('hly-exclusion-rules-container'); + const rulesList = modalContent.querySelector('#hly-rules-list'); + + // Add rule button + modalContent.querySelector('#hly-add-rule-btn').addEventListener('click', () => { + const newIndex = rulesList.children.length; + const newRowHtml = createRuleRowHtml({ start: '', end: '' }, newIndex); + rulesList.insertAdjacentHTML('beforeend', newRowHtml); + }); + + // Delete rule button (using event delegation) + rulesList.addEventListener('click', (event) => { + if (event.target.classList.contains('hly-delete-rule-btn')) { + event.target.closest('.hly-exclusion-rule-row').remove(); + } + }); +} + +function previewCondensation() { + const resultsEl = document.getElementById('hly-condensation-results'); + try { + // 1. 获取UI设置和新规则 + const settings = HanlinyuanCore.getSettings(); + const exclusionRules = settings.condensation.exclusionRules || []; + const overrideMessageTypes = { + user: document.getElementById('hly-include-user').checked, + ai: document.getElementById('hly-include-ai').checked, + }; + const useTagExtraction = document.getElementById('hly-tag-extraction-toggle').checked; + const tagsToExtract = useTagExtraction + ? document.getElementById('hly-tag-input').value.split(',').map(t => t.trim()).filter(Boolean) + : []; + + // 2. 获取原始消息 + const messages = HanlinyuanCore.getMessagesForCondensation(overrideMessageTypes); + + if (!messages || messages.length === 0) { + resultsEl.textContent = '根据当前勾选条件,未找到符合的消息可供预览。'; + toastr.warning('未找到符合条件的消息。', '翰林院启奏'); + return; + } + + // 3. 处理消息内容 + const processedMessages = messages.map((msg, index) => { + let content; + + // 【V5.2 最终规则】用户消息不受标签提取和内容排除的任何影响 + if (msg.is_user) { + content = msg.mes; + } + // AI消息则遵循所有规则 + else { + if (useTagExtraction && tagsToExtract.length > 0) { + const blocks = extractBlocksByTags(msg.mes, tagsToExtract); + content = blocks.join('\n\n'); + } else { + content = msg.mes; + } + // 内容排除规则只对AI消息生效 + content = applyExclusionRules(content, exclusionRules); + } + + return { + id: `preview-item-${index}`, + name: msg.name, + content: content.trim(), + }; + }).filter(item => item.content); // 过滤掉处理后内容为空的条目 + + if (processedMessages.length === 0) { + resultsEl.textContent = '根据标签提取或内容排除条件,未找到任何有效内容。'; + toastr.warning('根据标签提取或内容排除条件,未找到任何有效内容。', '翰林院启奏'); + return; + } + + // 4. 构建编辑器HTML (V3 - 优化布局和交互) + const editorHtml = processedMessages.map((item, index) => ` +
+
+ + 第 ${index + 1} 楼: [${item.name}] + +
+ +
+
+ +
+ `).join(''); + + // 5. 显示模态窗口 + showHtmlModal('预览并编辑凝识内容', `
${editorHtml}
`, { + okText: '确认并更新预览', + onOk: (dialogElement) => { + const finalContent = []; + dialogElement.find('.hly-preview-item-v2').each(function() { + const text = $(this).find('.hly-preview-textarea').val(); + if (text.trim()) { // 只保留非空内容 + finalContent.push(text); + } + }); + + const finalText = finalContent.join('\n\n---\n\n'); + // 更新预览区UI + const layerStart = document.getElementById('hly-layer-start').value; + const layerEnd = document.getElementById('hly-layer-end').value; + resultsEl.textContent = `已选择 ${layerStart} 楼到 ${layerEnd} 楼的内容(共 ${finalContent.length} 条有效条目),请点击“开始凝识”进入自动向量化流程。`; + // 将最终文本暂存到dataset中,供“开始凝识”使用 + resultsEl.dataset.finalText = finalText; + toastr.success('预览内容已更新,可随时开始凝识。', '圣旨已达'); + } + }); + + // 6. 为新生成的删除按钮绑定事件 (V2) + $('.hly-preview-delete-btn-v2').on('click', function(e) { + e.preventDefault(); + const targetId = $(this).data('target'); + $(`#${targetId}`).remove(); + }); + + } catch (error) { + console.error('[翰林院-枢纽] 预览过程发生错误:', error); + resultsEl.textContent = `预览失败: ${error.message}`; + toastr.error(`预览失败: ${error.message}`, '严重错误'); + } +} + +/** + * 新增:日志记录函数 + * @param {string} message - 要记录的消息 + * @param {string} type - 'info', 'success', 'error', 'warn' + */ +function log(message, type = 'info') { + const logOutput = document.getElementById('hly-log-output'); + if (!logOutput) return; + + const p = document.createElement('p'); + const timestamp = new Date().toLocaleTimeString(); + + let icon = 'fa-circle-info'; + let colorClass = 'log-info'; + + switch (type) { + case 'success': + icon = 'fa-check-circle'; + colorClass = 'log-success'; + break; + case 'error': + icon = 'fa-times-circle'; + colorClass = 'log-error'; + break; + case 'warn': + icon = 'fa-exclamation-triangle'; + colorClass = 'log-warn'; + break; + } + + p.className = `hly-log-entry ${colorClass}`; + p.innerHTML = ` [${timestamp}] ${message}`; + + // 移除初始的占位符 + const placeholder = logOutput.querySelector('.hly-log-placeholder'); + if (placeholder) { + placeholder.remove(); + } + + logOutput.appendChild(p); + logOutput.scrollTop = logOutput.scrollHeight; // 自动滚动到底部 +} + + +/** + * 新增:处理手动录入的文本 + */ +async function ingestManualText() { + const textArea = document.getElementById('hly-manual-text'); + const text = textArea.value.trim(); + + if (!text) { + toastr.warning('录入内容不能为空。', '翰林院启奏'); + log('用户尝试录入空文本。', 'warn'); + return; + } + + log(`收到手动录入请求,文本长度: ${text.length}`, 'info'); + toastr.info('正在处理您提交的文书...', '圣旨'); + + try { + const result = await HanlinyuanCore.ingestTextToHanlinyuan(text, 'manual', '手动录入'); + if (result.success) { + toastr.success(`文书已成功录入宝库,新增 ${result.count} 条忆识。`, '大功告成'); + log(`手动录入成功,新增 ${result.count} 条忆识。`, 'success'); + textArea.value = ''; // 清空文本域 + } else { + throw new Error(result.error || '未知错误'); + } + } catch (error) { + console.error('[翰林院-枢纽] 手动录入过程发生错误:', error); + toastr.error(`文书录入失败: ${error.message}`, '严重错误'); + log(`手动录入失败: ${error.message}`, 'error'); + } finally { + await updatePanelStatus(); + } +} diff --git a/ui/historiography-bindings.js b/ui/historiography-bindings.js index 867ed25..25d93a5 100644 --- a/ui/historiography-bindings.js +++ b/ui/historiography-bindings.js @@ -1 +1,407 @@ -(function(_0x289057,_0x5f5da1){const _0x11a7cc=_0x3057,_0x2dfa38=_0x289057();while(!![]){try{const _0x836a9e=-parseInt(_0x11a7cc(0xdd))/0x1*(-parseInt(_0x11a7cc(0x12f))/0x2)+parseInt(_0x11a7cc(0x10a))/0x3+-parseInt(_0x11a7cc(0xdc))/0x4*(-parseInt(_0x11a7cc(0x129))/0x5)+-parseInt(_0x11a7cc(0x11c))/0x6+-parseInt(_0x11a7cc(0x142))/0x7+-parseInt(_0x11a7cc(0x10b))/0x8+parseInt(_0x11a7cc(0x122))/0x9;if(_0x836a9e===_0x5f5da1)break;else _0x2dfa38['push'](_0x2dfa38['shift']());}catch(_0x48c9d1){_0x2dfa38['push'](_0x2dfa38['shift']());}}}(_0x5de4,0x405c1));import{extension_settings}from'/scripts/extensions.js';import{extensionName,defaultSettings,saveSettings}from'../utils/settings.js';import{showHtmlModal}from'./page-window.js';function _0x5de4(){const _0x45fdc7=['此国史馆为空','amily2_mhb_small_manual_execute','正在检阅史册...','addEventListener','historiography_auto_summary_interactive','_expand_editor','large','change','block','classList','menu_button\x20small_button\x20interactable','trim','running','start','破限谕旨','hly-delete-rule-btn','请先选择一个国史馆及其中的史册条目!','.hly-exclusion-rule-row','close','正在遍览帝国疆域...','已镌刻!','宏史卷','#historiography-add-rule-btn','542349tLWSRd','3603200KBzfMS','input','log','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20正在编辑:\x20','length','option','style','jailbreak','join','appendChild','.popup-button-ok','保存规则','编辑内容排除规则','请先选择国史馆','historiographyLargeJailbreakPrompt','none','dispatchEvent','2247000pgmOxa','insertAdjacentHTML','menu_button\x20small_button\x20interactable\x20danger','historiography_ingest_to_rag','_editor','请输入有效的起始和结束楼层!','4872708OLcxMM','success','historiographySmallAutoEnable','dataset','value','圣旨已达','forEach','111135hJzAlA','querySelector','checked','historiographySmallTriggerThreshold','textContent','paused','14msginy','historiography-tag-input-container','innerHTML','getElementById','small','target','historiography-tag-input','state','historiography-exclusion-rules-btn','historiography-tag-extraction-toggle','key','圣谕不全','\x22\x20placeholder=\x22开始字符,\x20如\x20`。

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x20添加新规则\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','beforeend','[Amily2号-工部]\x20【敕史局】的专属工匠已就位...'];_0x5de4=function(){return _0x45fdc7;};return _0x5de4();}import{applyExclusionRules,extractBlocksByTags}from'../core/utils/rag-tag-extractor.js';import{getAvailableWorldbooks,getLoresForWorldbook,executeManualSummary,executeRefinement,executeExpedition,stopExpedition}from'../core/historiographer.js';function _0x3057(_0x2c2886,_0x124b38){const _0x5de4bd=_0x5de4();return _0x3057=function(_0x305753,_0x23d5b){_0x305753=_0x305753-0xcf;let _0x4546c9=_0x5de4bd[_0x305753];return _0x4546c9;},_0x3057(_0x2c2886,_0x124b38);}function setupPromptEditor(_0x357d4d){const _0x3a44b8=_0x3057,_0x1ffb18=document['getElementById'](_0x3a44b8(0x13e)+_0x357d4d+'_prompt_selector'),_0x375e35=document['getElementById']('amily2_mhb_'+_0x357d4d+_0x3a44b8(0x120)),_0x14d258=document[_0x3a44b8(0x132)](_0x3a44b8(0x13e)+_0x357d4d+'_save_button'),_0x19d520=document[_0x3a44b8(0x132)](_0x3a44b8(0x13e)+_0x357d4d+_0x3a44b8(0x145)),_0x429f50=_0x357d4d===_0x3a44b8(0x133)?_0x3a44b8(0xe3):_0x3a44b8(0x119),_0x4913ee=_0x357d4d===_0x3a44b8(0x133)?_0x3a44b8(0xe4):_0x3a44b8(0xe8),_0x59447a=()=>{const _0x1b86eb=_0x3a44b8,_0x3f4e65=_0x1ffb18[_0x1b86eb(0x126)];_0x3f4e65===_0x1b86eb(0x112)?_0x375e35[_0x1b86eb(0x126)]=extension_settings[extensionName][_0x429f50]:_0x375e35['value']=extension_settings[extensionName][_0x4913ee];};_0x1ffb18['addEventListener']('change',_0x59447a),_0x14d258['addEventListener']('click',()=>{const _0x5dd53e=_0x3a44b8,_0x33c23f=_0x1ffb18[_0x5dd53e(0x126)];_0x33c23f===_0x5dd53e(0x112)?extension_settings[extensionName][_0x429f50]=_0x375e35[_0x5dd53e(0x126)]:extension_settings[extensionName][_0x4913ee]=_0x375e35['value'],saveSettings()&&toastr[_0x5dd53e(0x123)]((_0x357d4d===_0x5dd53e(0x133)?_0x5dd53e(0xed):_0x5dd53e(0x108))+'的'+(_0x33c23f===_0x5dd53e(0x112)?_0x5dd53e(0x101):'纲要')+_0x5dd53e(0x13c));}),_0x19d520[_0x3a44b8(0xf6)]('click',()=>{const _0xc4ce4f=_0x3a44b8,_0xec492a=_0x1ffb18[_0xc4ce4f(0x126)];_0xec492a==='jailbreak'?_0x375e35['value']=defaultSettings[_0x429f50]:_0x375e35['value']=defaultSettings[_0x4913ee],toastr[_0xc4ce4f(0xd4)]('已恢复为默认谕旨,请点击“保存当前”以确认。');}),_0x59447a();const _0x377686=document[_0x3a44b8(0x132)](_0x3a44b8(0x13e)+_0x357d4d+_0x3a44b8(0xf8));_0x377686[_0x3a44b8(0xf6)](_0x3a44b8(0xcf),()=>{const _0x4ac542=_0x3a44b8,_0x4e0e7d=_0x1ffb18[_0x4ac542(0x126)],_0x4f1a74=_0x1ffb18[_0x4ac542(0xeb)][_0x1ffb18[_0x4ac542(0xe1)]][_0x4ac542(0xd9)],_0x2f08bb=_0x375e35[_0x4ac542(0x126)],_0x17bd48=_0x4ac542(0x10e)+_0x4f1a74+_0x4ac542(0x144),_0x207b0a=$(_0x17bd48)[_0x4ac542(0xee)](_0x4ac542(0xdf)),_0x32a182=_0x207b0a[_0x4ac542(0xe5)]('textarea');_0x32a182[_0x4ac542(0xe7)](_0x2f08bb);const _0x55d6a6=()=>{const _0x2815d5=_0x4ac542;_0x207b0a[0x0][_0x2815d5(0x105)](),_0x207b0a[_0x2815d5(0xe9)]();};_0x207b0a[_0x4ac542(0xe5)](_0x4ac542(0x115))['on']('click',()=>{const _0x84056=_0x4ac542,_0x197e0a=_0x32a182['val']();_0x375e35[_0x84056(0x126)]=_0x197e0a,_0x4e0e7d==='jailbreak'?extension_settings[extensionName][_0x429f50]=_0x197e0a:extension_settings[extensionName][_0x4913ee]=_0x197e0a,saveSettings()&&toastr['success']((_0x357d4d==='small'?_0x84056(0xed):_0x84056(0x108))+'的'+_0x4f1a74+_0x84056(0x107)),_0x55d6a6();}),_0x207b0a[_0x4ac542(0xe5)]('.popup-button-cancel')['on'](_0x4ac542(0xcf),_0x55d6a6),_0x207b0a[0x0]['showModal']();});}export function bindHistoriographyEvents(){const _0xa97fd6=_0x3057;console[_0xa97fd6(0x10d)](_0xa97fd6(0xf2)),setupPromptEditor(_0xa97fd6(0x133)),setupPromptEditor(_0xa97fd6(0xf9));const _0x29544a=document[_0xa97fd6(0x132)](_0xa97fd6(0x13f)),_0x4001fc=document[_0xa97fd6(0x132)]('amily2_mhb_small_end_floor'),_0x52c191=document[_0xa97fd6(0x132)](_0xa97fd6(0xf4)),_0x423c3e=document[_0xa97fd6(0x132)]('amily2_mhb_small_auto_enabled'),_0x261f89=document[_0xa97fd6(0x132)]('amily2_mhb_small_trigger_count'),_0x2e692f=document['getElementById'](_0xa97fd6(0xe6)),_0x41c114=document['getElementById'](_0xa97fd6(0x11f));_0x52c191[_0xa97fd6(0xf6)](_0xa97fd6(0xcf),()=>{const _0x191901=_0xa97fd6,_0x2bfb64=parseInt(_0x29544a[_0x191901(0x126)],0xa),_0x57db0b=parseInt(_0x4001fc[_0x191901(0x126)],0xa);if(isNaN(_0x2bfb64)||isNaN(_0x57db0b)||_0x2bfb64<=0x0||_0x57db0b<=0x0||_0x2bfb64>_0x57db0b){toastr[_0x191901(0xe0)](_0x191901(0x121),'圣谕有误');return;}executeManualSummary(_0x2bfb64,_0x57db0b);}),_0x423c3e[_0xa97fd6(0xf6)](_0xa97fd6(0xfa),_0x2480fb=>{const _0x3010cf=_0xa97fd6;extension_settings[extensionName][_0x3010cf(0x124)]=_0x2480fb['target'][_0x3010cf(0x12b)],saveSettings();}),_0x261f89[_0xa97fd6(0xf6)]('change',_0x11f4fc=>{const _0x2c55ac=_0xa97fd6,_0x8fb9b5=parseInt(_0x11f4fc[_0x2c55ac(0x134)][_0x2c55ac(0x126)],0xa);if(isNaN(_0x8fb9b5)||_0x8fb9b5<0x1){_0x11f4fc[_0x2c55ac(0x134)][_0x2c55ac(0x126)]=defaultSettings[_0x2c55ac(0x12c)],toastr[_0x2c55ac(0xd0)]('远征阈值必须是大于0的数字。已重置。',_0x2c55ac(0xe2));return;}extension_settings[extensionName][_0x2c55ac(0x12c)]=_0x8fb9b5,saveSettings();}),_0x2e692f[_0xa97fd6(0xf6)]('change',_0x325384=>{const _0x266e07=_0xa97fd6;extension_settings[extensionName][_0x266e07(0x13d)]=_0x325384[_0x266e07(0x134)][_0x266e07(0x12b)],saveSettings();}),_0x41c114[_0xa97fd6(0xf6)](_0xa97fd6(0xfa),_0x4a9811=>{const _0x3ea7b0=_0xa97fd6;extension_settings[extensionName][_0x3ea7b0(0xec)]=_0x4a9811['target'][_0x3ea7b0(0x12b)],saveSettings();}),_0x423c3e[_0xa97fd6(0x12b)]=extension_settings[extensionName][_0xa97fd6(0x124)]??![],_0x261f89[_0xa97fd6(0x126)]=extension_settings[extensionName][_0xa97fd6(0x12c)]??0x1e,_0x2e692f[_0xa97fd6(0x12b)]=extension_settings[extensionName][_0xa97fd6(0x13d)]??!![],_0x41c114[_0xa97fd6(0x12b)]=extension_settings[extensionName][_0xa97fd6(0xec)]??![];const _0x3b62ac=document[_0xa97fd6(0x132)](_0xa97fd6(0xf7));_0x3b62ac[_0xa97fd6(0x12b)]=extension_settings[extensionName][_0xa97fd6(0xde)]??![],_0x3b62ac['addEventListener']('change',_0x155c06=>{const _0x19213d=_0xa97fd6;extension_settings[extensionName]['historiographyAutoSummaryInteractive']=_0x155c06[_0x19213d(0x134)][_0x19213d(0x12b)],saveSettings();});const _0x161f8a=document[_0xa97fd6(0x132)](_0xa97fd6(0x138)),_0x2760ff=document['getElementById'](_0xa97fd6(0x130)),_0x4227c9=document[_0xa97fd6(0x132)](_0xa97fd6(0x135)),_0x21b0f3=document[_0xa97fd6(0x132)](_0xa97fd6(0x137));_0x161f8a[_0xa97fd6(0x12b)]=extension_settings[extensionName][_0xa97fd6(0xd6)]??![],_0x4227c9[_0xa97fd6(0x126)]=extension_settings[extensionName][_0xa97fd6(0xda)]??'',_0x2760ff[_0xa97fd6(0x111)][_0xa97fd6(0x146)]=_0x161f8a[_0xa97fd6(0x12b)]?_0xa97fd6(0xfb):'none',_0x161f8a[_0xa97fd6(0xf6)](_0xa97fd6(0xfa),_0x343d0f=>{const _0x3447f4=_0xa97fd6,_0x2c531c=_0x343d0f['target']['checked'];extension_settings[extensionName]['historiographyTagExtractionEnabled']=_0x2c531c,_0x2760ff[_0x3447f4(0x111)]['display']=_0x2c531c?_0x3447f4(0xfb):_0x3447f4(0x11a),saveSettings();}),_0x4227c9[_0xa97fd6(0xf6)](_0xa97fd6(0xfa),_0x47841b=>{const _0x91cfa5=_0xa97fd6;extension_settings[extensionName][_0x91cfa5(0xda)]=_0x47841b['target'][_0x91cfa5(0x126)],saveSettings();}),_0x21b0f3[_0xa97fd6(0xf6)](_0xa97fd6(0xcf),showHistoriographyExclusionRulesModal);const _0x4b70c6=document[_0xa97fd6(0x132)]('amily2_mhb_small_expedition_execute'),_0x2b91c3=_0x23687e=>{const _0xa29173=_0xa97fd6;_0x4b70c6[_0xa29173(0x125)][_0xa29173(0x136)]=_0x23687e;switch(_0x23687e){case _0xa29173(0xff):_0x4b70c6[_0xa29173(0x131)]='\x20停止远征',_0x4b70c6['className']=_0xa29173(0x11e);break;case'paused':_0x4b70c6['innerHTML']=_0xa29173(0xd7),_0x4b70c6[_0xa29173(0x147)]=_0xa29173(0x143);break;case'idle':default:_0x4b70c6[_0xa29173(0x131)]='\x20开始远征',_0x4b70c6[_0xa29173(0x147)]=_0xa29173(0xfd);break;}};document['addEventListener']('amily2-expedition-state-change',_0x363607=>{const _0x184f53=_0xa97fd6,{isRunning:_0x445d2c,manualStop:_0x36672e}=_0x363607[_0x184f53(0xea)];if(_0x445d2c)_0x2b91c3(_0x184f53(0xff));else _0x36672e?_0x2b91c3(_0x184f53(0x12e)):_0x2b91c3(_0x184f53(0xd2));}),_0x4b70c6[_0xa97fd6(0xf6)]('click',()=>{const _0x3928c3=_0xa97fd6,_0x6de665=_0x4b70c6[_0x3928c3(0x125)][_0x3928c3(0x136)]||_0x3928c3(0xd2);_0x6de665===_0x3928c3(0xff)?stopExpedition():executeExpedition();}),_0x2b91c3(_0xa97fd6(0xd2));const _0x95d4c2=document['getElementById'](_0xa97fd6(0x140)),_0x550349=document[_0xa97fd6(0x132)](_0xa97fd6(0xdb)),_0x29a2ad=document[_0xa97fd6(0x132)]('amily2_mhb_large_refresh_worldbooks'),_0x52e078=document[_0xa97fd6(0x132)]('amily2_mhb_large_refresh_lores'),_0x69408f=document[_0xa97fd6(0x132)]('amily2_mhb_large_refine_execute'),_0x229a71=async()=>{const _0x16a888=_0xa97fd6;_0x95d4c2[_0x16a888(0x131)]=_0x16a888(0x106);const _0x3e9edb=await getAvailableWorldbooks();_0x95d4c2[_0x16a888(0x131)]='',_0x3e9edb&&_0x3e9edb[_0x16a888(0x10f)]>0x0?(_0x3e9edb[_0x16a888(0x128)](_0x2e6e48=>{const _0xccd4ed=_0x16a888,_0x3c4978=document['createElement'](_0xccd4ed(0x110));_0x3c4978[_0xccd4ed(0x126)]=_0x2e6e48,_0x3c4978[_0xccd4ed(0x12d)]=_0x2e6e48,_0x95d4c2[_0xccd4ed(0x114)](_0x3c4978);}),_0x95d4c2[_0x16a888(0x11b)](new Event(_0x16a888(0xfa)))):_0x95d4c2[_0x16a888(0x131)]='未发现任何国史馆';},_0x7431fa=async()=>{const _0x5aa2a4=_0xa97fd6,_0x1fefce=_0x95d4c2[_0x5aa2a4(0x126)];if(!_0x1fefce){_0x550349['innerHTML']=_0x5aa2a4(0x118);return;}_0x550349['innerHTML']=_0x5aa2a4(0xf5);const _0x5398e3=await getLoresForWorldbook(_0x1fefce);_0x550349[_0x5aa2a4(0x131)]='',_0x5398e3&&_0x5398e3[_0x5aa2a4(0x10f)]>0x0?_0x5398e3[_0x5aa2a4(0x128)](_0x12e664=>{const _0x1aefe9=_0x5aa2a4,_0x4ec6e3=document['createElement'](_0x1aefe9(0x110));_0x4ec6e3[_0x1aefe9(0x126)]=_0x12e664[_0x1aefe9(0x139)],_0x4ec6e3[_0x1aefe9(0x12d)]='['+_0x12e664[_0x1aefe9(0x139)]+']\x20'+_0x12e664['comment'],_0x550349['appendChild'](_0x4ec6e3);}):_0x550349[_0x5aa2a4(0x131)]=_0x5aa2a4(0xf3);};_0x29a2ad[_0xa97fd6(0xf6)](_0xa97fd6(0xcf),_0x229a71),_0x95d4c2[_0xa97fd6(0xf6)](_0xa97fd6(0xfa),_0x7431fa),_0x52e078[_0xa97fd6(0xf6)](_0xa97fd6(0xcf),_0x7431fa),_0x69408f[_0xa97fd6(0xf6)]('click',()=>{const _0x4d17eb=_0xa97fd6,_0x22ae15=_0x95d4c2[_0x4d17eb(0x126)],_0x5786b9=_0x550349['value'];if(!_0x22ae15||!_0x5786b9){toastr[_0x4d17eb(0xe0)](_0x4d17eb(0x103),_0x4d17eb(0x13a));return;}executeRefinement(_0x22ae15,_0x5786b9);});}function showHistoriographyExclusionRulesModal(){const _0x48465b=_0x3057,_0x2ea5b8=extension_settings[extensionName]['historiographyExclusionRules']||[],_0x18ea12=(_0x2bdf43={'start':'','end':''},_0xe8f9a2)=>'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20×\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20',_0x46f216=_0x2ea5b8[_0x48465b(0xd1)](_0x18ea12)[_0x48465b(0x113)](''),_0x5adfbb=_0x48465b(0xef)+_0x46f216+_0x48465b(0xf0);showHtmlModal(_0x48465b(0x117),_0x5adfbb,{'okText':_0x48465b(0x116),'onOk':_0x3cdc7b=>{const _0x11aa83=_0x48465b,_0xe3ccb8=[];_0x3cdc7b[_0x11aa83(0xe5)](_0x11aa83(0x104))[_0x11aa83(0x141)](function(){const _0x2b10fa=_0x11aa83,_0x41604d=$(this)[_0x2b10fa(0xe5)]('input')['eq'](0x0)[_0x2b10fa(0xe7)]()[_0x2b10fa(0xfe)](),_0x122f43=$(this)[_0x2b10fa(0xe5)](_0x2b10fa(0x10c))['eq'](0x1)['val']()[_0x2b10fa(0xfe)]();_0x41604d&&_0x122f43&&_0xe3ccb8['push']({'start':_0x41604d,'end':_0x122f43});}),extension_settings[extensionName]['historiographyExclusionRules']=_0xe3ccb8,saveSettings(),toastr[_0x11aa83(0x123)]('内容排除规则已保存。',_0x11aa83(0x127));}});const _0x1ac6e7=document[_0x48465b(0x132)](_0x48465b(0xd8)),_0x34cd72=_0x1ac6e7[_0x48465b(0x12a)](_0x48465b(0xd3));_0x1ac6e7[_0x48465b(0x12a)](_0x48465b(0x109))[_0x48465b(0xf6)]('click',()=>{const _0x4d7fea=_0x48465b,_0xf03565=_0x34cd72['children']['length'],_0x32247e=_0x18ea12({'start':'','end':''},_0xf03565);_0x34cd72[_0x4d7fea(0x11d)](_0x4d7fea(0xf1),_0x32247e);}),_0x34cd72['addEventListener'](_0x48465b(0xcf),_0x5a50f0=>{const _0x937f93=_0x48465b;_0x5a50f0[_0x937f93(0x134)][_0x937f93(0xfc)][_0x937f93(0xd5)](_0x937f93(0x102))&&_0x5a50f0[_0x937f93(0x134)]['closest']('.hly-exclusion-rule-row')[_0x937f93(0xe9)]();});} +import { extension_settings } from "/scripts/extensions.js"; +import { + extensionName, + defaultSettings, + saveSettings, +} from "../utils/settings.js"; +import { showHtmlModal } from './page-window.js'; +import { applyExclusionRules, extractBlocksByTags } from '../core/utils/rag-tag-extractor.js'; + +import { + getAvailableWorldbooks, getLoresForWorldbook, + executeManualSummary, executeRefinement, + executeExpedition, stopExpedition // 【新】停战钦差已就位! +} from "../core/historiographer.js"; + + +// 一个辅助函数,用于处理两个谕旨编辑器的通用逻辑 +function setupPromptEditor(type) { + const selector = document.getElementById( + `amily2_mhb_${type}_prompt_selector`, + ); + const editor = document.getElementById(`amily2_mhb_${type}_editor`); + const saveBtn = document.getElementById(`amily2_mhb_${type}_save_button`); + const restoreBtn = document.getElementById( + `amily2_mhb_${type}_restore_button`, + ); + + // 我们需要从主设置对象中读取这些真实、隐藏的提示词 + const jailbreakKey = + type === "small" + ? "historiographySmallJailbreakPrompt" + : "historiographyLargeJailbreakPrompt"; + const mainPromptKey = + type === "small" + ? "historiographySmallSummaryPrompt" + : "historiographyLargeRefinePrompt"; + + // 更新编辑器内容以匹配选择 + const updateEditorView = () => { + const selected = selector.value; + if (selected === "jailbreak") { + editor.value = extension_settings[extensionName][jailbreakKey]; + } else { + editor.value = extension_settings[extensionName][mainPromptKey]; + } + }; + + // 事件监听 + selector.addEventListener("change", updateEditorView); + + saveBtn.addEventListener("click", () => { + const selected = selector.value; + if (selected === "jailbreak") { + extension_settings[extensionName][jailbreakKey] = editor.value; + } else { + extension_settings[extensionName][mainPromptKey] = editor.value; + } + if (saveSettings()) { + toastr.success( + `${type === "small" ? "微言录" : "宏史卷"}的${selected === "jailbreak" ? "破限谕旨" : "纲要"}已保存!`, + ); + } + }); + + restoreBtn.addEventListener("click", () => { + const selected = selector.value; + if (selected === "jailbreak") { + editor.value = defaultSettings[jailbreakKey]; + } else { + editor.value = defaultSettings[mainPromptKey]; + } + toastr.info("已恢复为默认谕旨,请点击“保存当前”以确认。"); + }); + + // 初始化视图 + updateEditorView(); + +//=======【从这里开始新增】======= + + // 【最终圣谕:为“展开谕旨”按钮注入灵魂】 + const expandBtn = document.getElementById(`amily2_mhb_${type}_expand_editor`); + + expandBtn.addEventListener('click', () => { + const selectedValue = selector.value; + const selectedText = selector.options[selector.selectedIndex].text; // 获取"破限谕旨"或"敕史纲要" + const currentContent = editor.value; + + const dialogHtml = ` + + + `; + + const dialogElement = $(dialogHtml).appendTo('body'); + const dialogTextarea = dialogElement.find('textarea'); + dialogTextarea.val(currentContent); + + const closeDialog = () => { dialogElement[0].close(); dialogElement.remove(); }; + + dialogElement.find('.popup-button-ok').on('click', () => { + const newContent = dialogTextarea.val(); + // 1. 将新内容更新回我们小小的编辑器 + editor.value = newContent; + + // 2.【核心】调用我们已有的保存逻辑,将改动真正写入帝国法典 + if (selectedValue === "jailbreak") { + extension_settings[extensionName][jailbreakKey] = newContent; + } else { + extension_settings[extensionName][mainPromptKey] = newContent; + } + if (saveSettings()) { + toastr.success(`${type === 'small' ? '微言录' : '宏史卷'}的${selectedText}已镌刻!`); + } + + // 3. 关闭这个弹出窗口 + closeDialog(); + }); + + dialogElement.find('.popup-button-cancel').on('click', closeDialog); + dialogElement[0].showModal(); + }); + +} + +// 帝国【敕史局工部】的主体 +// 帝国【敕史局工部】的主体 (已全面升级) +export function bindHistoriographyEvents() { + console.log("[Amily2号-工部] 【敕史局】的专属工匠已就位..."); + + setupPromptEditor("small"); + setupPromptEditor("large"); + + // ========== 📜 微言录 (Small Summary) 绑定 (无改动) ========== + const smallStartFloor = document.getElementById("amily2_mhb_small_start_floor"); + const smallEndFloor = document.getElementById("amily2_mhb_small_end_floor"); + const smallExecuteBtn = document.getElementById("amily2_mhb_small_manual_execute"); + const smallAutoEnable = document.getElementById("amily2_mhb_small_auto_enabled"); + const smallTriggerThreshold = document.getElementById("amily2_mhb_small_trigger_count"); + const writeToLorebook = document.getElementById("historiography_write_to_lorebook"); + const ingestToRag = document.getElementById("historiography_ingest_to_rag"); + + smallExecuteBtn.addEventListener("click", () => { + const start = parseInt(smallStartFloor.value, 10); + const end = parseInt(smallEndFloor.value, 10); + if (isNaN(start) || isNaN(end) || start <= 0 || end <= 0 || start > end) { + toastr.error("请输入有效的起始和结束楼层!", "圣谕有误"); + return; + } + executeManualSummary(start, end); + }); + + smallAutoEnable.addEventListener("change", (event) => { + extension_settings[extensionName].historiographySmallAutoEnable = event.target.checked; + saveSettings(); + }); + + smallTriggerThreshold.addEventListener("change", (event) => { + const value = parseInt(event.target.value, 10); + if (isNaN(value) || value < 1) { + // 如果输入无效,则从默认设置中恢复,而不是硬编码 + event.target.value = defaultSettings.historiographySmallTriggerThreshold; + toastr.warning("远征阈值必须是大于0的数字。已重置。", "圣谕有误"); + return; // 阻止保存无效值 + } + extension_settings[extensionName].historiographySmallTriggerThreshold = value; + saveSettings(); + }); + + writeToLorebook.addEventListener("change", (event) => { + extension_settings[extensionName].historiographyWriteToLorebook = event.target.checked; + saveSettings(); + }); + + ingestToRag.addEventListener("change", (event) => { + extension_settings[extensionName].historiographyIngestToRag = event.target.checked; + saveSettings(); + }); + + // 初始化加载设置 + smallAutoEnable.checked = extension_settings[extensionName].historiographySmallAutoEnable ?? false; + smallTriggerThreshold.value = extension_settings[extensionName].historiographySmallTriggerThreshold ?? 30; + writeToLorebook.checked = extension_settings[extensionName].historiographyWriteToLorebook ?? true; + ingestToRag.checked = extension_settings[extensionName].historiographyIngestToRag ?? false; + + // 【新增】为“交互式巡录”开关注入灵魂 + const autoSummaryInteractive = document.getElementById("historiography_auto_summary_interactive"); + autoSummaryInteractive.checked = extension_settings[extensionName].historiographyAutoSummaryInteractive ?? false; + autoSummaryInteractive.addEventListener("change", (event) => { + extension_settings[extensionName].historiographyAutoSummaryInteractive = event.target.checked; + saveSettings(); + }); + + // ========== 🏷️ 标签与排除规则绑定 (新增) ========== + const tagExtractionToggle = document.getElementById("historiography-tag-extraction-toggle"); + const tagInputContainer = document.getElementById("historiography-tag-input-container"); + const tagInput = document.getElementById("historiography-tag-input"); + const exclusionRulesBtn = document.getElementById("historiography-exclusion-rules-btn"); + + // 加载设置 + tagExtractionToggle.checked = extension_settings[extensionName].historiographyTagExtractionEnabled ?? false; + tagInput.value = extension_settings[extensionName].historiographyTags ?? ''; + tagInputContainer.style.display = tagExtractionToggle.checked ? 'block' : 'none'; + + // 绑定事件 + tagExtractionToggle.addEventListener("change", (event) => { + const isEnabled = event.target.checked; + extension_settings[extensionName].historiographyTagExtractionEnabled = isEnabled; + tagInputContainer.style.display = isEnabled ? 'block' : 'none'; + saveSettings(); + }); + + tagInput.addEventListener("change", (event) => { + extension_settings[extensionName].historiographyTags = event.target.value; + saveSettings(); + }); + + exclusionRulesBtn.addEventListener("click", showHistoriographyExclusionRulesModal); + + + // ========== ⚔️ 远征指挥台 (Expedition Command) 绑定 (核心升级区) ========== + const expeditionExecuteBtn = document.getElementById("amily2_mhb_small_expedition_execute"); + + // 【新】百变神兵:一个专门负责更新指挥按钮状态的函数 + const updateExpeditionButtonUI = (state) => { + expeditionExecuteBtn.dataset.state = state; // 将当前状态记录在按钮上 + switch (state) { + case 'running': + expeditionExecuteBtn.innerHTML = ' 停止远征'; + expeditionExecuteBtn.className = 'menu_button small_button interactable danger'; // 更换为“危险”的红色战旗 + break; + case 'paused': + expeditionExecuteBtn.innerHTML = ' 继续远征'; + expeditionExecuteBtn.className = 'menu_button small_button interactable success'; // 更换为“希望”的绿色战旗 + break; + case 'idle': + default: + expeditionExecuteBtn.innerHTML = ' 开始远征'; + expeditionExecuteBtn.className = 'menu_button small_button interactable'; // 恢复默认战旗 (紫色) + break; + } + }; + + // 【新】顺风之耳:监听来自【大史官】的帝国广播,实时更新UI + document.addEventListener('amily2-expedition-state-change', (e) => { + const { isRunning, manualStop } = e.detail; + if (isRunning) { + updateExpeditionButtonUI('running'); + } else if (manualStop) { + updateExpeditionButtonUI('paused'); + } else { + updateExpeditionButtonUI('idle'); + } + }); + + // 【新】智能核心:指挥按钮现在拥有了判断战局的能力 + expeditionExecuteBtn.addEventListener("click", () => { + const currentState = expeditionExecuteBtn.dataset.state || 'idle'; + if (currentState === 'running') { + stopExpedition(); // 如果正在打仗,就派钦差去叫停 + } else { + executeExpedition(); // 否则,就命令战争大臣开战或继续 + } + }); + + // 【初始仪仗】确保每次进入殿堂时,按钮都处于正确的“开始远征”状态 + updateExpeditionButtonUI('idle'); + + // ========== 💎 宏史卷 (史册精炼) 绑定 ========== + const largeWbSelector = document.getElementById( + "amily2_mhb_large_worldbook_selector", + ); + const largeLoreSelector = document.getElementById( + "amily2_mhb_large_lore_selector", + ); + const largeRefreshWbBtn = document.getElementById( + "amily2_mhb_large_refresh_worldbooks", + ); + const largeRefreshLoresBtn = document.getElementById( + "amily2_mhb_large_refresh_lores", + ); + const largeRefineBtn = document.getElementById( + "amily2_mhb_large_refine_execute", + ); + + const updateWorldbookList = async () => { + largeWbSelector.innerHTML = ''; + const worldbooks = await getAvailableWorldbooks(); + largeWbSelector.innerHTML = ""; // 清空 + if (worldbooks && worldbooks.length > 0) { + worldbooks.forEach((wb) => { + const option = document.createElement("option"); + option.value = wb; + option.textContent = wb; + largeWbSelector.appendChild(option); + }); + // 自动触发一次change来加载第一个世界书的条目 + largeWbSelector.dispatchEvent(new Event("change")); + } else { + largeWbSelector.innerHTML = ''; + } + }; + + const updateLoreList = async () => { + const selectedWb = largeWbSelector.value; + if (!selectedWb) { + largeLoreSelector.innerHTML = ''; + return; + } + largeLoreSelector.innerHTML = ''; + const lores = await getLoresForWorldbook(selectedWb); + largeLoreSelector.innerHTML = ""; // 清空 + if (lores && lores.length > 0) { + lores.forEach((lore) => { + const option = document.createElement("option"); + option.value = lore.key; + option.textContent = `[${lore.key}] ${lore.comment}`; + largeLoreSelector.appendChild(option); + }); + } else { + largeLoreSelector.innerHTML = ''; + } + }; + + largeRefreshWbBtn.addEventListener("click", updateWorldbookList); + largeWbSelector.addEventListener("change", updateLoreList); + largeRefreshLoresBtn.addEventListener("click", updateLoreList); + + largeRefineBtn.addEventListener("click", () => { + const worldbook = largeWbSelector.value; + const loreKey = largeLoreSelector.value; + if (!worldbook || !loreKey) { + toastr.error("请先选择一个国史馆及其中的史册条目!", "圣谕不全"); + return; + } + // 调用未来的【大史官】执行精炼任务 + executeRefinement(worldbook, loreKey); + }); +} + + +/** + * 【新增】显示和编辑史官内容排除规则的弹窗 + */ +function showHistoriographyExclusionRulesModal() { + const rules = extension_settings[extensionName].historiographyExclusionRules || []; + + const createRuleRowHtml = (rule = { start: '', end: '' }, index) => ` +
+ + + + +
+ `; + + const rulesHtml = rules.map(createRuleRowHtml).join(''); + + const modalHtml = ` +
+

在这里定义需要从提取内容中排除的文本片段。例如,排除HTML注释,可以设置开始字符为 \`\`。

+
${rulesHtml}
+ +
+ + `; + + showHtmlModal('编辑内容排除规则', modalHtml, { + okText: '保存规则', + onOk: (dialogElement) => { + const newRules = []; + dialogElement.find('.hly-exclusion-rule-row').each(function() { + const start = $(this).find('input').eq(0).val().trim(); + const end = $(this).find('input').eq(1).val().trim(); + if (start && end) { + newRules.push({ start, end }); + } + }); + extension_settings[extensionName].historiographyExclusionRules = newRules; + saveSettings(); + toastr.success('内容排除规则已保存。', '圣旨已达'); + } + }); + + const modalContent = document.getElementById('historiography-exclusion-rules-container'); + const rulesList = modalContent.querySelector('#historiography-rules-list'); + + modalContent.querySelector('#historiography-add-rule-btn').addEventListener('click', () => { + const newIndex = rulesList.children.length; + const newRowHtml = createRuleRowHtml({ start: '', end: '' }, newIndex); + rulesList.insertAdjacentHTML('beforeend', newRowHtml); + }); + + rulesList.addEventListener('click', (event) => { + if (event.target.classList.contains('hly-delete-rule-btn')) { + event.target.closest('.hly-exclusion-rule-row').remove(); + } + }); +} diff --git a/ui/page-window.js b/ui/page-window.js index 36c06f9..45024b7 100644 --- a/ui/page-window.js +++ b/ui/page-window.js @@ -1 +1,183 @@ -(function(_0x2244d9,_0x1c25c3){const _0x4d5830=_0x47ac,_0x35f7fa=_0x2244d9();while(!![]){try{const _0x5a9986=-parseInt(_0x4d5830(0xe2))/0x1+-parseInt(_0x4d5830(0xeb))/0x2+-parseInt(_0x4d5830(0xf6))/0x3+parseInt(_0x4d5830(0xfa))/0x4*(-parseInt(_0x4d5830(0xd8))/0x5)+-parseInt(_0x4d5830(0xea))/0x6*(parseInt(_0x4d5830(0xe5))/0x7)+-parseInt(_0x4d5830(0xec))/0x8*(parseInt(_0x4d5830(0xe0))/0x9)+parseInt(_0x4d5830(0xd3))/0xa;if(_0x5a9986===_0x1c25c3)break;else _0x35f7fa['push'](_0x35f7fa['shift']());}catch(_0x23a1be){_0x35f7fa['push'](_0x35f7fa['shift']());}}}(_0x51ac,0x86fcf));import{messageFormatting}from'/script.js';function _0x51ac(){const _0x2576c2=['error','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','onload','appendChild','3615155BNyAfG','','showModal','head','makeHtml','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','5310981oOCYWF','click','253375afPzxV','\x0a\x20\x20\x20\x20','onerror','4669yQluuG','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',']\x20时发生意外:','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','1794AFfHpi','222526TVuXSt','8lfVLDX','','取消写入','[Amily-翰林院]\x20紧急报告:加载教程内容\x20[','.popup-controls','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20朕已阅\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','get','body','showdown','74064vkjKZQ','createElement','remove','预览与修订','4knUCDx','翰林院回报','close','重新生成','\x0a\x20\x20\x20\x20\x20\x20\x20\x20','find','.popup-button-cancel','.popup-button-ok','Converter','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','message','24548100QBqlOv'];_0x51ac=function(){return _0x2576c2;};return _0x51ac();}function loadShowdown(){return new Promise((_0x26cadb,_0x57c134)=>{const _0x158d58=_0x47ac;if(window[_0x158d58(0xf5)]){_0x26cadb();return;}const _0xb473a0=document[_0x158d58(0xf7)]('script');_0xb473a0['src']=_0x158d58(0xde),_0xb473a0[_0x158d58(0xd6)]=_0x26cadb,_0xb473a0[_0x158d58(0xe4)]=_0x57c134,document[_0x158d58(0xdb)][_0x158d58(0xd7)](_0xb473a0);});}export async function showContentModal(_0x2369f1,_0x332aad){const _0x46aca8=_0x47ac;try{await loadShowdown();const _0x5426c0=await $[_0x46aca8(0xf3)](_0x332aad),_0xbcfe03=new showdown[(_0x46aca8(0x102))]({'tables':!![],'strikethrough':!![],'ghCodeBlocks':!![]}),_0x2135c6=_0xbcfe03[_0x46aca8(0xdc)](_0x5426c0),_0x52ec25=_0x46aca8(0x103)+_0x2369f1+_0x46aca8(0xe6)+_0x2135c6+_0x46aca8(0xf1),_0x47b62b=$(_0x52ec25)['appendTo'](_0x46aca8(0xf4)),_0x45db6c=()=>{const _0x2f7883=_0x46aca8;_0x47b62b[0x0]['close'](),_0x47b62b[_0x2f7883(0xf8)]();};_0x47b62b[_0x46aca8(0xff)](_0x46aca8(0x101))['on'](_0x46aca8(0xe1),_0x45db6c),_0x47b62b[0x0][_0x46aca8(0xda)]();}catch(_0x826ebb){console[_0x46aca8(0xd4)](_0x46aca8(0xef)+_0x2369f1+_0x46aca8(0xe7),_0x826ebb),toastr[_0x46aca8(0xd4)]('无法加载教程:\x20'+_0x826ebb[_0x46aca8(0xd2)],_0x46aca8(0xfb));}}export function showHtmlModal(_0x3e6bbf,_0x4124c8,_0x53fdb4={}){const _0x4b5f47=_0x47ac,{okText:okText='确认',cancelText:cancelText='取消',onOk:_0x49ce93,onCancel:_0x4b636b,showCancel:showCancel=!![]}=_0x53fdb4,_0x44cf1f='\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(showCancel?_0x4b5f47(0xd9)+cancelText+_0x4b5f47(0xed):'')+_0x4b5f47(0xfe)+okText+_0x4b5f47(0xe3),_0x485c6a=_0x4b5f47(0xd5)+_0x3e6bbf+_0x4b5f47(0xf2)+_0x4124c8+_0x4b5f47(0xdd)+_0x44cf1f+_0x4b5f47(0xe8),_0x1efeeb=$(_0x485c6a)['appendTo'](_0x4b5f47(0xf4)),_0x993b2b=()=>{const _0x9d83ae=_0x4b5f47;_0x1efeeb[0x0][_0x9d83ae(0xfc)](),_0x1efeeb[_0x9d83ae(0xf8)]();};return _0x1efeeb['find']('.popup-button-ok')['on'](_0x4b5f47(0xe1),()=>{if(_0x49ce93){const _0xbfc564=_0x49ce93(_0x1efeeb);_0xbfc564!==![]&&_0x993b2b();}else _0x993b2b();}),showCancel&&_0x1efeeb[_0x4b5f47(0xff)](_0x4b5f47(0x100))['on'](_0x4b5f47(0xe1),()=>{_0x4b636b&&_0x4b636b(),_0x993b2b();}),_0x1efeeb[0x0]['showModal'](),_0x1efeeb;}function _0x47ac(_0x52fe2b,_0x50f637){const _0x51ac57=_0x51ac();return _0x47ac=function(_0x47ac7d,_0x255d4a){_0x47ac7d=_0x47ac7d-0xd2;let _0x2489ab=_0x51ac57[_0x47ac7d];return _0x2489ab;},_0x47ac(_0x52fe2b,_0x50f637);}export function showSummaryModal(_0x366504,_0xc1b867){const _0x18e39e=_0x47ac,{onConfirm:_0x1a0975,onRegenerate:_0xf0eb44,onCancel:_0x50fb26}=_0xc1b867,_0x7b2aca=_0x18e39e(0xe9)+_0x366504+_0x18e39e(0xdf),_0x374c30=showHtmlModal(_0x18e39e(0xf9),_0x7b2aca,{'okText':'确认写入','cancelText':_0x18e39e(0xee),'showCancel':!![],'onOk':_0x438983=>{const _0x42ae18=_0x18e39e,_0x5476ca=_0x438983[_0x42ae18(0xff)]('textarea')['val']();_0x1a0975&&_0x1a0975(_0x5476ca);},'onCancel':()=>{_0x50fb26&&_0x50fb26();}}),_0x130181=$(_0x18e39e(0xfd));_0x130181['on'](_0x18e39e(0xe1),()=>{_0xf0eb44&&_0xf0eb44(_0x374c30);}),_0x374c30[_0x18e39e(0xff)](_0x18e39e(0xf0))['prepend'](_0x130181);} +import { messageFormatting } from '/script.js'; + +// 动态加载 Showdown.js 解析器 +function loadShowdown() { + return new Promise((resolve, reject) => { + if (window.showdown) { + resolve(); + return; + } + const script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/showdown/2.1.0/showdown.min.js'; + script.onload = resolve; + script.onerror = reject; + document.head.appendChild(script); + }); +} + +/** + * 创建并显示一个包含从URL加载的Markdown内容的模态弹窗。 + * @param {string} title - 弹窗的标题。 + * @param {string} contentUrl - 要加载的Markdown文件的URL。 + */ +export async function showContentModal(title, contentUrl) { + try { + // 确保Showdown库已加载 + await loadShowdown(); + + // 异步获取Markdown文件内容 + const markdownContent = await $.get(contentUrl); + + // 使用Showdown将Markdown转换为HTML,并开启表格等扩展 + const converter = new showdown.Converter({ + tables: true, + strikethrough: true, + ghCodeBlocks: true + }); + const htmlContent = converter.makeHtml(markdownContent); + + // 创建弹窗的HTML结构,复用更新日志的样式 + const dialogHtml = ` + + + `; + + // 将弹窗添加到body并显示 + const dialogElement = $(dialogHtml).appendTo('body'); + const closeDialog = () => { + dialogElement[0].close(); + dialogElement.remove(); + }; + dialogElement.find('.popup-button-ok').on('click', closeDialog); + dialogElement[0].showModal(); + + } catch (error) { + console.error(`[Amily-翰林院] 紧急报告:加载教程内容 [${title}] 时发生意外:`, error); + toastr.error(`无法加载教程: ${error.message}`, "翰林院回报"); + } +} + +/** + * 创建并显示一个包含自定义HTML内容的模态弹窗,并提供回调功能。 + * @param {string} title - 弹窗的标题。 + * @param {string} htmlContent - 要在弹窗中显示的HTML字符串。 + * @param {Object} [options={}] - 配置选项 + * @param {string} [options.okText='确认'] - “确认”按钮的文本。 + * @param {string} [options.cancelText='取消'] - “取消”按钮的文本。 + * @param {function} [options.onOk] - 点击“确认”按钮时执行的回调函数。接收弹窗的jQuery元素作为参数。 + * @param {function} [options.onCancel] - 点击“取消”按钮时执行的回调函数。 + * @param {boolean} [options.showCancel=true] - 是否显示“取消”按钮。 + */ +export function showHtmlModal(title, htmlContent, options = {}) { + const { + okText = '确认', + cancelText = '取消', + onOk, + onCancel, + showCancel = true, + } = options; + + // 构建按钮HTML + const buttonsHtml = ` + ${showCancel ? `` : ''} + + `; + + const dialogHtml = ` + + + `; + + const dialogElement = $(dialogHtml).appendTo('body'); + + const closeDialog = () => { + dialogElement[0].close(); + dialogElement.remove(); + }; + + dialogElement.find('.popup-button-ok').on('click', () => { + if (onOk) { + // 将关闭逻辑交给回调函数决定,或者默认关闭 + const shouldClose = onOk(dialogElement); + if (shouldClose !== false) { + closeDialog(); + } + } else { + closeDialog(); + } + }); + + if (showCancel) { + dialogElement.find('.popup-button-cancel').on('click', () => { + if (onCancel) { + onCancel(); + } + closeDialog(); + }); + } + + dialogElement[0].showModal(); + return dialogElement; // 返回弹窗元素以便外部可以操作 +} + +/** + * 创建并显示一个用于预览和编辑微言录总结的模态弹窗。 + * @param {string} summaryText - 初始的总结文本。 + * @param {Object} callbacks - 包含各个按钮回调函数的对象。 + * @param {function} callbacks.onConfirm - 点击“确认写入”时的回调,接收编辑后的文本。 + * @param {function} callbacks.onRegenerate - 点击“重新生成”时的回调。 + * @param {function} callbacks.onCancel - 点击“取消写入”时的回调。 + */ +export function showSummaryModal(summaryText, callbacks) { + const { onConfirm, onRegenerate, onCancel } = callbacks; + + const modalHtml = ` +
+ +
+ `; + + const dialogElement = showHtmlModal('预览与修订', modalHtml, { + okText: '确认写入', + cancelText: '取消写入', + showCancel: true, + onOk: (dialog) => { + const editedText = dialog.find('textarea').val(); + if (onConfirm) { + onConfirm(editedText); + } + // 返回 true 或 undefined 以关闭弹窗 + }, + onCancel: () => { + if (onCancel) { + onCancel(); + } + } + }); + + // 添加“重新生成”按钮 + const regenerateButton = $(''); + regenerateButton.on('click', () => { + if (onRegenerate) { + onRegenerate(dialogElement); // 将弹窗元素传递给回调,以便更新内容 + } + }); + + dialogElement.find('.popup-controls').prepend(regenerateButton); +} diff --git a/ui/state.js b/ui/state.js index 2bc4cf9..167a86f 100644 --- a/ui/state.js +++ b/ui/state.js @@ -1 +1,149 @@ -(function(_0x201485,_0x2850d5){const _0x168421=_0x4dbc,_0x183abd=_0x201485();while(!![]){try{const _0x5161d3=parseInt(_0x168421(0xf9))/0x1+parseInt(_0x168421(0xb6))/0x2*(-parseInt(_0x168421(0xe4))/0x3)+parseInt(_0x168421(0xdf))/0x4+-parseInt(_0x168421(0xbd))/0x5*(-parseInt(_0x168421(0xdd))/0x6)+-parseInt(_0x168421(0xf8))/0x7+parseInt(_0x168421(0xf0))/0x8*(-parseInt(_0x168421(0xe1))/0x9)+-parseInt(_0x168421(0xac))/0xa*(-parseInt(_0x168421(0xfa))/0xb);if(_0x5161d3===_0x2850d5)break;else _0x183abd['push'](_0x183abd['shift']());}catch(_0x17a26a){_0x183abd['push'](_0x183abd['shift']());}}}(_0x1dc4,0x2018e));function _0x1dc4(){const _0x15c44a=['historiographySmallTriggerThreshold','#amily2_worldbook_enabled','\x20个可用模型','val','length','show','65OudUQb','mainPrompt','systemPrompt','temperature','iconLocation','contextMessages','#amily2_summarization_prompt','historiographySmallAutoEnable','outputFormatPrompt','loreDepth','#amily2_summarization_enabled','#amily2_lore_depth_input','maxTokens','autoHideEnabled','prop','#amily2_context_messages','selected','#amily2_api_key','#amily2_context_messages_value','optimizationEnabled','model','at_depth','已选择:\x20','checked','autoHideThreshold','input[name=\x22amily2_icon_location\x22][value=\x22','showOptimizationToast','optimizationTargetTag','请检查API配置后点击\x22刷新模型\x22','','hide','html','36486YLyMzZ','forEach','132396gDDUXy','summarizationPrompt','108hPwcGb','已加载\x20','#amily2_system_prompt','5895chJYPJ','worldbookEnabled','#auth_panel','loreInsertionPosition','empty','#amily2_mhb_small_trigger_count','.plugin-features','#amily2_main_prompt','#amily2_auto_hide_threshold_value','#amily2_model','无可用模型,请刷新','#amily2_lore_activation_mode','57864nXdzGU','','text','#amily2_update_indicator','--\x20选择模型\x20--','#amily2_optimization_target_tag','#amily2_temperature_value','#amily2_lore_insertion_position','1785126cOPSmy','89067QXoHxk','1550395Lnnzxl','#amily2_lore_depth_container','#amily2_enabled','#amily2_auto_hide_threshold','apiUrl','input[name=\x22amily2_lorebook_target\x22][value=\x22','#amily2_show_optimization_toast','#amily2_update_button_new','summarizationEnabled','20kFoIDc','#amily2_optimization_enabled','#amily2_suppress_toast','append','suppressToast','loreActivationMode','#amily2_output_format_prompt','#amily2_max_tokens','optimizationExclusionEnabled','#amily2_optimization_exclusion_enabled','10AIXWLs'];_0x1dc4=function(){return _0x15c44a;};return _0x1dc4();}import{extension_settings}from'/scripts/extensions.js';import{extensionName}from'../utils/settings.js';import{pluginAuthStatus}from'../utils/auth.js';let availableModels=[],latestUpdateInfo=null,newVersionAvailable=![];function _0x4dbc(_0xa86568,_0x3a4b6){const _0x1dc42b=_0x1dc4();return _0x4dbc=function(_0x4dbc2d,_0xfff98a){_0x4dbc2d=_0x4dbc2d-0xaa;let _0x5aa421=_0x1dc42b[_0x4dbc2d];return _0x5aa421;},_0x4dbc(_0xa86568,_0x3a4b6);}export function setUpdateInfo(_0x4f4dc6,_0x1a76c9){newVersionAvailable=_0x4f4dc6,latestUpdateInfo=_0x1a76c9;}export function applyUpdateIndicator(){const _0x163aee=_0x4dbc;newVersionAvailable?($('#amily2_update_indicator')[_0x163aee(0xbc)](),$(_0x163aee(0xaa))[_0x163aee(0xbc)]()):($(_0x163aee(0xf3))['hide'](),$('#amily2_update_button_new')[_0x163aee(0xdb)]());}export function getLatestUpdateInfo(){return latestUpdateInfo;}export function setAvailableModels(_0x266c9e){availableModels=_0x266c9e;}export function populateModelDropdown(){const _0x22cd3c=_0x4dbc,_0x72d76b=$('#amily2_model'),_0x173f9b=$('#amily2_model_notes');_0x72d76b[_0x22cd3c(0xe8)]();const _0x47cd49=extension_settings[extensionName]?.[_0x22cd3c(0xd1)]||'';if(availableModels['length']===0x0){_0x72d76b[_0x22cd3c(0xaf)](_0x22cd3c(0xee)),_0x173f9b[_0x22cd3c(0xdc)](_0x22cd3c(0xd9));return;}const _0x4270ba=$(_0x22cd3c(0xf1))[_0x22cd3c(0xba)]('')[_0x22cd3c(0xf2)](_0x22cd3c(0xf4));_0x72d76b[_0x22cd3c(0xaf)](_0x4270ba),availableModels[_0x22cd3c(0xde)](_0x332190=>{const _0x14a94c=_0x22cd3c,_0x51a75e=$('')[_0x14a94c(0xba)](_0x332190)[_0x14a94c(0xf2)](_0x332190);_0x332190===_0x47cd49&&_0x51a75e['attr'](_0x14a94c(0xcd),_0x14a94c(0xcd)),_0x72d76b[_0x14a94c(0xaf)](_0x51a75e);}),_0x47cd49&&_0x72d76b['val']()===_0x47cd49?_0x173f9b[_0x22cd3c(0xdc)](_0x22cd3c(0xd3)+_0x47cd49+_0x22cd3c(0xda)):_0x173f9b[_0x22cd3c(0xdc)](_0x22cd3c(0xe2)+availableModels[_0x22cd3c(0xbb)]+_0x22cd3c(0xb9));}export function updateUI(){const _0x2f94cc=_0x4dbc;if(!pluginAuthStatus['authorized'])$(_0x2f94cc(0xe6))[_0x2f94cc(0xbc)](),$(_0x2f94cc(0xea))[_0x2f94cc(0xdb)]();else{$(_0x2f94cc(0xe6))[_0x2f94cc(0xdb)](),$('.plugin-features')[_0x2f94cc(0xbc)]();const _0x1752a3=extension_settings[extensionName];if(!_0x1752a3)return;$(_0x2f94cc(0xfc))[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3['enabled']),$('#amily2_api_url')['val'](_0x1752a3[_0x2f94cc(0xfe)]),$(_0x2f94cc(0xce))[_0x2f94cc(0xba)](_0x1752a3['apiKey']),$(_0x2f94cc(0xed))[_0x2f94cc(0xba)](_0x1752a3['model']),$(_0x2f94cc(0xb3))['val'](_0x1752a3[_0x2f94cc(0xc9)]),$('#amily2_max_tokens_value')[_0x2f94cc(0xf2)](_0x1752a3['maxTokens']),$('#amily2_temperature')[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xc0)]),$(_0x2f94cc(0xf6))[_0x2f94cc(0xf2)](_0x1752a3[_0x2f94cc(0xc0)]),$(_0x2f94cc(0xcc))['val'](_0x1752a3[_0x2f94cc(0xc2)]),$(_0x2f94cc(0xcf))[_0x2f94cc(0xf2)](_0x1752a3[_0x2f94cc(0xc2)]),$(_0x2f94cc(0xf5))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xd8)]),$('input[name=\x22amily2_optimization_mode\x22][value=\x22'+_0x1752a3['optimizationMode']+'\x22]')[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),!![]),$(_0x2f94cc(0xad))[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3[_0x2f94cc(0xd0)]),$(_0x2f94cc(0xb5))[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3[_0x2f94cc(0xb4)]),$(_0x2f94cc(0x100))[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3[_0x2f94cc(0xd7)]),$(_0x2f94cc(0xae))[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3[_0x2f94cc(0xb0)]),$(_0x2f94cc(0xe3))['val'](_0x1752a3[_0x2f94cc(0xbf)]),$(_0x2f94cc(0xeb))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xbe)]),$(_0x2f94cc(0xb2))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xc5)]),$(_0x2f94cc(0xc3))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xe0)]),$(_0x2f94cc(0xb8))[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3[_0x2f94cc(0xe5)]),$(_0x2f94cc(0xc7))[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3[_0x2f94cc(0xab)]),$(_0x2f94cc(0xff)+_0x1752a3['lorebookTarget']+'\x22]')[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),!![]),$(_0x2f94cc(0xd6)+_0x1752a3[_0x2f94cc(0xc1)]+'\x22]')[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),!![]),$('#amily2_auto_hide_enabled')[_0x2f94cc(0xcb)]('checked',_0x1752a3[_0x2f94cc(0xca)]),$(_0x2f94cc(0xfd))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xd5)]),$(_0x2f94cc(0xec))[_0x2f94cc(0xf2)](_0x1752a3[_0x2f94cc(0xd5)]),$(_0x2f94cc(0xef))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xb1)]),$(_0x2f94cc(0xf7))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xe7)]),$(_0x2f94cc(0xc8))[_0x2f94cc(0xba)](_0x1752a3[_0x2f94cc(0xc6)]),_0x1752a3[_0x2f94cc(0xe7)]===_0x2f94cc(0xd2)?$(_0x2f94cc(0xfb))[_0x2f94cc(0xbc)]():$(_0x2f94cc(0xfb))[_0x2f94cc(0xdb)](),_0x1752a3['historiographySmallAutoEnable']!==undefined&&$('#amily2_mhb_small_auto_enabled')[_0x2f94cc(0xcb)](_0x2f94cc(0xd4),_0x1752a3[_0x2f94cc(0xc4)]),_0x1752a3[_0x2f94cc(0xb7)]!==undefined&&$(_0x2f94cc(0xe9))['val'](_0x1752a3[_0x2f94cc(0xb7)]),populateModelDropdown();}} +import { extension_settings } from "/scripts/extensions.js"; +import { extensionName } from "../utils/settings.js"; +import { pluginAuthStatus } from "../utils/auth.js"; + + + +let availableModels = []; +let latestUpdateInfo = null; +let newVersionAvailable = false; + +export function setUpdateInfo(isNew, updateInfo) { + newVersionAvailable = isNew; + latestUpdateInfo = updateInfo; +} + + +export function applyUpdateIndicator() { + if (newVersionAvailable) { + $('#amily2_update_indicator').show(); + $('#amily2_update_button_new').show(); + } else { + $('#amily2_update_indicator').hide(); + $('#amily2_update_button_new').hide(); + } +} + +export function getLatestUpdateInfo() { + return latestUpdateInfo; +} + +export function setAvailableModels(models) { + availableModels = models; +} + + +export function populateModelDropdown() { + const modelSelect = $("#amily2_model"); + const modelNotes = $("#amily2_model_notes"); + + modelSelect.empty(); + const currentModel = extension_settings[extensionName]?.model || ""; + + if (availableModels.length === 0) { + modelSelect.append(''); + modelNotes.html( + '请检查API配置后点击"刷新模型"', + ); + return; + } + + const defaultOption = $("").val("").text("-- 选择模型 --"); + modelSelect.append(defaultOption); + + availableModels.forEach((model) => { + const option = $("").val(model).text(model); + if (model === currentModel) { + option.attr("selected", "selected"); + } + modelSelect.append(option); + }); + + if (currentModel && modelSelect.val() === currentModel) { + modelNotes.html(`已选择: ${currentModel}`); + } else { + modelNotes.html(`已加载 ${availableModels.length} 个可用模型`); + } +} + + +export function updateUI() { + if (!pluginAuthStatus.authorized) { + $("#auth_panel").show(); + $(".plugin-features").hide(); + } else { + $("#auth_panel").hide(); + $(".plugin-features").show(); + + const settings = extension_settings[extensionName]; + if (!settings) return; + + $("#amily2_enabled").prop("checked", settings.enabled); + $("#amily2_api_url").val(settings.apiUrl); + $("#amily2_api_key").val(settings.apiKey); + $("#amily2_model").val(settings.model); + + + $("#amily2_max_tokens").val(settings.maxTokens); + $("#amily2_max_tokens_value").text(settings.maxTokens); + $("#amily2_temperature").val(settings.temperature); + $("#amily2_temperature_value").text(settings.temperature); + $("#amily2_context_messages").val(settings.contextMessages); + $("#amily2_context_messages_value").text(settings.contextMessages); + $("#amily2_optimization_target_tag").val(settings.optimizationTargetTag); + + + $( + `input[name="amily2_optimization_mode"][value="${settings.optimizationMode}"]`, + ).prop("checked", true); + $("#amily2_optimization_enabled").prop( + "checked", + settings.optimizationEnabled, + ); + $("#amily2_optimization_exclusion_enabled").prop( + "checked", + settings.optimizationExclusionEnabled, + ); + $("#amily2_show_optimization_toast").prop( + "checked", + settings.showOptimizationToast, + ); + $("#amily2_suppress_toast").prop("checked", settings.suppressToast); + + + $("#amily2_system_prompt").val(settings.systemPrompt); + $("#amily2_main_prompt").val(settings.mainPrompt); + $("#amily2_output_format_prompt").val(settings.outputFormatPrompt); + $("#amily2_summarization_prompt").val(settings.summarizationPrompt); + + + $("#amily2_worldbook_enabled").prop("checked", settings.worldbookEnabled); + $("#amily2_summarization_enabled").prop( + "checked", + settings.summarizationEnabled, + ); + $( + `input[name="amily2_lorebook_target"][value="${settings.lorebookTarget}"]`, + ).prop("checked", true); + + $(`input[name="amily2_icon_location"][value="${settings.iconLocation}"]`).prop("checked", true); + $("#amily2_auto_hide_enabled").prop("checked", settings.autoHideEnabled); + $("#amily2_auto_hide_threshold").val(settings.autoHideThreshold); + $("#amily2_auto_hide_threshold_value").text(settings.autoHideThreshold); + $('#amily2_lore_activation_mode').val(settings.loreActivationMode); + $('#amily2_lore_insertion_position').val(settings.loreInsertionPosition); + $('#amily2_lore_depth_input').val(settings.loreDepth); + if (settings.loreInsertionPosition === 'at_depth') { + $('#amily2_lore_depth_container').show(); + } else { + $('#amily2_lore_depth_container').hide(); + } + if (settings.historiographySmallAutoEnable !== undefined) { + $('#amily2_mhb_small_auto_enabled').prop('checked', settings.historiographySmallAutoEnable); + } + if (settings.historiographySmallTriggerThreshold !== undefined) { + $('#amily2_mhb_small_trigger_count').val(settings.historiographySmallTriggerThreshold); + } + populateModelDropdown(); + } +}