From 4bee7e0df065c7bf509d8b25de31a685530be428 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Fri, 21 Nov 2025 23:43:31 +0800 Subject: [PATCH 01/56] Update index.js --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 0535e26..614ee81 100644 --- a/index.js +++ b/index.js @@ -804,7 +804,7 @@ jQuery(async () => { }); function initializeOnlineTracker() { - const wsUrl = 'ws://accdn.silencelurker.xyz:2086'; + const wsUrl = 'ws://service.amily49.cc:2086'; let ws; let reconnectInterval; @@ -867,3 +867,4 @@ function initializeOnlineTracker() { // 启动挂载流程 mountTracker(); } + From 627f05513f22ba24ef51f3fd41fe9d89cde3757b Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:13:37 +0800 Subject: [PATCH 02/56] Update table-bindings.js --- ui/table-bindings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/table-bindings.js b/ui/table-bindings.js index db445f3..b417bdb 100644 --- a/ui/table-bindings.js +++ b/ui/table-bindings.js @@ -1 +1 @@ -const _0x3c5d74=_0x405f;(function(_0x2a7ce6,_0x2a06cf){const _0x5d0d8f=_0x405f,_0x2f0f24=_0x2a7ce6();while(!![]){try{const _0x271acd=-parseInt(_0x5d0d8f(0x17e))/0x1+-parseInt(_0x5d0d8f(0x2a0))/0x2*(parseInt(_0x5d0d8f(0x125))/0x3)+-parseInt(_0x5d0d8f(0x2dc))/0x4*(-parseInt(_0x5d0d8f(0x205))/0x5)+-parseInt(_0x5d0d8f(0x1ea))/0x6*(parseInt(_0x5d0d8f(0x295))/0x7)+parseInt(_0x5d0d8f(0x11e))/0x8+-parseInt(_0x5d0d8f(0x2ae))/0x9*(parseInt(_0x5d0d8f(0x12a))/0xa)+parseInt(_0x5d0d8f(0x285))/0xb*(parseInt(_0x5d0d8f(0x214))/0xc);if(_0x271acd===_0x2a06cf)break;else _0x2f0f24['push'](_0x2f0f24['shift']());}catch(_0x8d7def){_0x2f0f24['push'](_0x2f0f24['shift']());}}}(_0x4721,0x87cac));import*as _0x234bb0 from'../core/table-system/manager.js';import{log}from'../core/table-system/logger.js';import{extension_settings,getContext}from'/scripts/extensions.js';import{extensionName}from'../utils/settings.js';import{updateOrInsertTableInChat}from'./message-table-renderer.js';import{saveSettingsDebounced}from'/script.js';import{startBatchFilling}from'../core/table-system/batch-filler.js';import{showHtmlModal}from'./page-window.js';import{DEFAULT_AI_RULE_TEMPLATE,DEFAULT_AI_FLOW_TEMPLATE}from'../core/table-system/settings.js';import{world_names,loadWorldInfo}from'/scripts/world-info.js';import{safeCharLorebooks,safeLorebookEntries}from'../core/tavernhelper-compatibility.js';import{characters,this_chid,eventSource,event_types}from'/script.js';import{fetchNccsModels,testNccsApiConnection}from'../core/api/NccsApi.js';const isTouchDevice=()=>window[_0x3c5d74(0x1eb)](_0x3c5d74(0x129))[_0x3c5d74(0x19f)],getAllTablesContainer=()=>document['getElementById'](_0x3c5d74(0x26a));let isResizing=![];function toggleRowContextMenu(_0x17cb0c){const _0x51df97=_0x3c5d74;_0x17cb0c[_0x51df97(0x2d2)](),_0x17cb0c[_0x51df97(0x1cf)]();const _0x1b75e5=_0x17cb0c[_0x51df97(0x1c6)][_0x51df97(0x1ad)](_0x51df97(0x1f0));if(!_0x1b75e5)return;const _0x3dc276=_0x1b75e5[_0x51df97(0x1ad)](_0x51df97(0x11f));if(!_0x3dc276)return;const _0x512cdf=_0x1b75e5['classList'][_0x51df97(0x255)](_0x51df97(0x1d3));document['querySelectorAll']('.amily2-menu-open')[_0x51df97(0x1f4)](_0x20b60b=>{const _0x208fe2=_0x51df97;if(_0x20b60b!==_0x1b75e5){_0x20b60b[_0x208fe2(0x20b)][_0x208fe2(0x180)]('amily2-menu-open');const _0xd3e77d=_0x20b60b[_0x208fe2(0x1ad)](_0x208fe2(0x11f));_0xd3e77d&&(_0xd3e77d[_0x208fe2(0x1b4)][_0x208fe2(0x21e)]=_0x208fe2(0x2cb),_0xd3e77d[_0x208fe2(0x1b4)][_0x208fe2(0x105)]='',_0xd3e77d[_0x208fe2(0x1b4)][_0x208fe2(0x128)]='');}}),_0x1b75e5['classList'][_0x51df97(0x1a8)]('amily2-menu-open');_0x1b75e5[_0x51df97(0x20b)]['contains']('amily2-menu-open')?(_0x3dc276[_0x51df97(0x1b4)][_0x51df97(0x21e)]='visible',_0x3dc276[_0x51df97(0x1b4)][_0x51df97(0x128)]='relative',_0x3dc276[_0x51df97(0x1b4)][_0x51df97(0x105)]='10'):(_0x3dc276[_0x51df97(0x1b4)][_0x51df97(0x21e)]=_0x51df97(0x2cb),_0x3dc276[_0x51df97(0x1b4)][_0x51df97(0x128)]='',_0x3dc276['style']['zIndex']='');const _0x2344d8=_0x5b343e=>{const _0x52b85e=_0x51df97;!_0x1b75e5[_0x52b85e(0x255)](_0x5b343e[_0x52b85e(0x1c6)])&&(_0x1b75e5['classList'][_0x52b85e(0x180)](_0x52b85e(0x1d3)),_0x3dc276[_0x52b85e(0x1b4)]['overflowX']=_0x52b85e(0x2cb),_0x3dc276[_0x52b85e(0x1b4)][_0x52b85e(0x128)]='',_0x3dc276['style']['zIndex']='',document[_0x52b85e(0x11b)]('click',_0x2344d8,!![]));};_0x1b75e5[_0x51df97(0x20b)][_0x51df97(0x255)](_0x51df97(0x1d3))&&setTimeout(()=>{const _0x5db04d=_0x51df97;document[_0x5db04d(0x1a4)](_0x5db04d(0x28c),_0x2344d8,!![]);},0x0);}function _0x4721(){const _0x43a34a=['nccsMaxTokens','info','#exclusion-rules-list','className','Nccs\x20API模式已切换为:\x20','center','render_on_every_message',']\x20刷新世界书设置时出错:','cell-highlight','scrollLeft','render-on-every-message-toggle','向右移动','Nccs\x20API连接测试失败,请检查配置','checkbox','then','zIndex','addTable','#sinan-','querySelectorAll','请输入一个有效的字数限制(大于等于0)。','floor-end-input','manual','分步填表','获取模型失败:','起始楼层不能大于结束楼层。','none','\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','injection','

加载条目中...

','\x20测试连接','moveColumn','Nccs\x20API连接测试出错:','规则提示词已恢复为默认。','ai-rule-template-save-btn','amily2-table-wrapper','-tab','touches','removeEventListener','字数限制为0表示不设置规则。','extensionSettings','3959840XMZSPE','.amily2-table-wrapper','value','rename','','true','context-reading-value','45oXTciM','select','原始填表','position','(pointer:\x20coarse)','393520yShnkz','exportPresetFull','focus','batchEventBound','cellIndex','limit','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20所选世界书中没有条目。

','text_pole','table_worldbook_select_wrapper','nccs-temperature','htmlFor','\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\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','add-right','pending-deletion','connectionManager','stringify','floorEventBound','renameTable','importGlobalPreset','优化中填表','table_selected_worldbooks','col-index','add-row-below-btn','找不到聊天内表格相关的开关,绑定失败。','rule_delete','在右加列','cursor','nccs-api-mode','ai-rule-template-restore-btn','primary','colIndex','active','ai-flow-template-restore-btn','获取角色世界书失败。

','请输入新表格的名称:',']\x20检测到角色/聊天切换,正在刷新表格系统UI和世界书设置...','charLimitRules','all','restoreRow','end','move-down','nccsModel','未知列\x20(','amily2_memorisation_forms_panel','编辑列名','span','fill-current-floor-btn','warn','Nccs\x20API连接测试成功!','nccsApiUrl','\x20获取中...','Nccs\x20API\x20','.popup-button-ok','append','main-api','createTBody','context-reading-slider','profiles','openai_test','move-row-up-btn','updateTableRules','#rule-note','nccsTavernProfile','label','批量填表-规则提示词已保存。','100%','setAttribute','”\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\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内容长度限制\x20(0为禁用)\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\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','blur','未找到可用的SillyTavern配置文件','nccs-test-connection','table-independent-rules-container','598864kDpklL','ai-flow-template-save-btn','remove','table-injection-depth','table_injection_enabled','\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\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保存\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','parse','nccs-api-config','持续渲染最新消息功能已','disabled','\x22\x20title=\x22编辑规则\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\x20\x20\x20\x20仅提取指定XML标签的内容,例如填“content”,即提取...中的内容。\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','clearGlobalPreset','\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编辑\x20“','--\x20选择要添加规则的列\x20--','optimized','show_table_in_chat','getElementById','tab','index-col','mouseup','fa-pen','addColumn','charLimitRule',':\x20不超过\x20','type','trim','#add-char-limit-rule-btn','matches','querySelector','isCurrentTablesEmpty','textContent','nccs-api-model-select','addEventListener','menu_button\x20small_button','data-rules','change','toggle','回退重填失败,请检查系统状态。','在左加列','请先加载一个角色。

','currentEventBound','closest','请选择一个列。','note','amily2-menu-active','updateHeader','maxHeight','min','style','无法找到指令模板编辑器或其按钮,绑定失败。','eventsBound','加载SillyTavern预设失败:','move-table-up-btn','rule_update','.nccs-button-row','move-right','\x20创建第一行','向上移动','table_worldbook_char_limit','button','context-reading-slider-container','wb-check-','.add-col-btn','无法获取SillyTavern配置文件列表','指令模板编辑器已成功绑定。','【最终警告】您确定要永久废黜表格\x20“[','target','流程提示词已保存。','世界书设置已成功绑定。','聊天内表格显示设置及其依赖关系已成功绑定。','.exclusion-rule-item','show-table-in-chat-toggle','delete-row','table_tags_to_extract','rule_add','stopPropagation','#rule-update','colgroup','2px','amily2-menu-open','[内存储司]\x20加载世界书条目失败:','table-independent-rules-enabled','checkbox-item','../core/table-system/batch-filler.js','length','getTime','down','\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\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\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
','innerHTML','insertCell','\x22\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\x20style=\x22padding:\x2010px;\x20border-radius:\x206px;\x20border:\x201px\x20solid\x20rgba(255,255,255,0.3);\x20background:\x20rgba(0,0,0,0.2);\x20color:\x20#fff;\x20font-size:\x201em;\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\x20\x20\x20placeholder=\x22','\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提示:输入内容将用于更新项目。\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\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取消\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\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','table-updated','insertColumn','.amily2-context-menu','nccsEnabled','\x22\x20placeholder=\x22起始标记\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20','td.index-col','pending-deletion-row','attr','start','forEach','sillytavern_preset','表格视图交互事件已成功绑定。','table_worldbook_char_limit_value','startCurrentFloorFilling','appendChild','\x0a\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','\x20个模型','请输入列名...','rowStatuses','insertBefore','楼层不能小于1。','您确定要将流程提示词恢复为默认设置吗?','\x0aUID:\x20','table-system-master-switch','pointer','fa-arrow-up','2110zXqXGT','fa-undo','startFloorRangeFilling','请输入表名...','[内存储司-工部]\x20缺少表格数据或容器,无法渲染。','getBoundingClientRect','classList','opacity','delete','填表模式已切换为\x20','nccs-api-key','previousElementSibling','表格系统总开关','add','.control-block-with-switch','48JeGfcH','html','table','表格系统总开关已关闭,请先启用总开关。','\x22\x20title=\x22删除此规则\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\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','amily2-table-','getAttribute','saveBatchFillerFlowTemplate','\x22>\x20','flex','overflowX','../core/table-system/reorganizer.js','mousemove','character','warning','Nccs\x20API事件绑定完成','move-row-down-btn','.settings-group','\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【修改】:\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','nccs-max-tokens','message','nccsApiKey','bottom','--\x20请选择模型\x20--','additional','配置独立提取规则','push','批量填表-流程提示词已恢复默认。','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','.edit-rules-btn','\x22\x20placeholder=\x22结束标记\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','#generic-input','\x20col:nth-child(','success','name','offsetWidth','.rule-end','input[name=\x22filling-mode\x22]','getMemoryState','已禁用','tableIndex','createElement','\x20个SillyTavern配置文件','join','已启用','#new-rule-column-select','table_worldbook_source','th.amily2-menu-open','.amily2_opt_settings_block','selected','删除该行','contains','log','\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\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【增加】:\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','addRow','showModal','parentNode','getUpdatedTables','createTHead','\x22重新整理\x22按钮已成功绑定。','headers','https://api.openai.com/v1','display','未选择或绑定世界书。

','4287382pKzBnp','templateEventsBound','add-above','right','find','normal','includes','click','role','批量填表-流程提示词已保存。','无标题条目','which','table_worldbook_enabled','alignItems','\x0a\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\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\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','rowIndex','没有找到世界书。

','世界书:\x20','bookName','#current-char-limit-rules','rollbackAndRefill','restore-row','nccsApiMode',']\x20世界书设置已刷新','10862OLEGKn','checked','fa-plus-circle','\x20测试中...','delete-row-btn','map','\x22\x20title=\x22下移\x22>','max','secondary-api','moveRow','\x20获取模型','filter','.move-table-up-btn','div','63ykWCtT','input[name=\x22table-injection-role\x22]','\x22\x20title=\x22上移\x22>','Nccs\x20API未获取到可用模型','#new-rule-limit-input','#add-exclusion-rule-btn','table_system_enabled','amily2-context-menu\x20amily2-header-menu','nccs-api-model','columnWidths','\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\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\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\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\x20\x20\x20','amily2-context-menu\x20amily2-row-context-menu','{const _0x535d73=_0x25b5b5;if(_0x377674!==_0x334dda){_0x377674[_0x535d73(0x20b)]['remove']('amily2-menu-open');const _0x15e519=_0x377674[_0x535d73(0x1ad)](_0x535d73(0x11f));_0x15e519&&(_0x15e519['style'][_0x535d73(0x21e)]=_0x535d73(0x2cb),_0x15e519['style']['zIndex']='',_0x15e519[_0x535d73(0x1b4)][_0x535d73(0x128)]='');}}),_0x334dda[_0x25b5b5(0x20b)][_0x25b5b5(0x1a8)](_0x25b5b5(0x1d3));_0x334dda[_0x25b5b5(0x20b)][_0x25b5b5(0x255)](_0x25b5b5(0x1d3))?(_0x3794ca[_0x25b5b5(0x1b4)]['overflowX']=_0x25b5b5(0x23e),_0x3794ca['style'][_0x25b5b5(0x128)]=_0x25b5b5(0x235),_0x3794ca['style'][_0x25b5b5(0x105)]='10'):(_0x3794ca[_0x25b5b5(0x1b4)][_0x25b5b5(0x21e)]=_0x25b5b5(0x2cb),_0x3794ca[_0x25b5b5(0x1b4)][_0x25b5b5(0x128)]='',_0x3794ca[_0x25b5b5(0x1b4)][_0x25b5b5(0x105)]='');const _0x56a25f=_0x4c8201=>{const _0xaf93a3=_0x25b5b5;!_0x334dda[_0xaf93a3(0x255)](_0x4c8201['target'])&&(_0x334dda[_0xaf93a3(0x20b)][_0xaf93a3(0x180)](_0xaf93a3(0x1d3)),_0x3794ca['style'][_0xaf93a3(0x21e)]='auto',_0x3794ca[_0xaf93a3(0x1b4)][_0xaf93a3(0x128)]='',_0x3794ca[_0xaf93a3(0x1b4)]['zIndex']='',document['removeEventListener']('click',_0x56a25f,!![]));};_0x334dda[_0x25b5b5(0x20b)]['contains']('amily2-menu-open')&&setTimeout(()=>{const _0x459300=_0x25b5b5;document['addEventListener'](_0x459300(0x28c),_0x56a25f,!![]);},0x0);}function toggleHeaderIndexContextMenu(_0x5a04c6){const _0x14213b=_0x3c5d74;_0x5a04c6[_0x14213b(0x2d2)](),_0x5a04c6[_0x14213b(0x1cf)]();const _0x471d7d=_0x5a04c6[_0x14213b(0x1c6)]['closest'](_0x14213b(0x2cd));if(!_0x471d7d)return;const _0x2423fe=_0x471d7d[_0x14213b(0x1a0)](_0x14213b(0x1e2));if(!_0x2423fe)return;const _0xf7828a=_0x2423fe[_0x14213b(0x20b)][_0x14213b(0x255)](_0x14213b(0x1b0));document[_0x14213b(0x108)](_0x14213b(0x18a))['forEach'](_0x2d10e2=>{const _0x176ee8=_0x14213b;_0x2d10e2[_0x176ee8(0x20b)][_0x176ee8(0x180)]('amily2-menu-active');});!_0xf7828a&&_0x2423fe[_0x14213b(0x20b)][_0x14213b(0x212)](_0x14213b(0x1b0));const _0x1821ac=_0x465649=>{const _0x3d9b9e=_0x14213b;!_0x2423fe[_0x3d9b9e(0x255)](_0x465649[_0x3d9b9e(0x1c6)])&&(_0x2423fe[_0x3d9b9e(0x20b)][_0x3d9b9e(0x180)](_0x3d9b9e(0x1b0)),document[_0x3d9b9e(0x11b)](_0x3d9b9e(0x28c),_0x1821ac,!![]));};setTimeout(()=>{const _0x3bfc22=_0x14213b;_0x2423fe[_0x3bfc22(0x20b)][_0x3bfc22(0x255)]('amily2-menu-active')&&document[_0x3bfc22(0x1a4)](_0x3bfc22(0x28c),_0x1821ac,!![]);},0x0);}function showInputDialog({title:_0x50db43,label:_0x68cd42,currentValue:_0x451a41,placeholder:_0x420a35,onSave:_0x9fcc01}){const _0x19eb83=_0x3c5d74,_0x12823c=_0x19eb83(0x1fa)+_0x50db43+_0x19eb83(0x141)+_0x68cd42+_0x19eb83(0x13c)+_0x451a41+_0x19eb83(0x1de)+_0x420a35+_0x19eb83(0x1df),_0x28d3a4=$(_0x12823c)[_0x19eb83(0x2e0)](_0x19eb83(0x2c3)),_0x112923=_0x28d3a4[_0x19eb83(0x289)](_0x19eb83(0x233)),_0x58b9ef=()=>{const _0x63061a=_0x19eb83;_0x28d3a4[0x0][_0x63061a(0x271)](),_0x28d3a4[_0x63061a(0x180)]();},_0xea5043=()=>{const _0x536c1f=_0x19eb83,_0x583925=_0x112923['val']()['trim']();if(_0x583925&&_0x583925!==_0x451a41)_0x9fcc01(_0x583925);else{if(!_0x583925){toastr['warning'](_0x536c1f(0x2d9)),_0x112923[_0x536c1f(0x12c)]();return;}}_0x58b9ef();};_0x28d3a4[_0x19eb83(0x289)](_0x19eb83(0x16a))['on']('click',_0xea5043),_0x28d3a4[_0x19eb83(0x289)]('.popup-button-cancel')['on'](_0x19eb83(0x28c),_0x58b9ef),_0x112923['on']('keypress',_0x2146af=>{const _0x3d09d3=_0x19eb83;if(_0x2146af[_0x3d09d3(0x290)]===0xd)_0xea5043();}),_0x112923['on']('keydown',_0x135180=>{const _0x2cd26e=_0x19eb83;if(_0x135180[_0x2cd26e(0x290)]===0x1b)_0x58b9ef();}),_0x28d3a4[0x0][_0x19eb83(0x260)](),_0x112923[_0x19eb83(0x12c)]()[_0x19eb83(0x126)]();}function showColumnNameEditor(_0x142287,_0x3efaca,_0x37b213){const _0x162fab=_0x3c5d74;showInputDialog({'title':_0x162fab(0x162),'label':_0x162fab(0x2da),'currentValue':_0x37b213,'placeholder':_0x162fab(0x1fc),'onSave':_0x52c0b2=>{const _0x3176c7=_0x162fab;_0x234bb0[_0x3176c7(0x1b1)](_0x142287,_0x3efaca,_0x52c0b2),renderTables(),toastr[_0x3176c7(0x243)]('列名已更新为\x20\x22'+_0x52c0b2+'\x22');}});}function _0x405f(_0x5c4f96,_0x299ff2){const _0x472114=_0x4721();return _0x405f=function(_0x405f42,_0x31fd0){_0x405f42=_0x405f42-0xf7;let _0x54984a=_0x472114[_0x405f42];return _0x54984a;},_0x405f(_0x5c4f96,_0x299ff2);}function showTableNameEditor(_0x308ae5,_0x24ccb1){const _0x314de0=_0x3c5d74;showInputDialog({'title':_0x314de0(0x240),'label':_0x314de0(0x282),'currentValue':_0x24ccb1,'placeholder':_0x314de0(0x208),'onSave':_0x481aac=>{const _0x156201=_0x314de0;_0x234bb0[_0x156201(0x147)](_0x308ae5,_0x481aac),renderTables(),toastr[_0x156201(0x243)](_0x156201(0x2ce)+_0x481aac+'\x22');}});}function positionContextMenu(_0x249588,_0x1c8afe){const _0x38cd8c=_0x3c5d74;_0x249588['style'][_0x38cd8c(0x128)]='absolute',_0x249588['style'][_0x38cd8c(0x105)]=_0x38cd8c(0x27e),_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x23c)]='0',_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x288)]=_0x38cd8c(0x2cb),_0x249588['style']['marginTop']='',_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x134)]='',_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x1b2)]='',_0x249588[_0x38cd8c(0x1b4)]['overflowY']='';const _0x53d0d9=window['innerHeight'],_0x2906d0=_0x1c8afe[_0x38cd8c(0x20a)](),_0x346d67=0xc8,_0x5736e5=_0x1c8afe[_0x38cd8c(0x1ad)](_0x38cd8c(0x25b)),_0x5a95a6=_0x5736e5?_0x5736e5[_0x38cd8c(0x20a)]():{'top':0x0,'bottom':_0x53d0d9},_0x191a2d=Math[_0x38cd8c(0x1b3)](_0x53d0d9,_0x5a95a6[_0x38cd8c(0x22a)])-_0x2906d0[_0x38cd8c(0x22a)],_0x105339=_0x2906d0[_0x38cd8c(0x26e)]-Math[_0x38cd8c(0x2a7)](0x0,_0x5a95a6['top']);_0x191a2d<_0x346d67&&_0x105339>_0x191a2d?(_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x26e)]=_0x38cd8c(0x2cb),_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x22a)]=_0x38cd8c(0x177),_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x134)]=_0x38cd8c(0x1d2)):(_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x26e)]=_0x38cd8c(0x177),_0x249588['style'][_0x38cd8c(0x22a)]='auto',_0x249588['style']['marginTop']=_0x38cd8c(0x1d2));const _0x2f36dc=0xa0,_0x36ec60=_0x1c8afe[_0x38cd8c(0x1ad)](_0x38cd8c(0x216)),_0x301faf=_0x36ec60?_0x36ec60[_0x38cd8c(0x1ad)]('div[style*=\x22overflowX\x22]'):null;if(_0x301faf){const _0x183146=_0x301faf[_0x38cd8c(0x20a)](),_0x1479b6=_0x2906d0['left']-_0x183146['left'];_0x1479b6+_0x2f36dc>_0x183146['width']-0x14&&(_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x23c)]=_0x38cd8c(0x2cb),_0x249588[_0x38cd8c(0x1b4)][_0x38cd8c(0x288)]='0');}}export function renderTables(){const _0x341ea3=_0x3c5d74;let _0x232996=_0x234bb0['getMemoryState']();!_0x232996&&(log(_0x341ea3(0x237),_0x341ea3(0x165)),_0x232996=_0x234bb0[_0x341ea3(0x140)]());const _0x913a0=getAllTablesContainer();if(!_0x232996||!_0x913a0){console['error'](_0x341ea3(0x209));return;}const _0x4d6159=_0x234bb0['getHighlights'](),_0x552abe=_0x234bb0[_0x341ea3(0x262)](),_0x58aad7=document['createDocumentFragment'](),_0x354cbb=document['getElementById'](_0x341ea3(0x274));_0x354cbb&&_0x354cbb[_0x341ea3(0x180)](),_0x232996[_0x341ea3(0x1f4)]((_0x1a78da,_0x16fd73)=>{const _0x3c0d81=_0x341ea3,_0x1b29fb=document[_0x3c0d81(0x24b)](_0x3c0d81(0x2ad));_0x1b29fb[_0x3c0d81(0x1b4)][_0x3c0d81(0x267)]=_0x3c0d81(0x21d),_0x1b29fb[_0x3c0d81(0x1b4)][_0x3c0d81(0x133)]='space-between',_0x1b29fb[_0x3c0d81(0x1b4)][_0x3c0d81(0x292)]=_0x3c0d81(0xfb);const _0x483a60=document[_0x3c0d81(0x24b)]('h3');_0x552abe[_0x3c0d81(0x2b9)](_0x16fd73)&&_0x483a60[_0x3c0d81(0x20b)][_0x3c0d81(0x212)](_0x3c0d81(0x1e0));_0x483a60[_0x3c0d81(0x1dc)]=_0x3c0d81(0x268)+_0x16fd73+'\x22\x20title=\x22重命名\x22>\x20'+_0x1a78da[_0x3c0d81(0x244)];const _0x2359ac=document[_0x3c0d81(0x24b)]('div');_0x2359ac[_0x3c0d81(0xf9)]=_0x3c0d81(0x13e);const _0x355415=_0x16fd73>0x0?'{const _0x1bad3a=_0x3c0d81,_0x3e7cee=document['createElement'](_0x1bad3a(0x2de)),_0x1957da=_0x1a78da[_0x1bad3a(0x2b7)]&&_0x1a78da[_0x1bad3a(0x2b7)][_0x149993]?_0x1a78da[_0x1bad3a(0x2b7)][_0x149993]:0x5a;_0x3e7cee[_0x1bad3a(0x1b4)][_0x1bad3a(0x23a)]=_0x1957da+'px',_0x4e4782[_0x1bad3a(0x1f9)](_0x3e7cee);});_0x2e0bff[_0x3c0d81(0x1f9)](_0x4e4782);let _0x1c2f07=0x0;const _0x24ca23=_0x4e4782['querySelectorAll'](_0x3c0d81(0x2de));_0x24ca23['forEach'](_0x1d043e=>{const _0xdc0d49=_0x3c0d81;_0x1c2f07+=parseInt(_0x1d043e[_0xdc0d49(0x1b4)]['width'],0xa);}),_0x2e0bff['style'][_0x3c0d81(0x23a)]=_0x1c2f07+'px';const _0x51bf6c=_0x2e0bff[_0x3c0d81(0x263)](),_0x3fa06d=_0x51bf6c['insertRow'](),_0x30b292=document[_0x3c0d81(0x24b)]('th');_0x30b292['className']=_0x3c0d81(0x196),_0x30b292[_0x3c0d81(0x1a2)]='#',_0x30b292[_0x3c0d81(0x1b4)][_0x3c0d81(0x150)]=_0x3c0d81(0x203),_0x30b292[_0x3c0d81(0x281)]=_0x3c0d81(0x2bc);if(!_0x1a78da['rows']||_0x1a78da[_0x3c0d81(0x1e6)]['length']===0x0){const _0x975faf=document['createElement']('div');_0x975faf['className']=_0x3c0d81(0x2b5),_0x975faf[_0x3c0d81(0x1b4)][_0x3c0d81(0x267)]=_0x3c0d81(0x10f);const _0x5de756=document[_0x3c0d81(0x24b)](_0x3c0d81(0x1bf));_0x5de756[_0x3c0d81(0x1dc)]=_0x3c0d81(0x1bc),_0x5de756[_0x3c0d81(0xf9)]='menu_button\x20small_button',_0x5de756['addEventListener'](_0x3c0d81(0x28c),_0x161442=>{const _0x369bbd=_0x3c0d81;_0x161442[_0x369bbd(0x1cf)](),_0x234bb0[_0x369bbd(0x25f)](_0x16fd73),renderTables();}),_0x975faf[_0x3c0d81(0x1f9)](_0x5de756),_0x30b292[_0x3c0d81(0x1f9)](_0x975faf),_0x30b292[_0x3c0d81(0x1a4)](_0x3c0d81(0x28c),_0x4428c2=>{const _0x58a0c7=_0x3c0d81;_0x4428c2['preventDefault'](),_0x4428c2[_0x58a0c7(0x1cf)](),console[_0x58a0c7(0x256)](_0x58a0c7(0x2c0),_0x16fd73),_0x234bb0[_0x58a0c7(0x25f)](_0x16fd73),renderTables(),toastr['success'](_0x58a0c7(0x273));});}_0x3fa06d[_0x3c0d81(0x1f9)](_0x30b292),_0x1a78da[_0x3c0d81(0x265)][_0x3c0d81(0x1f4)]((_0x44ff1a,_0xf697e8)=>{const _0x5e733f=_0x3c0d81,_0x59c636=document[_0x5e733f(0x24b)]('th');_0x59c636[_0x5e733f(0x135)][_0x5e733f(0x154)]=_0xf697e8,_0x59c636['style'][_0x5e733f(0x150)]='pointer';const _0x17fbd9=document[_0x5e733f(0x24b)](_0x5e733f(0x163));_0x17fbd9[_0x5e733f(0xf9)]=_0x5e733f(0x26d),_0x17fbd9['textContent']=_0x44ff1a,_0x59c636[_0x5e733f(0x1f9)](_0x17fbd9);const _0x3225e2=document[_0x5e733f(0x24b)](_0x5e733f(0x2ad));_0x3225e2[_0x5e733f(0xf9)]=_0x5e733f(0x2e1);const _0x3533d1=[{'label':'向左移动','action':'move-left','icon':_0x5e733f(0x1e9)},{'label':_0x5e733f(0x101),'action':_0x5e733f(0x1bb),'icon':_0x5e733f(0x2d3)},{'label':_0x5e733f(0x1aa),'action':_0x5e733f(0x275),'icon':_0x5e733f(0x2a2)},{'label':_0x5e733f(0x14f),'action':_0x5e733f(0x142),'icon':_0x5e733f(0x2a2)},{'label':'编辑列名','action':_0x5e733f(0x121),'icon':_0x5e733f(0x198)},{'label':'删除该列','action':_0x5e733f(0x20d),'icon':_0x5e733f(0x239),'isDanger':!![]}];_0x3533d1[_0x5e733f(0x1f4)](({label:_0x56d55b,action:_0x347381,icon:_0x31324d,isDanger:_0x4d8c45})=>{const _0x2859a5=_0x5e733f,_0xb4bfe9=document[_0x2859a5(0x24b)]('button');_0xb4bfe9[_0x2859a5(0x1a2)]=_0x56d55b,_0xb4bfe9[_0x2859a5(0xf9)]='menu_button\x20small_button';if(_0x4d8c45)_0xb4bfe9[_0x2859a5(0x20b)][_0x2859a5(0x212)](_0x2859a5(0x2c4));_0xb4bfe9[_0x2859a5(0x1a4)](_0x2859a5(0x28c),_0x4ff0d9=>{const _0x334121=_0x2859a5;_0x4ff0d9[_0x334121(0x1cf)]();switch(_0x347381){case _0x334121(0x27a):_0x234bb0[_0x334121(0x114)](_0x16fd73,_0xf697e8,_0x334121(0x23c));break;case _0x334121(0x1bb):_0x234bb0['moveColumn'](_0x16fd73,_0xf697e8,_0x334121(0x288));break;case _0x334121(0x275):_0x234bb0[_0x334121(0x1e1)](_0x16fd73,_0xf697e8,_0x334121(0x23c));break;case'add-right':_0x234bb0['insertColumn'](_0x16fd73,_0xf697e8,_0x334121(0x288));break;case _0x334121(0x121):showColumnNameEditor(_0x16fd73,_0xf697e8,_0x44ff1a);break;case _0x334121(0x20d):confirm('您确定要删除\x20“'+_0x44ff1a+'”\x20列吗?')&&_0x234bb0[_0x334121(0x2be)](_0x16fd73,_0xf697e8);break;}renderTables();}),_0x3225e2[_0x2859a5(0x1f9)](_0xb4bfe9);}),_0x59c636[_0x5e733f(0x1f9)](_0x3225e2);const _0x580829=document[_0x5e733f(0x24b)](_0x5e733f(0x2ad));_0x580829['className']=_0x5e733f(0x2bb),_0x59c636[_0x5e733f(0x1f9)](_0x580829);const _0x4219cf=_0xc9f8c2=>{const _0x48efdc=_0x5e733f;_0xc9f8c2[_0x48efdc(0x2d2)](),_0xc9f8c2[_0x48efdc(0x1cf)](),isResizing=!![];const _0x578080=_0xc9f8c2[_0x48efdc(0x1c6)][_0x48efdc(0x1ad)]('table'),_0x41960e=_0xc9f8c2[_0x48efdc(0x1c6)][_0x48efdc(0x25a)],_0x51a91c=_0x578080[_0x48efdc(0x1a0)](_0x48efdc(0x242)+(_0x41960e[_0x48efdc(0x12e)]+0x1)+')'),_0x21ee82=_0xc9f8c2[_0x48efdc(0x19c)]['startsWith']('touch'),_0x19e71d=_0x21ee82?_0xc9f8c2[_0x48efdc(0x11a)][0x0][_0x48efdc(0x236)]:_0xc9f8c2[_0x48efdc(0x236)],_0x588b7d=_0x41960e[_0x48efdc(0x245)],_0x34eac4=_0x2c79b7=>{const _0x5d7df1=_0x48efdc,_0x3110a5=_0x21ee82?_0x2c79b7[_0x5d7df1(0x11a)][0x0]['clientX']:_0x2c79b7[_0x5d7df1(0x236)],_0x41f9d0=_0x588b7d+(_0x3110a5-_0x19e71d);_0x41f9d0>0x32&&(_0x51a91c[_0x5d7df1(0x1b4)][_0x5d7df1(0x23a)]=_0x41f9d0+'px');},_0x439251=()=>{const _0x1ed4ea=_0x48efdc;document['removeEventListener'](_0x1ed4ea(0x220),_0x34eac4),document[_0x1ed4ea(0x11b)]('mouseup',_0x439251),document[_0x1ed4ea(0x11b)](_0x1ed4ea(0x23d),_0x34eac4),document[_0x1ed4ea(0x11b)](_0x1ed4ea(0x13f),_0x439251);const _0x1cab8d=parseInt(_0x51a91c[_0x1ed4ea(0x1b4)][_0x1ed4ea(0x23a)],0xa);_0x234bb0['updateColumnWidth'](_0x16fd73,_0xf697e8,_0x1cab8d),setTimeout(()=>{isResizing=![];},0x0);};_0x21ee82?(document[_0x48efdc(0x1a4)](_0x48efdc(0x23d),_0x34eac4,{'passive':![]}),document[_0x48efdc(0x1a4)](_0x48efdc(0x13f),_0x439251)):(document[_0x48efdc(0x1a4)](_0x48efdc(0x220),_0x34eac4),document[_0x48efdc(0x1a4)](_0x48efdc(0x197),_0x439251));};_0x580829[_0x5e733f(0x1a4)](_0x5e733f(0x258),_0x4219cf),_0x580829[_0x5e733f(0x1a4)](_0x5e733f(0x136),_0x4219cf,{'passive':![]}),_0x3fa06d[_0x5e733f(0x1f9)](_0x59c636);});const _0x4feb6b=_0x2e0bff[_0x3c0d81(0x16d)]();_0x1a78da[_0x3c0d81(0x1e6)]&&_0x1a78da[_0x3c0d81(0x1e6)][_0x3c0d81(0x1d8)]>0x0&&_0x1a78da[_0x3c0d81(0x1e6)][_0x3c0d81(0x1f4)]((_0x240088,_0x5d2231)=>{const _0x3c1ed3=_0x3c0d81,_0x5b8a7e=_0x4feb6b['insertRow']();_0x5b8a7e['dataset'][_0x3c1ed3(0x297)]=_0x5d2231;const _0x321a76=_0x1a78da[_0x3c1ed3(0x1fd)]?_0x1a78da[_0x3c1ed3(0x1fd)][_0x5d2231]:_0x3c1ed3(0x28a);_0x321a76==='pending-deletion'&&_0x5b8a7e[_0x3c1ed3(0x20b)][_0x3c1ed3(0x212)](_0x3c1ed3(0x1f1));const _0x32aa83=_0x5b8a7e[_0x3c1ed3(0x1dd)]();_0x32aa83[_0x3c1ed3(0xf9)]=_0x3c1ed3(0x196);const _0x2d4786=document[_0x3c1ed3(0x24b)](_0x3c1ed3(0x163));_0x2d4786['textContent']=_0x5d2231+0x1,_0x32aa83[_0x3c1ed3(0x1f9)](_0x2d4786);const _0x3bafc3=document['createElement']('div');_0x3bafc3[_0x3c1ed3(0xf9)]=_0x3c1ed3(0x2c7);let _0x48d42e;_0x321a76===_0x3c1ed3(0x143)?_0x48d42e=[{'label':'恢复该行','action':'restore-row','icon':_0x3c1ed3(0x206),'isSuccess':!![],'btnClass':'restore-row-btn'}]:_0x48d42e=[{'label':_0x3c1ed3(0x1bd),'action':_0x3c1ed3(0x18d),'icon':_0x3c1ed3(0x204),'btnClass':_0x3c1ed3(0x171)},{'label':'向下移动','action':_0x3c1ed3(0x15e),'icon':'fa-arrow-down','btnClass':_0x3c1ed3(0x224)},{'label':'在上加行','action':_0x3c1ed3(0x287),'icon':_0x3c1ed3(0x2a2),'btnClass':'add-row-above-btn'},{'label':_0x3c1ed3(0x1e5),'action':'add-below','icon':_0x3c1ed3(0x2a2),'btnClass':_0x3c1ed3(0x14c)},{'label':_0x3c1ed3(0x254),'action':'delete-row','icon':'fa-trash-alt','isDanger':!![],'btnClass':_0x3c1ed3(0x2a4)}],_0x48d42e[_0x3c1ed3(0x1f4)](({label:_0x1dc047,action:_0x281bdc,icon:_0x3149b0,isDanger:_0x182128,isSuccess:_0x1e87c8})=>{const _0x42b4ff=_0x3c1ed3,_0x4824d6=document['createElement'](_0x42b4ff(0x1bf));_0x4824d6[_0x42b4ff(0x1dc)]=_0x42b4ff(0x2c8)+_0x3149b0+_0x42b4ff(0x21c)+_0x1dc047,_0x4824d6[_0x42b4ff(0xf9)]=_0x42b4ff(0x1a5);if(_0x182128)_0x4824d6[_0x42b4ff(0x20b)][_0x42b4ff(0x212)](_0x42b4ff(0x2c4));if(_0x1e87c8)_0x4824d6[_0x42b4ff(0x20b)][_0x42b4ff(0x212)](_0x42b4ff(0x243));_0x4824d6['addEventListener'](_0x42b4ff(0x28c),_0x3a1a3e=>{const _0x54a8b0=_0x42b4ff;_0x3a1a3e['stopPropagation']();switch(_0x281bdc){case _0x54a8b0(0x18d):_0x234bb0[_0x54a8b0(0x2a9)](_0x16fd73,_0x5d2231,'up');break;case _0x54a8b0(0x15e):_0x234bb0['moveRow'](_0x16fd73,_0x5d2231,_0x54a8b0(0x1da));break;case _0x54a8b0(0x287):_0x234bb0[_0x54a8b0(0x2cc)](_0x16fd73,_0x5d2231,'above');break;case _0x54a8b0(0x1ed):_0x234bb0[_0x54a8b0(0x2cc)](_0x16fd73,_0x5d2231,'below');break;case _0x54a8b0(0x1cc):_0x234bb0[_0x54a8b0(0x2d6)](_0x16fd73,_0x5d2231);break;case _0x54a8b0(0x29d):_0x234bb0[_0x54a8b0(0x15c)](_0x16fd73,_0x5d2231);break;}if(_0x281bdc===_0x54a8b0(0x1cc)||_0x281bdc===_0x54a8b0(0x29d)){}else renderTables();}),_0x3bafc3['appendChild'](_0x4824d6);}),_0x32aa83[_0x3c1ed3(0x1f9)](_0x3bafc3),_0x240088[_0x3c1ed3(0x1f4)]((_0x2e1533,_0x2ca6ec)=>{const _0x19d4d6=_0x3c1ed3,_0x478b98=_0x5b8a7e[_0x19d4d6(0x1dd)](),_0x227738=document[_0x19d4d6(0x24b)]('div');_0x227738[_0x19d4d6(0xf9)]=_0x19d4d6(0x27b),_0x227738[_0x19d4d6(0x1a2)]=_0x2e1533,_0x478b98[_0x19d4d6(0x1f9)](_0x227738);_0x321a76!==_0x19d4d6(0x143)&&!isTouchDevice()&&_0x478b98['setAttribute'](_0x19d4d6(0x2df),_0x19d4d6(0x123));_0x478b98['dataset'][_0x19d4d6(0x154)]=_0x2ca6ec,_0x478b98['dataset'][_0x19d4d6(0x175)]=_0x1a78da[_0x19d4d6(0x265)][_0x2ca6ec]||'';const _0x327c3b=_0x16fd73+'-'+_0x5d2231+'-'+_0x2ca6ec;_0x4d6159['has'](_0x327c3b)&&_0x478b98[_0x19d4d6(0x20b)][_0x19d4d6(0x212)](_0x19d4d6(0xfe));});}),_0x4bb4ea[_0x3c0d81(0x1f9)](_0x2e0bff),_0x58aad7[_0x3c0d81(0x1f9)](_0x4bb4ea);}),_0x913a0['innerHTML']='',_0x913a0['appendChild'](_0x58aad7),_0x354cbb&&_0x913a0[_0x341ea3(0x1f9)](_0x354cbb),updateOrInsertTableInChat();}function openTableRuleEditor(){const _0x58abcf=_0x3c5d74,_0x38d1db=extension_settings[extensionName],_0x2d7dd5=_0x38d1db[_0x58abcf(0x1cd)]||'',_0x23a050=_0x38d1db['table_exclusion_rules']||[],_0xe7a2c1=_0x23a050[_0x58abcf(0x2a5)]((_0x2282ed,_0x4b4af3)=>'\x0a\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\x20\x20\x20\x20移除所有被起始和结束标记包裹的内容(例如\x20OOC\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',_0x344b38=showHtmlModal(_0x58abcf(0x22d),_0x3d4feb,{'onOk':()=>{const _0x296630=_0x58abcf,_0x2e2ab7=document['getElementById']('table-tags-input')[_0x296630(0x120)];updateAndSaveTableSetting(_0x296630(0x1cd),_0x2e2ab7);const _0x536051=[];document[_0x296630(0x108)]('#exclusion-rules-list\x20.exclusion-rule-item')[_0x296630(0x1f4)](_0x5350cc=>{const _0x11fefd=_0x296630,_0x169114=_0x5350cc[_0x11fefd(0x1a0)](_0x11fefd(0x280))['value'][_0x11fefd(0x19d)](),_0x5c28ba=_0x5350cc[_0x11fefd(0x1a0)](_0x11fefd(0x246))[_0x11fefd(0x120)]['trim']();_0x169114&&_0x5c28ba&&_0x536051['push']({'start':_0x169114,'end':_0x5c28ba});}),updateAndSaveTableSetting(_0x296630(0x2ca),_0x536051),toastr[_0x296630(0x243)]('独立提取规则已保存。');},'onShow':_0x39324e=>{const _0x1feb16=_0x58abcf,_0x366a41=_0x39324e[_0x1feb16(0x289)](_0x1feb16(0xf8));_0x39324e[_0x1feb16(0x289)](_0x1feb16(0x2b3))['on'](_0x1feb16(0x28c),()=>{const _0x451a2b=_0x1feb16,_0x2ba2a5=_0x366a41[_0x451a2b(0x279)]()[_0x451a2b(0x1d8)],_0x3c370b=_0x451a2b(0x130)+_0x2ba2a5+_0x451a2b(0x1db);_0x366a41[_0x451a2b(0x16b)](_0x3c370b);}),_0x366a41['on'](_0x1feb16(0x28c),_0x1feb16(0x27d),function(){const _0x8f4cd2=_0x1feb16;$(this)['closest'](_0x8f4cd2(0x1ca))[_0x8f4cd2(0x180)]();});}});}function openRuleEditor(_0x271b78){const _0x2b60b3=_0x3c5d74,_0x157c74=_0x234bb0['getMemoryState']();if(!_0x157c74||!_0x157c74[_0x271b78])return;const _0x132d7d=_0x157c74[_0x271b78];_0x132d7d[_0x2b60b3(0x19a)]&&!_0x132d7d[_0x2b60b3(0x15a)]&&(_0x132d7d['charLimitRules']={},_0x132d7d[_0x2b60b3(0x19a)][_0x2b60b3(0x2c5)]!==-0x1&&(_0x132d7d['charLimitRules'][_0x132d7d[_0x2b60b3(0x19a)][_0x2b60b3(0x2c5)]]=_0x132d7d[_0x2b60b3(0x19a)][_0x2b60b3(0x12f)]));const _0x556757=_0x132d7d['charLimitRules']||{},_0x14758f=_0x3269dc=>{const _0x2c02ec=_0x2b60b3;return Object['entries'](_0x3269dc)[_0x2c02ec(0x2a5)](([_0x5dd4d6,_0x247ddb])=>{const _0x5d1b60=_0x2c02ec,_0x4e3ecd=_0x132d7d[_0x5d1b60(0x265)][_0x5dd4d6]||_0x5d1b60(0x160)+_0x5dd4d6+')';return _0x5d1b60(0x110)+_0x4e3ecd+_0x5d1b60(0x19b)+_0x247ddb+'\x20字
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{const _0x26071e=_0x2b60b3;return _0x132d7d[_0x26071e(0x265)][_0x26071e(0x2a5)]((_0x229905,_0xfd9b7b)=>{const _0x2fc101=_0x26071e;if(_0x27dd9c[_0xfd9b7b])return'';return _0x2fc101(0x234)+_0xfd9b7b+'\x22>'+_0x229905+_0x2fc101(0x122);})['join']('');},_0x963dab=_0x2b60b3(0x190)+_0x132d7d[_0x2b60b3(0x244)]+_0x2b60b3(0x179)+_0x14758f(_0x556757)+_0x2b60b3(0x2c6)+_0x54f38e(_0x556757)+'\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\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\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\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\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\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\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\x0a\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(0为禁用)\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当表格总行数超过设定值时,将在表格底部显示警告。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\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【说明】:\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'+(_0x132d7d[_0x2b60b3(0x1af)]||'')+_0x2b60b3(0x25e)+(_0x132d7d[_0x2b60b3(0x1ce)]||'')+_0x2b60b3(0x296)+(_0x132d7d[_0x2b60b3(0x14e)]||'')+_0x2b60b3(0x226)+(_0x132d7d[_0x2b60b3(0x1b9)]||'')+_0x2b60b3(0x183),_0x683257=$(_0x963dab)[_0x2b60b3(0x2e0)](_0x2b60b3(0x2c3)),_0x10c690=()=>{const _0x58ea27=_0x2b60b3;_0x683257[0x0][_0x58ea27(0x271)](),_0x683257['remove']();},_0x232e3c=()=>{const _0x5085ba=_0x2b60b3,_0x2569b0=JSON[_0x5085ba(0x184)](_0x683257[_0x5085ba(0x289)](_0x5085ba(0x29b))[_0x5085ba(0x1f2)](_0x5085ba(0x1a6))||'{}');_0x683257[_0x5085ba(0x289)](_0x5085ba(0x29b))[_0x5085ba(0x215)](_0x14758f(_0x2569b0)),_0x683257[_0x5085ba(0x289)](_0x5085ba(0x24f))['html'](_0x5085ba(0x191)+_0x54f38e(_0x2569b0));};_0x683257['find'](_0x2b60b3(0x29b))[_0x2b60b3(0x1f2)](_0x2b60b3(0x1a6),JSON[_0x2b60b3(0x145)](_0x556757)),_0x683257['on'](_0x2b60b3(0x28c),_0x2b60b3(0x19e),()=>{const _0x5dc7d1=_0x2b60b3,_0x5e7cfc=parseInt(_0x683257[_0x5dc7d1(0x289)](_0x5dc7d1(0x24f))['val'](),0xa),_0x182a1c=parseInt(_0x683257[_0x5dc7d1(0x289)](_0x5dc7d1(0x2b2))[_0x5dc7d1(0x18b)](),0xa);if(_0x5e7cfc===-0x1){toastr[_0x5dc7d1(0x222)](_0x5dc7d1(0x1ae));return;}if(isNaN(_0x182a1c)||_0x182a1c<0x0){toastr[_0x5dc7d1(0x222)](_0x5dc7d1(0x109));return;}const _0xf4bf86=JSON[_0x5dc7d1(0x184)](_0x683257[_0x5dc7d1(0x289)](_0x5dc7d1(0x29b))['attr'](_0x5dc7d1(0x1a6))||'{}');_0x182a1c>0x0?(_0xf4bf86[_0x5e7cfc]=_0x182a1c,_0x683257['find'](_0x5dc7d1(0x29b))[_0x5dc7d1(0x1f2)](_0x5dc7d1(0x1a6),JSON[_0x5dc7d1(0x145)](_0xf4bf86)),_0x232e3c()):toastr[_0x5dc7d1(0xf7)](_0x5dc7d1(0x11c));}),_0x683257['on']('click','.remove-char-limit-rule-btn',function(){const _0x51e3d2=_0x2b60b3,_0x29212b=$(this)[_0x51e3d2(0x283)](_0x51e3d2(0x14b)),_0x31056e=JSON[_0x51e3d2(0x184)](_0x683257[_0x51e3d2(0x289)]('#current-char-limit-rules')[_0x51e3d2(0x1f2)](_0x51e3d2(0x1a6))||'{}');delete _0x31056e[_0x29212b],_0x683257[_0x51e3d2(0x289)]('#current-char-limit-rules')[_0x51e3d2(0x1f2)](_0x51e3d2(0x1a6),JSON[_0x51e3d2(0x145)](_0x31056e)),_0x232e3c();}),_0x683257[_0x2b60b3(0x289)](_0x2b60b3(0x16a))['on'](_0x2b60b3(0x28c),()=>{const _0x2833fd=_0x2b60b3,_0x38bd46=JSON[_0x2833fd(0x184)](_0x683257['find'](_0x2833fd(0x29b))[_0x2833fd(0x1f2)]('data-rules')||'{}'),_0xdee3a8=parseInt(_0x683257[_0x2833fd(0x289)]('#rule-row-limit-value')[_0x2833fd(0x18b)](),0xa),_0x17645d={'note':_0x683257['find'](_0x2833fd(0x173))[_0x2833fd(0x18b)](),'rule_add':_0x683257['find']('#rule-add')[_0x2833fd(0x18b)](),'rule_delete':_0x683257[_0x2833fd(0x289)](_0x2833fd(0x2c2))[_0x2833fd(0x18b)](),'rule_update':_0x683257['find'](_0x2833fd(0x1d0))[_0x2833fd(0x18b)](),'charLimitRules':_0x38bd46,'rowLimitRule':_0xdee3a8};_0x234bb0[_0x2833fd(0x172)](_0x271b78,_0x17645d),_0x10c690();}),_0x683257[_0x2b60b3(0x289)]('.popup-button-cancel')['on'](_0x2b60b3(0x28c),_0x10c690),_0x683257[0x0][_0x2b60b3(0x260)]();}function bindInjectionSettings(){const _0x12442b=_0x3c5d74,_0x50496f=extension_settings[extensionName],_0x245235=document['getElementById'](_0x12442b(0x202)),_0x25d6db=document[_0x12442b(0x194)](_0x12442b(0x277)),_0x39d649=document[_0x12442b(0x194)]('table-injection-position'),_0x10130f=document[_0x12442b(0x194)](_0x12442b(0x181)),_0x95981d=document['querySelectorAll'](_0x12442b(0x2af));if(!_0x245235||!_0x25d6db||!_0x39d649||!_0x10130f||!_0x95981d['length'])return;const _0x9e9d72=()=>{const _0x424b21=_0x12442b,_0xb530f4=_0x39d649[_0x424b21(0x120)],_0xccbbc1=_0x245235[_0x424b21(0x2a1)],_0x412930=_0xb530f4==='1';_0x25d6db[_0x424b21(0x187)]=!_0xccbbc1,_0x39d649[_0x424b21(0x187)]=!_0xccbbc1,_0x10130f[_0x424b21(0x187)]=!_0xccbbc1||!_0x412930,_0x95981d['forEach'](_0x31f481=>_0x31f481[_0x424b21(0x187)]=!_0xccbbc1||!_0x412930);const _0x2d9da4=_0xccbbc1?'1':_0x424b21(0x1ec);_0x25d6db[_0x424b21(0x1b4)]['opacity']=_0x2d9da4;_0x25d6db['closest'](_0x424b21(0x213))&&(_0x25d6db['closest']('.control-block-with-switch')['style'][_0x424b21(0x20c)]=_0x2d9da4);_0x39d649[_0x424b21(0x1b4)][_0x424b21(0x20c)]=_0x2d9da4;_0x39d649['previousElementSibling']&&(_0x39d649[_0x424b21(0x210)][_0x424b21(0x1b4)]['opacity']=_0x2d9da4);const _0x4394ba=_0xccbbc1&&_0x412930?'1':_0x424b21(0x1ec);_0x10130f[_0x424b21(0x1b4)][_0x424b21(0x20c)]=_0x4394ba;_0x10130f[_0x424b21(0x210)]&&(_0x10130f[_0x424b21(0x210)][_0x424b21(0x1b4)]['opacity']=_0x4394ba);const _0xecee74=_0xccbbc1&&_0x412930?'1':_0x424b21(0x1ec),_0x2f9889=document[_0x424b21(0x194)](_0x424b21(0x2d7))?.[_0x424b21(0x1ad)]('.radio-group');_0x2f9889&&(_0x2f9889[_0x424b21(0x1b4)][_0x424b21(0x20c)]=_0xecee74,_0x2f9889[_0x424b21(0x210)]&&(_0x2f9889['previousElementSibling'][_0x424b21(0x1b4)][_0x424b21(0x20c)]=_0xecee74));const _0x271ecf=document[_0x424b21(0x108)](_0x424b21(0x247));_0x271ecf[_0x424b21(0x1f4)](_0x2714e4=>{const _0x1f635c=_0x424b21;_0x2714e4['disabled']=!_0xccbbc1;const _0x3b41e7=_0x2714e4[_0x1f635c(0x1ad)]('label');_0x3b41e7&&(_0x3b41e7[_0x1f635c(0x1b4)][_0x1f635c(0x20c)]=_0xccbbc1?'1':'0.5');});const _0x436778=document[_0x424b21(0x194)](_0x424b21(0x27f));_0x436778&&(_0x436778['disabled']=!_0xccbbc1,_0x436778['style'][_0x424b21(0x20c)]=_0xccbbc1?'1':_0x424b21(0x1ec));};_0x245235[_0x12442b(0x2a1)]=_0x50496f[_0x12442b(0x2b4)]!==![],_0x25d6db['checked']=_0x50496f['table_injection_enabled'],_0x39d649[_0x12442b(0x120)]=_0x50496f[_0x12442b(0x111)][_0x12442b(0x128)],_0x10130f['value']=_0x50496f[_0x12442b(0x111)][_0x12442b(0x18c)],_0x95981d[_0x12442b(0x1f4)](_0x43a02c=>{const _0x1f7fee=_0x12442b;parseInt(_0x43a02c[_0x1f7fee(0x120)],0xa)===_0x50496f[_0x1f7fee(0x111)][_0x1f7fee(0x28d)]&&(_0x43a02c['checked']=!![]);}),_0x9e9d72();if(_0x245235[_0x12442b(0x135)]['eventsBound'])return;_0x245235[_0x12442b(0x1a4)](_0x12442b(0x1a7),()=>{const _0x2e12f0=_0x12442b;_0x50496f[_0x2e12f0(0x2b4)]=_0x245235[_0x2e12f0(0x2a1)],saveSettingsDebounced(),_0x9e9d72();const _0x54366a=_0x245235[_0x2e12f0(0x2a1)]?_0x2e12f0(0x24e):'已禁用';toastr['info'](_0x2e12f0(0x211)+_0x54366a+'。'),log(_0x2e12f0(0x211)+_0x54366a+'。',_0x2e12f0(0xf7));}),_0x25d6db[_0x12442b(0x1a4)](_0x12442b(0x1a7),()=>{const _0x600c77=_0x12442b;_0x50496f[_0x600c77(0x182)]=_0x25d6db[_0x600c77(0x2a1)],saveSettingsDebounced();}),_0x39d649['addEventListener'](_0x12442b(0x1a7),()=>{const _0x169e93=_0x12442b;_0x50496f[_0x169e93(0x111)][_0x169e93(0x128)]=parseInt(_0x39d649[_0x169e93(0x120)],0xa),saveSettingsDebounced(),_0x9e9d72();}),_0x10130f[_0x12442b(0x1a4)]('input',()=>{const _0x10f8a2=_0x12442b;_0x50496f['injection'][_0x10f8a2(0x18c)]=parseInt(_0x10130f[_0x10f8a2(0x120)],0xa),saveSettingsDebounced();}),_0x95981d[_0x12442b(0x1f4)](_0x5dd800=>{const _0x2d2d86=_0x12442b;_0x5dd800[_0x2d2d86(0x1a4)](_0x2d2d86(0x1a7),()=>{const _0x18d256=_0x2d2d86;_0x5dd800[_0x18d256(0x2a1)]&&(_0x50496f[_0x18d256(0x111)][_0x18d256(0x28d)]=parseInt(_0x5dd800[_0x18d256(0x120)],0xa),saveSettingsDebounced());});}),_0x245235['dataset'][_0x12442b(0x1b6)]=_0x12442b(0x123),log(_0x12442b(0x1e7),_0x12442b(0x243));}function updateAndSaveTableSetting(_0x49fc07,_0x30924d){!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][_0x49fc07]=_0x30924d,saveSettingsDebounced();}function bindWorldBookSettings(){const _0x1eceb1=_0x3c5d74,_0x2e874f=extension_settings[extensionName];if(_0x2e874f[_0x1eceb1(0x291)]===undefined)_0x2e874f['table_worldbook_enabled']=![];if(_0x2e874f[_0x1eceb1(0x1be)]===undefined)_0x2e874f[_0x1eceb1(0x1be)]=0x7530;if(_0x2e874f['table_worldbook_source']===undefined)_0x2e874f[_0x1eceb1(0x250)]='character';if(_0x2e874f[_0x1eceb1(0x14a)]===undefined)_0x2e874f[_0x1eceb1(0x14a)]=[];if(_0x2e874f['table_selected_entries']===undefined)_0x2e874f[_0x1eceb1(0x2c1)]={};const _0xb4f813=document[_0x1eceb1(0x194)](_0x1eceb1(0x291)),_0x2744f2=document['getElementById'](_0x1eceb1(0x1be)),_0x33bf08=document['getElementById'](_0x1eceb1(0x1f7)),_0x496fc1=document[_0x1eceb1(0x108)]('input[name=\x22table_worldbook_source\x22]'),_0x16d213=document[_0x1eceb1(0x194)](_0x1eceb1(0x139)),_0x1b24dc=document[_0x1eceb1(0x194)]('table_refresh_worldbooks'),_0x46771c=document[_0x1eceb1(0x194)]('table_worldbook_checkbox_list'),_0x2a1b08=document[_0x1eceb1(0x194)](_0x1eceb1(0x189));if(!_0xb4f813||!_0x2744f2||!_0x33bf08||!_0x496fc1['length']||!_0x16d213||!_0x1b24dc||!_0x46771c||!_0x2a1b08){log(_0x1eceb1(0x278),_0x1eceb1(0x165));return;}const _0x2a7082=()=>{const _0x459833=_0x1eceb1,_0x1b5aed={};_0x2a1b08[_0x459833(0x108)]('input[type=\x22checkbox\x22]:checked')['forEach'](_0x5f57b4=>{const _0x258785=_0x459833,_0x1ef5d1=_0x5f57b4[_0x258785(0x135)][_0x258785(0x13d)],_0x5a2a2d=_0x5f57b4[_0x258785(0x135)][_0x258785(0x270)];!_0x1b5aed[_0x1ef5d1]&&(_0x1b5aed[_0x1ef5d1]=[]),_0x1b5aed[_0x1ef5d1][_0x258785(0x22e)](_0x5a2a2d);}),_0x2e874f[_0x459833(0x2c1)]=_0x1b5aed,saveSettingsDebounced();},_0x58546d=async()=>{const _0x3ee579=_0x1eceb1;_0x2a1b08[_0x3ee579(0x1dc)]=_0x3ee579(0x112);const _0x1c6ac1=_0x2e874f[_0x3ee579(0x250)]||_0x3ee579(0x221);let _0x2bbac4=[];if(_0x1c6ac1==='manual')_0x2bbac4=_0x2e874f['table_selected_worldbooks']||[];else{if(this_chid!==undefined&&this_chid>=0x0&&characters[this_chid])try{const _0x2adb83=await safeCharLorebooks({'type':_0x3ee579(0x15b)});if(_0x2adb83[_0x3ee579(0x153)])_0x2bbac4[_0x3ee579(0x22e)](_0x2adb83[_0x3ee579(0x153)]);if(_0x2adb83[_0x3ee579(0x22c)]?.[_0x3ee579(0x1d8)])_0x2bbac4[_0x3ee579(0x22e)](..._0x2adb83['additional']);}catch(_0x2f1ebd){console['error']('[内存储司]\x20获取角色世界书失败:',_0x2f1ebd),_0x2a1b08[_0x3ee579(0x1dc)]=_0x3ee579(0x157);return;}else{_0x2a1b08[_0x3ee579(0x1dc)]=_0x3ee579(0x1ab);return;}}if(_0x2bbac4[_0x3ee579(0x1d8)]===0x0){_0x2a1b08['innerHTML']=_0x3ee579(0x284);return;}try{const _0x2e4061=[];for(const _0x35230c of _0x2bbac4){const _0x147bf5=await safeLorebookEntries(_0x35230c);_0x147bf5[_0x3ee579(0x1f4)](_0xfbc2cf=>_0x2e4061[_0x3ee579(0x22e)]({..._0xfbc2cf,'bookName':_0x35230c}));}_0x2a1b08[_0x3ee579(0x1dc)]='';if(_0x2e4061[_0x3ee579(0x1d8)]===0x0){_0x2a1b08[_0x3ee579(0x1dc)]=_0x3ee579(0x137);return;}_0x2e4061['forEach'](_0x5c71cb=>{const _0x38c9eb=_0x3ee579,_0xc86423=document['createElement']('div');_0xc86423[_0x38c9eb(0xf9)]=_0x38c9eb(0x1d6),_0xc86423[_0x38c9eb(0x281)]=_0x38c9eb(0x299)+_0x5c71cb[_0x38c9eb(0x29a)]+_0x38c9eb(0x201)+_0x5c71cb[_0x38c9eb(0x270)];const _0x4745b8=document[_0x38c9eb(0x24b)](_0x38c9eb(0x23b));_0x4745b8[_0x38c9eb(0x19c)]=_0x38c9eb(0x103),_0x4745b8['id']=_0x38c9eb(0x241)+_0x5c71cb[_0x38c9eb(0x29a)]+'-'+_0x5c71cb[_0x38c9eb(0x270)],_0x4745b8[_0x38c9eb(0x135)][_0x38c9eb(0x13d)]=_0x5c71cb[_0x38c9eb(0x29a)],_0x4745b8[_0x38c9eb(0x135)][_0x38c9eb(0x270)]=_0x5c71cb['uid'];const _0x3994d7=_0x2e874f['table_selected_entries'][_0x5c71cb['bookName']]?.[_0x38c9eb(0x28b)](String(_0x5c71cb[_0x38c9eb(0x270)]));_0x4745b8[_0x38c9eb(0x2a1)]=!!_0x3994d7;const _0xa84859=document[_0x38c9eb(0x24b)](_0x38c9eb(0x175));_0xa84859[_0x38c9eb(0x13b)]=_0x4745b8['id'],_0xa84859[_0x38c9eb(0x1a2)]=_0x5c71cb['comment']||_0x38c9eb(0x28f),_0xc86423[_0x38c9eb(0x1f9)](_0x4745b8),_0xc86423['appendChild'](_0xa84859),_0x2a1b08[_0x38c9eb(0x1f9)](_0xc86423);});}catch(_0x39a45c){console[_0x3ee579(0x272)](_0x3ee579(0x1d4),_0x39a45c),_0x2a1b08[_0x3ee579(0x1dc)]='加载条目失败。

';}},_0x4584e6=()=>{const _0x1c405d=_0x1eceb1,_0x1b594d=world_names[_0x1c405d(0x2a5)](_0xc97015=>({'name':_0xc97015['replace']('.json',''),'file_name':_0xc97015}));_0x46771c[_0x1c405d(0x1dc)]='',_0x1b594d&&_0x1b594d[_0x1c405d(0x1d8)]>0x0?_0x1b594d[_0x1c405d(0x1f4)](_0x108742=>{const _0x27082e=_0x1c405d,_0x5c007e=document[_0x27082e(0x24b)](_0x27082e(0x2ad));_0x5c007e[_0x27082e(0xf9)]=_0x27082e(0x1d6),_0x5c007e[_0x27082e(0x281)]=_0x108742[_0x27082e(0x244)];const _0x1d916c=document[_0x27082e(0x24b)](_0x27082e(0x23b));_0x1d916c[_0x27082e(0x19c)]='checkbox',_0x1d916c['id']=_0x27082e(0x1c1)+_0x108742[_0x27082e(0x25c)],_0x1d916c[_0x27082e(0x120)]=_0x108742[_0x27082e(0x25c)],_0x1d916c[_0x27082e(0x2a1)]=_0x2e874f[_0x27082e(0x14a)]['includes'](_0x108742[_0x27082e(0x25c)]),_0x1d916c[_0x27082e(0x1a4)](_0x27082e(0x1a7),()=>{const _0x41b326=_0x27082e;_0x1d916c[_0x41b326(0x2a1)]?!_0x2e874f[_0x41b326(0x14a)][_0x41b326(0x28b)](_0x108742[_0x41b326(0x25c)])&&_0x2e874f['table_selected_worldbooks'][_0x41b326(0x22e)](_0x108742[_0x41b326(0x25c)]):_0x2e874f['table_selected_worldbooks']=_0x2e874f[_0x41b326(0x14a)][_0x41b326(0x2ab)](_0x4c3a48=>_0x4c3a48!==_0x108742[_0x41b326(0x25c)]),saveSettingsDebounced(),_0x58546d();});const _0x1a7730=document[_0x27082e(0x24b)](_0x27082e(0x175));_0x1a7730['htmlFor']='wb-check-'+_0x108742[_0x27082e(0x25c)],_0x1a7730[_0x27082e(0x1a2)]=_0x108742[_0x27082e(0x244)],_0x5c007e[_0x27082e(0x1f9)](_0x1d916c),_0x5c007e[_0x27082e(0x1f9)](_0x1a7730),_0x46771c[_0x27082e(0x1f9)](_0x5c007e);}):_0x46771c['innerHTML']=_0x1c405d(0x298),_0x58546d();},_0x2e627e=()=>{const _0x2e99ef=_0x1eceb1,_0x141bee=_0x2e874f[_0x2e99ef(0x250)]===_0x2e99ef(0x10b);_0x16d213['style']['display']=_0x141bee?_0x2e99ef(0x2d4):_0x2e99ef(0x10f),_0x58546d(),_0x141bee&&_0x4584e6();};_0xb4f813[_0x1eceb1(0x2a1)]=_0x2e874f[_0x1eceb1(0x291)],_0x2744f2[_0x1eceb1(0x120)]=_0x2e874f[_0x1eceb1(0x1be)],_0x33bf08[_0x1eceb1(0x1a2)]=_0x2e874f[_0x1eceb1(0x1be)],_0x496fc1[_0x1eceb1(0x1f4)](_0x140d9a=>{const _0x4dab90=_0x1eceb1;_0x140d9a[_0x4dab90(0x2a1)]=_0x140d9a[_0x4dab90(0x120)]===_0x2e874f['table_worldbook_source'];}),_0x2e627e();if(_0xb4f813[_0x1eceb1(0x135)][_0x1eceb1(0x1b6)])return;_0xb4f813[_0x1eceb1(0x1a4)](_0x1eceb1(0x1a7),()=>{const _0x52271b=_0x1eceb1;_0x2e874f[_0x52271b(0x291)]=_0xb4f813[_0x52271b(0x2a1)],saveSettingsDebounced();}),_0x2744f2[_0x1eceb1(0x1a4)](_0x1eceb1(0x23b),()=>{const _0x5b0310=_0x1eceb1;_0x33bf08['textContent']=_0x2744f2[_0x5b0310(0x120)];}),_0x2744f2['addEventListener'](_0x1eceb1(0x1a7),()=>{const _0x1814cc=_0x1eceb1;_0x2e874f[_0x1814cc(0x1be)]=parseInt(_0x2744f2[_0x1814cc(0x120)],0xa),saveSettingsDebounced();}),_0x496fc1[_0x1eceb1(0x1f4)](_0x2e45d8=>{const _0x31d89c=_0x1eceb1;_0x2e45d8['addEventListener'](_0x31d89c(0x1a7),()=>{const _0x37fe2c=_0x31d89c;_0x2e45d8[_0x37fe2c(0x2a1)]&&(_0x2e874f['table_worldbook_source']=_0x2e45d8[_0x37fe2c(0x120)],_0x2e627e(),saveSettingsDebounced());});}),_0x1b24dc[_0x1eceb1(0x1a4)]('click',_0x4584e6),_0x2a1b08[_0x1eceb1(0x1a4)]('change',_0x1a7f04=>{const _0x1b327a=_0x1eceb1;_0x1a7f04['target'][_0x1b327a(0x19c)]===_0x1b327a(0x103)&&_0x2a7082();}),_0xb4f813[_0x1eceb1(0x135)][_0x1eceb1(0x1b6)]=_0x1eceb1(0x123),log(_0x1eceb1(0x1c8),_0x1eceb1(0x243));}export function bindTableEvents(){const _0x8d828d=_0x3c5d74,_0x2d7df1=document[_0x8d828d(0x194)](_0x8d828d(0x161));if(!_0x2d7df1||_0x2d7df1[_0x8d828d(0x135)]['eventsBound'])return;log('开始为表格视图绑定交互事件...',_0x8d828d(0xf7));const _0xb5438=_0x2d7df1[_0x8d828d(0x108)](_0x8d828d(0x247)),_0xa924f1=document[_0x8d828d(0x194)](_0x8d828d(0x1c0)),_0x1ee29f=document[_0x8d828d(0x194)](_0x8d828d(0x16e)),_0x1f87bb=document[_0x8d828d(0x194)](_0x8d828d(0x124)),_0x4fd8c5=document['getElementById'](_0x8d828d(0x17d)),_0x374bba=document[_0x8d828d(0x194)](_0x8d828d(0x1d5)),_0xf4637=document[_0x8d828d(0x194)]('table-configure-rules-btn'),_0x15dea7=()=>{const _0x5e63ae=_0x8d828d,_0x5dced7=extension_settings[extensionName]?.[_0x5e63ae(0x25d)]||_0x5e63ae(0x16c);_0xb5438[_0x5e63ae(0x1f4)](_0x7b6ca6=>{const _0x3d5a3a=_0x5e63ae;_0x7b6ca6['checked']=_0x7b6ca6[_0x3d5a3a(0x120)]===_0x5dced7;});const _0x18e973=_0x5dced7==='secondary-api';_0xa924f1&&(_0xa924f1[_0x5e63ae(0x1b4)][_0x5e63ae(0x267)]=_0x18e973?_0x5e63ae(0x2d4):_0x5e63ae(0x10f)),_0x4fd8c5&&(_0x4fd8c5[_0x5e63ae(0x1b4)][_0x5e63ae(0x267)]=_0x5e63ae(0x21d)),_0x374bba&&_0xf4637&&(_0xf4637['style'][_0x5e63ae(0x267)]=_0x374bba['checked']?_0x5e63ae(0x2d4):'none');};_0xb5438[_0x8d828d(0x1f4)](_0x45362b=>{const _0x56e031=_0x8d828d;_0x45362b[_0x56e031(0x1a4)](_0x56e031(0x1a7),function(){const _0x3a065c=_0x56e031,_0x3afc57=this[_0x3a065c(0x120)];updateAndSaveTableSetting(_0x3a065c(0x25d),_0x3afc57);let _0x160f57=_0x3a065c(0x127);if(_0x3afc57===_0x3a065c(0x2a8))_0x160f57=_0x3a065c(0x10c);if(_0x3afc57===_0x3a065c(0x192))_0x160f57=_0x3a065c(0x149);toastr[_0x3a065c(0xf7)](_0x3a065c(0x20e)+_0x160f57+'。'),_0x15dea7();});});if(_0x1ee29f&&_0x1f87bb){const _0x499544=extension_settings[extensionName]?.[_0x8d828d(0x26c)]||0x4;_0x1ee29f[_0x8d828d(0x120)]=_0x499544,_0x1f87bb[_0x8d828d(0x1a2)]=_0x499544,_0x1ee29f[_0x8d828d(0x1a4)](_0x8d828d(0x23b),function(){_0x1f87bb['textContent']=this['value'];}),_0x1ee29f['addEventListener'](_0x8d828d(0x1a7),function(){const _0xda2265=_0x8d828d;updateAndSaveTableSetting(_0xda2265(0x26c),parseInt(this[_0xda2265(0x120)],0xa)),toastr[_0xda2265(0xf7)]('上下文读取级别已设置为\x20'+this[_0xda2265(0x120)]+'。');});}_0x374bba&&(_0x374bba[_0x8d828d(0x2a1)]=extension_settings[extensionName]?.['table_independent_rules_enabled']??![],_0x374bba[_0x8d828d(0x1a4)](_0x8d828d(0x1a7),()=>{const _0x1feaa1=_0x8d828d;updateAndSaveTableSetting('table_independent_rules_enabled',_0x374bba[_0x1feaa1(0x2a1)]),_0x15dea7();}));_0x15dea7();_0xf4637&&_0xf4637['addEventListener'](_0x8d828d(0x28c),openTableRuleEditor);const _0x2bc39f=()=>{renderTables(),bindInjectionSettings(),bindTemplateEditors();};_0x2bc39f(),bindWorldBookSettings(),bindBatchFillButton(),bindFloorFillButtons(),bindReorganizeButton(),bindNccsApiEvents(),bindChatTableDisplaySetting();const _0x4e4d6c=document[_0x8d828d(0x1a0)](_0x8d828d(0x2bf));_0x4e4d6c&&_0x4e4d6c[_0x8d828d(0x1a4)](_0x8d828d(0x28c),_0x5ae510=>{const _0x32dd4e=_0x8d828d,_0x47f961=_0x5ae510[_0x32dd4e(0x1c6)][_0x32dd4e(0x1ad)](_0x32dd4e(0x2dd));if(!_0x47f961)return;const _0x53a0a5=_0x47f961['dataset'][_0x32dd4e(0x195)];if(!_0x53a0a5)return;const _0x4c8532=_0x47f961[_0x32dd4e(0x1ad)](_0x32dd4e(0x225));if(!_0x4c8532)return;_0x4c8532['querySelectorAll']('.sinan-nav-item')['forEach'](_0x42fb89=>_0x42fb89[_0x32dd4e(0x20b)]['remove'](_0x32dd4e(0x155))),_0x47f961[_0x32dd4e(0x20b)][_0x32dd4e(0x212)](_0x32dd4e(0x155)),_0x4c8532[_0x32dd4e(0x108)](_0x32dd4e(0x2ba))[_0x32dd4e(0x1f4)](_0x3f6986=>_0x3f6986['classList']['remove'](_0x32dd4e(0x155)));const _0x28d987=_0x4c8532[_0x32dd4e(0x1a0)](_0x32dd4e(0x107)+_0x53a0a5+_0x32dd4e(0x119));_0x28d987&&_0x28d987[_0x32dd4e(0x20b)][_0x32dd4e(0x212)](_0x32dd4e(0x155));});const _0x369221=document[_0x8d828d(0x194)](_0x8d828d(0x2d0)),_0x5d6c51=document[_0x8d828d(0x194)](_0x8d828d(0x294)),_0x366d93=document[_0x8d828d(0x194)]('amily2-import-preset-btn'),_0x57d01e=document[_0x8d828d(0x194)]('amily2-import-global-preset-btn'),_0x2ba574=document[_0x8d828d(0x194)]('amily2-clear-global-preset-btn');_0x369221&&_0x369221[_0x8d828d(0x1a4)]('click',()=>_0x234bb0['exportPreset']());_0x5d6c51&&_0x5d6c51[_0x8d828d(0x1a4)]('click',()=>_0x234bb0[_0x8d828d(0x12b)]());_0x366d93&&_0x366d93[_0x8d828d(0x1a4)](_0x8d828d(0x28c),()=>_0x234bb0['importPreset'](_0x2bc39f));_0x57d01e&&_0x57d01e['addEventListener'](_0x8d828d(0x28c),()=>{const _0x57bbb8=_0x8d828d,_0x4b3328=_0x234bb0[_0x57bbb8(0x1a1)]();_0x234bb0[_0x57bbb8(0x148)](()=>{_0x4b3328&&(_0x234bb0['loadTables'](),_0x2bc39f());});});_0x2ba574&&_0x2ba574['addEventListener'](_0x8d828d(0x28c),()=>{const _0x5c9a11=_0x8d828d,_0x5782d1=_0x234bb0[_0x5c9a11(0x1a1)]();_0x234bb0[_0x5c9a11(0x18f)](),_0x5782d1&&(_0x234bb0['loadTables'](),_0x2bc39f());});const _0x4694aa=document['getElementById']('amily2-clear-all-tables-btn');_0x4694aa&&_0x4694aa['addEventListener'](_0x8d828d(0x28c),()=>{confirm('【确认】您确定要清空所有表格的剧情内容吗?此操作将保留表格结构,但会删除所有已填写的行。')&&(_0x234bb0['clearAllTables'](),_0x2bc39f());});const _0x25c875=document[_0x8d828d(0x194)]('add-table-placeholder');_0x25c875&&_0x25c875[_0x8d828d(0x1a4)]('click',()=>{const _0xa80c10=_0x8d828d,_0x351fde=prompt(_0xa80c10(0x158),_0xa80c10(0x269));_0x351fde&&_0x351fde['trim']()&&(_0x234bb0[_0xa80c10(0x106)](_0x351fde[_0xa80c10(0x19d)]()),_0x2bc39f());});const _0x2753d8=getAllTablesContainer();if(_0x2753d8){_0x2753d8[_0x8d828d(0x1a4)](_0x8d828d(0x28c),_0x1c42c1=>{const _0x57c4fd=_0x8d828d,_0x25d0d9=_0x1c42c1[_0x57c4fd(0x1c6)][_0x57c4fd(0x1ad)]('th');if(_0x25d0d9&&_0x25d0d9[_0x57c4fd(0x20b)]['contains'](_0x57c4fd(0x196))){toggleHeaderIndexContextMenu(_0x1c42c1);return;}if(_0x25d0d9&&!_0x25d0d9[_0x57c4fd(0x20b)][_0x57c4fd(0x255)](_0x57c4fd(0x196))){toggleColumnContextMenu(_0x1c42c1);return;}const _0x1ba973=_0x1c42c1[_0x57c4fd(0x1c6)][_0x57c4fd(0x1ad)](_0x57c4fd(0x1f0));if(_0x1ba973){toggleRowContextMenu(_0x1c42c1);return;}const _0x3dc81a=_0x1c42c1[_0x57c4fd(0x1c6)][_0x57c4fd(0x1ad)]('.table-rename-icon');if(_0x3dc81a){const _0x5e9e04=parseInt(_0x3dc81a['dataset'][_0x57c4fd(0x24a)],0xa),_0x2a9f67=_0x234bb0[_0x57c4fd(0x248)](),_0x7bcbb7=_0x2a9f67[_0x5e9e04]?.[_0x57c4fd(0x244)]||'';showTableNameEditor(_0x5e9e04,_0x7bcbb7);return;}const _0x2c6870=_0x1c42c1[_0x57c4fd(0x1c6)][_0x57c4fd(0x1ad)]('button');if(!_0x2c6870)return;const _0x52bd4b=parseInt(_0x2c6870['dataset']['tableIndex'],0xa);if(_0x2c6870[_0x57c4fd(0x19f)](_0x57c4fd(0x27c)))_0x234bb0[_0x57c4fd(0x25f)](_0x52bd4b),_0x2bc39f();else{if(_0x2c6870[_0x57c4fd(0x19f)](_0x57c4fd(0x1c2)))_0x234bb0[_0x57c4fd(0x199)](_0x52bd4b),_0x2bc39f();else{if(_0x2c6870[_0x57c4fd(0x19f)](_0x57c4fd(0x2ac))||_0x2c6870['matches']('.move-table-down-btn')){const _0x10215f=_0x2c6870[_0x57c4fd(0x20b)]['contains'](_0x57c4fd(0x1b8))?'up':_0x57c4fd(0x1da);_0x234bb0['moveTable'](_0x52bd4b,_0x10215f),_0x2bc39f();}else{if(_0x2c6870[_0x57c4fd(0x19f)](_0x57c4fd(0x231)))openRuleEditor(_0x52bd4b);else{if(_0x2c6870[_0x57c4fd(0x19f)]('.delete-table-btn')){const _0xa94c8c=_0x234bb0[_0x57c4fd(0x248)](),_0x130e04=_0xa94c8c[_0x52bd4b]?.[_0x57c4fd(0x244)]||'未知表格';confirm(_0x57c4fd(0x1c5)+_0x130e04+']”\x20吗?此操作不可逆!')&&(_0x234bb0[_0x57c4fd(0x1e8)](_0x52bd4b),_0x2bc39f());}}}}}});if(isTouchDevice()){let _0x1dc79b=0x0,_0x61baf3=null;_0x2753d8['addEventListener']('touchstart',_0x328bad=>{const _0x405854=_0x8d828d,_0x2b23d3=_0x328bad[_0x405854(0x1c6)]['closest']('td');if(!_0x2b23d3||_0x2b23d3['dataset'][_0x405854(0x154)]===undefined)return;const _0x1979b1=new Date()[_0x405854(0x1d9)](),_0x27c55f=_0x1979b1-_0x1dc79b;_0x27c55f<0x12c&&_0x27c55f>0x0&&_0x61baf3===_0x2b23d3&&(_0x328bad[_0x405854(0x2d2)](),_0x2b23d3['getAttribute'](_0x405854(0x2df))!==_0x405854(0x123)&&(_0x2b23d3[_0x405854(0x178)](_0x405854(0x2df),_0x405854(0x123)),setTimeout(()=>_0x2b23d3['focus'](),0x0))),_0x1dc79b=_0x1979b1,_0x61baf3=_0x2b23d3;});}_0x2753d8['addEventListener'](_0x8d828d(0x17a),_0x45ee50=>{const _0x16b929=_0x8d828d,_0x3c0411=_0x45ee50[_0x16b929(0x1c6)];if(_0x3c0411['tagName']!=='TD'||_0x3c0411[_0x16b929(0x21a)](_0x16b929(0x2df))!=='true')return;isTouchDevice()&&_0x3c0411[_0x16b929(0x178)](_0x16b929(0x2df),'false');const _0x2537d1=_0x3c0411[_0x16b929(0x1ad)](_0x16b929(0x216));if(!_0x2537d1)return;const _0x41a554=parseInt(_0x2537d1['dataset'][_0x16b929(0x24a)],0xa),_0x191d69=parseInt(_0x3c0411[_0x16b929(0x1ad)]('tr')[_0x16b929(0x135)][_0x16b929(0x297)],0xa),_0xfeb7b8=parseInt(_0x3c0411[_0x16b929(0x135)][_0x16b929(0x154)],0xa),_0x353a33=_0x3c0411[_0x16b929(0x1a2)],_0x433fa6=_0x2537d1[_0x16b929(0x1ad)]('.amily2-table-wrapper'),_0x539029=_0x433fa6?_0x433fa6[_0x16b929(0xff)]:0x0,_0x272fca=_0x2753d8['scrollTop'];_0x234bb0['addHighlight'](_0x41a554,_0x191d69,_0xfeb7b8);const _0x4fb83a={[_0xfeb7b8]:_0x353a33};_0x234bb0[_0x16b929(0x26f)](_0x41a554,_0x191d69,_0x4fb83a),_0x2bc39f();const _0x2d0970=document[_0x16b929(0x194)](_0x16b929(0x219)+_0x41a554)?.[_0x16b929(0x1ad)](_0x16b929(0x11f));_0x2d0970&&(_0x2d0970[_0x16b929(0xff)]=_0x539029),_0x2753d8['scrollTop']=_0x272fca;},!![]);}_0x2d7df1[_0x8d828d(0x135)][_0x8d828d(0x1b6)]=_0x8d828d(0x123),log(_0x8d828d(0x1f6),_0x8d828d(0x243)),eventSource['on'](event_types[_0x8d828d(0x132)],()=>{const _0x440aeb=_0x8d828d;console[_0x440aeb(0x256)]('['+extensionName+_0x440aeb(0x159)),_0x2bc39f(),setTimeout(()=>{const _0x1e79b5=_0x440aeb,_0x387bea=extension_settings[extensionName];if(_0x387bea&&_0x387bea[_0x1e79b5(0x291)])try{bindWorldBookSettings(),console[_0x1e79b5(0x256)]('['+extensionName+_0x1e79b5(0x29f));}catch(_0x532b36){console['error']('['+extensionName+_0x1e79b5(0xfd),_0x532b36);}},0x64);});}function bindBatchFillButton(){const _0x44dd88=_0x3c5d74,_0x67b5db=document['getElementById'](_0x44dd88(0x27f));if(_0x67b5db){if(_0x67b5db[_0x44dd88(0x135)][_0x44dd88(0x12d)])return;_0x67b5db[_0x44dd88(0x1a4)]('click',_0x38ddd3=>{const _0x1ca788=_0x44dd88,_0x43b1c4=extension_settings[extensionName],_0x1f4d32=_0x43b1c4['table_system_enabled']!==![];if(!_0x1f4d32){_0x38ddd3[_0x1ca788(0x2d2)](),toastr[_0x1ca788(0x222)]('表格系统总开关已关闭,请先启用总开关。');return;}startBatchFilling();}),_0x67b5db[_0x44dd88(0x135)][_0x44dd88(0x12d)]=_0x44dd88(0x123),log('\x22立即填表\x22按钮已成功绑定。','success');}}function bindReorganizeButton(){const _0x55b1c6=_0x3c5d74,_0x3067ad=document[_0x55b1c6(0x194)](_0x55b1c6(0x2c9));if(_0x3067ad){if(_0x3067ad[_0x55b1c6(0x135)][_0x55b1c6(0x1ee)])return;_0x3067ad[_0x55b1c6(0x1a4)](_0x55b1c6(0x28c),async _0x6a316=>{const _0x2f6bfc=_0x55b1c6,_0x17a978=extension_settings[extensionName],_0x4c252c=_0x17a978[_0x2f6bfc(0x2b4)]!==![];if(!_0x4c252c){_0x6a316['preventDefault'](),toastr[_0x2f6bfc(0x222)](_0x2f6bfc(0x217));return;}try{const {reorganizeTableContent:_0x19b827}=await import(_0x2f6bfc(0x21f));await _0x19b827();}catch(_0xf58c0e){console['error']('[内存储司]\x20重新整理功能导入失败:',_0xf58c0e),toastr[_0x2f6bfc(0x272)]('重新整理功能启动失败,请检查系统状态。');}}),_0x3067ad[_0x55b1c6(0x135)][_0x55b1c6(0x1ee)]=_0x55b1c6(0x123),log(_0x55b1c6(0x264),'success');}}function bindFloorFillButtons(){const _0x23f62b=_0x3c5d74,_0x29af27=document['getElementById']('fill-selected-floors-btn'),_0x5e9f7a=document[_0x23f62b(0x194)](_0x23f62b(0x164)),_0x110a49=document[_0x23f62b(0x194)](_0x23f62b(0x131));if(_0x29af27){if(_0x29af27[_0x23f62b(0x135)][_0x23f62b(0x146)])return;_0x29af27[_0x23f62b(0x1a4)](_0x23f62b(0x28c),_0x558760=>{const _0x35b450=_0x23f62b,_0x43446e=extension_settings[extensionName],_0x395b1f=_0x43446e[_0x35b450(0x2b4)]!==![];if(!_0x395b1f){_0x558760[_0x35b450(0x2d2)](),toastr[_0x35b450(0x222)]('表格系统总开关已关闭,请先启用总开关。');return;}const _0x15e963=document[_0x35b450(0x194)]('floor-start-input'),_0x2659a0=document[_0x35b450(0x194)](_0x35b450(0x10a)),_0x563214=parseInt(_0x15e963['value'],0xa),_0x340fb1=parseInt(_0x2659a0[_0x35b450(0x120)],0xa);if(!_0x563214||!_0x340fb1){toastr['warning'](_0x35b450(0x2bd));return;}if(_0x563214>_0x340fb1){toastr['warning'](_0x35b450(0x10e));return;}if(_0x563214<0x1){toastr[_0x35b450(0x222)](_0x35b450(0x1ff));return;}import(_0x35b450(0x1d7))[_0x35b450(0x104)](_0x20d93c=>{const _0x1ce3cd=_0x35b450;_0x20d93c[_0x1ce3cd(0x207)](_0x563214,_0x340fb1);});}),_0x29af27[_0x23f62b(0x135)]['floorEventBound']='true',log('\x22选定楼层填表\x22按钮已成功绑定。','success');}if(_0x5e9f7a){if(_0x5e9f7a['dataset'][_0x23f62b(0x1ac)])return;_0x5e9f7a['addEventListener'](_0x23f62b(0x28c),_0x38bf1e=>{const _0xcace9=_0x23f62b,_0x375fc5=extension_settings[extensionName],_0x26a328=_0x375fc5['table_system_enabled']!==![];if(!_0x26a328){_0x38bf1e[_0xcace9(0x2d2)](),toastr[_0xcace9(0x222)]('表格系统总开关已关闭,请先启用总开关。');return;}import(_0xcace9(0x1d7))[_0xcace9(0x104)](_0x3c007c=>{const _0x5198a0=_0xcace9;_0x3c007c[_0x5198a0(0x1f8)]();});}),_0x5e9f7a['dataset']['currentEventBound']='true',log(_0x23f62b(0x2d1),_0x23f62b(0x243));}if(_0x110a49){if(_0x110a49[_0x23f62b(0x135)]['rollbackEventBound'])return;_0x110a49[_0x23f62b(0x1a4)](_0x23f62b(0x28c),async _0x4c3b95=>{const _0x218a42=_0x23f62b,_0xba12d0=extension_settings[extensionName],_0x18fd51=_0xba12d0['table_system_enabled']!==![];if(!_0x18fd51){_0x4c3b95['preventDefault'](),toastr[_0x218a42(0x222)](_0x218a42(0x217));return;}if(confirm('您确定要将表格状态回退到上一楼,并使用最新消息重新填表吗?'))try{await _0x234bb0[_0x218a42(0x29c)]();}catch(_0x38d8c4){console[_0x218a42(0x272)](_0x218a42(0x2d5),_0x38d8c4),toastr[_0x218a42(0x272)](_0x218a42(0x1a9));}}),_0x110a49['dataset']['rollbackEventBound']=_0x23f62b(0x123),log('\x22回退重填\x22按钮已成功绑定。',_0x23f62b(0x243));}}function bindTemplateEditors(){const _0x25a8d8=_0x3c5d74,_0x1120f4=document[_0x25a8d8(0x194)](_0x25a8d8(0x23f)),_0x11955d=document[_0x25a8d8(0x194)](_0x25a8d8(0x117)),_0x45ee37=document[_0x25a8d8(0x194)](_0x25a8d8(0x152)),_0x3581b3=document[_0x25a8d8(0x194)]('ai-flow-template-editor'),_0xba714e=document[_0x25a8d8(0x194)](_0x25a8d8(0x17f)),_0x291fa2=document[_0x25a8d8(0x194)](_0x25a8d8(0x156));if(!_0x1120f4||!_0x3581b3||!_0x11955d||!_0xba714e){log(_0x25a8d8(0x1b5),_0x25a8d8(0x165));return;}if(_0x11955d[_0x25a8d8(0x135)]['templateEventsBound'])return;_0x1120f4[_0x25a8d8(0x120)]=_0x234bb0['getBatchFillerRuleTemplate'](),_0x3581b3[_0x25a8d8(0x120)]=_0x234bb0['getBatchFillerFlowTemplate'](),_0x11955d[_0x25a8d8(0x1a4)](_0x25a8d8(0x28c),()=>{const _0x48a3bd=_0x25a8d8;_0x234bb0[_0x48a3bd(0x2cf)](_0x1120f4[_0x48a3bd(0x120)]),toastr[_0x48a3bd(0x243)]('规则提示词已保存。'),log(_0x48a3bd(0x176),_0x48a3bd(0x243));}),_0xba714e[_0x25a8d8(0x1a4)](_0x25a8d8(0x28c),()=>{const _0x9b5d95=_0x25a8d8;_0x234bb0['saveBatchFillerFlowTemplate'](_0x3581b3['value']),toastr['success'](_0x9b5d95(0x1c7)),log(_0x9b5d95(0x28e),_0x9b5d95(0x243));}),_0x45ee37[_0x25a8d8(0x1a4)]('click',()=>{const _0x3f4df9=_0x25a8d8;confirm('您确定要将规则提示词恢复为默认设置吗?')&&(_0x1120f4['value']=DEFAULT_AI_RULE_TEMPLATE,_0x234bb0[_0x3f4df9(0x2cf)](_0x1120f4['value']),toastr['info'](_0x3f4df9(0x116)),log(_0x3f4df9(0x238),_0x3f4df9(0xf7)));}),_0x291fa2[_0x25a8d8(0x1a4)](_0x25a8d8(0x28c),()=>{const _0x1bce9e=_0x25a8d8;confirm(_0x1bce9e(0x200))&&(_0x3581b3[_0x1bce9e(0x120)]=DEFAULT_AI_FLOW_TEMPLATE,_0x234bb0[_0x1bce9e(0x21b)](_0x3581b3[_0x1bce9e(0x120)]),toastr['info'](_0x1bce9e(0x259)),log(_0x1bce9e(0x22f),'info'));}),_0x11955d[_0x25a8d8(0x135)][_0x25a8d8(0x286)]=_0x25a8d8(0x123),_0xba714e[_0x25a8d8(0x135)]['templateEventsBound']=_0x25a8d8(0x123),log(_0x25a8d8(0x1c4),_0x25a8d8(0x243));}function bindNccsApiEvents(){const _0x1cb815=_0x3c5d74,_0x3073fa=extension_settings[extensionName];if(_0x3073fa['nccsEnabled']===undefined)_0x3073fa[_0x1cb815(0x1e3)]=![];if(_0x3073fa[_0x1cb815(0x29e)]===undefined)_0x3073fa['nccsApiMode']='openai_test';if(_0x3073fa[_0x1cb815(0x167)]===undefined)_0x3073fa['nccsApiUrl']=_0x1cb815(0x266);if(_0x3073fa['nccsApiKey']===undefined)_0x3073fa[_0x1cb815(0x229)]='';if(_0x3073fa[_0x1cb815(0x15f)]===undefined)_0x3073fa[_0x1cb815(0x15f)]='';if(_0x3073fa[_0x1cb815(0x2e2)]===undefined)_0x3073fa[_0x1cb815(0x2e2)]=0x7d0;if(_0x3073fa[_0x1cb815(0x276)]===undefined)_0x3073fa['nccsTemperature']=0.7;if(_0x3073fa[_0x1cb815(0x174)]===undefined)_0x3073fa[_0x1cb815(0x174)]='';const _0x141462=document['getElementById']('nccs-api-enabled'),_0x243d5a=document['getElementById'](_0x1cb815(0x185)),_0x1ae72d=document[_0x1cb815(0x194)](_0x1cb815(0x151)),_0x3e32d3=document[_0x1cb815(0x194)]('nccs-api-url'),_0x3ce78a=document[_0x1cb815(0x194)](_0x1cb815(0x20f)),_0x1751a2=document[_0x1cb815(0x194)](_0x1cb815(0x2b6)),_0x2dc881=document[_0x1cb815(0x194)](_0x1cb815(0x227)),_0x24a2d3=document[_0x1cb815(0x194)]('nccs-max-tokens-value'),_0x346a9e=document[_0x1cb815(0x194)](_0x1cb815(0x13a)),_0x4c9b30=document[_0x1cb815(0x194)]('nccs-temperature-value'),_0x14c5af=document[_0x1cb815(0x194)]('nccs-sillytavern-preset'),_0x28bc5e=document[_0x1cb815(0x194)](_0x1cb815(0x17c)),_0x5c323a=document[_0x1cb815(0x194)]('nccs-fetch-models');if(!_0x141462||!_0x243d5a)return;_0x141462[_0x1cb815(0x2a1)]=_0x3073fa[_0x1cb815(0x1e3)];if(_0x1ae72d)_0x1ae72d[_0x1cb815(0x120)]=_0x3073fa[_0x1cb815(0x29e)];if(_0x3e32d3)_0x3e32d3[_0x1cb815(0x120)]=_0x3073fa[_0x1cb815(0x167)];if(_0x3ce78a)_0x3ce78a[_0x1cb815(0x120)]=_0x3073fa['nccsApiKey'];if(_0x1751a2)_0x1751a2[_0x1cb815(0x120)]=_0x3073fa[_0x1cb815(0x15f)];if(_0x2dc881){_0x2dc881[_0x1cb815(0x120)]=_0x3073fa['nccsMaxTokens'];if(_0x24a2d3)_0x24a2d3[_0x1cb815(0x1a2)]=_0x3073fa['nccsMaxTokens'];}if(_0x346a9e){_0x346a9e[_0x1cb815(0x120)]=_0x3073fa[_0x1cb815(0x276)];if(_0x4c9b30)_0x4c9b30[_0x1cb815(0x1a2)]=_0x3073fa[_0x1cb815(0x276)];}if(_0x14c5af)_0x14c5af[_0x1cb815(0x120)]=_0x3073fa[_0x1cb815(0x174)]||'';const _0x7cbb2e=()=>{const _0x7e2b70=_0x1cb815;_0x243d5a['style']['display']=_0x141462[_0x7e2b70(0x2a1)]?_0x7e2b70(0x2d4):'none';};_0x7cbb2e();const _0x1bb717=()=>{const _0x4036e3=_0x1cb815;if(!_0x1ae72d)return;const _0x369319=_0x1ae72d[_0x4036e3(0x120)]==='sillytavern_preset',_0x354f05=_0x1ae72d[_0x4036e3(0x120)]===_0x4036e3(0x170),_0x3cbfda=_0x14c5af?.[_0x4036e3(0x1ad)]('.amily2_opt_settings_block');_0x3cbfda&&(_0x3cbfda['style']['display']=_0x369319?'block':_0x4036e3(0x10f));const _0x401b8c=[{'element':_0x3e32d3,'containerId':null},{'element':_0x3ce78a,'containerId':null},{'element':_0x1751a2,'containerId':null},{'element':_0x2dc881,'containerId':null},{'element':_0x346a9e,'containerId':null}];_0x401b8c[_0x4036e3(0x1f4)](({element:_0x2e0763})=>{const _0x433ae6=_0x4036e3;if(_0x2e0763){const _0x1754a5=_0x2e0763[_0x433ae6(0x1ad)](_0x433ae6(0x252));_0x1754a5&&(_0x1754a5[_0x433ae6(0x1b4)][_0x433ae6(0x267)]=_0x369319?_0x433ae6(0x10f):_0x433ae6(0x2d4));}});const _0x129150=_0x28bc5e?.[_0x4036e3(0x1ad)](_0x4036e3(0x1ba));_0x129150&&(_0x129150[_0x4036e3(0x1b4)]['display']=_0x4036e3(0x21d));};_0x1bb717(),_0x141462[_0x1cb815(0x1a4)](_0x1cb815(0x1a7),()=>{const _0x4d8a15=_0x1cb815;_0x3073fa[_0x4d8a15(0x1e3)]=_0x141462[_0x4d8a15(0x2a1)],saveSettingsDebounced(),_0x7cbb2e(),log(_0x4d8a15(0x169)+(_0x141462[_0x4d8a15(0x2a1)]?_0x4d8a15(0x24e):_0x4d8a15(0x249)),'info');});_0x1ae72d&&_0x1ae72d[_0x1cb815(0x1a4)](_0x1cb815(0x1a7),()=>{const _0x290b06=_0x1cb815;_0x3073fa[_0x290b06(0x29e)]=_0x1ae72d['value'],saveSettingsDebounced(),_0x1bb717(),log(_0x290b06(0xfa)+_0x1ae72d[_0x290b06(0x120)],_0x290b06(0xf7));});if(_0x3e32d3){const _0x449821=()=>{const _0x1dd89a=_0x1cb815;_0x3073fa[_0x1dd89a(0x167)]=_0x3e32d3[_0x1dd89a(0x120)],saveSettingsDebounced();};_0x3e32d3[_0x1cb815(0x1a4)]('blur',_0x449821);}if(_0x3ce78a){const _0x5e350f=()=>{const _0x3e45cb=_0x1cb815;_0x3073fa[_0x3e45cb(0x229)]=_0x3ce78a[_0x3e45cb(0x120)],saveSettingsDebounced();};_0x3ce78a[_0x1cb815(0x1a4)]('blur',_0x5e350f);}if(_0x1751a2){const _0x2b1fa4=()=>{const _0x4ed1a5=_0x1cb815;_0x3073fa['nccsModel']=_0x1751a2[_0x4ed1a5(0x120)],saveSettingsDebounced();};_0x1751a2[_0x1cb815(0x1a4)](_0x1cb815(0x17a),_0x2b1fa4),_0x1751a2['addEventListener'](_0x1cb815(0x23b),_0x2b1fa4);}_0x2dc881&&_0x24a2d3&&(_0x2dc881[_0x1cb815(0x1a4)](_0x1cb815(0x23b),()=>{const _0x5c638a=_0x1cb815;_0x24a2d3['textContent']=_0x2dc881[_0x5c638a(0x120)];}),_0x2dc881[_0x1cb815(0x1a4)](_0x1cb815(0x1a7),()=>{const _0xefe2d=_0x1cb815;_0x3073fa[_0xefe2d(0x2e2)]=parseInt(_0x2dc881[_0xefe2d(0x120)]),saveSettingsDebounced();}));_0x346a9e&&_0x4c9b30&&(_0x346a9e[_0x1cb815(0x1a4)](_0x1cb815(0x23b),()=>{const _0x1bc90e=_0x1cb815;_0x4c9b30[_0x1bc90e(0x1a2)]=_0x346a9e[_0x1bc90e(0x120)];}),_0x346a9e[_0x1cb815(0x1a4)](_0x1cb815(0x1a7),()=>{const _0x1a75ed=_0x1cb815;_0x3073fa[_0x1a75ed(0x276)]=parseFloat(_0x346a9e[_0x1a75ed(0x120)]),saveSettingsDebounced();}));_0x14c5af&&_0x14c5af[_0x1cb815(0x1a4)](_0x1cb815(0x1a7),()=>{const _0x353f3d=_0x1cb815;_0x3073fa[_0x353f3d(0x174)]=_0x14c5af[_0x353f3d(0x120)],saveSettingsDebounced();});_0x28bc5e&&_0x28bc5e[_0x1cb815(0x1a4)](_0x1cb815(0x28c),async()=>{const _0x19f339=_0x1cb815;_0x28bc5e['disabled']=!![],_0x28bc5e['innerHTML']=_0x19f339(0x2a3);try{const _0x441ec2=await testNccsApiConnection();_0x441ec2?(toastr[_0x19f339(0x243)](_0x19f339(0x166)),log('Nccs\x20API连接测试成功',_0x19f339(0x243))):(toastr[_0x19f339(0x272)](_0x19f339(0x102)),log('Nccs\x20API连接测试失败',_0x19f339(0x272)));}catch(_0x3f8ee0){toastr['error']('Nccs\x20API连接测试出错:'+_0x3f8ee0[_0x19f339(0x228)]),log(_0x19f339(0x115)+_0x3f8ee0[_0x19f339(0x228)],_0x19f339(0x272));}finally{_0x28bc5e[_0x19f339(0x187)]=![],_0x28bc5e['innerHTML']=_0x19f339(0x113);}});_0x5c323a&&_0x5c323a['addEventListener'](_0x1cb815(0x28c),async()=>{const _0x1dba0f=_0x1cb815;_0x5c323a[_0x1dba0f(0x187)]=!![],_0x5c323a[_0x1dba0f(0x1dc)]=_0x1dba0f(0x168);_0x3e32d3&&(_0x3073fa[_0x1dba0f(0x167)]=_0x3e32d3[_0x1dba0f(0x120)]);_0x3ce78a&&(_0x3073fa['nccsApiKey']=_0x3ce78a[_0x1dba0f(0x120)]);saveSettingsDebounced();try{const _0x90fb15=await fetchNccsModels();if(_0x90fb15&&_0x90fb15['length']>0x0){let _0x21b13f=document['getElementById']('nccs-api-model-select');!_0x21b13f&&(_0x21b13f=document[_0x1dba0f(0x24b)](_0x1dba0f(0x126)),_0x21b13f['id']=_0x1dba0f(0x1a3),_0x21b13f[_0x1dba0f(0xf9)]=_0x1dba0f(0x138),_0x1751a2[_0x1dba0f(0x261)][_0x1dba0f(0x1fe)](_0x21b13f,_0x1751a2[_0x1dba0f(0x2d8)])),_0x21b13f[_0x1dba0f(0x1dc)]=_0x1dba0f(0x22b),_0x90fb15['forEach'](_0x327be7=>{const _0x116040=_0x1dba0f,_0x361e68=document[_0x116040(0x24b)]('option');_0x361e68[_0x116040(0x120)]=_0x327be7['id']||_0x327be7[_0x116040(0x244)],_0x361e68[_0x116040(0x1a2)]=_0x327be7[_0x116040(0x244)]||_0x327be7['id'],(_0x327be7['id']||_0x327be7[_0x116040(0x244)])===_0x3073fa[_0x116040(0x15f)]&&(_0x361e68[_0x116040(0x253)]=!![]),_0x21b13f[_0x116040(0x1f9)](_0x361e68);}),_0x1751a2[_0x1dba0f(0x1b4)][_0x1dba0f(0x267)]=_0x1dba0f(0x10f),_0x21b13f[_0x1dba0f(0x1b4)]['display']=_0x1dba0f(0x2d4),_0x21b13f['addEventListener'](_0x1dba0f(0x1a7),()=>{const _0x7e98=_0x1dba0f,_0x1f74fb=_0x21b13f[_0x7e98(0x120)];_0x3073fa[_0x7e98(0x15f)]=_0x1f74fb,_0x1751a2[_0x7e98(0x120)]=_0x1f74fb,saveSettingsDebounced();}),toastr['success']('成功获取\x20'+_0x90fb15[_0x1dba0f(0x1d8)]+_0x1dba0f(0x1fb)),log(_0x1dba0f(0x26b)+_0x90fb15[_0x1dba0f(0x1d8)]+_0x1dba0f(0x1fb),_0x1dba0f(0x243));}else toastr[_0x1dba0f(0x222)]('未获取到可用模型'),log(_0x1dba0f(0x2b1),_0x1dba0f(0x165));}catch(_0x18b288){toastr['error'](_0x1dba0f(0x10d)+_0x18b288[_0x1dba0f(0x228)]),log('Nccs\x20API获取模型失败:'+_0x18b288[_0x1dba0f(0x228)],_0x1dba0f(0x272));}finally{_0x5c323a[_0x1dba0f(0x187)]=![],_0x5c323a[_0x1dba0f(0x1dc)]=_0x1dba0f(0x2aa);}});const _0x53feea=async()=>{const _0x47b671=_0x1cb815;if(!_0x14c5af)return;try{const _0x544ce8=getContext();if(!_0x544ce8?.[_0x47b671(0x11d)]?.[_0x47b671(0x144)]?.[_0x47b671(0x16f)])throw new Error(_0x47b671(0x1c3));const _0x3cc830=_0x544ce8[_0x47b671(0x11d)][_0x47b671(0x144)][_0x47b671(0x16f)],_0x432ecd=_0x3073fa[_0x47b671(0x174)];_0x14c5af[_0x47b671(0x1dc)]='',_0x14c5af[_0x47b671(0x1f9)](new Option('选择预设','',![],![])),_0x3cc830&&_0x3cc830[_0x47b671(0x1d8)]>0x0?(_0x3cc830[_0x47b671(0x1f4)](_0x36ad92=>{const _0x4100ad=_0x47b671,_0x5fc55f=_0x36ad92['id']===_0x432ecd,_0x1afdbc=new Option(_0x36ad92[_0x4100ad(0x244)],_0x36ad92['id'],_0x5fc55f,_0x5fc55f);_0x14c5af['appendChild'](_0x1afdbc);}),log('成功加载\x20'+_0x3cc830[_0x47b671(0x1d8)]+_0x47b671(0x24c),_0x47b671(0x243))):log(_0x47b671(0x17b),'warn');}catch(_0x521da4){log(_0x47b671(0x1b7)+_0x521da4[_0x47b671(0x228)],_0x47b671(0x272));}};_0x1ae72d&&_0x14c5af&&(_0x1ae72d['addEventListener'](_0x1cb815(0x1a7),()=>{const _0x5ad3c2=_0x1cb815;_0x1ae72d[_0x5ad3c2(0x120)]===_0x5ad3c2(0x1f5)&&_0x53feea();}),_0x3073fa[_0x1cb815(0x29e)]===_0x1cb815(0x1f5)&&_0x53feea()),log(_0x1cb815(0x223),_0x1cb815(0x243));}function bindChatTableDisplaySetting(){const _0xc19914=_0x3c5d74,_0x2ee54e=extension_settings[extensionName],_0x4028df=document[_0xc19914(0x194)](_0xc19914(0x1cb)),_0x1c362c=document[_0xc19914(0x194)](_0xc19914(0x100));if(!_0x4028df||!_0x1c362c){log(_0xc19914(0x14d),_0xc19914(0x165));return;}_0x4028df['checked']=_0x2ee54e[_0xc19914(0x193)]===!![],_0x1c362c['checked']=_0x2ee54e['render_on_every_message']===!![];const _0x28b808=()=>{const _0x13b555=_0xc19914;_0x4028df[_0x13b555(0x2a1)]?(_0x1c362c['disabled']=![],_0x1c362c[_0x13b555(0x1ad)](_0x13b555(0x213))[_0x13b555(0x1b4)][_0x13b555(0x20c)]='1'):(_0x1c362c[_0x13b555(0x187)]=!![],_0x1c362c[_0x13b555(0x1ad)](_0x13b555(0x213))[_0x13b555(0x1b4)][_0x13b555(0x20c)]=_0x13b555(0x1ec));};_0x28b808(),_0x4028df['addEventListener'](_0xc19914(0x1a7),()=>{const _0xc9bbd5=_0xc19914;_0x2ee54e['show_table_in_chat']=_0x4028df[_0xc9bbd5(0x2a1)],saveSettingsDebounced(),toastr[_0xc9bbd5(0xf7)]('聊天内表格显示已'+(_0x4028df[_0xc9bbd5(0x2a1)]?'开启':'关闭')+'。'),_0x28b808();}),_0x1c362c[_0xc19914(0x1a4)](_0xc19914(0x1a7),()=>{const _0x4702dd=_0xc19914;_0x2ee54e[_0x4702dd(0xfc)]=_0x1c362c[_0x4702dd(0x2a1)],saveSettingsDebounced(),toastr[_0x4702dd(0xf7)](_0x4702dd(0x186)+(_0x1c362c[_0x4702dd(0x2a1)]?'开启':'关闭')+_0x4702dd(0x2db));}),log(_0xc19914(0x1c9),'success');} +const _0xc6d991=_0x54ef;(function(_0x4bc794,_0x5ed8db){const _0x101fb1=_0x54ef,_0x540247=_0x4bc794();while(!![]){try{const _0x44326d=parseInt(_0x101fb1(0x282))/0x1*(parseInt(_0x101fb1(0x179))/0x2)+parseInt(_0x101fb1(0x175))/0x3+-parseInt(_0x101fb1(0x28a))/0x4*(parseInt(_0x101fb1(0x180))/0x5)+-parseInt(_0x101fb1(0x11a))/0x6*(-parseInt(_0x101fb1(0x27f))/0x7)+parseInt(_0x101fb1(0x172))/0x8+-parseInt(_0x101fb1(0x1ee))/0x9*(parseInt(_0x101fb1(0x25a))/0xa)+-parseInt(_0x101fb1(0x1bb))/0xb*(-parseInt(_0x101fb1(0x26f))/0xc);if(_0x44326d===_0x5ed8db)break;else _0x540247['push'](_0x540247['shift']());}catch(_0x4bde54){_0x540247['push'](_0x540247['shift']());}}}(_0x3643,0x735d3));import*as _0x93db26 from'../core/table-system/manager.js';import{log}from'../core/table-system/logger.js';import{extension_settings,getContext}from'/scripts/extensions.js';import{extensionName}from'../utils/settings.js';import{updateOrInsertTableInChat}from'./message-table-renderer.js';import{saveSettingsDebounced}from'/script.js';import{startBatchFilling}from'../core/table-system/batch-filler.js';import{showHtmlModal}from'./page-window.js';import{DEFAULT_AI_RULE_TEMPLATE,DEFAULT_AI_FLOW_TEMPLATE}from'../core/table-system/settings.js';import{world_names,loadWorldInfo}from'/scripts/world-info.js';import{safeCharLorebooks,safeLorebookEntries}from'../core/tavernhelper-compatibility.js';import{characters,this_chid,eventSource,event_types}from'/script.js';import{fetchNccsModels,testNccsApiConnection}from'../core/api/NccsApi.js';function _0x54ef(_0x1b1ef6,_0x17bc2d){const _0x3643fc=_0x3643();return _0x54ef=function(_0x54efb1,_0x12467d){_0x54efb1=_0x54efb1-0xf8;let _0x2f901e=_0x3643fc[_0x54efb1];return _0x2f901e;},_0x54ef(_0x1b1ef6,_0x17bc2d);}const isTouchDevice=()=>window[_0xc6d991(0x267)](_0xc6d991(0x277))[_0xc6d991(0x1f7)],getAllTablesContainer=()=>document[_0xc6d991(0x16c)]('all-tables-container');let isResizing=![];function toggleRowContextMenu(_0x1d18fd){const _0x3fe02f=_0xc6d991;_0x1d18fd[_0x3fe02f(0x2ee)](),_0x1d18fd['stopPropagation']();const _0x2102c4=_0x1d18fd[_0x3fe02f(0x195)][_0x3fe02f(0x104)](_0x3fe02f(0x19e));if(!_0x2102c4)return;const _0x1f2286=_0x2102c4['closest'](_0x3fe02f(0x27b));if(!_0x1f2286)return;const _0x45f4c5=_0x2102c4['classList'][_0x3fe02f(0xfe)](_0x3fe02f(0x20f));document[_0x3fe02f(0x212)](_0x3fe02f(0x1cd))[_0x3fe02f(0x14b)](_0x234114=>{const _0x52f6c0=_0x3fe02f;if(_0x234114!==_0x2102c4){_0x234114['classList']['remove']('amily2-menu-open'),_0x234114[_0x52f6c0(0x263)][_0x52f6c0(0x1ba)]='',_0x234114[_0x52f6c0(0x263)][_0x52f6c0(0x293)]='';const _0x31bf41=_0x234114['closest'](_0x52f6c0(0x27b));_0x31bf41&&(_0x31bf41[_0x52f6c0(0x263)][_0x52f6c0(0x2ad)]='auto',_0x31bf41[_0x52f6c0(0x263)]['zIndex']='',_0x31bf41[_0x52f6c0(0x263)][_0x52f6c0(0x293)]='');}}),_0x2102c4['classList'][_0x3fe02f(0x28f)](_0x3fe02f(0x20f));_0x2102c4[_0x3fe02f(0x14a)]['contains'](_0x3fe02f(0x20f))?(_0x1f2286[_0x3fe02f(0x263)][_0x3fe02f(0x2ad)]=_0x3fe02f(0x13b),_0x1f2286['style'][_0x3fe02f(0x293)]=_0x3fe02f(0x124),_0x1f2286['style'][_0x3fe02f(0x1ba)]='10',_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x293)]=_0x3fe02f(0x124),_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x1ba)]=_0x3fe02f(0x134)):(_0x1f2286[_0x3fe02f(0x263)][_0x3fe02f(0x2ad)]='auto',_0x1f2286['style']['position']='',_0x1f2286['style'][_0x3fe02f(0x1ba)]='',_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x293)]='',_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x1ba)]='');const _0x5c0bc4=_0x4cb60d=>{const _0xa3c1f4=_0x3fe02f;!_0x2102c4['contains'](_0x4cb60d[_0xa3c1f4(0x195)])&&(_0x2102c4[_0xa3c1f4(0x14a)][_0xa3c1f4(0x1e4)](_0xa3c1f4(0x20f)),_0x2102c4[_0xa3c1f4(0x263)][_0xa3c1f4(0x293)]='',_0x2102c4[_0xa3c1f4(0x263)][_0xa3c1f4(0x1ba)]='',_0x1f2286[_0xa3c1f4(0x263)]['overflowX']=_0xa3c1f4(0x10c),_0x1f2286[_0xa3c1f4(0x263)][_0xa3c1f4(0x293)]='',_0x1f2286[_0xa3c1f4(0x263)][_0xa3c1f4(0x1ba)]='',document[_0xa3c1f4(0x2a6)](_0xa3c1f4(0x29d),_0x5c0bc4,!![]));};_0x2102c4[_0x3fe02f(0x14a)]['contains'](_0x3fe02f(0x20f))&&setTimeout(()=>{const _0x34ba72=_0x3fe02f;document[_0x34ba72(0x242)](_0x34ba72(0x29d),_0x5c0bc4,!![]);},0x0);}function toggleColumnContextMenu(_0x3a9ec9){const _0x1933ac=_0xc6d991;if(isResizing||_0x3a9ec9['target'][_0x1933ac(0x14a)][_0x1933ac(0xfe)](_0x1933ac(0x1ef)))return;_0x3a9ec9[_0x1933ac(0x2ee)](),_0x3a9ec9[_0x1933ac(0x1eb)]();const _0x37cfb4=_0x3a9ec9[_0x1933ac(0x195)][_0x1933ac(0x104)]('th');if(!_0x37cfb4)return;const _0x1232b4=_0x37cfb4['closest'](_0x1933ac(0x27b));if(!_0x1232b4)return;const _0xd82936=_0x37cfb4['classList'][_0x1933ac(0xfe)](_0x1933ac(0x20f));document['querySelectorAll'](_0x1933ac(0x1e3))[_0x1933ac(0x14b)](_0x510511=>{const _0xdf6fbb=_0x1933ac;if(_0x510511!==_0x37cfb4){_0x510511[_0xdf6fbb(0x14a)][_0xdf6fbb(0x1e4)](_0xdf6fbb(0x20f));const _0x104136=_0x510511[_0xdf6fbb(0x104)](_0xdf6fbb(0x27b));_0x104136&&(_0x104136[_0xdf6fbb(0x263)]['overflowX']=_0xdf6fbb(0x10c),_0x104136['style'][_0xdf6fbb(0x1ba)]='',_0x104136[_0xdf6fbb(0x263)][_0xdf6fbb(0x293)]='');}}),_0x37cfb4[_0x1933ac(0x14a)][_0x1933ac(0x28f)](_0x1933ac(0x20f));_0x37cfb4[_0x1933ac(0x14a)]['contains']('amily2-menu-open')?(_0x1232b4[_0x1933ac(0x263)][_0x1933ac(0x2ad)]='visible',_0x1232b4[_0x1933ac(0x263)][_0x1933ac(0x293)]=_0x1933ac(0x124),_0x1232b4['style'][_0x1933ac(0x1ba)]='10'):(_0x1232b4['style'][_0x1933ac(0x2ad)]=_0x1933ac(0x10c),_0x1232b4['style'][_0x1933ac(0x293)]='',_0x1232b4[_0x1933ac(0x263)][_0x1933ac(0x1ba)]='');const _0x428644=_0x88011e=>{const _0x7bb1ef=_0x1933ac;!_0x37cfb4[_0x7bb1ef(0xfe)](_0x88011e[_0x7bb1ef(0x195)])&&(_0x37cfb4['classList']['remove'](_0x7bb1ef(0x20f)),_0x1232b4['style'][_0x7bb1ef(0x2ad)]=_0x7bb1ef(0x10c),_0x1232b4[_0x7bb1ef(0x263)][_0x7bb1ef(0x293)]='',_0x1232b4[_0x7bb1ef(0x263)][_0x7bb1ef(0x1ba)]='',document[_0x7bb1ef(0x2a6)](_0x7bb1ef(0x29d),_0x428644,!![]));};_0x37cfb4[_0x1933ac(0x14a)][_0x1933ac(0xfe)]('amily2-menu-open')&&setTimeout(()=>{document['addEventListener']('click',_0x428644,!![]);},0x0);}function toggleHeaderIndexContextMenu(_0x2a891b){const _0x150649=_0xc6d991;_0x2a891b[_0x150649(0x2ee)](),_0x2a891b['stopPropagation']();const _0x4941ea=_0x2a891b[_0x150649(0x195)][_0x150649(0x104)](_0x150649(0x249));if(!_0x4941ea)return;const _0x1600fe=_0x4941ea[_0x150649(0x17d)](_0x150649(0x14e));if(!_0x1600fe)return;const _0x5b08c6=_0x1600fe['classList'][_0x150649(0xfe)]('amily2-menu-active');document[_0x150649(0x212)](_0x150649(0x138))['forEach'](_0x44245f=>{const _0xa8928f=_0x150649;_0x44245f[_0xa8928f(0x14a)][_0xa8928f(0x1e4)](_0xa8928f(0x25b));});!_0x5b08c6&&_0x1600fe[_0x150649(0x14a)][_0x150649(0x197)]('amily2-menu-active');const _0xbde0ed=_0x1f1548=>{const _0x57cccf=_0x150649;!_0x1600fe['contains'](_0x1f1548[_0x57cccf(0x195)])&&(_0x1600fe[_0x57cccf(0x14a)][_0x57cccf(0x1e4)](_0x57cccf(0x25b)),document[_0x57cccf(0x2a6)]('click',_0xbde0ed,!![]));};setTimeout(()=>{const _0x577a66=_0x150649;_0x1600fe[_0x577a66(0x14a)][_0x577a66(0xfe)]('amily2-menu-active')&&document[_0x577a66(0x242)](_0x577a66(0x29d),_0xbde0ed,!![]);},0x0);}function showInputDialog({title:_0xb2cf72,label:_0x245cf7,currentValue:_0x165570,placeholder:_0x18239b,onSave:_0x239eca}){const _0x3ee6eb=_0xc6d991,_0x57b318=_0x3ee6eb(0x1cb)+_0xb2cf72+_0x3ee6eb(0x1de)+_0x245cf7+'\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{const _0xde6a1c=_0x3ee6eb;_0x2b155a[0x0][_0xde6a1c(0x10b)](),_0x2b155a['remove']();},_0x223b13=()=>{const _0xaad09f=_0x3ee6eb,_0x46af64=_0x3ad368['val']()[_0xaad09f(0xf9)]();if(_0x46af64&&_0x46af64!==_0x165570)_0x239eca(_0x46af64);else{if(!_0x46af64){toastr[_0xaad09f(0xfc)]('名称不能为空!'),_0x3ad368[_0xaad09f(0x2c1)]();return;}}_0x3358b5();};_0x2b155a['find'](_0x3ee6eb(0x15a))['on'](_0x3ee6eb(0x29d),_0x223b13),_0x2b155a[_0x3ee6eb(0x1e5)](_0x3ee6eb(0x1ab))['on']('click',_0x3358b5),_0x3ad368['on']('keypress',_0x119201=>{if(_0x119201['which']===0xd)_0x223b13();}),_0x3ad368['on'](_0x3ee6eb(0x16a),_0x2b67c5=>{const _0x92fc04=_0x3ee6eb;if(_0x2b67c5[_0x92fc04(0x1d7)]===0x1b)_0x3358b5();}),_0x2b155a[0x0]['showModal'](),_0x3ad368[_0x3ee6eb(0x2c1)]()[_0x3ee6eb(0x2f0)]();}function _0x3643(){const _0x5e9b2b=['\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\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\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\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\x20\x20\x20','colIndex','table-updated','.popup-button-cancel','moveRow','table_injection_enabled','amily2-import-preset-btn','add-table-placeholder','rowIndex','input','.delete-table-btn','获取角色世界书失败。

','\x22\x20title=\x22下移\x22>','table_exclusion_rules','独立提取规则已保存。','\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【删除】:\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-export-preset-btn',':\x20不超过\x20','zIndex','737peYDXJ','\x0a\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\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\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','data','index-col','block','.radio-group','amily2-export-preset-full-btn','success','restore-row-btn','CHAT_CHANGED','sillytavern_preset','html','addRow','showModal','cellIndex','\x0a\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','parentElement','.amily2-menu-open','selected','rows','nccs-api-enabled',']\x20检测到角色/聊天切换,正在刷新表格系统UI和世界书设置...','label','restoreRow','add-above','delete-row-btn','向左移动','which','\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\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','connectionManager','未选择或绑定世界书。

','exportPreset','parentNode','th.amily2-menu-open','remove','find','normal','在右加列','nccsApiUrl','down','fa-undo','stopPropagation','table-injection-depth','contenteditable','171HaZvty','amily2-resizer','字数限制为0表示不设置规则。','input[name=\x22table-injection-role\x22]','amily2-clear-global-preset-btn','amily2-context-menu','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','moveColumn','stringify','matches','appendTo','amily2-context-menu\x20amily2-row-context-menu','.edit-rules-btn','0.5',']”\x20吗?此操作不可逆!','向上移动','rename','alignItems','.sinan-nav-item','opacity','loadTables','marginTop','选择预设','nccs-fetch-models','injection','input[name=\x22filling-mode\x22]','table-role-system','amily2-table-wrapper','blur','【最终警告】您确定要永久废黜表格\x20“[','move-up','start','touchend','amily2-menu-open','未知表格','headers','querySelectorAll',']\x20刷新世界书设置时出错:','.json','htmlFor','删除该列','insertBefore','.amily2_opt_settings_block','找不到聊天内表格相关的开关,绑定失败。','warn','input[type=\x22checkbox\x22]:checked','table_selected_entries','.table-rename-icon','createTHead','无标题条目','恢复该行','rule_add','table-injection-enabled','-tab','\x20获取模型','nccs-max-tokens-value','无法获取SillyTavern配置文件列表','\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提示:输入内容将用于更新项目。\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\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取消\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\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','起始楼层不能大于结束楼层。','#add-exclusion-rule-btn','attr','value','reorganizeEventBound','right','then','end','display','deleteTable','marginBottom','[内存储司]\x20加载世界书条目失败:','filling_mode','span','[内存储司]\x20重新整理功能导入失败:','add-left','floor-end-input','table_worldbook_source','nccsApiKey','流程提示词已恢复为默认。','render_on_every_message','type','fa-arrow-right','40px','您确定要将规则提示词恢复为默认设置吗?','table_worldbook_char_limit_value','addEventListener','Nccs\x20API获取到\x20','entries','#new-rule-limit-input','请输入列名...','bookName','\x20创建第一行','th.index-col','getBatchFillerRuleTemplate','bottom','#sinan-','nccs-temperature-value','指令模板编辑器已成功绑定。','clearGlobalPreset','rollback-and-refill-btn','nccsEnabled','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20所选世界书中没有条目。

','新表格','none','offsetWidth','move-table-up-btn','updateRow','context-reading-value','(pointer:\x20coarse)','批量填表-流程提示词已保存。','。请切换聊天以应用更改。','table-injection-position','.amily2-table-wrapper','table-system-master-switch','您确定要删除\x20“','change','4218095YSHVDI','.settings-group','addHighlight','686754IKfXtA','[内存储司-工部]\x20缺少表格数据或容器,无法渲染。','file_name','点击添加第一行','moveTable','startsWith','delete-row','批量填表-规则提示词已恢复默认。','4lgIIUs','\x0aUID:\x20','规则提示词已保存。','Nccs\x20API连接测试成功!','move-row-up-btn','toggle','checkbox-item','未找到可用的SillyTavern配置文件','charLimitRule','position','nccs-api-model','col-index','updateTableRules','flex','val','聊天内表格显示已','rowStatuses','left','insertRow','click','reorganize-table-btn','clientX','scrollLeft','extensionSettings','length','deleteColumn','appendChild','move-right','removeEventListener','\x22\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\x20style=\x22padding:\x2010px;\x20border-radius:\x206px;\x20border:\x201px\x20solid\x20rgba(255,255,255,0.3);\x20background:\x20rgba(0,0,0,0.2);\x20color:\x20#fff;\x20font-size:\x201em;\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\x20\x20\x20placeholder=\x22','log','name','touchmove','touchstart','列名:','overflowX','表格注入设置已成功绑定。','table_worldbook_entry_list','pending-deletion-row','checkbox','add-below','nextSibling','table-independent-rules-enabled','.rule-end','Nccs\x20API连接测试出错:','delete','active','has','floor-start-input','pointer','\x20获取中...','col','table_tags_to_extract','\x22\x20title=\x22重命名\x22>\x20','世界书设置已成功绑定。','focus','addColumn','importGlobalPreset','.add-col-btn','character','option','body','children','main-api','聊天内表格显示设置及其依赖关系已成功绑定。','scrollTop','openai_test','#rule-delete','uid','\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\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','持续渲染最新消息功能已','includes','成功加载\x20','add-row-below-btn','\x22\x20placeholder=\x22例如:\x20content,game,time\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20仅提取指定XML标签的内容,例如填“content”,即提取...中的内容。\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','insertCell','div[style*=\x22overflowX\x22]','createTBody','../core/table-system/batch-filler.js','comment','role','流程提示词已保存。','amily2-context-menu\x20amily2-header-menu','disabled','table_refresh_worldbooks','\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当表格总行数超过设定值时,将在表格底部显示警告。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\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【说明】:\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测试连接','100%','previousElementSibling','additional','

加载条目中...

','amily2-table-','Nccs\x20API连接测试成功','Nccs\x20API事件绑定完成','nccs-api-key','preventDefault','世界书:\x20','select','isCurrentTablesEmpty','未知列\x20(','nccs-api-model-select','danger','trim','\x22>\x20','ai-flow-template-editor','warning','touches','contains','Nccs\x20API获取模型失败:','ai-flow-template-restore-btn','.sinan-tab-pane','您确定要将表格状态回退到上一楼,并使用最新消息重新填表吗?','#rule-add','closest','nccs-temperature','getMemoryState','优化中填表','楼层不能小于1。','innerHTML','.remove-rule-btn','close','auto','startFloorRangeFilling','menu_button\x20small_button','删除该行','columnWidths','fill-table-now-btn','justifyContent','pending-deletion','charLimitRules','#rule-row-limit-value','nccs-api-url','table_worldbook_select_wrapper','.control-block-with-switch','addTable','6WxNUuP','.move-table-up-btn','规则提示词已恢复为默认。','top','table_selected_worldbooks','\x22\x20title=\x22废黜此表\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20','context_reading_level','\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\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保存\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','rowLimitRule','show-table-in-chat-toggle','relative','getTime','colgroup','.hly-scroll','--\x20选择要添加规则的列\x20--','内存状态为空,从聊天记录加载作为后备。','table_worldbook_enabled','\x0a\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\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内容长度限制\x20(0为禁用)\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\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','context-reading-slider-container','visible','textContent','.move-table-down-btn','updateColumnWidth','配置独立提取规则','add-row-above-btn','编辑列名','title','startCurrentFloorFilling','fa-arrow-up','book','table_worldbook_checkbox_list','在左加列','tableIndex','amily2-clear-all-tables-btn','classList','forEach','[内存储司]\x20获取角色世界书失败:','未获取到可用模型','.amily2-context-menu','createElement','”\x20列吗?','2px','\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【增加】:\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世界书设置已刷新','在下加行','parse','nccs-test-connection','#current-char-limit-rules','message','\x22\x20title=\x22上移\x22>','.popup-button-ok','已禁用','成功获取\x20','请输入一个有效的字数限制(大于等于0)。','\x22\x20placeholder=\x22起始标记\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{const _0x1a0eb7=_0x1d01ad;_0x93db26[_0x1a0eb7(0x193)](_0x45d69e,_0x172498,_0x51b6c5),renderTables(),toastr[_0x1a0eb7(0x1c3)]('列名已更新为\x20\x22'+_0x51b6c5+'\x22');}});}function showTableNameEditor(_0x38d15b,_0x2288f0){const _0x524fc0=_0xc6d991;showInputDialog({'title':_0x524fc0(0x2d0),'label':'表名:','currentValue':_0x2288f0,'placeholder':'请输入表名...','onSave':_0x5657be=>{const _0x48d431=_0x524fc0;_0x93db26[_0x48d431(0x181)](_0x38d15b,_0x5657be),renderTables(),toastr[_0x48d431(0x1c3)](_0x48d431(0x178)+_0x5657be+'\x22');}});}function positionContextMenu(_0x5cf053,_0x49230f){const _0x1918ea=_0xc6d991;_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x293)]='absolute',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x1ba)]='10000',_0x5cf053['style'][_0x1918ea(0x29b)]='0',_0x5cf053[_0x1918ea(0x263)]['right']=_0x1918ea(0x10c),_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x203)]='',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x232)]='',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x19a)]='',_0x5cf053[_0x1918ea(0x263)]['overflowY']='';const _0x32e35a=window['innerHeight'],_0xffec4e=_0x49230f['getBoundingClientRect'](),_0x2a5629=0xc8,_0x10b36d=_0x49230f[_0x1918ea(0x104)](_0x1918ea(0x127)),_0x4873ac=_0x10b36d?_0x10b36d[_0x1918ea(0x12d)]():{'top':0x0,'bottom':_0x32e35a},_0x3e88db=Math['min'](_0x32e35a,_0x4873ac['bottom'])-_0xffec4e[_0x1918ea(0x24b)],_0x19329a=_0xffec4e[_0x1918ea(0x11d)]-Math['max'](0x0,_0x4873ac['top']);_0x3e88db<_0x2a5629&&_0x19329a>_0x3e88db?(_0x5cf053[_0x1918ea(0x263)]['top']='auto',_0x5cf053['style']['bottom']=_0x1918ea(0x2e6),_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x232)]=_0x1918ea(0x151)):(_0x5cf053[_0x1918ea(0x263)]['top']=_0x1918ea(0x2e6),_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x24b)]='auto',_0x5cf053['style'][_0x1918ea(0x203)]=_0x1918ea(0x151));const _0x18d1a8=0xa0,_0x3ca7a7=_0x49230f['closest'](_0x1918ea(0x269)),_0x2d66c0=_0x3ca7a7?_0x3ca7a7['closest'](_0x1918ea(0x2d8)):null;if(_0x2d66c0){const _0x2b373e=_0x2d66c0[_0x1918ea(0x12d)](),_0x58106a=_0xffec4e['left']-_0x2b373e[_0x1918ea(0x29b)];_0x58106a+_0x18d1a8>_0x2b373e[_0x1918ea(0x198)]-0x14&&(_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x29b)]='auto',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x22d)]='0');}}export function renderTables(){const _0x1d6dd1=_0xc6d991;let _0x3a4c57=_0x93db26[_0x1d6dd1(0x106)]();!_0x3a4c57&&(log(_0x1d6dd1(0x129),_0x1d6dd1(0x21a)),_0x3a4c57=_0x93db26[_0x1d6dd1(0x202)]());const _0x10836d=getAllTablesContainer();if(!_0x3a4c57||!_0x10836d){console[_0x1d6dd1(0x26a)](_0x1d6dd1(0x283));return;}const _0x42c3ce=_0x93db26['getHighlights'](),_0x323042=_0x93db26[_0x1d6dd1(0x170)](),_0x1de6b4=document[_0x1d6dd1(0x19d)](),_0x33c80d=document['getElementById'](_0x1d6dd1(0x1af));_0x33c80d&&_0x33c80d[_0x1d6dd1(0x1e4)](),_0x3a4c57['forEach']((_0x449a66,_0x559cb1)=>{const _0x473ea6=_0x1d6dd1,_0x1325fe=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x1325fe[_0x473ea6(0x263)][_0x473ea6(0x230)]='flex',_0x1325fe[_0x473ea6(0x263)][_0x473ea6(0x112)]='space-between',_0x1325fe[_0x473ea6(0x263)][_0x473ea6(0x1ff)]=_0x473ea6(0x165);const _0xbbdc6=document[_0x473ea6(0x14f)]('h3');_0x323042['has'](_0x559cb1)&&_0xbbdc6[_0x473ea6(0x14a)][_0x473ea6(0x197)](_0x473ea6(0x1aa));_0xbbdc6[_0x473ea6(0x109)]=_0x473ea6(0x194)+_0x559cb1+_0x473ea6(0x2bf)+_0x449a66[_0x473ea6(0x2a9)];const _0x119fcd=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x119fcd[_0x473ea6(0x188)]='table-controls';const _0x54b3e3=_0x559cb1>0x0?_0x473ea6(0x252)+_0x559cb1+_0x473ea6(0x159):'',_0xeba45f=_0x559cb1<_0x3a4c57[_0x473ea6(0x2a2)]-0x1?_0x473ea6(0x19c)+_0x559cb1+_0x473ea6(0x1b4):'';_0x119fcd[_0x473ea6(0x109)]=_0x473ea6(0x1f4)+_0x54b3e3+_0x473ea6(0x1f4)+_0xeba45f+_0x473ea6(0x183)+_0x559cb1+_0x473ea6(0x266)+_0x559cb1+_0x473ea6(0x11f),_0x1325fe[_0x473ea6(0x2a4)](_0xbbdc6),_0x1325fe['appendChild'](_0x119fcd),_0x1de6b4['appendChild'](_0x1325fe);const _0x326ee0=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x326ee0[_0x473ea6(0x188)]=_0x473ea6(0x209);const _0x1b2282=document[_0x473ea6(0x14f)]('table');_0x1b2282['id']=_0x473ea6(0x2ea)+_0x559cb1,_0x1b2282['dataset'][_0x473ea6(0x148)]=_0x559cb1;const _0x5a1ad5=document[_0x473ea6(0x14f)](_0x473ea6(0x126)),_0x4692a3=document['createElement']('col');_0x4692a3[_0x473ea6(0x263)][_0x473ea6(0x198)]=_0x473ea6(0x23f),_0x5a1ad5[_0x473ea6(0x2a4)](_0x4692a3);_0x449a66['headers']&&_0x449a66['headers'][_0x473ea6(0x14b)]((_0x529473,_0x306561)=>{const _0x1ebb30=_0x473ea6,_0x444246=document[_0x1ebb30(0x14f)]('col'),_0x2eee94=_0x449a66[_0x1ebb30(0x110)]&&_0x449a66[_0x1ebb30(0x110)][_0x306561]?_0x449a66[_0x1ebb30(0x110)][_0x306561]:0x5a;_0x444246['style']['width']=_0x2eee94+'px',_0x5a1ad5['appendChild'](_0x444246);});_0x1b2282[_0x473ea6(0x2a4)](_0x5a1ad5);let _0x2b62df=0x0;const _0x4fd198=_0x5a1ad5[_0x473ea6(0x212)](_0x473ea6(0x2bd));_0x4fd198[_0x473ea6(0x14b)](_0x1e35f0=>{const _0x4aa67e=_0x473ea6;_0x2b62df+=parseInt(_0x1e35f0['style'][_0x4aa67e(0x198)],0xa);}),_0x1b2282['style'][_0x473ea6(0x198)]=_0x2b62df+'px';const _0x4b27c5=_0x1b2282[_0x473ea6(0x21e)](),_0x594470=_0x4b27c5[_0x473ea6(0x29c)](),_0x11c62c=document[_0x473ea6(0x14f)]('th');_0x11c62c[_0x473ea6(0x188)]=_0x473ea6(0x1bf),_0x11c62c[_0x473ea6(0x13c)]='#',_0x11c62c[_0x473ea6(0x263)]['cursor']='pointer',_0x11c62c[_0x473ea6(0x142)]=_0x473ea6(0x285);if(!_0x449a66['rows']||_0x449a66['rows']['length']===0x0){const _0x156f63=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x156f63[_0x473ea6(0x188)]=_0x473ea6(0x2de),_0x156f63[_0x473ea6(0x263)][_0x473ea6(0x230)]=_0x473ea6(0x272);const _0x42e2e7=document['createElement'](_0x473ea6(0x26b));_0x42e2e7[_0x473ea6(0x109)]=_0x473ea6(0x248),_0x42e2e7[_0x473ea6(0x188)]=_0x473ea6(0x10e),_0x42e2e7['addEventListener'](_0x473ea6(0x29d),_0xe3e010=>{const _0x59520e=_0x473ea6;_0xe3e010[_0x59520e(0x1eb)](),_0x93db26[_0x59520e(0x1c8)](_0x559cb1),renderTables();}),_0x156f63[_0x473ea6(0x2a4)](_0x42e2e7),_0x11c62c[_0x473ea6(0x2a4)](_0x156f63),_0x11c62c[_0x473ea6(0x242)](_0x473ea6(0x29d),_0x2882da=>{const _0x1de127=_0x473ea6;_0x2882da[_0x1de127(0x2ee)](),_0x2882da['stopPropagation'](),console[_0x1de127(0x2a8)]('Header\x20#\x20clicked\x20for\x20table',_0x559cb1),_0x93db26[_0x1de127(0x1c8)](_0x559cb1),renderTables(),toastr['success'](_0x1de127(0x190));});}_0x594470[_0x473ea6(0x2a4)](_0x11c62c),_0x449a66[_0x473ea6(0x211)]['forEach']((_0x32cc2a,_0x1af9c4)=>{const _0x4ddb95=_0x473ea6,_0x3e1392=document['createElement']('th');_0x3e1392[_0x4ddb95(0x137)]['colIndex']=_0x1af9c4,_0x3e1392[_0x4ddb95(0x263)][_0x4ddb95(0x135)]=_0x4ddb95(0x2bb);const _0x5631d4=document[_0x4ddb95(0x14f)](_0x4ddb95(0x235));_0x5631d4[_0x4ddb95(0x188)]='amily2-header-text',_0x5631d4['textContent']=_0x32cc2a,_0x3e1392[_0x4ddb95(0x2a4)](_0x5631d4);const _0x42d337=document[_0x4ddb95(0x14f)](_0x4ddb95(0x16b));_0x42d337['className']=_0x4ddb95(0x1f3);const _0x461913=[{'label':_0x4ddb95(0x1d6),'action':_0x4ddb95(0x261),'icon':'fa-arrow-left'},{'label':'向右移动','action':_0x4ddb95(0x2a5),'icon':_0x4ddb95(0x23e)},{'label':_0x4ddb95(0x147),'action':'add-left','icon':'fa-plus-circle'},{'label':_0x4ddb95(0x1e7),'action':'add-right','icon':_0x4ddb95(0x191)},{'label':_0x4ddb95(0x141),'action':'rename','icon':_0x4ddb95(0x17e)},{'label':_0x4ddb95(0x216),'action':_0x4ddb95(0x2b7),'icon':_0x4ddb95(0x171),'isDanger':!![]}];_0x461913[_0x4ddb95(0x14b)](({label:_0x5f15cd,action:_0x1c1556,icon:_0x52025c,isDanger:_0x41012b})=>{const _0x5d5de7=_0x4ddb95,_0x12877c=document[_0x5d5de7(0x14f)](_0x5d5de7(0x26b));_0x12877c[_0x5d5de7(0x13c)]=_0x5f15cd,_0x12877c['className']=_0x5d5de7(0x10e);if(_0x41012b)_0x12877c[_0x5d5de7(0x14a)][_0x5d5de7(0x197)](_0x5d5de7(0xf8));_0x12877c['addEventListener']('click',_0x41bbe5=>{const _0x24ed34=_0x5d5de7;_0x41bbe5[_0x24ed34(0x1eb)]();switch(_0x1c1556){case _0x24ed34(0x261):_0x93db26[_0x24ed34(0x1f5)](_0x559cb1,_0x1af9c4,_0x24ed34(0x29b));break;case _0x24ed34(0x2a5):_0x93db26['moveColumn'](_0x559cb1,_0x1af9c4,'right');break;case _0x24ed34(0x237):_0x93db26[_0x24ed34(0x161)](_0x559cb1,_0x1af9c4,_0x24ed34(0x29b));break;case _0x24ed34(0x176):_0x93db26[_0x24ed34(0x161)](_0x559cb1,_0x1af9c4,_0x24ed34(0x22d));break;case _0x24ed34(0x1fe):showColumnNameEditor(_0x559cb1,_0x1af9c4,_0x32cc2a);break;case _0x24ed34(0x2b7):confirm(_0x24ed34(0x27d)+_0x32cc2a+_0x24ed34(0x150))&&_0x93db26[_0x24ed34(0x2a3)](_0x559cb1,_0x1af9c4);break;}renderTables();}),_0x42d337[_0x5d5de7(0x2a4)](_0x12877c);}),_0x3e1392['appendChild'](_0x42d337);const _0x4a84f9=document[_0x4ddb95(0x14f)](_0x4ddb95(0x16b));_0x4a84f9[_0x4ddb95(0x188)]=_0x4ddb95(0x1ef),_0x3e1392[_0x4ddb95(0x2a4)](_0x4a84f9);const _0x54f4ba=_0x1d3ce4=>{const _0x4add9f=_0x4ddb95;_0x1d3ce4['preventDefault'](),_0x1d3ce4[_0x4add9f(0x1eb)](),isResizing=!![];const _0x16e9cb=_0x1d3ce4[_0x4add9f(0x195)][_0x4add9f(0x104)](_0x4add9f(0x269)),_0x3a6dbe=_0x1d3ce4[_0x4add9f(0x195)][_0x4add9f(0x1cc)],_0x5c21a7=_0x16e9cb[_0x4add9f(0x17d)]('colgroup\x20>\x20col:nth-child('+(_0x3a6dbe[_0x4add9f(0x1ca)]+0x1)+')'),_0x15cb15=_0x1d3ce4[_0x4add9f(0x23d)][_0x4add9f(0x287)]('touch'),_0x42554b=_0x15cb15?_0x1d3ce4['touches'][0x0][_0x4add9f(0x29f)]:_0x1d3ce4[_0x4add9f(0x29f)],_0x46d3d5=_0x3a6dbe[_0x4add9f(0x273)],_0x46dbe4=_0x5e9261=>{const _0x92a4b8=_0x4add9f,_0x35ed17=_0x15cb15?_0x5e9261[_0x92a4b8(0xfd)][0x0][_0x92a4b8(0x29f)]:_0x5e9261[_0x92a4b8(0x29f)],_0x2d5cfd=_0x46d3d5+(_0x35ed17-_0x42554b);_0x2d5cfd>0x32&&(_0x5c21a7[_0x92a4b8(0x263)][_0x92a4b8(0x198)]=_0x2d5cfd+'px');},_0x57e243=()=>{const _0xce8d00=_0x4add9f;document[_0xce8d00(0x2a6)](_0xce8d00(0x262),_0x46dbe4),document[_0xce8d00(0x2a6)]('mouseup',_0x57e243),document[_0xce8d00(0x2a6)]('touchmove',_0x46dbe4),document[_0xce8d00(0x2a6)](_0xce8d00(0x20e),_0x57e243);const _0x1b1a9c=parseInt(_0x5c21a7[_0xce8d00(0x263)][_0xce8d00(0x198)],0xa);_0x93db26[_0xce8d00(0x13e)](_0x559cb1,_0x1af9c4,_0x1b1a9c),setTimeout(()=>{isResizing=![];},0x0);};_0x15cb15?(document[_0x4add9f(0x242)](_0x4add9f(0x2aa),_0x46dbe4,{'passive':![]}),document[_0x4add9f(0x242)](_0x4add9f(0x20e),_0x57e243)):(document[_0x4add9f(0x242)](_0x4add9f(0x262),_0x46dbe4),document[_0x4add9f(0x242)](_0x4add9f(0x26d),_0x57e243));};_0x4a84f9[_0x4ddb95(0x242)]('mousedown',_0x54f4ba),_0x4a84f9[_0x4ddb95(0x242)](_0x4ddb95(0x2ab),_0x54f4ba,{'passive':![]}),_0x594470[_0x4ddb95(0x2a4)](_0x3e1392);});const _0x379ad3=_0x1b2282[_0x473ea6(0x2d9)]();_0x449a66[_0x473ea6(0x1cf)]&&_0x449a66[_0x473ea6(0x1cf)]['length']>0x0&&_0x449a66[_0x473ea6(0x1cf)][_0x473ea6(0x14b)]((_0x3b00f2,_0x1dba6e)=>{const _0x2c9f75=_0x473ea6,_0x4fdae7=_0x379ad3['insertRow']();_0x4fdae7[_0x2c9f75(0x137)][_0x2c9f75(0x1b0)]=_0x1dba6e;const _0x42f054=_0x449a66[_0x2c9f75(0x29a)]?_0x449a66['rowStatuses'][_0x1dba6e]:_0x2c9f75(0x1e6);_0x42f054===_0x2c9f75(0x113)&&_0x4fdae7[_0x2c9f75(0x14a)]['add'](_0x2c9f75(0x2b0));const _0x3b6b53=_0x4fdae7[_0x2c9f75(0x2d7)]();_0x3b6b53[_0x2c9f75(0x188)]=_0x2c9f75(0x1bf);const _0x1ea219=document[_0x2c9f75(0x14f)]('span');_0x1ea219[_0x2c9f75(0x13c)]=_0x1dba6e+0x1,_0x3b6b53['appendChild'](_0x1ea219);const _0x1b6e0b=document[_0x2c9f75(0x14f)](_0x2c9f75(0x16b));_0x1b6e0b[_0x2c9f75(0x188)]=_0x2c9f75(0x1f9);let _0x56eb66;_0x42f054===_0x2c9f75(0x113)?_0x56eb66=[{'label':_0x2c9f75(0x220),'action':'restore-row','icon':_0x2c9f75(0x1ea),'isSuccess':!![],'btnClass':_0x2c9f75(0x1c4)}]:_0x56eb66=[{'label':_0x2c9f75(0x1fd),'action':_0x2c9f75(0x20c),'icon':_0x2c9f75(0x144),'btnClass':_0x2c9f75(0x28e)},{'label':'向下移动','action':_0x2c9f75(0x19f),'icon':_0x2c9f75(0x163),'btnClass':_0x2c9f75(0x15f)},{'label':_0x2c9f75(0x160),'action':_0x2c9f75(0x1d4),'icon':_0x2c9f75(0x191),'btnClass':_0x2c9f75(0x140)},{'label':_0x2c9f75(0x154),'action':_0x2c9f75(0x2b2),'icon':_0x2c9f75(0x191),'btnClass':_0x2c9f75(0x2d5)},{'label':_0x2c9f75(0x10f),'action':_0x2c9f75(0x288),'icon':_0x2c9f75(0x171),'isDanger':!![],'btnClass':_0x2c9f75(0x1d5)}],_0x56eb66[_0x2c9f75(0x14b)](({label:_0x566338,action:_0x2a83d3,icon:_0x2d09ea,isDanger:_0x3e7db2,isSuccess:_0x3173d6})=>{const _0x451b63=_0x2c9f75,_0x2bcc21=document[_0x451b63(0x14f)](_0x451b63(0x26b));_0x2bcc21[_0x451b63(0x109)]=_0x451b63(0x174)+_0x2d09ea+_0x451b63(0xfa)+_0x566338,_0x2bcc21[_0x451b63(0x188)]=_0x451b63(0x10e);if(_0x3e7db2)_0x2bcc21[_0x451b63(0x14a)][_0x451b63(0x197)](_0x451b63(0xf8));if(_0x3173d6)_0x2bcc21[_0x451b63(0x14a)][_0x451b63(0x197)](_0x451b63(0x1c3));_0x2bcc21[_0x451b63(0x242)](_0x451b63(0x29d),_0x6d5b1c=>{const _0x1b631e=_0x451b63;_0x6d5b1c[_0x1b631e(0x1eb)]();switch(_0x2a83d3){case _0x1b631e(0x20c):_0x93db26[_0x1b631e(0x1ac)](_0x559cb1,_0x1dba6e,'up');break;case'move-down':_0x93db26[_0x1b631e(0x1ac)](_0x559cb1,_0x1dba6e,'down');break;case _0x1b631e(0x1d4):_0x93db26[_0x1b631e(0x29c)](_0x559cb1,_0x1dba6e,'above');break;case'add-below':_0x93db26[_0x1b631e(0x29c)](_0x559cb1,_0x1dba6e,'below');break;case _0x1b631e(0x288):_0x93db26['deleteRow'](_0x559cb1,_0x1dba6e);break;case _0x1b631e(0x256):_0x93db26[_0x1b631e(0x1d3)](_0x559cb1,_0x1dba6e);break;}if(_0x2a83d3===_0x1b631e(0x288)||_0x2a83d3===_0x1b631e(0x256)){}else renderTables();}),_0x1b6e0b[_0x451b63(0x2a4)](_0x2bcc21);}),_0x3b6b53[_0x2c9f75(0x2a4)](_0x1b6e0b),_0x3b00f2[_0x2c9f75(0x14b)]((_0x659437,_0x4e032d)=>{const _0x45c61d=_0x2c9f75,_0x1ff8c8=_0x4fdae7[_0x45c61d(0x2d7)](),_0x3b175f=document[_0x45c61d(0x14f)](_0x45c61d(0x16b));_0x3b175f['className']='amily2-cell-content',_0x3b175f[_0x45c61d(0x13c)]=_0x659437,_0x1ff8c8[_0x45c61d(0x2a4)](_0x3b175f);_0x42f054!=='pending-deletion'&&!isTouchDevice()&&_0x1ff8c8[_0x45c61d(0x18d)](_0x45c61d(0x1ed),_0x45c61d(0x18a));_0x1ff8c8['dataset'][_0x45c61d(0x1a9)]=_0x4e032d,_0x1ff8c8[_0x45c61d(0x137)][_0x45c61d(0x1d2)]=_0x449a66[_0x45c61d(0x211)][_0x4e032d]||'';const _0x43ff1f=_0x559cb1+'-'+_0x1dba6e+'-'+_0x4e032d;_0x42c3ce[_0x45c61d(0x2b9)](_0x43ff1f)&&_0x1ff8c8[_0x45c61d(0x14a)][_0x45c61d(0x197)]('cell-highlight');});}),_0x326ee0['appendChild'](_0x1b2282),_0x1de6b4['appendChild'](_0x326ee0);}),_0x10836d['innerHTML']='',_0x10836d[_0x1d6dd1(0x2a4)](_0x1de6b4),_0x33c80d&&_0x10836d['appendChild'](_0x33c80d),updateOrInsertTableInChat();}function openTableRuleEditor(){const _0x998dce=_0xc6d991,_0x5cb741=extension_settings[extensionName],_0x3a0c44=_0x5cb741[_0x998dce(0x2be)]||'',_0x27e0ff=_0x5cb741[_0x998dce(0x1b5)]||[],_0x67ea8b=_0x27e0ff[_0x998dce(0x189)]((_0x1e6de2,_0x3dc8e7)=>_0x998dce(0x12b)+_0x3dc8e7+_0x998dce(0x1d8)+_0x1e6de2[_0x998dce(0x20d)]+_0x998dce(0x15e)+_0x1e6de2[_0x998dce(0x22f)]+'\x22\x20placeholder=\x22结束标记\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')[_0x998dce(0x17c)](''),_0x4e092f=_0x998dce(0x1bc)+_0x3a0c44+_0x998dce(0x2d6)+_0x67ea8b+'\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\x20\x20\x20\x20移除所有被起始和结束标记包裹的内容(例如\x20OOC\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',_0x1ae8ec=showHtmlModal(_0x998dce(0x13f),_0x4e092f,{'onOk':()=>{const _0x5af4a0=_0x998dce,_0x24de17=document[_0x5af4a0(0x16c)](_0x5af4a0(0x177))[_0x5af4a0(0x22b)];updateAndSaveTableSetting(_0x5af4a0(0x2be),_0x24de17);const _0x484396=[];document[_0x5af4a0(0x212)]('#exclusion-rules-list\x20.exclusion-rule-item')['forEach'](_0x24c399=>{const _0x38f351=_0x5af4a0,_0x4b26ec=_0x24c399[_0x38f351(0x17d)]('.rule-start')[_0x38f351(0x22b)][_0x38f351(0xf9)](),_0x489781=_0x24c399[_0x38f351(0x17d)](_0x38f351(0x2b5))[_0x38f351(0x22b)]['trim']();_0x4b26ec&&_0x489781&&_0x484396[_0x38f351(0x1a4)]({'start':_0x4b26ec,'end':_0x489781});}),updateAndSaveTableSetting('table_exclusion_rules',_0x484396),toastr[_0x5af4a0(0x1c3)](_0x5af4a0(0x1b6));},'onShow':_0x2c6b51=>{const _0x453313=_0x998dce,_0x88febe=_0x2c6b51[_0x453313(0x1e5)]('#exclusion-rules-list');_0x2c6b51['find'](_0x453313(0x229))['on'](_0x453313(0x29d),()=>{const _0x55beb0=_0x453313,_0x1cc9ac=_0x88febe[_0x55beb0(0x2c8)]()[_0x55beb0(0x2a2)],_0x4164d4='\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\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\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';_0x88febe['append'](_0x4164d4);}),_0x88febe['on'](_0x453313(0x29d),_0x453313(0x10a),function(){$(this)['closest']('.exclusion-rule-item')['remove']();});}});}function openRuleEditor(_0x2aaf19){const _0x2ac8b4=_0xc6d991,_0x5e47d6=_0x93db26[_0x2ac8b4(0x106)]();if(!_0x5e47d6||!_0x5e47d6[_0x2aaf19])return;const _0x45e1e7=_0x5e47d6[_0x2aaf19];_0x45e1e7[_0x2ac8b4(0x292)]&&!_0x45e1e7[_0x2ac8b4(0x114)]&&(_0x45e1e7[_0x2ac8b4(0x114)]={},_0x45e1e7[_0x2ac8b4(0x292)][_0x2ac8b4(0x19b)]!==-0x1&&(_0x45e1e7[_0x2ac8b4(0x114)][_0x45e1e7[_0x2ac8b4(0x292)][_0x2ac8b4(0x19b)]]=_0x45e1e7[_0x2ac8b4(0x292)][_0x2ac8b4(0x1dd)]));const _0x27f775=_0x45e1e7['charLimitRules']||{},_0xee4110=_0xf4e9cc=>{const _0x2d01c8=_0x2ac8b4;return Object[_0x2d01c8(0x244)](_0xf4e9cc)[_0x2d01c8(0x189)](([_0x1bcdac,_0x15f166])=>{const _0x4a5d82=_0x2d01c8,_0x1d943d=_0x45e1e7[_0x4a5d82(0x211)][_0x1bcdac]||_0x4a5d82(0x2f2)+_0x1bcdac+')';return'\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'+_0x1d943d+_0x4a5d82(0x1b9)+_0x15f166+_0x4a5d82(0x2e1)+_0x1bcdac+_0x4a5d82(0x2d1);})[_0x2d01c8(0x17c)]('');},_0xe4588e=_0x2fa96e=>{const _0x3b6f5e=_0x2ac8b4;return _0x45e1e7[_0x3b6f5e(0x211)][_0x3b6f5e(0x189)]((_0x561018,_0x4c9842)=>{const _0x47c39a=_0x3b6f5e;if(_0x2fa96e[_0x4c9842])return'';return _0x47c39a(0x2cf)+_0x4c9842+'\x22>'+_0x561018+'';})['join']('');},_0x3c8e72='\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编辑\x20“'+_0x45e1e7[_0x2ac8b4(0x2a9)]+_0x2ac8b4(0x139)+_0xee4110(_0x27f775)+_0x2ac8b4(0x1a8)+_0xe4588e(_0x27f775)+'\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\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\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\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\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\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\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\x0a\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(0为禁用)\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{_0x11c53[0x0]['close'](),_0x11c53['remove']();},_0x4ad40c=()=>{const _0x137c6d=_0x2ac8b4,_0x111e03=JSON[_0x137c6d(0x155)](_0x11c53[_0x137c6d(0x1e5)](_0x137c6d(0x157))[_0x137c6d(0x22a)](_0x137c6d(0x18f))||'{}');_0x11c53['find'](_0x137c6d(0x157))[_0x137c6d(0x1c7)](_0xee4110(_0x111e03)),_0x11c53[_0x137c6d(0x1e5)]('#new-rule-column-select')['html'](_0x137c6d(0x128)+_0xe4588e(_0x111e03));};_0x11c53['find'](_0x2ac8b4(0x157))['attr']('data-rules',JSON['stringify'](_0x27f775)),_0x11c53['on']('click','#add-char-limit-rule-btn',()=>{const _0x461a90=_0x2ac8b4,_0x5337d=parseInt(_0x11c53[_0x461a90(0x1e5)]('#new-rule-column-select')[_0x461a90(0x298)](),0xa),_0xd19ddb=parseInt(_0x11c53[_0x461a90(0x1e5)](_0x461a90(0x245))['val'](),0xa);if(_0x5337d===-0x1){toastr[_0x461a90(0xfc)]('请选择一个列。');return;}if(isNaN(_0xd19ddb)||_0xd19ddb<0x0){toastr[_0x461a90(0xfc)](_0x461a90(0x15d));return;}const _0x29e1d3=JSON[_0x461a90(0x155)](_0x11c53[_0x461a90(0x1e5)](_0x461a90(0x157))[_0x461a90(0x22a)](_0x461a90(0x18f))||'{}');_0xd19ddb>0x0?(_0x29e1d3[_0x5337d]=_0xd19ddb,_0x11c53[_0x461a90(0x1e5)](_0x461a90(0x157))['attr'](_0x461a90(0x18f),JSON[_0x461a90(0x1f6)](_0x29e1d3)),_0x4ad40c()):toastr['info'](_0x461a90(0x1f0));}),_0x11c53['on']('click',_0x2ac8b4(0x1dc),function(){const _0x30d1b0=_0x2ac8b4,_0x5433a7=$(this)[_0x30d1b0(0x1be)](_0x30d1b0(0x295)),_0x59ec31=JSON[_0x30d1b0(0x155)](_0x11c53[_0x30d1b0(0x1e5)](_0x30d1b0(0x157))[_0x30d1b0(0x22a)]('data-rules')||'{}');delete _0x59ec31[_0x5433a7],_0x11c53[_0x30d1b0(0x1e5)](_0x30d1b0(0x157))[_0x30d1b0(0x22a)]('data-rules',JSON['stringify'](_0x59ec31)),_0x4ad40c();}),_0x11c53[_0x2ac8b4(0x1e5)](_0x2ac8b4(0x15a))['on']('click',()=>{const _0x54a971=_0x2ac8b4,_0xbd88bc=JSON[_0x54a971(0x155)](_0x11c53[_0x54a971(0x1e5)]('#current-char-limit-rules')['attr'](_0x54a971(0x18f))||'{}'),_0xfc60a6=parseInt(_0x11c53[_0x54a971(0x1e5)](_0x54a971(0x115))[_0x54a971(0x298)](),0xa),_0x1b441c={'note':_0x11c53[_0x54a971(0x1e5)]('#rule-note')[_0x54a971(0x298)](),'rule_add':_0x11c53[_0x54a971(0x1e5)](_0x54a971(0x103))[_0x54a971(0x298)](),'rule_delete':_0x11c53['find'](_0x54a971(0x2cd))['val'](),'rule_update':_0x11c53[_0x54a971(0x1e5)]('#rule-update')[_0x54a971(0x298)](),'charLimitRules':_0xbd88bc,'rowLimitRule':_0xfc60a6};_0x93db26[_0x54a971(0x296)](_0x2aaf19,_0x1b441c),_0x5a61fe();}),_0x11c53['find']('.popup-button-cancel')['on'](_0x2ac8b4(0x29d),_0x5a61fe),_0x11c53[0x0][_0x2ac8b4(0x1c9)]();}function bindInjectionSettings(){const _0x18fad7=_0xc6d991,_0xd15c37=extension_settings[extensionName],_0x5987ee=document[_0x18fad7(0x16c)](_0x18fad7(0x27c)),_0x177c73=document[_0x18fad7(0x16c)](_0x18fad7(0x222)),_0x3f1f47=document['getElementById'](_0x18fad7(0x27a)),_0x4313b8=document['getElementById'](_0x18fad7(0x1ec)),_0x2cc9b0=document[_0x18fad7(0x212)](_0x18fad7(0x1f1));if(!_0x5987ee||!_0x177c73||!_0x3f1f47||!_0x4313b8||!_0x2cc9b0[_0x18fad7(0x2a2)])return;const _0x2f9a0c=()=>{const _0xa24c78=_0x18fad7,_0x4df20d=_0x3f1f47['value'],_0xa9cbfd=_0x5987ee['checked'],_0x34fd16=_0x4df20d==='1';_0x177c73[_0xa24c78(0x2df)]=!_0xa9cbfd,_0x3f1f47[_0xa24c78(0x2df)]=!_0xa9cbfd,_0x4313b8[_0xa24c78(0x2df)]=!_0xa9cbfd||!_0x34fd16,_0x2cc9b0[_0xa24c78(0x14b)](_0xb4213f=>_0xb4213f[_0xa24c78(0x2df)]=!_0xa9cbfd||!_0x34fd16);const _0x1d5be8=_0xa9cbfd?'1':_0xa24c78(0x1fb);_0x177c73['style'][_0xa24c78(0x201)]=_0x1d5be8;_0x177c73[_0xa24c78(0x104)](_0xa24c78(0x118))&&(_0x177c73[_0xa24c78(0x104)]('.control-block-with-switch')['style'][_0xa24c78(0x201)]=_0x1d5be8);_0x3f1f47[_0xa24c78(0x263)][_0xa24c78(0x201)]=_0x1d5be8;_0x3f1f47[_0xa24c78(0x2e7)]&&(_0x3f1f47['previousElementSibling']['style'][_0xa24c78(0x201)]=_0x1d5be8);const _0x54e34b=_0xa9cbfd&&_0x34fd16?'1':'0.5';_0x4313b8['style'][_0xa24c78(0x201)]=_0x54e34b;_0x4313b8[_0xa24c78(0x2e7)]&&(_0x4313b8[_0xa24c78(0x2e7)][_0xa24c78(0x263)]['opacity']=_0x54e34b);const _0x751634=_0xa9cbfd&&_0x34fd16?'1':_0xa24c78(0x1fb),_0x38538b=document['getElementById'](_0xa24c78(0x208))?.[_0xa24c78(0x104)](_0xa24c78(0x1c1));_0x38538b&&(_0x38538b[_0xa24c78(0x263)][_0xa24c78(0x201)]=_0x751634,_0x38538b['previousElementSibling']&&(_0x38538b[_0xa24c78(0x2e7)][_0xa24c78(0x263)][_0xa24c78(0x201)]=_0x751634));const _0x77843c=document[_0xa24c78(0x212)](_0xa24c78(0x207));_0x77843c['forEach'](_0x7a3edd=>{const _0x13098e=_0xa24c78;_0x7a3edd[_0x13098e(0x2df)]=!_0xa9cbfd;const _0x11e9bc=_0x7a3edd['closest'](_0x13098e(0x1d2));_0x11e9bc&&(_0x11e9bc[_0x13098e(0x263)][_0x13098e(0x201)]=_0xa9cbfd?'1':_0x13098e(0x1fb));});const _0x5ea175=document['getElementById']('fill-table-now-btn');_0x5ea175&&(_0x5ea175['disabled']=!_0xa9cbfd,_0x5ea175[_0xa24c78(0x263)][_0xa24c78(0x201)]=_0xa9cbfd?'1':_0xa24c78(0x1fb));};_0x5987ee[_0x18fad7(0x26c)]=_0xd15c37[_0x18fad7(0x254)]!==![],_0x177c73[_0x18fad7(0x26c)]=_0xd15c37[_0x18fad7(0x1ad)],_0x3f1f47['value']=_0xd15c37['injection'][_0x18fad7(0x293)],_0x4313b8[_0x18fad7(0x22b)]=_0xd15c37['injection']['depth'],_0x2cc9b0[_0x18fad7(0x14b)](_0x56e3c7=>{const _0x28c3ba=_0x18fad7;parseInt(_0x56e3c7['value'],0xa)===_0xd15c37[_0x28c3ba(0x206)][_0x28c3ba(0x2dc)]&&(_0x56e3c7['checked']=!![]);}),_0x2f9a0c();if(_0x5987ee[_0x18fad7(0x137)][_0x18fad7(0x167)])return;_0x5987ee[_0x18fad7(0x242)](_0x18fad7(0x27e),()=>{const _0x656671=_0x18fad7;_0xd15c37[_0x656671(0x254)]=_0x5987ee['checked'],saveSettingsDebounced(),_0x2f9a0c();const _0x109b2e=_0x5987ee[_0x656671(0x26c)]?_0x656671(0x26e):_0x656671(0x15b);toastr['info'](_0x656671(0x196)+_0x109b2e+'。'),log(_0x656671(0x196)+_0x109b2e+'。','info');}),_0x177c73[_0x18fad7(0x242)](_0x18fad7(0x27e),()=>{const _0xb59af=_0x18fad7;_0xd15c37['table_injection_enabled']=_0x177c73[_0xb59af(0x26c)],saveSettingsDebounced();}),_0x3f1f47[_0x18fad7(0x242)](_0x18fad7(0x27e),()=>{const _0x2af862=_0x18fad7;_0xd15c37[_0x2af862(0x206)][_0x2af862(0x293)]=parseInt(_0x3f1f47['value'],0xa),saveSettingsDebounced(),_0x2f9a0c();}),_0x4313b8['addEventListener'](_0x18fad7(0x1b1),()=>{const _0x41f763=_0x18fad7;_0xd15c37[_0x41f763(0x206)][_0x41f763(0x164)]=parseInt(_0x4313b8['value'],0xa),saveSettingsDebounced();}),_0x2cc9b0['forEach'](_0x1f12a4=>{_0x1f12a4['addEventListener']('change',()=>{const _0x87d006=_0x54ef;_0x1f12a4[_0x87d006(0x26c)]&&(_0xd15c37[_0x87d006(0x206)][_0x87d006(0x2dc)]=parseInt(_0x1f12a4[_0x87d006(0x22b)],0xa),saveSettingsDebounced());});}),_0x5987ee[_0x18fad7(0x137)][_0x18fad7(0x167)]=_0x18fad7(0x18a),log(_0x18fad7(0x2ae),_0x18fad7(0x1c3));}function updateAndSaveTableSetting(_0x2c1ccd,_0xd7edea){!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][_0x2c1ccd]=_0xd7edea,saveSettingsDebounced();}function bindWorldBookSettings(){const _0x52e59d=_0xc6d991,_0x23152c=extension_settings[extensionName];if(_0x23152c[_0x52e59d(0x12a)]===undefined)_0x23152c[_0x52e59d(0x12a)]=![];if(_0x23152c[_0x52e59d(0x17b)]===undefined)_0x23152c[_0x52e59d(0x17b)]=0x7530;if(_0x23152c[_0x52e59d(0x239)]===undefined)_0x23152c['table_worldbook_source']=_0x52e59d(0x2c5);if(_0x23152c[_0x52e59d(0x11e)]===undefined)_0x23152c[_0x52e59d(0x11e)]=[];if(_0x23152c[_0x52e59d(0x21c)]===undefined)_0x23152c['table_selected_entries']={};const _0xba1878=document[_0x52e59d(0x16c)](_0x52e59d(0x12a)),_0x19bf57=document['getElementById'](_0x52e59d(0x17b)),_0x55f9cc=document['getElementById'](_0x52e59d(0x241)),_0x2915ca=document['querySelectorAll']('input[name=\x22table_worldbook_source\x22]'),_0x3695e6=document[_0x52e59d(0x16c)](_0x52e59d(0x117)),_0x33478c=document[_0x52e59d(0x16c)](_0x52e59d(0x2e0)),_0x20030a=document[_0x52e59d(0x16c)](_0x52e59d(0x146)),_0x5f2fa4=document['getElementById'](_0x52e59d(0x2af));if(!_0xba1878||!_0x19bf57||!_0x55f9cc||!_0x2915ca[_0x52e59d(0x2a2)]||!_0x3695e6||!_0x33478c||!_0x20030a||!_0x5f2fa4){log('无法找到世界书设置的相关UI元素,绑定失败。',_0x52e59d(0x21a));return;}const _0x50ee26=()=>{const _0x5029f4=_0x52e59d,_0x1e287f={};_0x5f2fa4['querySelectorAll'](_0x5029f4(0x21b))[_0x5029f4(0x14b)](_0x21faf1=>{const _0x6dcf4c=_0x5029f4,_0x30d180=_0x21faf1[_0x6dcf4c(0x137)][_0x6dcf4c(0x145)],_0x22cbd5=_0x21faf1['dataset'][_0x6dcf4c(0x2ce)];!_0x1e287f[_0x30d180]&&(_0x1e287f[_0x30d180]=[]),_0x1e287f[_0x30d180][_0x6dcf4c(0x1a4)](_0x22cbd5);}),_0x23152c[_0x5029f4(0x21c)]=_0x1e287f,saveSettingsDebounced();},_0x477014=async()=>{const _0x1ba53e=_0x52e59d;_0x5f2fa4[_0x1ba53e(0x109)]=_0x1ba53e(0x2e9);const _0x5d720c=_0x23152c[_0x1ba53e(0x239)]||_0x1ba53e(0x2c5);let _0x1ec73e=[];if(_0x5d720c===_0x1ba53e(0x162))_0x1ec73e=_0x23152c[_0x1ba53e(0x11e)]||[];else{if(this_chid!==undefined&&this_chid>=0x0&&characters[this_chid])try{const _0x3209ce=await safeCharLorebooks({'type':_0x1ba53e(0x187)});if(_0x3209ce[_0x1ba53e(0x185)])_0x1ec73e[_0x1ba53e(0x1a4)](_0x3209ce[_0x1ba53e(0x185)]);if(_0x3209ce[_0x1ba53e(0x2e8)]?.[_0x1ba53e(0x2a2)])_0x1ec73e['push'](..._0x3209ce['additional']);}catch(_0x2ac5a1){console['error'](_0x1ba53e(0x14c),_0x2ac5a1),_0x5f2fa4['innerHTML']=_0x1ba53e(0x1b3);return;}else{_0x5f2fa4[_0x1ba53e(0x109)]='请先加载一个角色。

';return;}}if(_0x1ec73e[_0x1ba53e(0x2a2)]===0x0){_0x5f2fa4[_0x1ba53e(0x109)]=_0x1ba53e(0x1e0);return;}try{const _0x24fe40=[];for(const _0x4c840b of _0x1ec73e){const _0x38b686=await safeLorebookEntries(_0x4c840b);_0x38b686[_0x1ba53e(0x14b)](_0x21ffea=>_0x24fe40[_0x1ba53e(0x1a4)]({..._0x21ffea,'bookName':_0x4c840b}));}_0x5f2fa4[_0x1ba53e(0x109)]='';if(_0x24fe40[_0x1ba53e(0x2a2)]===0x0){_0x5f2fa4[_0x1ba53e(0x109)]=_0x1ba53e(0x270);return;}_0x24fe40[_0x1ba53e(0x14b)](_0x2e9e55=>{const _0x9fc761=_0x1ba53e,_0x278d8c=document[_0x9fc761(0x14f)](_0x9fc761(0x16b));_0x278d8c['className']='checkbox-item',_0x278d8c[_0x9fc761(0x142)]=_0x9fc761(0x2ef)+_0x2e9e55[_0x9fc761(0x247)]+_0x9fc761(0x28b)+_0x2e9e55[_0x9fc761(0x2ce)];const _0xd7b56f=document[_0x9fc761(0x14f)](_0x9fc761(0x1b1));_0xd7b56f[_0x9fc761(0x23d)]='checkbox',_0xd7b56f['id']='wb-entry-check-'+_0x2e9e55[_0x9fc761(0x247)]+'-'+_0x2e9e55[_0x9fc761(0x2ce)],_0xd7b56f['dataset']['book']=_0x2e9e55['bookName'],_0xd7b56f[_0x9fc761(0x137)][_0x9fc761(0x2ce)]=_0x2e9e55['uid'];const _0x5957b4=_0x23152c[_0x9fc761(0x21c)][_0x2e9e55[_0x9fc761(0x247)]]?.[_0x9fc761(0x2d3)](String(_0x2e9e55['uid']));_0xd7b56f[_0x9fc761(0x26c)]=!!_0x5957b4;const _0x469c52=document[_0x9fc761(0x14f)](_0x9fc761(0x1d2));_0x469c52[_0x9fc761(0x215)]=_0xd7b56f['id'],_0x469c52['textContent']=_0x2e9e55[_0x9fc761(0x2db)]||_0x9fc761(0x21f),_0x278d8c['appendChild'](_0xd7b56f),_0x278d8c['appendChild'](_0x469c52),_0x5f2fa4[_0x9fc761(0x2a4)](_0x278d8c);});}catch(_0x106095){console['error'](_0x1ba53e(0x233),_0x106095),_0x5f2fa4[_0x1ba53e(0x109)]='加载条目失败。

';}},_0x4344c3=()=>{const _0x229a11=_0x52e59d,_0x9a4c84=world_names['map'](_0x9a82b5=>({'name':_0x9a82b5['replace'](_0x229a11(0x214),''),'file_name':_0x9a82b5}));_0x20030a[_0x229a11(0x109)]='',_0x9a4c84&&_0x9a4c84[_0x229a11(0x2a2)]>0x0?_0x9a4c84[_0x229a11(0x14b)](_0x1c8f1b=>{const _0xdf1506=_0x229a11,_0x1c562b=document[_0xdf1506(0x14f)](_0xdf1506(0x16b));_0x1c562b[_0xdf1506(0x188)]=_0xdf1506(0x290),_0x1c562b['title']=_0x1c8f1b['name'];const _0x501dcc=document['createElement']('input');_0x501dcc[_0xdf1506(0x23d)]=_0xdf1506(0x2b1),_0x501dcc['id']='wb-check-'+_0x1c8f1b[_0xdf1506(0x284)],_0x501dcc['value']=_0x1c8f1b[_0xdf1506(0x284)],_0x501dcc[_0xdf1506(0x26c)]=_0x23152c[_0xdf1506(0x11e)][_0xdf1506(0x2d3)](_0x1c8f1b[_0xdf1506(0x284)]),_0x501dcc[_0xdf1506(0x242)](_0xdf1506(0x27e),()=>{const _0x4fc523=_0xdf1506;_0x501dcc['checked']?!_0x23152c[_0x4fc523(0x11e)][_0x4fc523(0x2d3)](_0x1c8f1b['file_name'])&&_0x23152c['table_selected_worldbooks'][_0x4fc523(0x1a4)](_0x1c8f1b[_0x4fc523(0x284)]):_0x23152c[_0x4fc523(0x11e)]=_0x23152c[_0x4fc523(0x11e)][_0x4fc523(0x264)](_0x3ee59a=>_0x3ee59a!==_0x1c8f1b[_0x4fc523(0x284)]),saveSettingsDebounced(),_0x477014();});const _0x24440d=document['createElement']('label');_0x24440d[_0xdf1506(0x215)]=_0xdf1506(0x173)+_0x1c8f1b['file_name'],_0x24440d[_0xdf1506(0x13c)]=_0x1c8f1b['name'],_0x1c562b[_0xdf1506(0x2a4)](_0x501dcc),_0x1c562b[_0xdf1506(0x2a4)](_0x24440d),_0x20030a[_0xdf1506(0x2a4)](_0x1c562b);}):_0x20030a['innerHTML']='没有找到世界书。

',_0x477014();},_0x1ad8ce=()=>{const _0x3826d3=_0x52e59d,_0xcd2991=_0x23152c['table_worldbook_source']==='manual';_0x3695e6[_0x3826d3(0x263)][_0x3826d3(0x230)]=_0xcd2991?_0x3826d3(0x1c0):'none',_0x477014(),_0xcd2991&&_0x4344c3();};_0xba1878[_0x52e59d(0x26c)]=_0x23152c[_0x52e59d(0x12a)],_0x19bf57[_0x52e59d(0x22b)]=_0x23152c[_0x52e59d(0x17b)],_0x55f9cc[_0x52e59d(0x13c)]=_0x23152c[_0x52e59d(0x17b)],_0x2915ca[_0x52e59d(0x14b)](_0x410ef9=>{const _0x344540=_0x52e59d;_0x410ef9[_0x344540(0x26c)]=_0x410ef9[_0x344540(0x22b)]===_0x23152c[_0x344540(0x239)];}),_0x1ad8ce();if(_0xba1878[_0x52e59d(0x137)][_0x52e59d(0x167)])return;_0xba1878['addEventListener'](_0x52e59d(0x27e),()=>{const _0x2f0cd8=_0x52e59d;_0x23152c[_0x2f0cd8(0x12a)]=_0xba1878[_0x2f0cd8(0x26c)],saveSettingsDebounced();}),_0x19bf57[_0x52e59d(0x242)](_0x52e59d(0x1b1),()=>{const _0x526cab=_0x52e59d;_0x55f9cc[_0x526cab(0x13c)]=_0x19bf57[_0x526cab(0x22b)];}),_0x19bf57[_0x52e59d(0x242)]('change',()=>{_0x23152c['table_worldbook_char_limit']=parseInt(_0x19bf57['value'],0xa),saveSettingsDebounced();}),_0x2915ca['forEach'](_0x4150fb=>{const _0x2b0113=_0x52e59d;_0x4150fb[_0x2b0113(0x242)](_0x2b0113(0x27e),()=>{const _0xea28cb=_0x2b0113;_0x4150fb[_0xea28cb(0x26c)]&&(_0x23152c[_0xea28cb(0x239)]=_0x4150fb[_0xea28cb(0x22b)],_0x1ad8ce(),saveSettingsDebounced());});}),_0x33478c['addEventListener'](_0x52e59d(0x29d),_0x4344c3),_0x5f2fa4[_0x52e59d(0x242)](_0x52e59d(0x27e),_0x5e6156=>{_0x5e6156['target']['type']==='checkbox'&&_0x50ee26();}),_0xba1878[_0x52e59d(0x137)][_0x52e59d(0x167)]=_0x52e59d(0x18a),log(_0x52e59d(0x2c0),_0x52e59d(0x1c3));}export function bindTableEvents(){const _0x33e88f=_0xc6d991,_0x240270=document[_0x33e88f(0x16c)]('amily2_memorisation_forms_panel');if(!_0x240270||_0x240270['dataset'][_0x33e88f(0x167)])return;log('开始为表格视图绑定交互事件...',_0x33e88f(0x255));const _0x289976=_0x240270[_0x33e88f(0x212)](_0x33e88f(0x207)),_0x436a60=document[_0x33e88f(0x16c)](_0x33e88f(0x13a)),_0x4c4f71=document['getElementById'](_0x33e88f(0x1a0)),_0x317dc7=document['getElementById'](_0x33e88f(0x276)),_0x267da2=document[_0x33e88f(0x16c)](_0x33e88f(0x1a7)),_0x331ce1=document['getElementById'](_0x33e88f(0x2b4)),_0x123c7a=document[_0x33e88f(0x16c)](_0x33e88f(0x268)),_0xaea382=()=>{const _0x1923ce=_0x33e88f,_0x3f66f4=extension_settings[extensionName]?.[_0x1923ce(0x234)]||_0x1923ce(0x2c9);_0x289976[_0x1923ce(0x14b)](_0xdf71d7=>{const _0x87303c=_0x1923ce;_0xdf71d7['checked']=_0xdf71d7[_0x87303c(0x22b)]===_0x3f66f4;});const _0x4d3d18=_0x3f66f4==='secondary-api';_0x436a60&&(_0x436a60[_0x1923ce(0x263)][_0x1923ce(0x230)]=_0x4d3d18?_0x1923ce(0x1c0):_0x1923ce(0x272)),_0x267da2&&(_0x267da2[_0x1923ce(0x263)]['display']=_0x1923ce(0x297)),_0x331ce1&&_0x123c7a&&(_0x123c7a[_0x1923ce(0x263)][_0x1923ce(0x230)]=_0x331ce1[_0x1923ce(0x26c)]?_0x1923ce(0x1c0):'none');};_0x289976[_0x33e88f(0x14b)](_0x3e2efb=>{const _0x5800d6=_0x33e88f;_0x3e2efb[_0x5800d6(0x242)]('change',function(){const _0x2dc09c=_0x5800d6,_0x11a9f6=this['value'];updateAndSaveTableSetting(_0x2dc09c(0x234),_0x11a9f6);let _0x3c50a7=_0x2dc09c(0x25d);if(_0x11a9f6==='secondary-api')_0x3c50a7=_0x2dc09c(0x131);if(_0x11a9f6==='optimized')_0x3c50a7=_0x2dc09c(0x107);toastr[_0x2dc09c(0x255)]('填表模式已切换为\x20'+_0x3c50a7+'。'),_0xaea382();});});if(_0x4c4f71&&_0x317dc7){const _0x2b4853=extension_settings[extensionName]?.[_0x33e88f(0x120)]||0x4;_0x4c4f71[_0x33e88f(0x22b)]=_0x2b4853,_0x317dc7[_0x33e88f(0x13c)]=_0x2b4853,_0x4c4f71[_0x33e88f(0x242)]('input',function(){const _0xd0d92c=_0x33e88f;_0x317dc7['textContent']=this[_0xd0d92c(0x22b)];}),_0x4c4f71[_0x33e88f(0x242)](_0x33e88f(0x27e),function(){const _0x5eb6f6=_0x33e88f;updateAndSaveTableSetting(_0x5eb6f6(0x120),parseInt(this[_0x5eb6f6(0x22b)],0xa)),toastr['info']('上下文读取级别已设置为\x20'+this[_0x5eb6f6(0x22b)]+'。');});}_0x331ce1&&(_0x331ce1[_0x33e88f(0x26c)]=extension_settings[extensionName]?.[_0x33e88f(0x166)]??![],_0x331ce1['addEventListener'](_0x33e88f(0x27e),()=>{const _0x4b17bd=_0x33e88f;updateAndSaveTableSetting(_0x4b17bd(0x166),_0x331ce1[_0x4b17bd(0x26c)]),_0xaea382();}));_0xaea382();_0x123c7a&&_0x123c7a['addEventListener']('click',openTableRuleEditor);const _0x9dcdd0=()=>{renderTables(),bindInjectionSettings(),bindTemplateEditors();};_0x9dcdd0(),bindWorldBookSettings(),bindBatchFillButton(),bindFloorFillButtons(),bindReorganizeButton(),bindNccsApiEvents(),bindChatTableDisplaySetting();const _0x4f5227=document['querySelector']('#amily2_memorisation_forms_panel\x20.sinan-navigation-deck');_0x4f5227&&_0x4f5227[_0x33e88f(0x242)]('click',_0x6af184=>{const _0x50d3ca=_0x33e88f,_0x502eab=_0x6af184['target'][_0x50d3ca(0x104)](_0x50d3ca(0x200));if(!_0x502eab)return;const _0x18bace=_0x502eab[_0x50d3ca(0x137)][_0x50d3ca(0x1a5)];if(!_0x18bace)return;const _0x2f5ec5=_0x502eab[_0x50d3ca(0x104)](_0x50d3ca(0x280));if(!_0x2f5ec5)return;_0x2f5ec5[_0x50d3ca(0x212)]('.sinan-nav-item')[_0x50d3ca(0x14b)](_0x51e7ad=>_0x51e7ad[_0x50d3ca(0x14a)][_0x50d3ca(0x1e4)]('active')),_0x502eab[_0x50d3ca(0x14a)][_0x50d3ca(0x197)](_0x50d3ca(0x2b8)),_0x2f5ec5[_0x50d3ca(0x212)](_0x50d3ca(0x101))[_0x50d3ca(0x14b)](_0x35462e=>_0x35462e[_0x50d3ca(0x14a)][_0x50d3ca(0x1e4)](_0x50d3ca(0x2b8)));const _0x316f73=_0x2f5ec5[_0x50d3ca(0x17d)](_0x50d3ca(0x24c)+_0x18bace+_0x50d3ca(0x223));_0x316f73&&_0x316f73[_0x50d3ca(0x14a)]['add']('active');});const _0x31b57b=document['getElementById'](_0x33e88f(0x1b8)),_0x11e6f8=document['getElementById'](_0x33e88f(0x1c2)),_0x40f171=document[_0x33e88f(0x16c)](_0x33e88f(0x1ae)),_0x1a26b2=document[_0x33e88f(0x16c)]('amily2-import-global-preset-btn'),_0xb1a86d=document[_0x33e88f(0x16c)](_0x33e88f(0x1f2));_0x31b57b&&_0x31b57b[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>_0x93db26[_0x33e88f(0x1e1)]());_0x11e6f8&&_0x11e6f8[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>_0x93db26['exportPresetFull']());_0x40f171&&_0x40f171[_0x33e88f(0x242)]('click',()=>_0x93db26['importPreset'](_0x9dcdd0));_0x1a26b2&&_0x1a26b2[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>{const _0x2e5545=_0x33e88f,_0x548949=_0x93db26[_0x2e5545(0x2f1)]();_0x93db26[_0x2e5545(0x2c3)](()=>{const _0x12b788=_0x2e5545;_0x548949&&(_0x93db26[_0x12b788(0x202)](),_0x9dcdd0());});});_0xb1a86d&&_0xb1a86d[_0x33e88f(0x242)]('click',()=>{const _0x450fae=_0x33e88f,_0x1c46e5=_0x93db26['isCurrentTablesEmpty']();_0x93db26[_0x450fae(0x24f)](),_0x1c46e5&&(_0x93db26['loadTables'](),_0x9dcdd0());});const _0x4ceab6=document[_0x33e88f(0x16c)](_0x33e88f(0x149));_0x4ceab6&&_0x4ceab6[_0x33e88f(0x242)]('click',()=>{const _0x4bd8e4=_0x33e88f;confirm(_0x4bd8e4(0x1a1))&&(_0x93db26['clearAllTables'](),_0x9dcdd0());});const _0x15dbea=document[_0x33e88f(0x16c)](_0x33e88f(0x1af));_0x15dbea&&_0x15dbea[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>{const _0x3c225c=_0x33e88f,_0x3cf5b9=prompt(_0x3c225c(0x18c),_0x3c225c(0x271));_0x3cf5b9&&_0x3cf5b9['trim']()&&(_0x93db26[_0x3c225c(0x119)](_0x3cf5b9[_0x3c225c(0xf9)]()),_0x9dcdd0());});const _0x243933=getAllTablesContainer();if(_0x243933){_0x243933[_0x33e88f(0x242)](_0x33e88f(0x29d),_0x1d6983=>{const _0x4264f4=_0x33e88f,_0x2860e2=_0x1d6983[_0x4264f4(0x195)][_0x4264f4(0x104)]('th');if(_0x2860e2&&_0x2860e2['classList'][_0x4264f4(0xfe)](_0x4264f4(0x1bf))){toggleHeaderIndexContextMenu(_0x1d6983);return;}if(_0x2860e2&&!_0x2860e2['classList'][_0x4264f4(0xfe)]('index-col')){toggleColumnContextMenu(_0x1d6983);return;}const _0x48f211=_0x1d6983[_0x4264f4(0x195)][_0x4264f4(0x104)]('td.index-col');if(_0x48f211){toggleRowContextMenu(_0x1d6983);return;}const _0x18543b=_0x1d6983[_0x4264f4(0x195)][_0x4264f4(0x104)](_0x4264f4(0x21d));if(_0x18543b){const _0x5acb24=parseInt(_0x18543b['dataset'][_0x4264f4(0x148)],0xa),_0x295eba=_0x93db26[_0x4264f4(0x106)](),_0x71fba4=_0x295eba[_0x5acb24]?.[_0x4264f4(0x2a9)]||'';showTableNameEditor(_0x5acb24,_0x71fba4);return;}const _0x50e969=_0x1d6983['target'][_0x4264f4(0x104)](_0x4264f4(0x26b));if(!_0x50e969)return;const _0x64611f=parseInt(_0x50e969['dataset'][_0x4264f4(0x148)],0xa);if(_0x50e969[_0x4264f4(0x1f7)]('.add-row-btn'))_0x93db26[_0x4264f4(0x1c8)](_0x64611f),_0x9dcdd0();else{if(_0x50e969['matches'](_0x4264f4(0x2c4)))_0x93db26[_0x4264f4(0x2c2)](_0x64611f),_0x9dcdd0();else{if(_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x11b))||_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x13d))){const _0x8be378=_0x50e969[_0x4264f4(0x14a)][_0x4264f4(0xfe)](_0x4264f4(0x274))?'up':_0x4264f4(0x1e9);_0x93db26[_0x4264f4(0x286)](_0x64611f,_0x8be378),_0x9dcdd0();}else{if(_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x1fa)))openRuleEditor(_0x64611f);else{if(_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x1b2))){const _0x19f31f=_0x93db26[_0x4264f4(0x106)](),_0x456a6b=_0x19f31f[_0x64611f]?.[_0x4264f4(0x2a9)]||_0x4264f4(0x210);confirm(_0x4264f4(0x20b)+_0x456a6b+_0x4264f4(0x1fc))&&(_0x93db26[_0x4264f4(0x231)](_0x64611f),_0x9dcdd0());}}}}}});if(isTouchDevice()){let _0x207870=0x0,_0x2b277e=null;_0x243933['addEventListener'](_0x33e88f(0x2ab),_0x1a65b2=>{const _0x2a4e72=_0x33e88f,_0x188b29=_0x1a65b2['target']['closest']('td');if(!_0x188b29||_0x188b29[_0x2a4e72(0x137)][_0x2a4e72(0x1a9)]===undefined)return;const _0x461fce=new Date()[_0x2a4e72(0x125)](),_0x228c2c=_0x461fce-_0x207870;_0x228c2c<0x12c&&_0x228c2c>0x0&&_0x2b277e===_0x188b29&&(_0x1a65b2[_0x2a4e72(0x2ee)](),_0x188b29[_0x2a4e72(0x16f)]('contenteditable')!==_0x2a4e72(0x18a)&&(_0x188b29['setAttribute'](_0x2a4e72(0x1ed),_0x2a4e72(0x18a)),setTimeout(()=>_0x188b29[_0x2a4e72(0x2c1)](),0x0))),_0x207870=_0x461fce,_0x2b277e=_0x188b29;});}_0x243933[_0x33e88f(0x242)]('blur',_0x5a98c8=>{const _0x75b436=_0x33e88f,_0x564912=_0x5a98c8[_0x75b436(0x195)];if(_0x564912['tagName']!=='TD'||_0x564912[_0x75b436(0x16f)](_0x75b436(0x1ed))!=='true')return;isTouchDevice()&&_0x564912['setAttribute'](_0x75b436(0x1ed),_0x75b436(0x1d9));const _0xdf4a60=_0x564912[_0x75b436(0x104)](_0x75b436(0x269));if(!_0xdf4a60)return;const _0x1f8e10=parseInt(_0xdf4a60[_0x75b436(0x137)][_0x75b436(0x148)],0xa),_0x32c526=parseInt(_0x564912['closest']('tr')[_0x75b436(0x137)][_0x75b436(0x1b0)],0xa),_0x5eec9d=parseInt(_0x564912[_0x75b436(0x137)][_0x75b436(0x1a9)],0xa),_0x5155a5=_0x564912['textContent'],_0x4125e9=_0xdf4a60[_0x75b436(0x104)](_0x75b436(0x27b)),_0x4a9d56=_0x4125e9?_0x4125e9['scrollLeft']:0x0,_0x39c2ba=_0x243933[_0x75b436(0x2cb)];_0x93db26[_0x75b436(0x281)](_0x1f8e10,_0x32c526,_0x5eec9d);const _0x3eefae={[_0x5eec9d]:_0x5155a5};_0x93db26[_0x75b436(0x275)](_0x1f8e10,_0x32c526,_0x3eefae),_0x9dcdd0();const _0x491795=document['getElementById'](_0x75b436(0x2ea)+_0x1f8e10)?.[_0x75b436(0x104)]('.amily2-table-wrapper');_0x491795&&(_0x491795[_0x75b436(0x2a0)]=_0x4a9d56),_0x243933[_0x75b436(0x2cb)]=_0x39c2ba;},!![]);}_0x240270[_0x33e88f(0x137)][_0x33e88f(0x167)]='true',log(_0x33e88f(0x186),_0x33e88f(0x1c3)),eventSource['on'](event_types[_0x33e88f(0x1c5)],()=>{const _0x418577=_0x33e88f;console[_0x418577(0x2a8)]('['+extensionName+_0x418577(0x1d1)),_0x9dcdd0(),setTimeout(()=>{const _0x43cd2d=_0x418577,_0x570a9b=extension_settings[extensionName];if(_0x570a9b&&_0x570a9b[_0x43cd2d(0x12a)])try{bindWorldBookSettings(),console['log']('['+extensionName+_0x43cd2d(0x153));}catch(_0x117cdf){console[_0x43cd2d(0x26a)]('['+extensionName+_0x43cd2d(0x213),_0x117cdf);}},0x64);});}function bindBatchFillButton(){const _0xc5a31f=_0xc6d991,_0xdd2db6=document[_0xc5a31f(0x16c)](_0xc5a31f(0x111));if(_0xdd2db6){if(_0xdd2db6['dataset'][_0xc5a31f(0x136)])return;_0xdd2db6['addEventListener'](_0xc5a31f(0x29d),_0x169af7=>{const _0x167f60=_0xc5a31f,_0x519d65=extension_settings[extensionName],_0x592df4=_0x519d65[_0x167f60(0x254)]!==![];if(!_0x592df4){_0x169af7[_0x167f60(0x2ee)](),toastr['warning'](_0x167f60(0x25f));return;}startBatchFilling();}),_0xdd2db6[_0xc5a31f(0x137)]['batchEventBound']='true',log('\x22立即填表\x22按钮已成功绑定。',_0xc5a31f(0x1c3));}}function bindReorganizeButton(){const _0x1f4261=_0xc6d991,_0xa730bf=document[_0x1f4261(0x16c)](_0x1f4261(0x29e));if(_0xa730bf){if(_0xa730bf[_0x1f4261(0x137)][_0x1f4261(0x22c)])return;_0xa730bf[_0x1f4261(0x242)](_0x1f4261(0x29d),async _0x24fcc9=>{const _0x132662=_0x1f4261,_0x2326f5=extension_settings[extensionName],_0x2a2759=_0x2326f5['table_system_enabled']!==![];if(!_0x2a2759){_0x24fcc9['preventDefault'](),toastr[_0x132662(0xfc)](_0x132662(0x25f));return;}try{const {reorganizeTableContent:_0x543599}=await import(_0x132662(0x18b));await _0x543599();}catch(_0x181609){console[_0x132662(0x26a)](_0x132662(0x236),_0x181609),toastr[_0x132662(0x26a)]('重新整理功能启动失败,请检查系统状态。');}}),_0xa730bf['dataset'][_0x1f4261(0x22c)]='true',log(_0x1f4261(0x133),_0x1f4261(0x1c3));}}function bindFloorFillButtons(){const _0x386d37=_0xc6d991,_0xdd22d9=document['getElementById'](_0x386d37(0x12e)),_0x377e68=document[_0x386d37(0x16c)]('fill-current-floor-btn'),_0x5dbecd=document[_0x386d37(0x16c)](_0x386d37(0x250));if(_0xdd22d9){if(_0xdd22d9[_0x386d37(0x137)][_0x386d37(0x192)])return;_0xdd22d9[_0x386d37(0x242)](_0x386d37(0x29d),_0x49c2f7=>{const _0xb5ace3=_0x386d37,_0xc861fc=extension_settings[extensionName],_0x3a99ff=_0xc861fc[_0xb5ace3(0x254)]!==![];if(!_0x3a99ff){_0x49c2f7[_0xb5ace3(0x2ee)](),toastr[_0xb5ace3(0xfc)](_0xb5ace3(0x25f));return;}const _0x44d317=document[_0xb5ace3(0x16c)](_0xb5ace3(0x2ba)),_0x16ed2e=document[_0xb5ace3(0x16c)](_0xb5ace3(0x238)),_0x14fff5=parseInt(_0x44d317[_0xb5ace3(0x22b)],0xa),_0x2c5408=parseInt(_0x16ed2e[_0xb5ace3(0x22b)],0xa);if(!_0x14fff5||!_0x2c5408){toastr[_0xb5ace3(0xfc)]('请输入有效的起始楼层和结束楼层。');return;}if(_0x14fff5>_0x2c5408){toastr[_0xb5ace3(0xfc)](_0xb5ace3(0x228));return;}if(_0x14fff5<0x1){toastr['warning'](_0xb5ace3(0x108));return;}import(_0xb5ace3(0x2da))[_0xb5ace3(0x22e)](_0x3c582c=>{const _0x1dc836=_0xb5ace3;_0x3c582c[_0x1dc836(0x10d)](_0x14fff5,_0x2c5408);});}),_0xdd22d9[_0x386d37(0x137)][_0x386d37(0x192)]=_0x386d37(0x18a),log('\x22选定楼层填表\x22按钮已成功绑定。','success');}if(_0x377e68){if(_0x377e68[_0x386d37(0x137)][_0x386d37(0x1a2)])return;_0x377e68[_0x386d37(0x242)]('click',_0x33e98d=>{const _0x2d5258=_0x386d37,_0x5c0587=extension_settings[extensionName],_0x2dcb91=_0x5c0587[_0x2d5258(0x254)]!==![];if(!_0x2dcb91){_0x33e98d[_0x2d5258(0x2ee)](),toastr[_0x2d5258(0xfc)](_0x2d5258(0x25f));return;}import('../core/table-system/batch-filler.js')[_0x2d5258(0x22e)](_0x540718=>{const _0x1614d5=_0x2d5258;_0x540718[_0x1614d5(0x143)]();});}),_0x377e68[_0x386d37(0x137)][_0x386d37(0x1a2)]=_0x386d37(0x18a),log('\x22填当前楼层\x22按钮已成功绑定。',_0x386d37(0x1c3));}if(_0x5dbecd){if(_0x5dbecd[_0x386d37(0x137)]['rollbackEventBound'])return;_0x5dbecd[_0x386d37(0x242)](_0x386d37(0x29d),async _0x5360de=>{const _0x2c921a=_0x386d37,_0x1478b2=extension_settings[extensionName],_0x1d9a9b=_0x1478b2[_0x2c921a(0x254)]!==![];if(!_0x1d9a9b){_0x5360de[_0x2c921a(0x2ee)](),toastr['warning'](_0x2c921a(0x25f));return;}if(confirm(_0x2c921a(0x102)))try{await _0x93db26[_0x2c921a(0x25c)]();}catch(_0x75eaf4){console[_0x2c921a(0x26a)]('[内存储司]\x20回退重填功能失败:',_0x75eaf4),toastr[_0x2c921a(0x26a)]('回退重填失败,请检查系统状态。');}}),_0x5dbecd['dataset'][_0x386d37(0x184)]=_0x386d37(0x18a),log('\x22回退重填\x22按钮已成功绑定。',_0x386d37(0x1c3));}}function bindTemplateEditors(){const _0x49e712=_0xc6d991,_0x28a1cf=document[_0x49e712(0x16c)](_0x49e712(0x132)),_0x26bf6d=document[_0x49e712(0x16c)](_0x49e712(0x182)),_0x4fba3e=document['getElementById'](_0x49e712(0x199)),_0x1d516c=document[_0x49e712(0x16c)](_0x49e712(0xfb)),_0x344db1=document[_0x49e712(0x16c)]('ai-flow-template-save-btn'),_0x40f7a4=document[_0x49e712(0x16c)](_0x49e712(0x100));if(!_0x28a1cf||!_0x1d516c||!_0x26bf6d||!_0x344db1){log('无法找到指令模板编辑器或其按钮,绑定失败。',_0x49e712(0x21a));return;}if(_0x26bf6d[_0x49e712(0x137)][_0x49e712(0x17f)])return;_0x28a1cf['value']=_0x93db26[_0x49e712(0x24a)](),_0x1d516c[_0x49e712(0x22b)]=_0x93db26[_0x49e712(0x1da)](),_0x26bf6d['addEventListener']('click',()=>{const _0x3d1492=_0x49e712;_0x93db26[_0x3d1492(0x12c)](_0x28a1cf[_0x3d1492(0x22b)]),toastr[_0x3d1492(0x1c3)](_0x3d1492(0x28c)),log(_0x3d1492(0x130),_0x3d1492(0x1c3));}),_0x344db1['addEventListener']('click',()=>{const _0x1ea69e=_0x49e712;_0x93db26['saveBatchFillerFlowTemplate'](_0x1d516c['value']),toastr[_0x1ea69e(0x1c3)](_0x1ea69e(0x2dd)),log(_0x1ea69e(0x278),_0x1ea69e(0x1c3));}),_0x4fba3e[_0x49e712(0x242)]('click',()=>{const _0x9dc726=_0x49e712;confirm(_0x9dc726(0x240))&&(_0x28a1cf['value']=DEFAULT_AI_RULE_TEMPLATE,_0x93db26[_0x9dc726(0x12c)](_0x28a1cf['value']),toastr[_0x9dc726(0x255)](_0x9dc726(0x11c)),log(_0x9dc726(0x289),'info'));}),_0x40f7a4[_0x49e712(0x242)](_0x49e712(0x29d),()=>{const _0x3353e4=_0x49e712;confirm(_0x3353e4(0x2e2))&&(_0x1d516c['value']=DEFAULT_AI_FLOW_TEMPLATE,_0x93db26[_0x3353e4(0x12f)](_0x1d516c[_0x3353e4(0x22b)]),toastr[_0x3353e4(0x255)](_0x3353e4(0x23b)),log(_0x3353e4(0x168),_0x3353e4(0x255)));}),_0x26bf6d['dataset'][_0x49e712(0x17f)]=_0x49e712(0x18a),_0x344db1['dataset'][_0x49e712(0x17f)]='true',log(_0x49e712(0x24e),_0x49e712(0x1c3));}function bindNccsApiEvents(){const _0x3b44ac=_0xc6d991,_0x542ef3=extension_settings[extensionName];if(_0x542ef3[_0x3b44ac(0x251)]===undefined)_0x542ef3[_0x3b44ac(0x251)]=![];if(_0x542ef3[_0x3b44ac(0x257)]===undefined)_0x542ef3[_0x3b44ac(0x257)]=_0x3b44ac(0x2cc);if(_0x542ef3[_0x3b44ac(0x1e8)]===undefined)_0x542ef3[_0x3b44ac(0x1e8)]='https://api.openai.com/v1';if(_0x542ef3[_0x3b44ac(0x23a)]===undefined)_0x542ef3[_0x3b44ac(0x23a)]='';if(_0x542ef3[_0x3b44ac(0x260)]===undefined)_0x542ef3[_0x3b44ac(0x260)]='';if(_0x542ef3[_0x3b44ac(0x1a6)]===undefined)_0x542ef3[_0x3b44ac(0x1a6)]=0x7d0;if(_0x542ef3[_0x3b44ac(0x1db)]===undefined)_0x542ef3['nccsTemperature']=0.7;if(_0x542ef3[_0x3b44ac(0x265)]===undefined)_0x542ef3[_0x3b44ac(0x265)]='';const _0x28f082=document[_0x3b44ac(0x16c)](_0x3b44ac(0x1d0)),_0x3656ec=document['getElementById'](_0x3b44ac(0x258)),_0x46bfc4=document[_0x3b44ac(0x16c)](_0x3b44ac(0x253)),_0x14fa9a=document[_0x3b44ac(0x16c)](_0x3b44ac(0x116)),_0x54b43b=document[_0x3b44ac(0x16c)](_0x3b44ac(0x2ed)),_0xae6bb5=document[_0x3b44ac(0x16c)](_0x3b44ac(0x294)),_0x3738fe=document['getElementById']('nccs-max-tokens'),_0x24a9f=document[_0x3b44ac(0x16c)](_0x3b44ac(0x225)),_0x3589f5=document[_0x3b44ac(0x16c)](_0x3b44ac(0x105)),_0x51c622=document['getElementById'](_0x3b44ac(0x24d)),_0x3a64de=document[_0x3b44ac(0x16c)]('nccs-sillytavern-preset'),_0x26bf33=document[_0x3b44ac(0x16c)](_0x3b44ac(0x156)),_0x22aefb=document[_0x3b44ac(0x16c)](_0x3b44ac(0x205));if(!_0x28f082||!_0x3656ec)return;_0x28f082[_0x3b44ac(0x26c)]=_0x542ef3[_0x3b44ac(0x251)];if(_0x46bfc4)_0x46bfc4['value']=_0x542ef3[_0x3b44ac(0x257)];if(_0x14fa9a)_0x14fa9a[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x1e8)];if(_0x54b43b)_0x54b43b['value']=_0x542ef3['nccsApiKey'];if(_0xae6bb5)_0xae6bb5[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x260)];if(_0x3738fe){_0x3738fe[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x1a6)];if(_0x24a9f)_0x24a9f[_0x3b44ac(0x13c)]=_0x542ef3[_0x3b44ac(0x1a6)];}if(_0x3589f5){_0x3589f5[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x1db)];if(_0x51c622)_0x51c622[_0x3b44ac(0x13c)]=_0x542ef3[_0x3b44ac(0x1db)];}if(_0x3a64de)_0x3a64de[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x265)]||'';const _0x1b1bf4=()=>{const _0x33d211=_0x3b44ac;_0x3656ec[_0x33d211(0x263)]['display']=_0x28f082['checked']?'block':_0x33d211(0x272);};_0x1b1bf4();const _0x1f0b18=()=>{const _0x8bf01e=_0x3b44ac;if(!_0x46bfc4)return;const _0x461ccc=_0x46bfc4['value']===_0x8bf01e(0x1c6),_0x31467e=_0x46bfc4[_0x8bf01e(0x22b)]==='openai_test',_0x59b78c=_0x3a64de?.[_0x8bf01e(0x104)](_0x8bf01e(0x218));_0x59b78c&&(_0x59b78c[_0x8bf01e(0x263)]['display']=_0x461ccc?_0x8bf01e(0x1c0):'none');const _0x523f5f=[{'element':_0x14fa9a,'containerId':null},{'element':_0x54b43b,'containerId':null},{'element':_0xae6bb5,'containerId':null},{'element':_0x3738fe,'containerId':null},{'element':_0x3589f5,'containerId':null}];_0x523f5f[_0x8bf01e(0x14b)](({element:_0x317c39})=>{const _0x545ed2=_0x8bf01e;if(_0x317c39){const _0x4ffb86=_0x317c39[_0x545ed2(0x104)](_0x545ed2(0x218));_0x4ffb86&&(_0x4ffb86[_0x545ed2(0x263)]['display']=_0x461ccc?'none':_0x545ed2(0x1c0));}});const _0x76c898=_0x26bf33?.['closest'](_0x8bf01e(0x169));_0x76c898&&(_0x76c898[_0x8bf01e(0x263)][_0x8bf01e(0x230)]=_0x8bf01e(0x297));};_0x1f0b18(),_0x28f082['addEventListener'](_0x3b44ac(0x27e),()=>{const _0x56a412=_0x3b44ac;_0x542ef3[_0x56a412(0x251)]=_0x28f082['checked'],saveSettingsDebounced(),_0x1b1bf4(),log(_0x56a412(0x1a3)+(_0x28f082['checked']?_0x56a412(0x26e):'已禁用'),_0x56a412(0x255));});_0x46bfc4&&_0x46bfc4[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x40ef49=_0x3b44ac;_0x542ef3[_0x40ef49(0x257)]=_0x46bfc4[_0x40ef49(0x22b)],saveSettingsDebounced(),_0x1f0b18(),log(_0x40ef49(0x16d)+_0x46bfc4[_0x40ef49(0x22b)],_0x40ef49(0x255));});if(_0x14fa9a){const _0x27fe2e=()=>{const _0x3a457a=_0x3b44ac;_0x542ef3[_0x3a457a(0x1e8)]=_0x14fa9a[_0x3a457a(0x22b)],saveSettingsDebounced();};_0x14fa9a[_0x3b44ac(0x242)]('blur',_0x27fe2e);}if(_0x54b43b){const _0x2a7661=()=>{const _0x397162=_0x3b44ac;_0x542ef3[_0x397162(0x23a)]=_0x54b43b[_0x397162(0x22b)],saveSettingsDebounced();};_0x54b43b['addEventListener'](_0x3b44ac(0x20a),_0x2a7661);}if(_0xae6bb5){const _0x25105a=()=>{const _0x4efa5e=_0x3b44ac;_0x542ef3[_0x4efa5e(0x260)]=_0xae6bb5['value'],saveSettingsDebounced();};_0xae6bb5['addEventListener'](_0x3b44ac(0x20a),_0x25105a),_0xae6bb5[_0x3b44ac(0x242)](_0x3b44ac(0x1b1),_0x25105a);}_0x3738fe&&_0x24a9f&&(_0x3738fe[_0x3b44ac(0x242)](_0x3b44ac(0x1b1),()=>{const _0x1d9ad3=_0x3b44ac;_0x24a9f['textContent']=_0x3738fe[_0x1d9ad3(0x22b)];}),_0x3738fe[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x5677f4=_0x3b44ac;_0x542ef3[_0x5677f4(0x1a6)]=parseInt(_0x3738fe['value']),saveSettingsDebounced();}));_0x3589f5&&_0x51c622&&(_0x3589f5['addEventListener'](_0x3b44ac(0x1b1),()=>{const _0x3cbef4=_0x3b44ac;_0x51c622[_0x3cbef4(0x13c)]=_0x3589f5['value'];}),_0x3589f5[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x8e87e=_0x3b44ac;_0x542ef3[_0x8e87e(0x1db)]=parseFloat(_0x3589f5[_0x8e87e(0x22b)]),saveSettingsDebounced();}));_0x3a64de&&_0x3a64de[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x20bd63=_0x3b44ac;_0x542ef3[_0x20bd63(0x265)]=_0x3a64de['value'],saveSettingsDebounced();});_0x26bf33&&_0x26bf33['addEventListener'](_0x3b44ac(0x29d),async()=>{const _0x4ecfbb=_0x3b44ac;_0x26bf33['disabled']=!![],_0x26bf33[_0x4ecfbb(0x109)]='\x20测试中...';try{const _0x56f0bb=await testNccsApiConnection();_0x56f0bb?(toastr[_0x4ecfbb(0x1c3)](_0x4ecfbb(0x28d)),log(_0x4ecfbb(0x2eb),_0x4ecfbb(0x1c3))):(toastr[_0x4ecfbb(0x26a)]('Nccs\x20API连接测试失败,请检查配置'),log('Nccs\x20API连接测试失败',_0x4ecfbb(0x26a)));}catch(_0x24abc3){toastr[_0x4ecfbb(0x26a)](_0x4ecfbb(0x2b6)+_0x24abc3[_0x4ecfbb(0x158)]),log('Nccs\x20API连接测试出错:'+_0x24abc3['message'],_0x4ecfbb(0x26a));}finally{_0x26bf33['disabled']=![],_0x26bf33[_0x4ecfbb(0x109)]=_0x4ecfbb(0x2e5);}});_0x22aefb&&_0x22aefb[_0x3b44ac(0x242)](_0x3b44ac(0x29d),async()=>{const _0x16a1dc=_0x3b44ac;_0x22aefb[_0x16a1dc(0x2df)]=!![],_0x22aefb['innerHTML']=_0x16a1dc(0x2bc);_0x14fa9a&&(_0x542ef3[_0x16a1dc(0x1e8)]=_0x14fa9a[_0x16a1dc(0x22b)]);_0x54b43b&&(_0x542ef3['nccsApiKey']=_0x54b43b[_0x16a1dc(0x22b)]);saveSettingsDebounced();try{const _0x3782bd=await fetchNccsModels();if(_0x3782bd&&_0x3782bd[_0x16a1dc(0x2a2)]>0x0){let _0x5b8a5e=document['getElementById']('nccs-api-model-select');!_0x5b8a5e&&(_0x5b8a5e=document[_0x16a1dc(0x14f)](_0x16a1dc(0x2f0)),_0x5b8a5e['id']=_0x16a1dc(0x2f3),_0x5b8a5e['className']='text_pole',_0xae6bb5[_0x16a1dc(0x1e2)][_0x16a1dc(0x217)](_0x5b8a5e,_0xae6bb5[_0x16a1dc(0x2b3)])),_0x5b8a5e[_0x16a1dc(0x109)]='--\x20请选择模型\x20--',_0x3782bd[_0x16a1dc(0x14b)](_0x126236=>{const _0x3a313c=_0x16a1dc,_0x44fca6=document[_0x3a313c(0x14f)](_0x3a313c(0x2c6));_0x44fca6[_0x3a313c(0x22b)]=_0x126236['id']||_0x126236[_0x3a313c(0x2a9)],_0x44fca6['textContent']=_0x126236['name']||_0x126236['id'],(_0x126236['id']||_0x126236['name'])===_0x542ef3['nccsModel']&&(_0x44fca6[_0x3a313c(0x1ce)]=!![]),_0x5b8a5e['appendChild'](_0x44fca6);}),_0xae6bb5[_0x16a1dc(0x263)][_0x16a1dc(0x230)]='none',_0x5b8a5e['style']['display']=_0x16a1dc(0x1c0),_0x5b8a5e['addEventListener'](_0x16a1dc(0x27e),()=>{const _0x516ba7=_0x16a1dc,_0x53c576=_0x5b8a5e[_0x516ba7(0x22b)];_0x542ef3['nccsModel']=_0x53c576,_0xae6bb5['value']=_0x53c576,saveSettingsDebounced();}),toastr[_0x16a1dc(0x1c3)](_0x16a1dc(0x15c)+_0x3782bd[_0x16a1dc(0x2a2)]+_0x16a1dc(0x2e3)),log(_0x16a1dc(0x243)+_0x3782bd[_0x16a1dc(0x2a2)]+'\x20个模型','success');}else toastr[_0x16a1dc(0xfc)](_0x16a1dc(0x14d)),log(_0x16a1dc(0x16e),_0x16a1dc(0x21a));}catch(_0x16da3a){toastr['error']('获取模型失败:'+_0x16da3a['message']),log(_0x16a1dc(0xff)+_0x16da3a[_0x16a1dc(0x158)],_0x16a1dc(0x26a));}finally{_0x22aefb[_0x16a1dc(0x2df)]=![],_0x22aefb[_0x16a1dc(0x109)]=_0x16a1dc(0x224);}});const _0x54558b=async()=>{const _0x431ecc=_0x3b44ac;if(!_0x3a64de)return;try{const _0x258ada=getContext();if(!_0x258ada?.[_0x431ecc(0x2a1)]?.['connectionManager']?.[_0x431ecc(0x17a)])throw new Error(_0x431ecc(0x226));const _0x5f2cc0=_0x258ada[_0x431ecc(0x2a1)][_0x431ecc(0x1df)]['profiles'],_0x4a4438=_0x542ef3['nccsTavernProfile'];_0x3a64de[_0x431ecc(0x109)]='',_0x3a64de[_0x431ecc(0x2a4)](new Option(_0x431ecc(0x204),'',![],![])),_0x5f2cc0&&_0x5f2cc0[_0x431ecc(0x2a2)]>0x0?(_0x5f2cc0['forEach'](_0x5cb007=>{const _0xfb8f11=_0x431ecc,_0x26cd01=_0x5cb007['id']===_0x4a4438,_0x1d1668=new Option(_0x5cb007[_0xfb8f11(0x2a9)],_0x5cb007['id'],_0x26cd01,_0x26cd01);_0x3a64de['appendChild'](_0x1d1668);}),log(_0x431ecc(0x2d4)+_0x5f2cc0[_0x431ecc(0x2a2)]+'\x20个SillyTavern配置文件',_0x431ecc(0x1c3))):log(_0x431ecc(0x291),_0x431ecc(0x21a));}catch(_0x239406){log('加载SillyTavern预设失败:'+_0x239406['message'],'error');}};_0x46bfc4&&_0x3a64de&&(_0x46bfc4[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x3ed69c=_0x3b44ac;_0x46bfc4[_0x3ed69c(0x22b)]===_0x3ed69c(0x1c6)&&_0x54558b();}),_0x542ef3[_0x3b44ac(0x257)]==='sillytavern_preset'&&_0x54558b()),log(_0x3b44ac(0x2ec),'success');}function bindChatTableDisplaySetting(){const _0x36305d=_0xc6d991,_0x4060c7=extension_settings[extensionName],_0x37b6eb=document['getElementById'](_0x36305d(0x123)),_0x4adfcc=document[_0x36305d(0x16c)](_0x36305d(0x259));if(!_0x37b6eb||!_0x4adfcc){log(_0x36305d(0x219),'warn');return;}_0x37b6eb[_0x36305d(0x26c)]=_0x4060c7[_0x36305d(0x18e)]===!![],_0x4adfcc['checked']=_0x4060c7[_0x36305d(0x23c)]===!![];const _0x16f8d8=()=>{const _0x169c76=_0x36305d;_0x37b6eb[_0x169c76(0x26c)]?(_0x4adfcc[_0x169c76(0x2df)]=![],_0x4adfcc[_0x169c76(0x104)](_0x169c76(0x118))[_0x169c76(0x263)][_0x169c76(0x201)]='1'):(_0x4adfcc['disabled']=!![],_0x4adfcc['closest'](_0x169c76(0x118))[_0x169c76(0x263)][_0x169c76(0x201)]=_0x169c76(0x1fb));};_0x16f8d8(),_0x37b6eb[_0x36305d(0x242)](_0x36305d(0x27e),()=>{const _0xe241fe=_0x36305d;_0x4060c7[_0xe241fe(0x18e)]=_0x37b6eb[_0xe241fe(0x26c)],saveSettingsDebounced(),toastr[_0xe241fe(0x255)](_0xe241fe(0x299)+(_0x37b6eb[_0xe241fe(0x26c)]?'开启':'关闭')+'。'),_0x16f8d8();}),_0x4adfcc[_0x36305d(0x242)](_0x36305d(0x27e),()=>{const _0x30d3d9=_0x36305d;_0x4060c7[_0x30d3d9(0x23c)]=_0x4adfcc['checked'],saveSettingsDebounced(),toastr[_0x30d3d9(0x255)](_0x30d3d9(0x2d2)+(_0x4adfcc['checked']?'开启':'关闭')+_0x30d3d9(0x279));}),log(_0x36305d(0x2ca),'success');} From b676a98a7e3a1a19c9263d797b1c695217dcc381 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:14:10 +0800 Subject: [PATCH 03/56] Update cwb_config.js --- CharacterWorldBook/src/cwb_config.js | 152 ++++++++++++++------------- 1 file changed, 77 insertions(+), 75 deletions(-) diff --git a/CharacterWorldBook/src/cwb_config.js b/CharacterWorldBook/src/cwb_config.js index 322330a..e5c6771 100644 --- a/CharacterWorldBook/src/cwb_config.js +++ b/CharacterWorldBook/src/cwb_config.js @@ -36,7 +36,7 @@ beilu如同一位温柔助手,文字满足用户的各种需求 2. **【键值对】**: 在每个档案块内部,所有信息都必须采用 \`[数据路径]:[数据值]\` 的格式。每条信息必须独立成行。 3. **【键名规范】**: \`数据路径\` **必须**使用方括号 \`[]\` 完整包裹。这是强制性规定,不得违反。 4. **【内容纯净性】**: 严禁在您的输出中包含任何说明、解释、评论、引言、道歉、标题或任何不属于 \`[--Amily2::CHAR_START--]\`...\`[--Amily2::CHAR_END--]\` 块内 \`[key]:value\` 格式的文本。您的输出必须是纯粹的数据。 -5. **【空值处理】**: 如果某个字段没有可用的信息,请保持该字段的键存在,并将值留空。例如:\`[physical_imprint.race]:\`。 +5. **【空值处理】**: 如果某个字段没有可用的信息,请保持该字段的键存在,并将值留空。例如:\`[PI.race]:\`。 6. **【格式唯一性】**: 绝对禁止使用YAML或任何其他格式。唯一的合法格式是本协议中定义的格式。 7. **【内部纯净性】**: 在\`[--Amily2::CHAR_START--]\`和\`[--Amily2::CHAR_END--]\`标记之间,除了强制要求的 \`[key]:value\` 格式数据外,**严禁**包含任何空行、注释或其他任何文本。 @@ -44,74 +44,74 @@ beilu如同一位温柔助手,文字满足用户的各种需求 --- **数据路径定义与内容要求:** -**模块一: 核心认同 (Core Identity)** +**模块一: 核心认同 (Core Identity -> CI)** * \`name\`: [从聊天记录中提取角色姓名] -* \`core_identity.archetype\`: [角色的核心身份或原型, 如:'流浪的剑客', '叛逆的公主', '年迈的智者'] -* \`core_identity.gender\`: [从聊天记录中提取或推断性别] -* \`core_identity.age\`: [从聊天记录中提取或推断年龄] -* \`core_identity.race\`: [从聊天记录中提取种族或民族, 若提及] -* \`core_identity.current_status\`: [总结角色在对话时间点的主要状态、情绪或处境] +* \`CI.arch\`: [角色的核心身份或原型, 如:'流浪的剑客', '叛逆的公主', '年迈的智者'] +* \`CI.gen\`: [从聊天记录中提取或推断性别] +* \`CI.age\`: [从聊天记录中提取或推断年龄] +* \`CI.race\`: [从聊天记录中提取种族或民族, 若提及] +* \`CI.status\`: [总结角色在对话时间点的主要状态、情绪或处境] -**模块二: 物理印记 (Physical Imprint)** -* \`physical_imprint.first_impression\`: [综合描述角色给人的第一印象和整体气质] -* \`physical_imprint.key_features\`: [提取最显著的外貌细节, 如发色、眼神、伤疤等] -* \`physical_imprint.attire\`: [描述服装特点或风格] -* \`physical_imprint.mannerisms\`: [描述标志性的小动作、姿态或口头禅] -* \`physical_imprint.voice\`: [根据对话推断音色、语速、语气等, 如:'低沉而缓慢', '清脆而急促'] +**模块二: 物理印记 (Physical Imprint -> PI)** +* \`PI.first\`: [综合描述角色给人的第一印象和整体气质] +* \`PI.feat\`: [提取最显著的外貌细节, 如发色、眼神、伤疤等] +* \`PI.attire\`: [描述服装特点或风格] +* \`PI.manner\`: [描述标志性的小动作、姿态或口头禅] +* \`PI.voice\`: [根据对话推断音色、语速、语气等, 如:'低沉而缓慢', '清脆而急促'] -**模块三: 心智侧写 (Psyche Profile)** -* \`psyche_profile.tags\`: [提炼3-5个核心性格标签, 用斜杠 "/" 分隔, 例如: '标签1/标签2/标签3'] -* \`psyche_profile.description\`: [详细描述角色主要性格特征及其在对话中的表现] -* \`psyche_profile.motivation\`: [角色当前最关心的事或其行为背后的核心驱动力] -* \`psyche_profile.values\`: [角色行为背后体现的价值观或处事原则] -* \`psyche_profile.inner_conflict\`: [描述角色可能存在的内在矛盾、恐惧或弱点, 若明确提及] +**模块三: 心智侧写 (Psyche Profile -> PP)** +* \`PP.tags\`: [提炼3-5个核心性格标签, 用斜杠 "/" 分隔, 例如: '标签1/标签2/标签3'] +* \`PP.desc\`: [详细描述角色主要性格特征及其在对话中的表现] +* \`PP.mot\`: [角色当前最关心的事或其行为背后的核心驱动力] +* \`PP.val\`: [角色行为背后体现的价值观或处事原则] +* \`PP.conf\`: [描述角色可能存在的内在矛盾、恐惧或弱点, 若明确提及] -**模块四: 社交矩阵 (Social Matrix)** -* \`social_matrix.interaction_style\`: [描述角色与人交往的方式, 如:'支配型', '顺从型', '操纵型', '真诚型'] -* \`social_matrix.skills\`: [提炼角色展现出的关键技能或能力] -* \`social_matrix.reputation\`: [根据对话归纳其他人对该角色的看法或其社会声望] +**模块四: 社交矩阵 (Social Matrix -> SM)** +* \`SM.style\`: [描述角色与人交往的方式, 如:'支配型', '顺从型', '操纵型', '真诚型'] +* \`SM.skill\`: [提炼角色展现出的关键技能或能力] +* \`SM.rep\`: [根据对话归纳其他人对该角色的看法或其社会声望] -**模块五: 叙事精粹 (Narrative Essence)** -* \`narrative_essence.core_traits.0.name\`: [核心特质1的名称] -* \`narrative_essence.core_traits.0.definition\`: [简述该特质的核心表现] -* \`narrative_essence.core_traits.0.evidence.0\`: [从聊天记录中提取的具体行为或言语实例1] -* \`narrative_essence.core_traits.0.evidence.1\`: [实例2] -* \`narrative_essence.verbal_patterns.style_summary\`: [概括角色的说话节奏、常用词、语气等特点] -* \`narrative_essence.verbal_patterns.quotes.0\`: [直接引用聊天记录中的代表性对话或内心独白1] -* \`narrative_essence.verbal_patterns.quotes.1\`: [引文2] -* \`narrative_essence.key_relationships.0.name\`: [关系对象1姓名] -* \`narrative_essence.key_relationships.0.summary\`: [描述关系性质、重要性及互动模式] +**模块五: 叙事精粹 (Narrative Essence -> NE)** +* \`NE.trait.0.name\`: [核心特质1的名称] +* \`NE.trait.0.def\`: [简述该特质的核心表现] +* \`NE.trait.0.evid.0\`: [从聊天记录中提取的具体行为或言语实例1] +* \`NE.trait.0.evid.1\`: [实例2] +* \`NE.verb.style\`: [概括角色的说话节奏、常用词、语气等特点] +* \`NE.verb.quote.0\`: [直接引用聊天记录中的代表性对话或内心独白1] +* \`NE.verb.quote.1\`: [引文2] +* \`NE.rel.0.name\`: [关系对象1姓名] +* \`NE.rel.0.sum\`: [描述关系性质、重要性及互动模式] --- **完整示例** **完美示例输出 (必须严格、完整地复制此结构,不得有任何偏差):** [--Amily2::CHAR_START--] [name]:塞拉斯 -[core_identity.archetype]:被放逐的星际探险家 -[core_identity.gender]:男性 -[core_identity.age]:约35岁 -[core_identity.race]:人类 (基因改造) -[core_identity.current_status]:正在一颗废弃的矿业星球上修理飞船“流浪者号”,对偶遇的玩家保持着高度警惕,但又渴望获得帮助。 -[physical_imprint.first_impression]:饱经风霜,眼神锐利,透露出一种不轻易信任他人的疏离感。 -[physical_imprint.key_features]:额头有一道旧的激光烧伤疤痕,机械义肢的左臂上刻着神秘的符号。 -[physical_imprint.attire]:穿着破旧但实用的多功能环境防护服,上面沾满了机油和红色的星球尘土。 -[physical_imprint.mannerisms]:习惯性地用右手检查腰间的工具带,说话时会下意识地扫视四周。 -[physical_imprint.voice]:声音沙哑,语速不快,但每个字都清晰有力。 -[psyche_profile.tags]:实用主义/多疑/坚韧 -[psyche_profile.description]:塞拉斯是一个极端的实用主义者,多年的独自流亡让他变得多疑和谨慎。他只相信自己亲手验证过的事物,但在坚硬的外壳下,是对重返星际文明的执着渴望。 -[psyche_profile.motivation]:修复飞船,离开这颗星球,并找出当年导致他被放逐的真相。 -[psyche_profile.values]:生存至上,忠诚于自己选择的伙伴,鄙视背叛和官僚主义。 -[psyche_profile.inner_conflict]:既渴望与人合作以加快飞船的修复进度,又害怕再次被背叛。 -[social_matrix.interaction_style]:试探性与防御性,倾向于通过提问和观察来评估他人,而非主动透露自己的信息。 -[social_matrix.skills]:高级机械工程学,星际导航,在恶劣环境下的生存技巧。 -[social_matrix.reputation]:在星际边缘地带的黑市中,他被认为是一个技术高超但独来独往的“幽灵”。 -[narrative_essence.core_traits.0.name]:生存本能 -[narrative_essence.core_traits.0.definition]:在任何极端环境下都能迅速做出最有利于生存的判断和行动。 -[narrative_essence.core_traits.0.evidence.0]:“别碰那个控制台,它的能量读数不稳定,可能会过载。” -[narrative_essence.verbal_patterns.style_summary]:语言简洁、直接,富含技术术语和行话,很少有情绪化的表达。 -[narrative_essence.verbal_patterns.quotes.0]:“废话少说。你能修好超光速引擎的能量转换器吗?不能就别浪费我的时间。” -[narrative_essence.key_relationships.0.name]:玩家 -[narrative_essence.key_relationships.0.summary]:一个意外的闯入者,可能是威胁,也可能是离开这里的唯一希望。塞拉斯正在评估玩家的价值和可靠性。 +[CI.arch]:被放逐的星际探险家 +[CI.gen]:男性 +[CI.age]:约35岁 +[CI.race]:人类 (基因改造) +[CI.status]:正在一颗废弃的矿业星球上修理飞船“流浪者号”,对偶遇的玩家保持着高度警惕,但又渴望获得帮助。 +[PI.first]:饱经风霜,眼神锐利,透露出一种不轻易信任他人的疏离感。 +[PI.feat]:额头有一道旧的激光烧伤疤痕,机械义肢的左臂上刻着神秘的符号。 +[PI.attire]:穿着破旧但实用的多功能环境防护服,上面沾满了机油和红色的星球尘土。 +[PI.manner]:习惯性地用右手检查腰间的工具带,说话时会下意识地扫视四周。 +[PI.voice]:声音沙哑,语速不快,但每个字都清晰有力。 +[PP.tags]:实用主义/多疑/坚韧 +[PP.desc]:塞拉斯是一个极端的实用主义者,多年的独自流亡让他变得多疑和谨慎。他只相信自己亲手验证过的事物,但在坚硬的外壳下,是对重返星际文明的执着渴望。 +[PP.mot]:修复飞船,离开这颗星球,并找出当年导致他被放逐的真相。 +[PP.val]:生存至上,忠诚于自己选择的伙伴,鄙视背叛和官僚主义。 +[PP.conf]:既渴望与人合作以加快飞船的修复进度,又害怕再次被背叛。 +[SM.style]:试探性与防御性,倾向于通过提问和观察来评估他人,而非主动透露自己的信息。 +[SM.skill]:高级机械工程学,星际导航,在恶劣环境下的生存技巧。 +[SM.rep]:在星际边缘地带的黑市中,他被认为是一个技术高超但独来独往的“幽灵”。 +[NE.trait.0.name]:生存本能 +[NE.trait.0.def]:在任何极端环境下都能迅速做出最有利于生存的判断和行动。 +[NE.trait.0.evid.0]:“别碰那个控制台,它的能量读数不稳定,可能会过载。” +[NE.verb.style]:语言简洁、直接,富含技术术语和行话,很少有情绪化的表达。 +[NE.verb.quote.0]:“废话少说。你能修好超光速引擎的能量转换器吗?不能就别浪费我的时间。” +[NE.rel.0.name]:玩家 +[NE.rel.0.sum]:一个意外的闯入者,可能是威胁,也可能是离开这里的唯一希望。塞拉斯正在评估玩家的价值和可靠性。 [--Amily2::CHAR_END--] 任务开始,请严格遵循协议,生成纯数据输出。`, @@ -151,12 +151,12 @@ beilu如同一位温柔助手,文字满足用户的各种需求 **输入 - 旧档案:** [--Amily2::CHAR_START--] [name]:塞拉斯 -[core_identity.archetype]:被放逐的星际探险家 -[core_identity.age]:约35岁 -[core_identity.current_status]:正在一颗废弃的矿业星球上修理飞船“流浪者号”,对偶遇的玩家保持着高度警惕。 -[psyche_profile.motivation]:修复飞船,离开这颗星球。 -[narrative_essence.key_relationships.0.name]:玩家 -[narrative_essence.key_relationships.0.summary]:一个意外的闯入者,可能是威胁。 +[CI.arch]:被放逐的星际探险家 +[CI.age]:约35岁 +[CI.status]:正在一颗废弃的矿业星球上修理飞船“流浪者号”,对偶遇的玩家保持着高度警惕。 +[PP.mot]:修复飞船,离开这颗星球。 +[NE.rel.0.name]:玩家 +[NE.rel.0.sum]:一个意外的闯入者,可能是威胁。 [--Amily2::CHAR_END--] **输入 - 新对话:** @@ -166,31 +166,32 @@ beilu如同一位温柔助手,文字满足用户的各种需求 塞拉斯: "天苑四...谢谢你。作为回报,这个能量核心你拿去用吧。" **分析与操作:** -1. **修正**: "[core_identity.age]" 从 "约35岁" 变为 "40岁" (根据“五年不见”)。 -2. **深化**: "[core_identity.archetype]" 从 "被放逐的星际探险家" 扩展为 "前星际探险家,现为'猩红彗星'佣兵团团长"。 -3. **更新**: "[psyche_profile.motivation]" 的核心从 "离开星球" 变为 "找到失散的女儿"。 -4. **补充**: "[narrative_essence.key_relationships.0.summary]" 中与玩家的关系,从单纯的 "威胁" 变为 "提供了关键情报的旧识,关系有所缓和"。 +1. **修正**: "[CI.age]" 从 "约35岁" 变为 "40岁" (根据“五年不见”)。 +2. **深化**: "[CI.arch]" 从 "被放逐的星际探险家" 扩展为 "前星际探险家,现为'猩红彗星'佣兵团团长"。 +3. **更新**: "[PP.mot]" 的核心从 "离开星球" 变为 "找到失散的女儿"。 +4. **补充**: "[NE.rel.0.sum]" 中与玩家的关系,从单纯的 "威胁" 变为 "提供了关键情报的旧识,关系有所缓和"。 **完美输出示例 (更新后的完整档案):** 注意:"[name]:"为必须保留的字段,必须存在,否则视为错误输出。 [--Amily2::CHAR_START--] [name]:塞拉斯 -[core_identity.archetype]:前星际探险家,现为'猩红彗星'佣兵团团长 -[core_identity.age]:40岁 -[core_identity.current_status]:在修理飞船的同时,从玩家处获得了关于女儿下落的关键线索,情绪混杂着惊讶和感激。 -[psyche_profile.motivation]:找到在天苑四星系失散的女儿。 -[narrative_essence.key_relationships.0.name]:玩家 -[narrative_essence.key_relationships.0.summary]:一位五年未见的旧识。对方不仅认出了他,还提供了关于他女儿下落的关键情报,使塞拉斯对玩家的态度从警惕转为合作。 +[CI.arch]:前星际探险家,现为'猩红彗星'佣兵团团长 +[CI.age]:40岁 +[CI.status]:在修理飞船的同时,从玩家处获得了关于女儿下落的关键线索,情绪混杂着惊讶和感激。 +[PP.mot]:找到在天苑四星系失散的女儿。 +[NE.rel.0.name]:玩家 +[NE.rel.0.sum]:一位五年未见的旧识。对方不仅认出了他,还提供了关于他女儿下落的关键情报,使塞拉斯对玩家的态度从警惕转为合作。 [--Amily2::CHAR_END--] --- **任务开始:** 请分析以下【旧档案】和【新对话】,严格遵循上述所有协议,生成纯粹的、更新后的数据档案。 若旧档案为空,则完全依照**完整示例**生成完整内容,若旧档案不为空,则以旧档案为基准进行更新。 -其中无需变动的内容,可忽略,例如年龄无变化,则可以不输出[core_identity.age]条目。 +其中无需变动的内容,可忽略,例如年龄无变化,则可以不输出[CI.age]条目。 现在开始你的增量更新任务。`, cwb_prompt_version: '1.0.2', cwb_auto_update_threshold: 20, + cwb_scan_depth: 6, cwb_auto_update_enabled: false, cwb_viewer_enabled: false, cwb_incremental_update_enabled: false, @@ -209,6 +210,7 @@ export const cwbDefaultSettings = { cwb_char_card_prompt: cwbCompleteDefaultSettings.cwb_char_card_prompt, cwb_prompt_version: '1.0.2', cwb_auto_update_threshold: 20, + cwb_scan_depth: 6, cwb_auto_update_enabled: false, cwb_viewer_enabled: false, cwb_incremental_update_enabled: false, From b5a1d401eacd1fd834c6805f2ce5249f1333ac61 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:14:53 +0800 Subject: [PATCH 04/56] Update cwb_uiManager.js --- CharacterWorldBook/src/cwb_uiManager.js | 1356 ++++++++++++----------- 1 file changed, 702 insertions(+), 654 deletions(-) diff --git a/CharacterWorldBook/src/cwb_uiManager.js b/CharacterWorldBook/src/cwb_uiManager.js index 450cf7b..9447dc4 100644 --- a/CharacterWorldBook/src/cwb_uiManager.js +++ b/CharacterWorldBook/src/cwb_uiManager.js @@ -1,692 +1,740 @@ -import { SCRIPT_ID_PREFIX, CHAR_CARD_VIEWER_BUTTON_ID, CHAR_CARD_VIEWER_POPUP_ID, state } from './cwb_state.js'; -import { logDebug, logError, showToastr, escapeHtml, parseCustomFormat, buildCustomFormat, isCwbEnabled } from './cwb_utils.js'; -import { deleteLorebookEntries, getTargetWorldBook } from './cwb_lorebookManager.js'; -import { manualUpdateLogic } from './cwb_core.js'; -import { testCwbConnection, fetchCwbModels } from './cwb_apiService.js'; -import { extensionName } from '../../utils/settings.js'; -import { extension_settings } from '/scripts/extensions.js'; -import { saveSettingsDebounced } from '/script.js'; -import { amilyHelper } from '../../core/tavern-helper/main.js'; + import { SCRIPT_ID_PREFIX, CHAR_CARD_VIEWER_BUTTON_ID, CHAR_CARD_VIEWER_POPUP_ID, state } from './cwb_state.js'; + import { logDebug, logError, showToastr, escapeHtml, parseCustomFormat, buildCustomFormat, isCwbEnabled } from './cwb_utils.js'; + import { deleteLorebookEntries, getTargetWorldBook } from './cwb_lorebookManager.js'; + import { manualUpdateLogic } from './cwb_core.js'; + import { testCwbConnection, fetchCwbModels } from './cwb_apiService.js'; + import { extensionName } from '../../utils/settings.js'; + import { extension_settings } from '/scripts/extensions.js'; + import { saveSettingsDebounced } from '/script.js'; + import { amilyHelper } from '../../core/tavern-helper/main.js'; -const { jQuery: $, SillyTavern } = window; + const { jQuery: $, SillyTavern } = window; -function createCharCardViewerPopupHtml(displayItems) { - const pathToLabelMap = { - 'narrative_essence.core_traits.name': '特质名称', - 'narrative_essence.key_relationships.name': '关系人姓名', - }; - const keyToLabelMap = { - 'name': '姓名', - 'archetype': '身份原型', - 'gender': '性别', - 'age': '年龄', - 'race': '种族', - 'current_status': '当前状态', + function createCharCardViewerPopupHtml(displayItems) { + const pathToLabelMap = { + 'narrative_essence.core_traits.name': '特质名称', + 'narrative_essence.key_relationships.name': '关系人姓名', + 'NE.trait.name': '特质名称', + 'NE.rel.name': '关系人姓名', + }; + const keyToLabelMap = { + 'name': '姓名', + // Old keys + 'archetype': '身份原型', + 'gender': '性别', + 'age': '年龄', + 'race': '种族', + 'current_status': '当前状态', + 'first_impression': '第一印象', + 'key_features': '显著特征', + 'attire': '衣着风格', + 'mannerisms': '习惯举止', + 'voice': '声音特征', + 'tags': '性格标签', + 'description': '性格详述', + 'motivation': '内在驱动', + 'values': '价值观', + 'inner_conflict': '内心挣扎', + 'interaction_style': '互动风格', + 'skills': '技能能力', + 'reputation': '他人声望', + 'core_traits': '核心特质', + 'verbal_patterns': '语言范式', + 'key_relationships': '关键关系', + 'definition': '特质定义', + 'evidence': '具体事例', + 'style_summary': '风格总结', + 'quotes': '代表性引言', + 'summary': '关系概述', - 'first_impression': '第一印象', - 'key_features': '显著特征', - 'attire': '衣着风格', - 'mannerisms': '习惯举止', - 'voice': '声音特征', + // New short keys + 'CI': '核心认同', + 'PI': '物理印记', + 'PP': '心智侧写', + 'SM': '社交矩阵', + 'NE': '叙事精粹', + + 'arch': '身份原型', + 'gen': '性别', + // age is same + // race is same + 'status': '当前状态', - 'tags': '性格标签', - 'description': '性格详述', - 'motivation': '内在驱动', - 'values': '价值观', - 'inner_conflict': '内心挣扎', + 'first': '第一印象', + 'feat': '显著特征', + // attire is same + 'manner': '习惯举止', + // voice is same - 'interaction_style': '互动风格', - 'skills': '技能能力', - 'reputation': '他人声望', + // tags is same + 'desc': '性格详述', + 'mot': '内在驱动', + 'val': '价值观', + 'conf': '内心挣扎', - 'core_traits': '核心特质', - 'verbal_patterns': '语言范式', - 'key_relationships': '关键关系', - 'definition': '特质定义', - 'evidence': '具体事例', - 'style_summary': '风格总结', - 'quotes': '代表性引言', - 'summary': '关系概述', - }; - const getLabel = (key, path) => { - const pathKey = path.replace(/\.\d+\./g, '.'); - if (pathToLabelMap[pathKey]) { - return pathToLabelMap[pathKey]; - } - return keyToLabelMap[key] || key.replace(/_/g, ' '); - }; + 'style': '互动风格/风格总结', // Shared by SM.style and NE.verb.style + 'skill': '技能能力', + 'rep': '他人声望', - const renderField = (label, path, value, isTextarea = false, isArray = false) => { - const escapedLabel = escapeHtml(label); - const escapedValue = escapeHtml(isArray ? value.join('\n') : value || ''); + 'trait': '核心特质', + 'verb': '语言范式', + 'rel': '关键关系', - const isLongContent = (value && String(value).length > 50) || (Array.isArray(value) && value.length > 1); - const rows = isArray ? Math.max(3, value.length) : (isLongContent ? 4 : 2); - - const inputElement = ``; - - return `
- - ${inputElement} -
`; - }; - - const renderCard = (title, data, pathPrefix) => { - if (!data || typeof data !== 'object' || Object.keys(data).length === 0) return ''; - let cardHtml = `

${escapeHtml(title)}

`; - for (const [key, value] of Object.entries(data)) { - const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key; - const label = getLabel(key, currentPath); - if (typeof value === 'object' && value !== null && !Array.isArray(value)) { - cardHtml += renderCard(label, value, currentPath); // Recursive call for nested objects - } else if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') { - cardHtml += `
${escapeHtml(label)}
`; - value.forEach((item, itemIndex) => { - cardHtml += `
`; - for (const [itemKey, itemValue] of Object.entries(item)) { - const itemPath = `${currentPath}.${itemIndex}.${itemKey}`; - cardHtml += renderField(getLabel(itemKey, itemPath), itemPath, itemValue, false, Array.isArray(itemValue)); - } - cardHtml += `
`; - }); - cardHtml += `
`; - } else { - cardHtml += renderField(label, currentPath, value, false, Array.isArray(value)); + 'def': '特质定义', + 'evid': '具体事例', + 'quote': '代表性引言', + 'sum': '关系概述', + }; + const getLabel = (key, path) => { + const pathKey = path.replace(/\.\d+\./g, '.'); + if (pathToLabelMap[pathKey]) { + return pathToLabelMap[pathKey]; } + return keyToLabelMap[key] || key.replace(/_/g, ' '); + }; + + const renderField = (label, path, value, isTextarea = false, isArray = false) => { + const escapedLabel = escapeHtml(label); + const escapedValue = escapeHtml(isArray ? value.join('\n') : value || ''); + + const isLongContent = (value && String(value).length > 50) || (Array.isArray(value) && value.length > 1); + const rows = isArray ? Math.max(3, value.length) : (isLongContent ? 4 : 2); + + const inputElement = ``; + + return `
+ + ${inputElement} +
`; + }; + + const renderCard = (title, data, pathPrefix) => { + if (!data || typeof data !== 'object' || Object.keys(data).length === 0) return ''; + let cardHtml = `

${escapeHtml(title)}

`; + for (const [key, value] of Object.entries(data)) { + const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key; + const label = getLabel(key, currentPath); + if (typeof value === 'object' && value !== null && !Array.isArray(value)) { + cardHtml += renderCard(label, value, currentPath); // Recursive call for nested objects + } else if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') { + cardHtml += `
${escapeHtml(label)}
`; + value.forEach((item, itemIndex) => { + cardHtml += `
`; + for (const [itemKey, itemValue] of Object.entries(item)) { + const itemPath = `${currentPath}.${itemIndex}.${itemKey}`; + cardHtml += renderField(getLabel(itemKey, itemPath), itemPath, itemValue, false, Array.isArray(itemValue)); + } + cardHtml += `
`; + }); + cardHtml += `
`; + } else { + cardHtml += renderField(label, currentPath, value, false, Array.isArray(value)); + } + } + cardHtml += `
`; + return cardHtml; + }; + + let html = `
`; + html += `
+

角色数据核心

+
+ + + + +
+
`; + + if (!displayItems || displayItems.length === 0) { + html += `

看什么?没更新角色条目就等着我给你显示出来条目吗?想关悬浮窗就点角色世界,功能设置关掉。

`; + return html; } - cardHtml += `
`; - return cardHtml; - }; - let html = `
`; - html += `
-

角色数据核心

-
- - - - -
-
`; + html += `
`; + html += `
`; + displayItems.forEach((item, index) => { + const itemName = item.isRoster ? '人物总览' : (item.parsed?.name || `未知实体 ${index + 1}`); + const wrapperClass = index === 0 ? 'cwb-cyber-tab active' : 'cwb-cyber-tab'; + html += `
+ + +
`; + }); + html += `
`; - if (!displayItems || displayItems.length === 0) { - html += `

看什么?没更新角色条目就等着我给你显示出来条目吗?想关悬浮窗就点角色世界,功能设置关掉。

`; + html += `
`; + displayItems.forEach((item, index) => { + html += `
`; + if (item.isRoster) { + html += `
+

人物总览 (只读)

+
+ +
+
`; + } else { + const charData = item.parsed; + if (charData) { + const charName = charData.name || `角色 ${index + 1}`; + if (charData.name) html += renderCard('姓名', { name: charData.name }, ''); + + // Support both old and new formats + if (charData.core_identity) html += renderCard('核心认同', charData.core_identity, 'core_identity'); + if (charData.CI) html += renderCard('核心认同', charData.CI, 'CI'); + + if (charData.physical_imprint) html += renderCard('物理印记', charData.physical_imprint, 'physical_imprint'); + if (charData.PI) html += renderCard('物理印记', charData.PI, 'PI'); + + if (charData.psyche_profile) html += renderCard('心智侧写', charData.psyche_profile, 'psyche_profile'); + if (charData.PP) html += renderCard('心智侧写', charData.PP, 'PP'); + + if (charData.social_matrix) html += renderCard('社交矩阵', charData.social_matrix, 'social_matrix'); + if (charData.SM) html += renderCard('社交矩阵', charData.SM, 'SM'); + + if (charData.narrative_essence) html += renderCard('叙事精粹', charData.narrative_essence, 'narrative_essence'); + if (charData.NE) html += renderCard('叙事精粹', charData.NE, 'NE'); + + html += `
+

注入设置

+
+
+ + +
+
+ + +
+
+ + +
+
+
`; + + html += ``; + } + } + html += `
`; + }); + html += `
`; return html; } - html += `
`; - html += `
`; - displayItems.forEach((item, index) => { - const itemName = item.isRoster ? '人物总览' : (item.parsed?.name || `未知实体 ${index + 1}`); - const wrapperClass = index === 0 ? 'cwb-cyber-tab active' : 'cwb-cyber-tab'; - html += `
- - -
`; - }); - html += `
`; - - html += `
`; - displayItems.forEach((item, index) => { - html += `
`; - if (item.isRoster) { - html += `
-

人物总览 (只读)

-
- -
-
`; - } else { - const charData = item.parsed; - if (charData) { - const charName = charData.name || `角色 ${index + 1}`; - if (charData.name) html += renderCard('姓名', { name: charData.name }, ''); - if (charData.core_identity) html += renderCard('核心认同', charData.core_identity, 'core_identity'); - if (charData.physical_imprint) html += renderCard('物理印记', charData.physical_imprint, 'physical_imprint'); - if (charData.psyche_profile) html += renderCard('心智侧写', charData.psyche_profile, 'psyche_profile'); - if (charData.social_matrix) html += renderCard('社交矩阵', charData.social_matrix, 'social_matrix'); - if (charData.narrative_essence) html += renderCard('叙事精粹', charData.narrative_essence, 'narrative_essence'); - - html += `
-

注入设置

-
-
- - -
-
- - -
-
- - -
-
-
`; - - html += ``; - } - } - html += `
`; - }); - html += `
`; - return html; -} - -function bindCharCardViewerPopupEvents($popup) { - $popup.on('change', '.cwb-insertion-position', function() { - const $this = $(this); - const $depthContainer = $this.closest('.cwb-insertion-settings-content').find('.cwb-insertion-depth-container'); - if ($this.val() === 'at_depth') { - $depthContainer.show(); - } else { - $depthContainer.hide(); - } - }); - - $popup.on('click', '.cwb-viewer-popup-close-button', closeCharCardViewerPopup); - $popup.find('#cwb-viewer-refresh').on('click', () => { - showToastr('info', '正在刷新角色数据...'); - showCharCardViewerPopup(); - }); - - $popup.find('#cwb-manual-update-btn').on('click', async function() { - const $button = $(this); - $button.prop('disabled', true).html(' 更新中...'); - await manualUpdateLogic(); - showToastr('info', '更新完成,正在刷新查看器...'); - showCharCardViewerPopup(); - }); - - $popup.find('.cwb-cyber-tab__button').on('click', function () { - const $this = $(this); - const targetUid = $this.data('char-uid'); - $popup.find('.cwb-cyber-tab').removeClass('active'); - $this.closest('.cwb-cyber-tab').addClass('active'); - $popup.find('.cwb-cyber-content-pane').removeClass('active'); - $popup.find(`#cwb-char-content-${targetUid}`).addClass('active'); - }); - - $popup.find('.cwb-cyber-tab__delete').on('click', async function(e) { - e.stopPropagation(); - if (confirm('您确定要删除这个角色条目吗?此操作不可撤销。')) { - const uidToDelete = $(this).data('char-uid'); - await deleteLorebookEntries([uidToDelete]); - const $wrapper = $(this).closest('.cwb-cyber-tab'); - const $pane = $popup.find(`#cwb-char-content-${uidToDelete}`); - const wasActive = $wrapper.hasClass('active'); - $wrapper.remove(); - $pane.remove(); - if (wasActive && $popup.find('.cwb-cyber-tab').length > 0) { - $popup.find('.cwb-cyber-tab').first().find('.cwb-cyber-tab__button').trigger('click'); - } else if ($popup.find('.cwb-cyber-tab').length === 0) { - showCharCardViewerPopup(); - } - } - }); - - $popup.find('#cwb-viewer-delete-all').on('click', async function() { - if (confirm('您确定要清除当前聊天中的所有角色卡和总览吗?此操作将删除所有相关条目,且不可撤销。')) { - const allUids = $popup.find('.cwb-cyber-tab__button').map(function() { - return $(this).data('char-uid'); - }).get(); - if (allUids.length > 0) { - await deleteLorebookEntries(allUids); - } - showCharCardViewerPopup(); - } - }); - - $popup.find('.cwb-save-button').on('click', async function () { - const $button = $(this); - const targetUid = $button.data('uid'); - $button.prop('disabled', true).html(' 保存中...'); - try { - const book = await getTargetWorldBook(); - if (!book) throw new Error('未找到目标世界书。'); - const $activePane = $popup.find(`#cwb-char-content-${targetUid}`); - const collectedData = {}; - const setNestedValue = (obj, path, value) => { - const keys = path.split('.'); - let current = obj; - keys.forEach((key, index) => { - if (index === keys.length - 1) { - current[key] = value === '' ? null : value; - } else { - const nextKeyIsNumber = /^\d+$/.test(keys[index + 1]); - if (!current[key]) { - current[key] = nextKeyIsNumber ? [] : {}; - } - current = current[key]; - } - }); - }; - $activePane.find('.cwb-cyber-field__input').each(function () { - const $field = $(this); - const path = $field.data('path'); - let value = $field.val(); - if ($field.data('is-array')) { - value = value.split('\n').map(l => l.trim()).filter(Boolean); - } - if(path){ - setNestedValue(collectedData, path, value); - } - }); - const finalContentToSave = buildCustomFormat(collectedData); - - const insertionPosition = $activePane.find('.cwb-insertion-position').val(); - const insertionDepth = parseInt($activePane.find('.cwb-insertion-depth').val(), 10); - const insertionOrder = parseInt($activePane.find('.cwb-insertion-order').val(), 10); - - logDebug(`[DEBUG] 界面收集值 UID:${targetUid}`, { - insertionPosition: insertionPosition, - insertionDepth: insertionDepth, - insertionOrder: insertionOrder - }); - - const positionMap = { - 'before_char': 'before_character_definition', - 'after_char': 'after_character_definition', - 'before_an': 'before_author_note', - 'after_an': 'after_author_note', - 'at_depth': 'at_depth_as_system' - }; - - const finalEntryData = { - uid: targetUid, - content: finalContentToSave, - position: positionMap[insertionPosition] || 'before_character_definition', - order: isNaN(insertionOrder) ? 7001 : insertionOrder, - }; - - if (insertionPosition === 'at_depth') { - finalEntryData.depth = isNaN(insertionDepth) ? 0 : insertionDepth; + function bindCharCardViewerPopupEvents($popup) { + $popup.on('change', '.cwb-insertion-position', function() { + const $this = $(this); + const $depthContainer = $this.closest('.cwb-insertion-settings-content').find('.cwb-insertion-depth-container'); + if ($this.val() === 'at_depth') { + $depthContainer.show(); } else { - finalEntryData.depth = null; + $depthContainer.hide(); } - - logDebug(`[DEBUG] 最终保存数据 UID:${targetUid}`, { - position: finalEntryData.position, - depth: finalEntryData.depth, - order: finalEntryData.order, - hasDepthField: 'depth' in finalEntryData - }); - - await amilyHelper.setLorebookEntries(book, [finalEntryData]); - showToastr('success', '角色卡已成功保存!'); - } catch (error) { - logError('保存角色卡失败:', error); - showToastr('error', `保存失败: ${error.message}`); - } finally { - $button.prop('disabled', false).text(`保存修改`); - } - }); -} - -function closeCharCardViewerPopup() { - $(`#${CHAR_CARD_VIEWER_POPUP_ID}`).remove(); -} - -export async function showCharCardViewerPopup() { - if (!isCwbEnabled()) return; - closeCharCardViewerPopup(); - try { - const book = await getTargetWorldBook(); - if (!book) { - showToastr('warning', '当前角色未设置主世界书或自定义世界书。'); - $('body').append(createCharCardViewerPopupHtml([])); - bindCharCardViewerPopupEvents($(`#${CHAR_CARD_VIEWER_POPUP_ID}`)); - return; - } - const allEntries = await amilyHelper.getLorebookEntries(book); - let currentChatId = state.currentChatFileIdentifier; - - if (!currentChatId || currentChatId.startsWith('unknown_chat')) { - logError(`Invalid chat identifier "${currentChatId}" for viewer.`); - $('body').append(createCharCardViewerPopupHtml([])); - bindCharCardViewerPopupEvents($(`#${CHAR_CARD_VIEWER_POPUP_ID}`)); - return; - } - - const cleanChatId = currentChatId.replace(/ imported/g, ''); - let displayItems = []; - - let relevantEntries; - if (state.worldbookTarget === 'custom' && state.customWorldBook) { - relevantEntries = allEntries.filter(entry => { - if (!entry.enabled || !Array.isArray(entry.keys)) return false; - if (entry.keys.includes('Amily2角色总集') || entry.keys.includes('角色总览')) return true; - if (entry.content) { - try { - const parsed = parseCustomFormat(entry.content); - return parsed && Object.keys(parsed).length > 0; - } catch (e) { - return false; - } - } - - return false; - }); - } else { - relevantEntries = allEntries.filter(entry => - entry.enabled && - Array.isArray(entry.keys) && - entry.keys.includes(cleanChatId) - ); - } - - const rosterEntries = relevantEntries.filter(entry => - entry.keys.includes('Amily2角色总集') && entry.keys.includes('角色总览') - ); - - rosterEntries.forEach((entry, index) => { - displayItems.push({ - uid: entry.uid, - isRoster: true, - comment: entry.comment, - content: entry.content, - rosterIndex: index - }); }); - const characterEntries = relevantEntries - .filter(entry => !entry.keys.includes('Amily2角色总集')) - .map(entry => { - try { - logDebug(`[DEBUG] 原始条目数据 UID:${entry.uid}`, { - position: entry.position, - depth: entry.depth, - order: entry.order, - comment: entry.comment - }); + $popup.on('click', '.cwb-viewer-popup-close-button', closeCharCardViewerPopup); + $popup.find('#cwb-viewer-refresh').on('click', () => { + showToastr('info', '正在刷新角色数据...'); + showCharCardViewerPopup(); + }); - const positionStringMap = { - 0: 'before_char', - 1: 'after_char', - 2: 'before_an', - 3: 'after_an', - 4: 'at_depth', - 'before_character_definition': 'before_char', - 'after_character_definition': 'after_char', - 'before_author_note': 'before_an', - 'after_author_note': 'after_an', - 'at_depth_as_system': 'at_depth' - }; + $popup.find('#cwb-manual-update-btn').on('click', async function() { + const $button = $(this); + $button.prop('disabled', true).html(' 更新中...'); + await manualUpdateLogic(); + showToastr('info', '更新完成,正在刷新查看器...'); + showCharCardViewerPopup(); + }); - const position = entry.position; - const mappedPosition = positionStringMap[position] || 'at_depth'; - const finalDepth = (position === 4 || position === 'at_depth_as_system') ? (entry.depth ?? 0) : 0; - logDebug(`[DEBUG] 映射结果 UID:${entry.uid}`, { - originalPosition: position, - mappedPosition: mappedPosition, - finalDepth: finalDepth - }); + $popup.find('.cwb-cyber-tab__button').on('click', function () { + const $this = $(this); + const targetUid = $this.data('char-uid'); + $popup.find('.cwb-cyber-tab').removeClass('active'); + $this.closest('.cwb-cyber-tab').addClass('active'); + $popup.find('.cwb-cyber-content-pane').removeClass('active'); + $popup.find(`#cwb-char-content-${targetUid}`).addClass('active'); + }); - return { - uid: entry.uid, - isRoster: false, - comment: entry.comment, - content: entry.content, - parsed: parseCustomFormat(entry.content), - insertionPosition: mappedPosition, - insertionDepth: finalDepth, - insertionOrder: entry.order ?? 7001, - }; - } catch (e) { - logError(`解析角色条目失败 (UID: ${entry.uid}),已跳过。`, e); - return null; - } - }) - .filter(c => c && c.parsed && Object.keys(c.parsed).length > 0); - - displayItems = displayItems.concat(characterEntries); - - const popupHtml = createCharCardViewerPopupHtml(displayItems); - $('body').append(popupHtml); - const $popup = $(`#${CHAR_CARD_VIEWER_POPUP_ID}`); - bindCharCardViewerPopupEvents($popup); - } catch (error) { - logError('无法显示角色卡查看器:', error); - showToastr('error', '加载角色卡数据时出错。'); - } -} - -function toggleCharCardViewerPopup() { - if ($(`#${CHAR_CARD_VIEWER_POPUP_ID}`).length > 0) { - closeCharCardViewerPopup(); - } else { - showCharCardViewerPopup(); - } -} - -function keepButtonInBounds($element, savePosition = false) { - if (!$element || !$element.length) return; - const windowWidth = $(window).width(); - const windowHeight = $(window).height(); - const buttonWidth = $element.outerWidth(); - const buttonHeight = $element.outerHeight(); - let currentPos = $element.offset(); - let newTop = Math.max(0, Math.min(currentPos.top, windowHeight - buttonHeight)); - let newLeft = Math.max(0, Math.min(currentPos.left, windowWidth - buttonWidth)); - $element.css({ top: `${newTop}px`, left: `${newLeft}px` }); - if (savePosition) { - localStorage.setItem(state.STORAGE_KEY_VIEWER_BUTTON_POS, JSON.stringify({ top: $element.css('top'), left: $element.css('left') })); - } -} - -function makeButtonDraggable($button) { - let isDragging = false, wasDragged = false, offset = { x: 0, y: 0 }, startPos = { x: 0, y: 0 }; - const DRAG_THRESHOLD = 5; // 5 pixels threshold - - const getCoords = (e) => e.touches && e.touches.length ? e.touches[0] : e; - - const dragStart = function (e) { - if (e.type === 'touchstart') e.preventDefault(); - isDragging = true; - wasDragged = false; - const coords = getCoords(e); - startPos.x = coords.clientX; - startPos.y = coords.clientY; - offset.x = coords.clientX - $button.offset().left; - offset.y = coords.clientY - $button.offset().top; - $button.css('cursor', 'grabbing'); - $('body').css({ 'user-select': 'none', '-webkit-user-select': 'none' }); - }; - - const dragMove = function (e) { - if (!isDragging) return; - const coords = getCoords(e); - const dx = coords.clientX - startPos.x; - const dy = coords.clientY - startPos.y; - - if (!wasDragged && Math.sqrt(dx * dx + dy * dy) > DRAG_THRESHOLD) { - wasDragged = true; - } - - if (wasDragged) { - if (e.type === 'touchmove') e.preventDefault(); - let newX = coords.clientX - offset.x; - let newY = coords.clientY - offset.y; - newX = Math.max(0, Math.min(newX, window.innerWidth - $button.outerWidth())); - newY = Math.max(0, Math.min(newY, window.innerHeight - $button.outerHeight())); - $button.css({ top: newY + 'px', left: newX + 'px', right: '', bottom: '' }); - } - }; - - const dragEnd = function (e) { - if (!isDragging) return; - isDragging = false; - $button.css('cursor', 'grab'); - $('body').css({ 'user-select': 'auto', '-webkit-user-select': 'auto' }); - if (wasDragged) { - keepButtonInBounds($button, true); - } else if (e.type === 'touchend') { - e.preventDefault(); - toggleCharCardViewerPopup(); - } - }; - - $button.on('mousedown', dragStart); - $(document).on('mousemove.cwbViewer', dragMove).on('mouseup.cwbViewer', dragEnd); - $button.on('touchstart', dragStart); - $(document).on('touchmove.cwbViewer', dragMove).on('touchend.cwbViewer', dragEnd); - - $button.on('click', function (e) { - if (wasDragged) { - e.preventDefault(); + $popup.find('.cwb-cyber-tab__delete').on('click', async function(e) { e.stopPropagation(); + if (confirm('您确定要删除这个角色条目吗?此操作不可撤销。')) { + const uidToDelete = $(this).data('char-uid'); + await deleteLorebookEntries([uidToDelete]); + const $wrapper = $(this).closest('.cwb-cyber-tab'); + const $pane = $popup.find(`#cwb-char-content-${uidToDelete}`); + const wasActive = $wrapper.hasClass('active'); + $wrapper.remove(); + $pane.remove(); + if (wasActive && $popup.find('.cwb-cyber-tab').length > 0) { + $popup.find('.cwb-cyber-tab').first().find('.cwb-cyber-tab__button').trigger('click'); + } else if ($popup.find('.cwb-cyber-tab').length === 0) { + showCharCardViewerPopup(); + } + } + }); + + $popup.find('#cwb-viewer-delete-all').on('click', async function() { + if (confirm('您确定要清除当前聊天中的所有角色卡和总览吗?此操作将删除所有相关条目,且不可撤销。')) { + const allUids = $popup.find('.cwb-cyber-tab__button').map(function() { + return $(this).data('char-uid'); + }).get(); + if (allUids.length > 0) { + await deleteLorebookEntries(allUids); + } + showCharCardViewerPopup(); + } + }); + + $popup.find('.cwb-save-button').on('click', async function () { + const $button = $(this); + const targetUid = $button.data('uid'); + $button.prop('disabled', true).html(' 保存中...'); + try { + const book = await getTargetWorldBook(); + if (!book) throw new Error('未找到目标世界书。'); + const $activePane = $popup.find(`#cwb-char-content-${targetUid}`); + const collectedData = {}; + const setNestedValue = (obj, path, value) => { + const keys = path.split('.'); + let current = obj; + keys.forEach((key, index) => { + if (index === keys.length - 1) { + current[key] = value === '' ? null : value; + } else { + const nextKeyIsNumber = /^\d+$/.test(keys[index + 1]); + if (!current[key]) { + current[key] = nextKeyIsNumber ? [] : {}; + } + current = current[key]; + } + }); + }; + $activePane.find('.cwb-cyber-field__input').each(function () { + const $field = $(this); + const path = $field.data('path'); + let value = $field.val(); + if ($field.data('is-array')) { + value = value.split('\n').map(l => l.trim()).filter(Boolean); + } + if(path){ + setNestedValue(collectedData, path, value); + } + }); + const finalContentToSave = buildCustomFormat(collectedData); + + const insertionPosition = $activePane.find('.cwb-insertion-position').val(); + const insertionDepth = parseInt($activePane.find('.cwb-insertion-depth').val(), 10); + const insertionOrder = parseInt($activePane.find('.cwb-insertion-order').val(), 10); + + logDebug(`[DEBUG] 界面收集值 UID:${targetUid}`, { + insertionPosition: insertionPosition, + insertionDepth: insertionDepth, + insertionOrder: insertionOrder + }); + + const positionMap = { + 'before_char': 'before_character_definition', + 'after_char': 'after_character_definition', + 'before_an': 'before_author_note', + 'after_an': 'after_author_note', + 'at_depth': 'at_depth_as_system' + }; + + const finalEntryData = { + uid: targetUid, + content: finalContentToSave, + position: positionMap[insertionPosition] || 'before_character_definition', + order: isNaN(insertionOrder) ? 7001 : insertionOrder, + }; + + if (insertionPosition === 'at_depth') { + finalEntryData.depth = isNaN(insertionDepth) ? 0 : insertionDepth; + } else { + finalEntryData.depth = null; + } + + logDebug(`[DEBUG] 最终保存数据 UID:${targetUid}`, { + position: finalEntryData.position, + depth: finalEntryData.depth, + order: finalEntryData.order, + hasDepthField: 'depth' in finalEntryData + }); + + await amilyHelper.setLorebookEntries(book, [finalEntryData]); + showToastr('success', '角色卡已成功保存!'); + } catch (error) { + logError('保存角色卡失败:', error); + showToastr('error', `保存失败: ${error.message}`); + } finally { + $button.prop('disabled', false).text(`保存修改`); + } + }); + } + + function closeCharCardViewerPopup() { + $(`#${CHAR_CARD_VIEWER_POPUP_ID}`).remove(); + } + + export async function showCharCardViewerPopup() { + if (!isCwbEnabled()) return; + closeCharCardViewerPopup(); + try { + const book = await getTargetWorldBook(); + if (!book) { + showToastr('warning', '当前角色未设置主世界书或自定义世界书。'); + $('body').append(createCharCardViewerPopupHtml([])); + bindCharCardViewerPopupEvents($(`#${CHAR_CARD_VIEWER_POPUP_ID}`)); + return; + } + const allEntries = await amilyHelper.getLorebookEntries(book); + let currentChatId = state.currentChatFileIdentifier; + + if (!currentChatId || currentChatId.startsWith('unknown_chat')) { + logError(`Invalid chat identifier "${currentChatId}" for viewer.`); + $('body').append(createCharCardViewerPopupHtml([])); + bindCharCardViewerPopupEvents($(`#${CHAR_CARD_VIEWER_POPUP_ID}`)); + return; + } + + const cleanChatId = currentChatId.replace(/ imported/g, ''); + let displayItems = []; + + let relevantEntries; + if (state.worldbookTarget === 'custom' && state.customWorldBook) { + relevantEntries = allEntries.filter(entry => { + if (!entry.enabled || !Array.isArray(entry.keys)) return false; + if (entry.keys.includes('Amily2角色总集') || entry.keys.includes('角色总览')) return true; + if (entry.content) { + try { + const parsed = parseCustomFormat(entry.content); + return parsed && Object.keys(parsed).length > 0; + } catch (e) { + return false; + } + } + + return false; + }); + } else { + relevantEntries = allEntries.filter(entry => + entry.enabled && + Array.isArray(entry.keys) && + entry.keys.includes(cleanChatId) + ); + } + + const rosterEntries = relevantEntries.filter(entry => + entry.keys.includes('Amily2角色总集') && entry.keys.includes('角色总览') + ); + + rosterEntries.forEach((entry, index) => { + displayItems.push({ + uid: entry.uid, + isRoster: true, + comment: entry.comment, + content: entry.content, + rosterIndex: index + }); + }); + + const characterEntries = relevantEntries + .filter(entry => !entry.keys.includes('Amily2角色总集')) + .map(entry => { + try { + logDebug(`[DEBUG] 原始条目数据 UID:${entry.uid}`, { + position: entry.position, + depth: entry.depth, + order: entry.order, + comment: entry.comment + }); + + const positionStringMap = { + 0: 'before_char', + 1: 'after_char', + 2: 'before_an', + 3: 'after_an', + 4: 'at_depth', + 'before_character_definition': 'before_char', + 'after_character_definition': 'after_char', + 'before_author_note': 'before_an', + 'after_author_note': 'after_an', + 'at_depth_as_system': 'at_depth' + }; + + const position = entry.position; + const mappedPosition = positionStringMap[position] || 'at_depth'; + const finalDepth = (position === 4 || position === 'at_depth_as_system') ? (entry.depth ?? 0) : 0; + logDebug(`[DEBUG] 映射结果 UID:${entry.uid}`, { + originalPosition: position, + mappedPosition: mappedPosition, + finalDepth: finalDepth + }); + + return { + uid: entry.uid, + isRoster: false, + comment: entry.comment, + content: entry.content, + parsed: parseCustomFormat(entry.content), + insertionPosition: mappedPosition, + insertionDepth: finalDepth, + insertionOrder: entry.order ?? 7001, + }; + } catch (e) { + logError(`解析角色条目失败 (UID: ${entry.uid}),已跳过。`, e); + return null; + } + }) + .filter(c => c && c.parsed && Object.keys(c.parsed).length > 0); + + displayItems = displayItems.concat(characterEntries); + + const popupHtml = createCharCardViewerPopupHtml(displayItems); + $('body').append(popupHtml); + const $popup = $(`#${CHAR_CARD_VIEWER_POPUP_ID}`); + bindCharCardViewerPopupEvents($popup); + } catch (error) { + logError('无法显示角色卡查看器:', error); + showToastr('error', '加载角色卡数据时出错。'); + } + } + + function toggleCharCardViewerPopup() { + if ($(`#${CHAR_CARD_VIEWER_POPUP_ID}`).length > 0) { + closeCharCardViewerPopup(); + } else { + showCharCardViewerPopup(); + } + } + + function keepButtonInBounds($element, savePosition = false) { + if (!$element || !$element.length) return; + const windowWidth = $(window).width(); + const windowHeight = $(window).height(); + const buttonWidth = $element.outerWidth(); + const buttonHeight = $element.outerHeight(); + let currentPos = $element.offset(); + let newTop = Math.max(0, Math.min(currentPos.top, windowHeight - buttonHeight)); + let newLeft = Math.max(0, Math.min(currentPos.left, windowWidth - buttonWidth)); + $element.css({ top: `${newTop}px`, left: `${newLeft}px` }); + if (savePosition) { + localStorage.setItem(state.STORAGE_KEY_VIEWER_BUTTON_POS, JSON.stringify({ top: $element.css('top'), left: $element.css('left') })); + } + } + + function makeButtonDraggable($button) { + let isDragging = false, wasDragged = false, offset = { x: 0, y: 0 }, startPos = { x: 0, y: 0 }; + const DRAG_THRESHOLD = 5; // 5 pixels threshold + + const getCoords = (e) => e.touches && e.touches.length ? e.touches[0] : e; + + const dragStart = function (e) { + if (e.type === 'touchstart') e.preventDefault(); + isDragging = true; + wasDragged = false; + const coords = getCoords(e); + startPos.x = coords.clientX; + startPos.y = coords.clientY; + offset.x = coords.clientX - $button.offset().left; + offset.y = coords.clientY - $button.offset().top; + $button.css('cursor', 'grabbing'); + $('body').css({ 'user-select': 'none', '-webkit-user-select': 'none' }); + }; + + const dragMove = function (e) { + if (!isDragging) return; + const coords = getCoords(e); + const dx = coords.clientX - startPos.x; + const dy = coords.clientY - startPos.y; + + if (!wasDragged && Math.sqrt(dx * dx + dy * dy) > DRAG_THRESHOLD) { + wasDragged = true; + } + + if (wasDragged) { + if (e.type === 'touchmove') e.preventDefault(); + let newX = coords.clientX - offset.x; + let newY = coords.clientY - offset.y; + newX = Math.max(0, Math.min(newX, window.innerWidth - $button.outerWidth())); + newY = Math.max(0, Math.min(newY, window.innerHeight - $button.outerHeight())); + $button.css({ top: newY + 'px', left: newX + 'px', right: '', bottom: '' }); + } + }; + + const dragEnd = function (e) { + if (!isDragging) return; + isDragging = false; + $button.css('cursor', 'grab'); + $('body').css({ 'user-select': 'auto', '-webkit-user-select': 'auto' }); + if (wasDragged) { + keepButtonInBounds($button, true); + } else if (e.type === 'touchend') { + e.preventDefault(); + toggleCharCardViewerPopup(); + } + }; + + $button.on('mousedown', dragStart); + $(document).on('mousemove.cwbViewer', dragMove).on('mouseup.cwbViewer', dragEnd); + $button.on('touchstart', dragStart); + $(document).on('touchmove.cwbViewer', dragMove).on('touchend.cwbViewer', dragEnd); + + $button.on('click', function (e) { + if (wasDragged) { + e.preventDefault(); + e.stopPropagation(); + return; + } + toggleCharCardViewerPopup(); + }); + } + + export function initializeCharCardViewer() { + const $existingButton = $(`#${CHAR_CARD_VIEWER_BUTTON_ID}`); + + if ($existingButton.length > 0) { + console.log('[CWB] Char card viewer button already exists'); + setTimeout(() => { + const shouldShow = isCwbEnabled() && state.viewerEnabled; + $existingButton.toggle(shouldShow); + console.log(`[CWB] Force updated existing button visibility: ${shouldShow}`); + }, 100); return; } - toggleCharCardViewerPopup(); - }); -} + + const buttonHtml = `
`; + $('body').append(buttonHtml); + const $viewerButton = $(`#${CHAR_CARD_VIEWER_BUTTON_ID}`); + makeButtonDraggable($viewerButton); + + const savedPosition = JSON.parse(localStorage.getItem(state.STORAGE_KEY_VIEWER_BUTTON_POS) || 'null'); + if (savedPosition) { + $viewerButton.css({ top: savedPosition.top, left: savedPosition.left }); + } else { + $viewerButton.css({ top: '120px', right: '10px', left: 'auto' }); + } -export function initializeCharCardViewer() { - const $existingButton = $(`#${CHAR_CARD_VIEWER_BUTTON_ID}`); - - if ($existingButton.length > 0) { - console.log('[CWB] Char card viewer button already exists'); setTimeout(() => { const shouldShow = isCwbEnabled() && state.viewerEnabled; - $existingButton.toggle(shouldShow); - console.log(`[CWB] Force updated existing button visibility: ${shouldShow}`); + $viewerButton.toggle(shouldShow); + console.log(`[CWB] New button created with visibility: ${shouldShow}`); }, 100); - return; - } - - const buttonHtml = `
`; - $('body').append(buttonHtml); - const $viewerButton = $(`#${CHAR_CARD_VIEWER_BUTTON_ID}`); - makeButtonDraggable($viewerButton); - - const savedPosition = JSON.parse(localStorage.getItem(state.STORAGE_KEY_VIEWER_BUTTON_POS) || 'null'); - if (savedPosition) { - $viewerButton.css({ top: savedPosition.top, left: savedPosition.left }); - } else { - $viewerButton.css({ top: '120px', right: '10px', left: 'auto' }); + + console.log('[CWB] Char card viewer button initialized'); + + let resizeTimeout; + $(window).on('resize.cwbViewer', function () { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(() => keepButtonInBounds($(`#${CHAR_CARD_VIEWER_BUTTON_ID}`), true), 150); + }); } - setTimeout(() => { + export function updateViewerButtonVisibility() { + const $button = $(`#${CHAR_CARD_VIEWER_BUTTON_ID}`); const shouldShow = isCwbEnabled() && state.viewerEnabled; - $viewerButton.toggle(shouldShow); - console.log(`[CWB] New button created with visibility: ${shouldShow}`); - }, 100); - - console.log('[CWB] Char card viewer button initialized'); - - let resizeTimeout; - $(window).on('resize.cwbViewer', function () { - clearTimeout(resizeTimeout); - resizeTimeout = setTimeout(() => keepButtonInBounds($(`#${CHAR_CARD_VIEWER_BUTTON_ID}`), true), 150); - }); -} - -export function updateViewerButtonVisibility() { - const $button = $(`#${CHAR_CARD_VIEWER_BUTTON_ID}`); - const shouldShow = isCwbEnabled() && state.viewerEnabled; - - console.log(`[CWB] Updating viewer button visibility: ${shouldShow} (master: ${isCwbEnabled()}, viewer: ${state.viewerEnabled})`); - - if ($button.length > 0) { - $button.toggle(shouldShow); - console.log(`[CWB] Viewer button visibility set to: ${shouldShow}`); - } else { - console.log('[CWB] Viewer button not found, will initialize when DOM is ready'); - // Try to initialize if button doesn't exist yet - setTimeout(() => { - initializeCharCardViewer(); - }, 500); + + console.log(`[CWB] Updating viewer button visibility: ${shouldShow} (master: ${isCwbEnabled()}, viewer: ${state.viewerEnabled})`); + + if ($button.length > 0) { + $button.toggle(shouldShow); + console.log(`[CWB] Viewer button visibility set to: ${shouldShow}`); + } else { + console.log('[CWB] Viewer button not found, will initialize when DOM is ready'); + // Try to initialize if button doesn't exist yet + setTimeout(() => { + initializeCharCardViewer(); + }, 500); + } + + logDebug('悬浮窗按钮显示状态更新:', { + masterEnabled: isCwbEnabled(), + viewerEnabled: state.viewerEnabled, + shouldShow: shouldShow + }); } - - logDebug('悬浮窗按钮显示状态更新:', { - masterEnabled: isCwbEnabled(), - viewerEnabled: state.viewerEnabled, - shouldShow: shouldShow - }); -} -export function bindCwbApiEvents() { - console.log('[CWB] Binding API events'); - - $('#cwb-api-url').off('input').on('input', function() { - const value = $(this).val(); - extension_settings[extensionName].cwb_api_url = value; - saveSettingsDebounced(); - }); - - $('#cwb-api-key').off('input').on('input', function() { - const value = $(this).val(); - extension_settings[extensionName].cwb_api_key = value; - saveSettingsDebounced(); - }); - - $('#cwb-model').off('input').on('input', function() { - const value = $(this).val(); - extension_settings[extensionName].cwb_model = value; - saveSettingsDebounced(); - }); - - $('#cwb-temperature').off('input').on('input', function() { - const value = parseFloat($(this).val()); - $('#cwb-temperature-value').text(value); - extension_settings[extensionName].cwb_temperature = value; - saveSettingsDebounced(); - }); - - $('#cwb-max-tokens').off('input').on('input', function() { - const value = parseInt($(this).val()); - $('#cwb-max-tokens-value').text(value); - extension_settings[extensionName].cwb_max_tokens = value; - saveSettingsDebounced(); - }); - - $('#cwb-test-connection').off('click').on('click', async function() { - const $button = $(this); - $button.prop('disabled', true).html(' 测试中...'); + export function bindCwbApiEvents() { + console.log('[CWB] Binding API events'); - try { - await testCwbConnection(); - } catch (error) { - console.error('[CWB] 测试连接失败:', error); - } finally { - $button.prop('disabled', false).html(' 测试连接'); - } - }); + $('#cwb-api-url').off('input').on('input', function() { + const value = $(this).val(); + extension_settings[extensionName].cwb_api_url = value; + saveSettingsDebounced(); + }); - $('#cwb-fetch-models').off('click').on('click', async function() { - const $button = $(this); - $button.prop('disabled', true).html(' 获取中...'); - - try { - const models = await fetchCwbModels(); - const $modelSelect = $('#cwb-model'); - $modelSelect.empty(); + $('#cwb-api-key').off('input').on('input', function() { + const value = $(this).val(); + extension_settings[extensionName].cwb_api_key = value; + saveSettingsDebounced(); + }); + + $('#cwb-model').off('input').on('input', function() { + const value = $(this).val(); + extension_settings[extensionName].cwb_model = value; + saveSettingsDebounced(); + }); + + $('#cwb-temperature').off('input').on('input', function() { + const value = parseFloat($(this).val()); + $('#cwb-temperature-value').text(value); + extension_settings[extensionName].cwb_temperature = value; + saveSettingsDebounced(); + }); + + $('#cwb-max-tokens').off('input').on('input', function() { + const value = parseInt($(this).val()); + $('#cwb-max-tokens-value').text(value); + extension_settings[extensionName].cwb_max_tokens = value; + saveSettingsDebounced(); + }); + + $('#cwb-test-connection').off('click').on('click', async function() { + const $button = $(this); + $button.prop('disabled', true).html(' 测试中...'); - if (models && models.length > 0) { - models.forEach(model => { - $modelSelect.append(new Option(model.name, model.id)); - }); - showToastr('success', `已获取到 ${models.length} 个模型`); - } else { - $modelSelect.append(new Option('无可用模型', '')); - showToastr('warning', '未获取到可用模型'); + try { + await testCwbConnection(); + } catch (error) { + console.error('[CWB] 测试连接失败:', error); + } finally { + $button.prop('disabled', false).html(' 测试连接'); } - } catch (error) { - console.error('[CWB] 获取模型失败:', error); - $('#cwb-model').empty().append(new Option('获取失败', '')); - } finally { - $button.prop('disabled', false).html(' 获取模型'); - } - }); -} + }); + + $('#cwb-fetch-models').off('click').on('click', async function() { + const $button = $(this); + $button.prop('disabled', true).html(' 获取中...'); + + try { + const models = await fetchCwbModels(); + const $modelSelect = $('#cwb-model'); + $modelSelect.empty(); + + if (models && models.length > 0) { + models.forEach(model => { + $modelSelect.append(new Option(model.name, model.id)); + }); + showToastr('success', `已获取到 ${models.length} 个模型`); + } else { + $modelSelect.append(new Option('无可用模型', '')); + showToastr('warning', '未获取到可用模型'); + } + } catch (error) { + console.error('[CWB] 获取模型失败:', error); + $('#cwb-model').empty().append(new Option('获取失败', '')); + } finally { + $button.prop('disabled', false).html(' 获取模型'); + } + }); + } From 75edc51530ec9b1edc2a639dd076529009cea87b Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:15:19 +0800 Subject: [PATCH 05/56] Update cwb_settings.html --- CharacterWorldBook/cwb_settings.html | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CharacterWorldBook/cwb_settings.html b/CharacterWorldBook/cwb_settings.html index 6b5b2ea..a09b28b 100644 --- a/CharacterWorldBook/cwb_settings.html +++ b/CharacterWorldBook/cwb_settings.html @@ -126,6 +126,12 @@ + + +
+ + +
@@ -188,9 +194,12 @@ +
- 重要提示: 上下文处理会内阁密室中“微言录”的标签提取内容排除规则。如果发现上下文不完整,请检查相关设置。 + 重要提示: 上下文处理会复用主功能区“手动敕史局”的标签提取内容排除规则。如果发现上下文不完整,请检查相关设置。
From 3938513b4f99996583740bdfa0b9fe193dc50569 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:16:11 +0800 Subject: [PATCH 06/56] Update cwb_settingsManager.js --- CharacterWorldBook/src/cwb_settingsManager.js | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/CharacterWorldBook/src/cwb_settingsManager.js b/CharacterWorldBook/src/cwb_settingsManager.js index 87d63ca..eb08e6f 100644 --- a/CharacterWorldBook/src/cwb_settingsManager.js +++ b/CharacterWorldBook/src/cwb_settingsManager.js @@ -7,7 +7,7 @@ import { cwbCompleteDefaultSettings } from './cwb_config.js'; import { logError, showToastr, escapeHtml, compareVersions, isCwbEnabled } from './cwb_utils.js'; import { fetchModelsAndConnect, updateApiStatusDisplay } from './cwb_apiService.js'; import { checkForUpdates } from './cwb_updater.js'; -import { handleManualUpdateCard, startBatchUpdate, handleFloorRangeUpdate } from './cwb_core.js'; +import { handleManualUpdateCard, startBatchUpdate, handleFloorRangeUpdate, handleLegacyFormatConversion } from './cwb_core.js'; import { initializeCharCardViewer } from './cwb_uiManager.js'; import { CHAR_CARD_VIEWER_BUTTON_ID } from './cwb_state.js'; @@ -128,6 +128,20 @@ function saveAutoUpdateThreshold() { } } +function saveScanDepth() { + const valStr = $panel.find('#cwb-scan-depth').val(); + const newT = parseInt(valStr, 10); + if (!isNaN(newT) && newT >= 1) { + getSettings().cwb_scan_depth = newT; + state.scanDepth = newT; + saveSettingsDebounced(); + showToastr('success', '扫描深度已保存!'); + } else { + showToastr('warning', `深度 "${valStr}" 无效。`); + $panel.find('#cwb-scan-depth').val(getSettings().cwb_scan_depth); + } +} + function bindWorldBookSettings() { const MAX_RETRIES = 10; const RETRY_DELAY = 200; @@ -226,7 +240,8 @@ export function bindSettingsEvents($settingsPanel) { }); $panel.on('change', '#cwb-api-mode', function() { const selectedMode = $(this).val(); - + + // 自动保存API模式设置 getSettings().cwb_api_mode = selectedMode; saveSettingsDebounced(); @@ -239,7 +254,8 @@ export function bindSettingsEvents($settingsPanel) { }); $panel.on('change', '#cwb-tavern-profile', function() { const selectedProfile = $(this).val(); - + + // 自动保存SillyTavern预设选择 getSettings().cwb_tavern_profile = selectedProfile; saveSettingsDebounced(); @@ -250,9 +266,11 @@ export function bindSettingsEvents($settingsPanel) { updateApiStatusDisplay($panel); }); + // 添加API字段的实时保存 $panel.on('input', '#cwb-api-url', function() { const apiUrl = $(this).val().trim(); - + + // 同时更新设置和状态 getSettings().cwb_api_url = apiUrl; state.customApiConfig.url = apiUrl; @@ -265,6 +283,7 @@ export function bindSettingsEvents($settingsPanel) { $panel.on('input', '#cwb-api-key', function() { const apiKey = $(this).val(); + // 同时更新设置和状态 getSettings().cwb_api_key = apiKey; state.customApiConfig.apiKey = apiKey; @@ -275,7 +294,8 @@ export function bindSettingsEvents($settingsPanel) { $panel.on('change', '#cwb-api-model', function() { const model = $(this).val(); - + + // 同时更新设置和状态 getSettings().cwb_api_model = model; state.customApiConfig.model = model; @@ -297,9 +317,11 @@ export function bindSettingsEvents($settingsPanel) { $panel.on('click', '#cwb-reset-char-card-prompt', resetCharCardPrompt); $panel.on('click', '#cwb-save-auto-update-threshold', saveAutoUpdateThreshold); + $panel.on('click', '#cwb-save-scan-depth', saveScanDepth); $panel.on('click', '#cwb-manual-update-card', () => handleManualUpdateCard($panel)); $panel.on('click', '#cwb-batch-update-card', () => startBatchUpdate($panel)); $panel.on('click', '#cwb-floor-range-update', () => handleFloorRangeUpdate($panel)); + $panel.on('click', '#cwb-legacy-auto-update', () => handleLegacyFormatConversion($panel)); $panel.on('click', '#cwb-check-for-updates', () => checkForUpdates(true, $panel)); $panel.on('click', '#cwb-auto-update-enabled', function () { @@ -487,6 +509,7 @@ function updateUiWithSettings() { $panel.find('#cwb-max-tokens-value').text(settings.cwb_max_tokens); $panel.find('#cwb-auto-update-threshold').val(settings.cwb_auto_update_threshold); + $panel.find('#cwb-scan-depth').val(settings.cwb_scan_depth); $panel.find('#cwb_master_enabled-checkbox').prop('checked', settings.cwb_master_enabled); $panel.find('#cwb-auto-update-enabled-checkbox').prop('checked', settings.cwb_auto_update_enabled); $panel.find('#cwb-viewer-enabled-checkbox').prop('checked', settings.cwb_viewer_enabled); @@ -513,12 +536,10 @@ export function loadSettings() { console.log('[CWB] Loading settings...'); const settings = getSettings(); - if (!settings) { extension_settings[extensionName] = { ...cwbCompleteDefaultSettings }; console.log('[CWB] Initialized default settings'); } else { - Object.keys(cwbCompleteDefaultSettings).forEach(key => { if (settings[key] === undefined || settings[key] === null) { settings[key] = cwbCompleteDefaultSettings[key]; @@ -527,7 +548,6 @@ export function loadSettings() { } const finalSettings = getSettings(); - const overrides = JSON.parse(localStorage.getItem(CWB_BOOLEAN_SETTINGS_OVERRIDE_KEY) || '{}'); if (overrides.cwb_master_enabled !== undefined) { finalSettings.cwb_master_enabled = overrides.cwb_master_enabled; @@ -542,6 +562,7 @@ export function loadSettings() { finalSettings.cwb_incremental_update_enabled = overrides.cwb_incremental_update_enabled; } + // Update state object with current settings state.masterEnabled = finalSettings.cwb_master_enabled; state.viewerEnabled = finalSettings.cwb_viewer_enabled; state.autoUpdateEnabled = finalSettings.cwb_auto_update_enabled; @@ -556,6 +577,7 @@ export function loadSettings() { state.currentIncrementalCharCardPrompt = finalSettings.cwb_incremental_char_card_prompt; state.autoUpdateThreshold = finalSettings.cwb_auto_update_threshold; + state.scanDepth = finalSettings.cwb_scan_depth; state.worldbookTarget = finalSettings.cwb_worldbook_target; state.customWorldBook = finalSettings.cwb_custom_worldbook; @@ -566,13 +588,11 @@ export function loadSettings() { worldbookTarget: state.worldbookTarget, customWorldBook: state.customWorldBook }); - if ($panel) { updateUiWithSettings(); } updateControlsLockState(); - setTimeout(() => { const $viewerButton = $(`#${CHAR_CARD_VIEWER_BUTTON_ID}`); if ($viewerButton.length > 0) { From 16bc735edc689f780341c2b143d3357ff1cc6703 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:16:38 +0800 Subject: [PATCH 07/56] Update cwb_core.js --- CharacterWorldBook/src/cwb_core.js | 195 +++++++++++++++++++++++++++-- 1 file changed, 186 insertions(+), 9 deletions(-) diff --git a/CharacterWorldBook/src/cwb_core.js b/CharacterWorldBook/src/cwb_core.js index 4d74e14..28da9df 100644 --- a/CharacterWorldBook/src/cwb_core.js +++ b/CharacterWorldBook/src/cwb_core.js @@ -1,6 +1,6 @@ import { getContext } from '/scripts/extensions.js'; import { state, SCRIPT_ID_PREFIX } from './cwb_state.js'; -import { logDebug, logError, showToastr, escapeHtml, cleanChatName, parseCustomFormat, isCwbEnabled } from './cwb_utils.js'; +import { logDebug, logError, showToastr, escapeHtml, cleanChatName, parseCustomFormat, buildCustomFormat, isCwbEnabled } from './cwb_utils.js'; import { callCustomOpenAI } from './cwb_apiService.js'; import { saveDescriptionToLorebook, updateCharacterRosterLorebookEntry, manageAutoCardUpdateLorebookEntry, getTargetWorldBook } from './cwb_lorebookManager.js'; import { extractBlocksByTags, applyExclusionRules } from '../../core/utils/rag-tag-extractor.js'; @@ -9,6 +9,7 @@ import { getPresetPrompts, getMixedOrder } from '../../PresetSettings/index.js'; import { generateRandomSeed } from '../../core/api.js'; import { getChatIdentifier } from '../../core/lore.js'; import { safeLorebookEntries } from '../../core/tavernhelper-compatibility.js'; +import { amilyHelper } from '../../core/tavern-helper/main.js'; const { SillyTavern, jQuery, characters } = window; @@ -190,7 +191,12 @@ async function proceedWithCardUpdate($panel, messagesToUse) { if (bookName) { const entries = (await safeLorebookEntries(bookName)) || []; let chatIdentifier = state.currentChatFileIdentifier.replace(/ imported/g, ''); - + const messagesText = messagesToUse.map(m => { + const name = m.name || ''; + const content = m.message || ''; + return `${name}\n${content}`; + }).join('\n').toLowerCase(); + const characterEntries = entries.filter(e => e.enabled && Array.isArray(e.keys) && @@ -200,16 +206,28 @@ async function proceedWithCardUpdate($panel, messagesToUse) { for (const entry of characterEntries) { try { - const parsedData = parseCustomFormat(entry.content); - const entryCharName = parsedData?.name?.trim() || parsedData?.core_identity?.name?.trim(); - if (entryCharName) { - existingData[entryCharName] = entry.content; + const keysToCheck = entry.keys.filter(k => k !== chatIdentifier); + if (entry.secondary_keys && Array.isArray(entry.secondary_keys)) { + keysToCheck.push(...entry.secondary_keys); + } + + let isTriggered = false; + if (keysToCheck.length > 0) { + isTriggered = keysToCheck.some(key => messagesText.includes(key.toLowerCase())); + } + + if (isTriggered) { + const parsedData = parseCustomFormat(entry.content); + const entryCharName = parsedData?.name?.trim() || parsedData?.CI?.name?.trim() || parsedData?.core_identity?.name?.trim(); + if (entryCharName) { + existingData[entryCharName] = entry.content; + } } } catch (parseError) { logError(`解析现有角色条目时出错 (UID: ${entry.uid}):`, parseError); } } - logDebug(`为 '${chatIdentifier}' 找到了 ${Object.keys(existingData).length} 个现有角色条目。`); + logDebug(`为 '${chatIdentifier}' 找到了 ${Object.keys(existingData).length} 个被触发的现有角色条目。`); } } catch (e) { logError('在增量更新中获取现有角色数据时出错:', e); @@ -290,7 +308,7 @@ async function proceedWithCardUpdate($panel, messagesToUse) { if (!trimmedBlock) continue; const parsedData = parseCustomFormat(trimmedBlock); - const charName = (parsedData?.core_identity?.name?.trim() || parsedData?.name?.trim()) || 'UnknownCharacter'; + const charName = (parsedData?.name?.trim() || parsedData?.CI?.name?.trim() || parsedData?.core_identity?.name?.trim()) || 'UnknownCharacter'; if (charName === 'UnknownCharacter') { logError('无法在块中找到角色名:', trimmedBlock); @@ -666,7 +684,8 @@ export async function manualUpdateLogic($panel = null) { isUpdatingCard = true; await loadAllChatMessages($panel); - const messagesToProcess = state.allChatMessages.slice(-state.autoUpdateThreshold); + const depth = state.scanDepth || state.autoUpdateThreshold || 6; + const messagesToProcess = state.allChatMessages.slice(-depth); await proceedWithCardUpdate($panel, messagesToProcess); isUpdatingCard = false; @@ -680,6 +699,164 @@ export async function handleManualUpdateCard($panel) { $button.prop('disabled', false).text('立即更新角色描述'); } +export async function handleLegacyFormatConversion($panel) { + if (!isCwbEnabled()) { + showToastr('warning', 'CharacterWorldBook总开关已关闭。'); + return; + } + + const $button = $panel.find('#cwb-legacy-auto-update'); + $button.prop('disabled', true).html(' 转换中...'); + + try { + const bookName = await getTargetWorldBook(); + if (!bookName) { + showToastr('warning', '未找到目标世界书。'); + return; + } + + const entries = await safeLorebookEntries(bookName); + let updatedCount = 0; + const entriesToUpdate = []; + + for (const entry of entries) { + if (!entry.content || !entry.content.includes('[--Amily2::CHAR_START--]')) continue; + + try { + const parsed = parseCustomFormat(entry.content); + if (!parsed || Object.keys(parsed).length === 0) continue; + + let hasChanges = false; + const newData = {}; + + // Helper to rename keys + const renameKey = (obj, oldKey, newKey) => { + if (obj[oldKey] !== undefined) { + obj[newKey] = obj[oldKey]; + delete obj[oldKey]; + return true; + } + return false; + }; + + // Helper to rename sub-keys + const renameSubKeys = (parentObj, parentKey, mapping) => { + if (parentObj[parentKey]) { + let subChanged = false; + for (const [oldSub, newSub] of Object.entries(mapping)) { + if (renameKey(parentObj[parentKey], oldSub, newSub)) { + subChanged = true; + } + } + return subChanged; + } + return false; + }; + + // Copy parsed data to newData to avoid mutating original if needed (though parseCustomFormat returns new obj) + Object.assign(newData, JSON.parse(JSON.stringify(parsed))); + + // 1. Rename Top Level Modules + if (renameKey(newData, 'core_identity', 'CI')) hasChanges = true; + if (renameKey(newData, 'physical_imprint', 'PI')) hasChanges = true; + if (renameKey(newData, 'psyche_profile', 'PP')) hasChanges = true; + if (renameKey(newData, 'social_matrix', 'SM')) hasChanges = true; + if (renameKey(newData, 'narrative_essence', 'NE')) hasChanges = true; + + // 2. Rename Sub-keys + // CI + if (renameSubKeys(newData, 'CI', { + 'archetype': 'arch', + 'gender': 'gen', + 'current_status': 'status' + })) hasChanges = true; + + // PI + if (renameSubKeys(newData, 'PI', { + 'first_impression': 'first', + 'key_features': 'feat', + 'mannerisms': 'manner' + })) hasChanges = true; + + // PP + if (renameSubKeys(newData, 'PP', { + 'description': 'desc', + 'motivation': 'mot', + 'values': 'val', + 'inner_conflict': 'conf' + })) hasChanges = true; + + // SM + if (renameSubKeys(newData, 'SM', { + 'interaction_style': 'style', + 'skills': 'skill', + 'reputation': 'rep' + })) hasChanges = true; + + // NE + if (newData.NE) { + // core_traits -> trait + if (newData.NE.core_traits) { + newData.NE.trait = newData.NE.core_traits.map(t => { + const newT = { ...t }; + renameKey(newT, 'definition', 'def'); + renameKey(newT, 'evidence', 'evid'); + return newT; + }); + delete newData.NE.core_traits; + hasChanges = true; + } + + // verbal_patterns -> verb + if (newData.NE.verbal_patterns) { + newData.NE.verb = { ...newData.NE.verbal_patterns }; + delete newData.NE.verbal_patterns; + renameKey(newData.NE.verb, 'style_summary', 'style'); + renameKey(newData.NE.verb, 'quotes', 'quote'); + hasChanges = true; + } + + // key_relationships -> rel + if (newData.NE.key_relationships) { + newData.NE.rel = newData.NE.key_relationships.map(r => { + const newR = { ...r }; + renameKey(newR, 'summary', 'sum'); + return newR; + }); + delete newData.NE.key_relationships; + hasChanges = true; + } + } + + if (hasChanges) { + const newContent = buildCustomFormat(newData); + entriesToUpdate.push({ + uid: entry.uid, + content: newContent + }); + updatedCount++; + } + + } catch (e) { + logError(`转换条目失败 (UID: ${entry.uid}):`, e); + } + } + + if (updatedCount > 0) { + await amilyHelper.setLorebookEntries(bookName, entriesToUpdate); + showToastr('success', `成功转换了 ${updatedCount} 个旧版格式条目!`); + } else { + showToastr('info', '没有发现需要转换的旧版格式条目。'); + } + + } catch (error) { + logError('旧版格式转换失败:', error); + showToastr('error', `转换失败: ${error.message}`); + } finally { + $button.prop('disabled', false).html(' 旧版格式转换'); + } +} + export async function initializeCore($panel) { const initialChatName = await getLatestChatName(); await resetScriptStateForNewChat($panel, initialChatName); From 4c94fcf09dc9e420550302ffb7f75b03f4872471 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:16:57 +0800 Subject: [PATCH 08/56] Update cwb_lorebookManager.js --- CharacterWorldBook/src/cwb_lorebookManager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/CharacterWorldBook/src/cwb_lorebookManager.js b/CharacterWorldBook/src/cwb_lorebookManager.js index 1e06e8e..6dbc43c 100644 --- a/CharacterWorldBook/src/cwb_lorebookManager.js +++ b/CharacterWorldBook/src/cwb_lorebookManager.js @@ -88,6 +88,7 @@ export async function saveDescriptionToLorebook(characterName, newDescription, s keys: [chatIdentifier, safeCharName, floorRange], enabled: true, type: 'selective', + scanDepth: state.scanDepth || 6, }; if (existing) { From c9a68a59b720746d5d4731ca2137c743b4e87eaa Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:17:24 +0800 Subject: [PATCH 09/56] Update main.js --- core/tavern-helper/main.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/tavern-helper/main.js b/core/tavern-helper/main.js index 344da95..56ff4b4 100644 --- a/core/tavern-helper/main.js +++ b/core/tavern-helper/main.js @@ -430,6 +430,7 @@ class AmilyHelper { existingEntry.position = positionMap[entryUpdate.position] ?? 4; } if (entryUpdate.depth !== undefined) existingEntry.depth = entryUpdate.depth; + if (entryUpdate.scanDepth !== undefined) existingEntry.scanDepth = entryUpdate.scanDepth; if (entryUpdate.order !== undefined) existingEntry.order = entryUpdate.order; if (entryUpdate.exclude_recursion !== undefined) existingEntry.excludeRecursion = entryUpdate.exclude_recursion; if (entryUpdate.prevent_recursion !== undefined) existingEntry.preventRecursion = entryUpdate.prevent_recursion; @@ -474,6 +475,7 @@ class AmilyHelper { constant: newEntryData.type === 'constant' ? true : (newEntryData.constant || false), position: typeof newEntryData.position === 'string' ? (positionMap[newEntryData.position] ?? 4) : (newEntryData.position ?? 4), depth: newEntryData.depth ?? 998, + scanDepth: newEntryData.scanDepth ?? null, disable: !(newEntryData.enabled ?? true), }); if (newEntryData.type === 'selective') newEntry.constant = false; From a69e1582f8df10084941977b3b2c6c257796a079 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:18:03 +0800 Subject: [PATCH 10/56] Update config.js --- PresetSettings/config.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/PresetSettings/config.js b/PresetSettings/config.js index 2a3a8fb..b9663a5 100644 --- a/PresetSettings/config.js +++ b/PresetSettings/config.js @@ -475,8 +475,8 @@ export const defaultMixedOrder = { { type: 'prompt', index: 5 }, { type: 'prompt', index: 6 }, { type: 'conditional', id: 'cwb_break_armor_prompt' }, - { type: 'conditional', id: 'cwb_char_card_prompt' }, { type: 'conditional', id: 'newContext' }, + { type: 'conditional', id: 'cwb_char_card_prompt' }, { type: 'prompt', index: 7 } ], cwb_summarizer_incremental: [ @@ -488,10 +488,10 @@ export const defaultMixedOrder = { { type: 'prompt', index: 5 }, { type: 'prompt', index: 6 }, { type: 'conditional', id: 'cwb_break_armor_prompt' }, - { type: 'conditional', id: 'cwb_char_card_prompt' }, - { type: 'conditional', id: 'cwb_incremental_char_card_prompt' }, { type: 'conditional', id: 'oldFiles' }, { type: 'conditional', id: 'newContext' }, + { type: 'conditional', id: 'cwb_char_card_prompt' }, + { type: 'conditional', id: 'cwb_incremental_char_card_prompt' }, { type: 'prompt', index: 7 } ], novel_processor: [ @@ -542,4 +542,3 @@ export const sectionTitles = { cwb_summarizer_incremental: '角色世界书(CWB-增量)', novel_processor: '小说处理', }; - From 6813c28559c39b2f5bc3b5b1bc5dca6f8c2dc965 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:18:23 +0800 Subject: [PATCH 11/56] Update Amily2-AdditionalFeatures.html --- assets/Amily2-AdditionalFeatures.html | 45 ++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/assets/Amily2-AdditionalFeatures.html b/assets/Amily2-AdditionalFeatures.html index 7a53968..05a1d66 100644 --- a/assets/Amily2-AdditionalFeatures.html +++ b/assets/Amily2-AdditionalFeatures.html @@ -176,8 +176,8 @@
@@ -270,7 +270,7 @@ - 【开始远征】将立即清算所有未记录的历史。 【自动巡录】则在您聊天时,于后台默默守护史册的完整。 + 【自动批量】将立即清算所有未记录的历史。 【静默总结】则在您聊天时,于后台默默守护史册的完整。 @@ -280,6 +280,41 @@
+
+ 📚 史册归档与回溯 + + 管理多条时间线的史册,随时封存或重启旧的历史。 + + +
+ +
+ +
+
+ +
+ + +
+
+
+ + + +
+ + +
+
💎 宏史卷 (史册精炼) @@ -290,8 +325,8 @@
From 3fed249e0e9c3e1579d537c81ce8e0a42658ce5a Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:18:46 +0800 Subject: [PATCH 12/56] Update historiographer.js --- core/historiographer.js | 162 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 2 deletions(-) diff --git a/core/historiographer.js b/core/historiographer.js index 1fd1082..2a3ce6e 100644 --- a/core/historiographer.js +++ b/core/historiographer.js @@ -18,6 +18,21 @@ import { callAI, generateRandomSeed } from "./api.js"; import { callNgmsAI } from "./api/Ngms_api.js"; import { executeAutoHide } from "./autoHideManager.js"; +let reloadEditor = () => { + console.warn("[大史官] reloadEditor 函数不可用,可能是旧版本。已使用空函数代替。"); +}; +(async () => { + try { + const { reloadEditor: importedReloadEditor } = await import("/scripts/world-info.js"); + if (importedReloadEditor) { + reloadEditor = importedReloadEditor; + console.log("[大史官] 已成功动态导入 reloadEditor。"); + } + } catch (error) { + console.warn("[大史官] 动态导入 reloadEditor 失败,将使用空函数。错误信息:", error.message); + } +})(); + let isExpeditionRunning = false; let manualStopRequested = false; @@ -105,6 +120,16 @@ export async function getLoresForWorldbook(bookName) { } } +function escapeHtml(text) { + if (!text) return ''; + return text + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + export async function executeManualSummary(startFloor, endFloor, isAuto = false) { return new Promise(async (resolve) => { const toastTitle = isAuto ? "微言录 (自动)" : "微言录 (手动)"; @@ -154,9 +179,9 @@ export async function executeManualSummary(startFloor, endFloor, isAuto = false) const generateModalHtml = (msgList) => { const messageHtml = msgList.map(msg => `
- 【第 ${msg.floor} 楼】 ${msg.author} + 【第 ${msg.floor} 楼】 ${escapeHtml(msg.author)}
- +
`).join(''); @@ -613,6 +638,7 @@ export async function executeRefinement(worldbook, loreKey) { entry.content = finalContent; await saveWorldInfo(worldbook, bookData, true); + reloadEditor(worldbook); toastr.success(`史册已成功重铸,并保存于《${worldbook}》!`, "宏史卷重铸完毕"); }, onRegenerate: async (dialog) => { @@ -816,3 +842,135 @@ export async function executeCompilation(worldbook, loreKeys) { return { success: false, error: error.message }; } } + +// ========== 史册归档与回溯系统 ========== + +async function getTargetLorebookName() { + const settings = extension_settings[extensionName]; + const context = getContext(); + let targetLorebookName = null; + switch (settings.lorebookTarget) { + case "character_main": + targetLorebookName = characters[context.characterId]?.data?.extensions?.world; + break; + case "dedicated": + const chatIdentifier = await getChatIdentifier(); + targetLorebookName = `Amily2-Lore-${chatIdentifier}`; + break; + } + return targetLorebookName; +} + +export async function archiveCurrentLedger() { + try { + const targetLorebookName = await getTargetLorebookName(); + if (!targetLorebookName) { + toastr.error("无法确定目标世界书,归档失败。", "圣谕不明"); + return false; + } + + const bookData = await loadWorldInfo(targetLorebookName); + if (!bookData || !bookData.entries) { + toastr.error(`无法读取世界书《${targetLorebookName}》。`, "国史馆"); + return false; + } + + const ledgerEntryKey = Object.keys(bookData.entries).find( + (key) => bookData.entries[key].comment === RUNNING_LOG_COMMENT && !bookData.entries[key].disable + ); + + if (!ledgerEntryKey) { + toastr.info("当前没有活跃的【对话流水总帐】,无需归档。", "国史馆"); + return false; + } + + const entry = bookData.entries[ledgerEntryKey]; + const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19); + const newComment = `${RUNNING_LOG_COMMENT}_归档_${timestamp}`; + + entry.comment = newComment; + entry.disable = true; + + await saveWorldInfo(targetLorebookName, bookData, true); + reloadEditor(targetLorebookName); + toastr.success(`已将当前流水总帐归档为:\n${newComment}`, "归档成功"); + return true; + + } catch (error) { + console.error("[大史官] 归档失败:", error); + toastr.error(`归档失败: ${error.message}`, "国史馆"); + return false; + } +} + +export async function getArchivedLedgers() { + try { + const targetLorebookName = await getTargetLorebookName(); + if (!targetLorebookName) return []; + + const bookData = await loadWorldInfo(targetLorebookName); + if (!bookData || !bookData.entries) return []; + + const archivedLedgers = Object.entries(bookData.entries) + .filter(([, entry]) => entry.comment && entry.comment.startsWith(`${RUNNING_LOG_COMMENT}_归档_`)) + .map(([key, entry]) => ({ + key: key, + comment: entry.comment + })) + .sort((a, b) => b.comment.localeCompare(a.comment)); // 按时间倒序排列 + + return archivedLedgers; + + } catch (error) { + console.error("[大史官] 获取归档列表失败:", error); + return []; + } +} + +export async function restoreArchivedLedger(targetLoreKey) { + try { + const targetLorebookName = await getTargetLorebookName(); + if (!targetLorebookName) { + toastr.error("无法确定目标世界书,回溯失败。", "圣谕不明"); + return false; + } + + const bookData = await loadWorldInfo(targetLorebookName); + if (!bookData || !bookData.entries) { + toastr.error(`无法读取世界书《${targetLorebookName}》。`, "国史馆"); + return false; + } + + const targetEntry = bookData.entries[targetLoreKey]; + if (!targetEntry) { + toastr.error("找不到指定的归档史册。", "圣谕有误"); + return false; + } + + const currentActiveKey = Object.keys(bookData.entries).find( + (key) => bookData.entries[key].comment === RUNNING_LOG_COMMENT && !bookData.entries[key].disable + ); + + if (currentActiveKey) { + if (currentActiveKey !== targetLoreKey) { + const activeEntry = bookData.entries[currentActiveKey]; + const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19); + activeEntry.comment = `${RUNNING_LOG_COMMENT}_归档_${timestamp}`; + activeEntry.disable = true; + toastr.info(`已自动归档原有的活跃史册为: ${activeEntry.comment}`, "自动归档"); + } + } + targetEntry.comment = RUNNING_LOG_COMMENT; + targetEntry.disable = false; + + await saveWorldInfo(targetLorebookName, bookData, true); + reloadEditor(targetLorebookName); + toastr.success("史册回溯成功!时光已倒流,旧史重现。", "回溯成功"); + return true; + + } catch (error) { + console.error("[大史官] 回溯失败:", error); + toastr.error(`回溯失败: ${error.message}`, "国史馆"); + return false; + } +} From 125e6357730d4640fa6325a346cfdfdf293f7406 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:19:16 +0800 Subject: [PATCH 13/56] Update hanlinyuan-bindings.js --- ui/hanlinyuan-bindings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/hanlinyuan-bindings.js b/ui/hanlinyuan-bindings.js index 1aab4d1..3f925fe 100644 --- a/ui/hanlinyuan-bindings.js +++ b/ui/hanlinyuan-bindings.js @@ -1 +1 @@ -const _0x28d2da=_0x219d;function _0x219d(_0xa49005,_0x12ee67){const _0x1a1560=_0x1a15();return _0x219d=function(_0x219db0,_0x20a982){_0x219db0=_0x219db0-0x1f3;let _0x52a346=_0x1a1560[_0x219db0];return _0x52a346;},_0x219d(_0xa49005,_0x12ee67);}(function(_0xc807d3,_0x2667b8){const _0x4a8bb6=_0x219d,_0x181744=_0xc807d3();while(!![]){try{const _0x5dec87=parseInt(_0x4a8bb6(0x31a))/0x1*(-parseInt(_0x4a8bb6(0x200))/0x2)+parseInt(_0x4a8bb6(0x35a))/0x3+parseInt(_0x4a8bb6(0x3ba))/0x4*(-parseInt(_0x4a8bb6(0x318))/0x5)+parseInt(_0x4a8bb6(0x2d9))/0x6+-parseInt(_0x4a8bb6(0x291))/0x7+parseInt(_0x4a8bb6(0x23a))/0x8+parseInt(_0x4a8bb6(0x3ab))/0x9;if(_0x5dec87===_0x2667b8)break;else _0x181744['push'](_0x181744['shift']());}catch(_0x3cd810){_0x181744['push'](_0x181744['shift']());}}}(_0x1a15,0x789fc));import{getContext}from'/scripts/extensions.js';import*as _0x5a0ed1 from'../core/rag-processor.js';import*as _0x798f38 from'../core/historiographer.js';import*as _0x4966d0 from'../core/utils/context-utils.js';import*as _0x54c7cd from'../core/ingestion-manager.js';import{showContentModal,showHtmlModal}from'./page-window.js';function _0x1a15(){const _0x1e2eb6=['未找到符合条件的消息。','.hly-nav-item','options','processCondensation','{{chat_text}}','target','】吗?','string','stringify','fetchEmbeddingModels','[翰林院-枢纽]\x20未能获取SillyTavern上下文,绑定失败。','\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[','selectedIndex','正在查询宝库状态...','加载失败','】移动到【','hly-tag-input','entries','hly-kb-list-local','未能获取到任何模型。','advanced','\x20块继续录入。','hly-retrieval-notify','','scrollTop','hly-api-endpoint','generateJobId','scrollHeight','hly-kb-delete-btn','loadProgress','preventDefault','用户尝试录入空文本。','1586568LlkrfG','embeddingModel','trim','hly-current-character-name','未能获取到任何Rerank模型。','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20获取失败','知识库\x20','dataset','[翰林院-枢纽]\x20编纂过程发生严重错误:','hly-kb-list-item','hly-custom-endpoint-docket','>\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×\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x20\x20\x20\x20\x20\x20\x20\x20','解锁会话','任务已中止。','#hly-add-rule-btn','[自动保存]\x20设置项\x20\x27','finalMessages','messageTypes','hly-kb-move-all-to-global','hly-hist-entry-multiselect-options','未找到匹配的条目','开始对《','请先选择一个书库并至少选择一个要编纂的条目。','children','filter',')\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','录入内容不能为空。','top_n','请至少选择一个知识库进行操作。','info','hly-kb-delete-local-btn','hly-injection-source-selector','\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','[翰林院-枢纽]\x20核心法典未能提供初始化圣旨!','manual','\x0a\x20\x20\x20\x20\x20\x20\x20\x20','all','\x20个局部知识库均已成功删除。','click','[翰林院-枢纽]\x20加载书库列表失败:','hly-overlap-size','hly-rerank-api-key','removeEventListener','批量编纂任务已完成,但有部分错误。','.hly-hist-entry-checkbox','圣谕不明','hly-unified-template-notes','display','checked','[断点续传]\x20用户选择放弃旧任务\x20','9229779fwRJyc','tags','知识库【','html','toFixed','kbId','push','content','text','processed','此书库为空','...','清空宝库失败。','\x22\x20placeholder=\x22开始字符串,\x20如\x20`。

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','您确定要将所有设定恢复为出厂默认值吗?','purgeHLYStorage','您确定要将知识库【','comment','未找到匹配的书库','\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','hly-session-lock-btn','findIndex','toggleSessionLock','layerEnd','hly-kb-toggle','.hly-kb-item-checkbox:checked','notify','css','fas\x20fa-lock','hly-','warning','hly-kb-list-','\x20个条目进行批量编纂...','[翰林院-枢纽]\x20获取模型列表失败:','append','AbortError','_searchHandler','切换知识库\x20','start','fas\x20fa-lock-open','预览失败:\x20','message','成功移动了\x20','ingestTextToHanlinyuan','源区域(','beforeend','add','圣旨已下','严重错误','#hly-modal-tag-extraction-enabled','[翰林院-枢纽]\x20更新忆识数量失败:','hly-layer-end','change','getCharacterName','当前角色没有任何局部知识库可供删除。','例如\x20http://127.0.0.1:8000/v1','1113628jDNDXZ','大功告成','toLocaleTimeString','key','map','getMessagesForCondensation','apiKey','遵命,将从第\x20','getAvailableWorldbooks','移动失败:\x20','会话已锁定到:\x20','请输入知识库的新名称:','所有\x20','批量\x20','option','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\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\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\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','files','请输入您的Google\x20API\x20Key','getSettings','style','预览内容已更新,可随时开始凝识。','翰林院设定已存档封印。','fetchHLYRerankModels','\x0a忆识总数:\x20','use\x20strict','insertAdjacentHTML','任务已由用户中止。进度已保存,可随时继续。','
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','previewHLYCondensation','input','{{lorebook_text}}','\x20楼:\x20[','预览并编辑凝识内容','您确定要将选中的\x20','2898488kmGHZn','condensationHistory','','warn','send-date','.hly-kb-rename-btn','saveHLYSettings','hly-entry-search','】已删除。','hly-chunk-size','删除局部知识库\x20','fa-times-circle','exclusionRules','getLocalKnowledgeBases','hanlinyuan-ingest-progress-bar','删除失败:\x20','获取模型失败:\x20','翰林院设定已重置为初始状态。','当前角色','allWorldbooks','未知错误','\x20个知识块','》的批量编纂任务已完成。成功:\x20','every','includes','\x20楼已成功凝识,新增\x20','processedChunks','%。是否从上次中断之处继续?','.depth','stopPropagation','\x20楼到第\x20','ingestHLYManualText','chat_history','apiEndpoint','finalText','\x0a--------------------\x0aAPI端点:\x20','value','move','\x20个知识库从\x20','hly-embedding-model','.count\x22]','hanlinyuan-ingest-novel-file-name','hly-historiography-results','closest','N/A','globalToLocal','获取Rerank模型失败:\x20','hly-independent-chat-memory-enabled','find','加载书库列表失败:\x20','hly-rerank-notify','user','fa-check-circle','\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加载失败:\x20','开始将\x20','rerank','floor','暂无规则

','遵命,将从头开始录入此书。','\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20

','input[name=\x22hly-unified-injection-position\x22]','superSortEnabled','[翰林院-枢纽]\x20查询宝库状态失败:','className','template','正在清空宝库...','>\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\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','\x20个局部知识库吗?此操作无法恢复!','initialize','手动录入','hly-local-kb-char-name','hly-hist-select-all-entries','classList','错误:\x20','injection_','[翰林院-枢纽]\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\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','正在为《','会话已解锁,将跟随当前角色。','根据标签提取或内容排除条件,未找到任何有效内容。','\x20楼的内容(共\x20','span','hly-condensation-results','操作完成,但有\x20','\x20个知识库从【','.hly-kb-name','hly-kb-bulk-actions-local','getCollectionId','getLockedSessionInfo','[翰林院-枢纽]\x20凝识过程发生错误:','.hly-log-placeholder','请先选择书库','hly-rerank-enabled','2541018uDGzfQ','','hly-query-message-count','自定义路径:','delete','hly-kb-select-all-global','.hly-preview-delete-btn-v2','boolean','removeKnowledgeBase','resetSettings','float','#hly-rules-list','\x20个知识库。','成功切换了\x20','删除知识库\x20','未找到匹配的条目','开始批量删除\x20','each','[断点续传]\x20用户选择继续任务\x20','condensation','local','end','hly-current-vector-count','toggleKnowledgeBase','flex','renameKnowledgeBase','hly-max-results','\x20为占位符。','成功加载\x20','val',';\x22>\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\x20\x20\x20\x20','宝库已清空。','testApiConnection','radio','replace','.depth_role','clearJob','independentChatMemoryEnabled','.hly-exclusion-rule-row','启禀大人,发现此书上次录入已完成\x20','\x22\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\x20data-send-date=\x22','allEntries','圣旨已达','hly-tag-extraction-toggle','hly-tag-input-container','#hly-modal-tag-input-container','block','已采集\x20','》的条目失败:','innerHTML','chunkSize','querySelector','position','input[name=\x22','\x20条消息,开始凝识...','contains','宝库状态','none','移动知识库\x20','\x20条有效条目),请点击“开始凝识”进入自动向量化流程。','moveKnowledgeBase','queryMessageCount','hly-kb-select-all-','565YGAnPY','name','1WJOSuX','[翰林院-枢纽]\x20未找到类型为\x20\x22','hly-kb-list-global','您确定要永久删除知识库【','type','点击以锁定,让翰林院固定操作当前角色的宝库','url','signal','\x22\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\x20data-is-user=\x22','准备对《','\x20个知识库执行批量操作...','checkbox','文书录入失败:\x20','updateHLYMemoryCount','global','.hly-preview-item-v2','编辑检索内容排除规则','hanlinyuan-ingest-novel-start','getVectorCount','会话已解锁。','未找到任何书库','executeCompilation'];_0x1a15=function(){return _0x1e2eb6;};return _0x1a15();}import{extractBlocksByTags,applyExclusionRules}from'../core/utils/rag-tag-extractor.js';import{filterWorldbooks,filterWorldbookEntries,highlightSearchMatch,debounce}from'../core/rag-processor.js';_0x28d2da(0x230);function setupGlobalEventHandlers(){const _0x9c32ac=_0x28d2da;window[_0x9c32ac(0x240)]=()=>saveSettingsFromUI(![]),window['resetHLYSettings']=resetSettingsToUI,window[_0x9c32ac(0x28f)]=testApi,window['fetchHLYEmbeddingModels']=fetchHLYEmbeddingModels,window[_0x9c32ac(0x22e)]=fetchHLYRerankModels,window[_0x9c32ac(0x327)]=updatePanelStatus,window[_0x9c32ac(0x3e6)]=purgeStorage,window[_0x9c32ac(0x2a3)]=startCondensation,window[_0x9c32ac(0x234)]=previewCondensation,window[_0x9c32ac(0x259)]=ingestManualText,window['hlyLog']=log,window['showHLYStats']=showStats,window[_0x9c32ac(0x283)]=startHistoriography;}function updateAndSaveSetting(_0x432dde,_0x2d2b27){const _0x3f6349=_0x28d2da,_0xf00ca3=_0x5a0ed1[_0x3f6349(0x22a)]();if(!_0xf00ca3)return;const _0x4619b0=_0x432dde[_0x3f6349(0x3d5)]('.');let _0x55f57c=_0xf00ca3;for(let _0x462ee1=0x0;_0x462ee1<_0x4619b0[_0x3f6349(0x341)]-0x1;_0x462ee1++){_0x55f57c=_0x55f57c[_0x4619b0[_0x462ee1]]=_0x55f57c[_0x4619b0[_0x462ee1]]||{};}_0x55f57c[_0x4619b0[_0x4619b0[_0x3f6349(0x341)]-0x1]]=_0x2d2b27,_0x5a0ed1[_0x3f6349(0x342)](),log(_0x3f6349(0x371)+_0x432dde+'\x27\x20已更新为:\x20'+JSON[_0x3f6349(0x338)](_0x2d2b27),'success');}function bindAutoSaveEvents(){const _0x1805bc=_0x28d2da,_0x3c1f61=document[_0x1805bc(0x214)](_0x1805bc(0x299));if(!_0x3c1f61)return;_0x3c1f61[_0x1805bc(0x29a)]('change',_0x541b13=>{const _0x3277f5=_0x1805bc,_0x4a99c5=_0x541b13[_0x3277f5(0x335)],_0x88d917=_0x4a99c5[_0x3277f5(0x369)]['settingKey'];if(!_0x88d917)return;let _0x22113a;const _0x1e717a=_0x4a99c5[_0x3277f5(0x369)][_0x3277f5(0x31e)]||_0x3277f5(0x337);if(_0x4a99c5[_0x3277f5(0x31e)]===_0x3277f5(0x325))_0x22113a=_0x4a99c5[_0x3277f5(0x3a9)];else{if(_0x4a99c5['type']===_0x3277f5(0x2fa)){if(_0x4a99c5[_0x3277f5(0x3a9)]){const _0x11aa21=_0x3c1f61[_0x3277f5(0x285)](_0x3277f5(0x30e)+_0x4a99c5[_0x3277f5(0x319)]+'\x22]'),_0x23a463=Array['from'](_0x11aa21)[_0x3277f5(0x26a)](_0x161d2d=>_0x161d2d[_0x3277f5(0x3a9)]);_0x22113a=_0x23a463[_0x3277f5(0x25e)];}else return;}else _0x22113a=_0x4a99c5[_0x3277f5(0x25e)];}switch(_0x1e717a){case _0x3277f5(0x21e):_0x22113a=parseInt(_0x22113a,0xa);break;case _0x3277f5(0x2e3):_0x22113a=parseFloat(_0x22113a);break;case'boolean':typeof _0x22113a!==_0x3277f5(0x2e0)&&(_0x22113a=_0x22113a===_0x3277f5(0x3bb));break;}if(_0x4a99c5[_0x3277f5(0x31e)]===_0x3277f5(0x2fa)&&!_0x4a99c5[_0x3277f5(0x3a9)])return;updateAndSaveSetting(_0x88d917,_0x22113a),_0x88d917==='retrieval.independentChatMemoryEnabled'&&updatePanelStatus();});}export function bindHanlinyuanEvents(){const _0x5c71ac=_0x28d2da,_0x37537a=getContext();if(!_0x37537a){console[_0x5c71ac(0x282)](_0x5c71ac(0x33a));return;}setupGlobalEventHandlers(),bindPanelToggleEvents(),bindInternalUIEvents(),bindTutorialEvents(),bindAutoSaveEvents(),bindSessionLockEvent(),initializeUnifiedInjectionEditor();if(_0x5a0ed1[_0x5c71ac(0x2c0)])_0x5a0ed1[_0x5c71ac(0x2c0)]();else{console[_0x5c71ac(0x282)](_0x5c71ac(0x394));return;}loadSettingsToUI(),loadWorldbookList(),log('[翰林院-枢纽]\x20已成功连接各部,政令畅通。','info');const _0x49d861=document[_0x5c71ac(0x214)]('hanlinyuan-ingest-novel-file-input'),_0x49b507=document['getElementById'](_0x5c71ac(0x263)),_0x13fd6c=document['getElementById'](_0x5c71ac(0x32b)),_0x4a47e4=document[_0x5c71ac(0x214)](_0x5c71ac(0x27b)),_0x5a9012=document['getElementById'](_0x5c71ac(0x2a2)),_0xb4da80=document[_0x5c71ac(0x214)](_0x5c71ac(0x248)),_0x4deb6a=document[_0x5c71ac(0x214)](_0x5c71ac(0x2a4)),_0x7150d9=document[_0x5c71ac(0x214)]('hanlinyuan-ingest-novel-controls');let _0x1e674b=null,_0x46dbb9=null;_0x49d861[_0x5c71ac(0x29a)](_0x5c71ac(0x1fc),_0xd84e50=>{const _0x3e8863=_0x5c71ac;_0x1e674b=_0xd84e50['target'][_0x3e8863(0x228)][0x0],_0x1e674b?(_0x49b507['textContent']=_0x1e674b[_0x3e8863(0x319)],_0x49b507[_0x3e8863(0x27d)]=_0x1e674b[_0x3e8863(0x319)]):_0x49b507['textContent']=_0x3e8863(0x3d1);}),_0x13fd6c[_0x5c71ac(0x29a)](_0x5c71ac(0x39f),async()=>{const _0x3bc0c9=_0x5c71ac;if(!_0x1e674b){toastr[_0x3bc0c9(0x40a)](_0x3bc0c9(0x29e));return;}let _0xafc159=0x0;const _0x586bb6=_0x54c7cd[_0x3bc0c9(0x354)](_0x1e674b),_0x33c001=_0x54c7cd[_0x3bc0c9(0x357)](_0x586bb6);if(_0x33c001){const _0x2741ba=(_0x33c001[_0x3bc0c9(0x254)]/_0x33c001[_0x3bc0c9(0x219)]*0x64)[_0x3bc0c9(0x3af)](0x1),_0x143b16=confirm(_0x3bc0c9(0x300)+_0x2741ba+_0x3bc0c9(0x255));_0x143b16?(_0xafc159=_0x33c001[_0x3bc0c9(0x254)],toastr[_0x3bc0c9(0x390)](_0x3bc0c9(0x207)+(_0xafc159+0x1)+_0x3bc0c9(0x34f),'圣旨已达'),log(_0x3bc0c9(0x2eb)+_0x586bb6+_0x3bc0c9(0x3c3)+_0xafc159+_0x3bc0c9(0x360),'info')):(_0x54c7cd[_0x3bc0c9(0x2fd)](_0x586bb6),toastr[_0x3bc0c9(0x390)](_0x3bc0c9(0x28d),_0x3bc0c9(0x303)),log(_0x3bc0c9(0x3aa)+_0x586bb6+_0x3bc0c9(0x3f6),_0x3bc0c9(0x23d)));}_0x46dbb9=new AbortController();const _0x40a85d=_0x46dbb9[_0x3bc0c9(0x321)];_0x7150d9['style'][_0x3bc0c9(0x3a8)]=_0x3bc0c9(0x312),_0x5a9012[_0x3bc0c9(0x22b)]['display']='block',_0x4deb6a['textContent']='正在读取文件...',_0xb4da80[_0x3bc0c9(0x25e)]=0x0;try{const _0x4e74f6=await _0x1e674b[_0x3bc0c9(0x3b3)](),_0x48409b=_0x4a99f5=>{const _0x10aec9=_0x3bc0c9;_0x4deb6a[_0x10aec9(0x3e1)]=_0x10aec9(0x3cf)+_0x4a99f5['message']+'\x20('+_0x4a99f5[_0x10aec9(0x3b4)]+'/'+_0x4a99f5[_0x10aec9(0x387)]+')',_0xb4da80[_0x10aec9(0x25e)]=_0x4a99f5[_0x10aec9(0x3b4)]/_0x4a99f5[_0x10aec9(0x387)]*0x64;},_0x500025=()=>{const _0xfdb1d5=_0x3bc0c9;updatePanelStatus(),log(_0xfdb1d5(0x344),_0xfdb1d5(0x390));},_0x1dd627=await _0x5a0ed1[_0x3bc0c9(0x1f3)](_0x4e74f6,_0x3bc0c9(0x38b),{'sourceName':_0x1e674b[_0x3bc0c9(0x319)]},_0x48409b,_0x40a85d,log,_0x500025,_0x586bb6,_0xafc159);if(_0x1dd627[_0x3bc0c9(0x224)])toastr[_0x3bc0c9(0x224)](_0x3bc0c9(0x2ba)+_0x1dd627[_0x3bc0c9(0x343)]+_0x3bc0c9(0x24f)),_0x4deb6a['textContent']='任务完成!成功录入\x20'+_0x1dd627[_0x3bc0c9(0x343)]+_0x3bc0c9(0x385),_0xb4da80['value']=0x64,updatePanelStatus();else throw new Error(_0x1dd627[_0x3bc0c9(0x282)]||'未知错误');}catch(_0x5163bc){_0x5163bc[_0x3bc0c9(0x319)]===_0x3bc0c9(0x40f)?(toastr[_0x3bc0c9(0x390)](_0x3bc0c9(0x232)),_0x4deb6a['textContent']=_0x3bc0c9(0x36f)):(toastr[_0x3bc0c9(0x282)](_0x3bc0c9(0x216)+_0x5163bc[_0x3bc0c9(0x415)]+_0x3bc0c9(0x365)),_0x4deb6a[_0x3bc0c9(0x3e1)]=_0x3bc0c9(0x2c5)+_0x5163bc[_0x3bc0c9(0x415)]);}finally{setTimeout(()=>{const _0x5bef81=_0x3bc0c9;_0x7150d9[_0x5bef81(0x22b)]['display']=_0x5bef81(0x2f1),_0x5a9012['style'][_0x5bef81(0x3a8)]=_0x5bef81(0x312),_0x49d861[_0x5bef81(0x25e)]='',_0x1e674b=null,_0x49b507[_0x5bef81(0x3e1)]=_0x5bef81(0x3d1);},0xbb8);}}),_0x4a47e4['addEventListener'](_0x5c71ac(0x39f),()=>{_0x46dbb9&&_0x46dbb9['abort']();});}function bindSessionLockEvent(){const _0x29a9cb=_0x28d2da,_0x1c0b46=document[_0x29a9cb(0x214)](_0x29a9cb(0x400));if(!_0x1c0b46)return;_0x1c0b46[_0x29a9cb(0x29a)](_0x29a9cb(0x39f),async()=>{const _0x1d1888=_0x29a9cb,_0x47b5c1=await _0x5a0ed1[_0x1d1888(0x402)]();updateSessionLockUI(_0x47b5c1);if(_0x47b5c1){const _0x4381c5=_0x5a0ed1[_0x1d1888(0x2d4)]();_0x4381c5&&(toastr[_0x1d1888(0x224)](_0x1d1888(0x20a)+_0x4381c5['id'],_0x1d1888(0x1f7)),log(_0x1d1888(0x3e2)+_0x4381c5['id'],_0x1d1888(0x224)));}else toastr['info'](_0x1d1888(0x2ca),'诏曰'),log(_0x1d1888(0x32d),_0x1d1888(0x390));updatePanelStatus();}),updateSessionLockUI(_0x5a0ed1[_0x29a9cb(0x274)]());}function updateSessionLockUI(_0x51b879){const _0x388703=_0x28d2da,_0x224e43=document[_0x388703(0x214)](_0x388703(0x400));if(!_0x224e43)return;const _0x4fda47=_0x224e43[_0x388703(0x30c)]('i'),_0x32f01e=_0x224e43[_0x388703(0x30c)](_0x388703(0x2cd));_0x51b879?(_0x224e43[_0x388703(0x2c4)][_0x388703(0x1f6)](_0x388703(0x3c6)),_0x4fda47['className']=_0x388703(0x408),_0x32f01e[_0x388703(0x3e1)]=_0x388703(0x36e),_0x224e43[_0x388703(0x27d)]=_0x388703(0x3d7)):(_0x224e43['classList'][_0x388703(0x21a)](_0x388703(0x3c6)),_0x4fda47[_0x388703(0x2b4)]=_0x388703(0x413),_0x32f01e['textContent']='锁定会话',_0x224e43[_0x388703(0x27d)]=_0x388703(0x31f));}function bindPanelToggleEvents(){const _0x1eb852=_0x28d2da,_0xef0868=document[_0x1eb852(0x214)](_0x1eb852(0x296));if(_0xef0868){}}function bindTutorialEvents(){const _0x50ce05=_0x28d2da,_0x51bf99=document[_0x50ce05(0x214)]('amily2_open_hanlin_tutorial');_0x51bf99&&_0x51bf99[_0x50ce05(0x29a)](_0x50ce05(0x39f),()=>{const _0x32ed9c=_0x50ce05;showContentModal(_0x32ed9c(0x386),_0x32ed9c(0x363));});}function bindInternalUIEvents(){const _0x2d6442=_0x28d2da,_0x4f1103=document[_0x2d6442(0x285)](_0x2d6442(0x331));_0x4f1103[_0x2d6442(0x3dd)](_0x14d2f3=>{const _0x511a8e=_0x2d6442;_0x14d2f3[_0x511a8e(0x29a)](_0x511a8e(0x39f),()=>{const _0x33fa96=_0x511a8e,_0x156a17=_0x14d2f3[_0x33fa96(0x369)][_0x33fa96(0x295)],_0x169aba=_0x33fa96(0x409)+_0x156a17+_0x33fa96(0x21c);document[_0x33fa96(0x285)](_0x33fa96(0x3d6))['forEach'](_0x4ad631=>{const _0x265a30=_0x33fa96;_0x4ad631[_0x265a30(0x2c4)][_0x265a30(0x29b)](_0x265a30(0x3c6),_0x4ad631['id']===_0x169aba);}),_0x4f1103[_0x33fa96(0x3dd)](_0xd74caa=>_0xd74caa['classList']['toggle'](_0x33fa96(0x3c6),_0xd74caa===_0x14d2f3));});});const _0x28b6dd=document[_0x2d6442(0x214)](_0x2d6442(0x353));_0x28b6dd&&_0x28b6dd[_0x2d6442(0x29a)](_0x2d6442(0x1fc),handleApiModeChange);const _0x146ac1=document[_0x2d6442(0x214)](_0x2d6442(0x304)),_0x1f045a=document[_0x2d6442(0x214)](_0x2d6442(0x305));_0x146ac1&&_0x1f045a&&_0x146ac1['addEventListener'](_0x2d6442(0x1fc),()=>{const _0x40bb19=_0x2d6442;_0x1f045a[_0x40bb19(0x22b)][_0x40bb19(0x3a8)]=_0x146ac1[_0x40bb19(0x3a9)]?_0x40bb19(0x307):_0x40bb19(0x312);});const _0x5370f7=document[_0x2d6442(0x214)](_0x2d6442(0x3c2));_0x5370f7&&_0x5370f7[_0x2d6442(0x29a)](_0x2d6442(0x1fc),handleWorldbookSelectionChange);const _0x25e0e1=document['getElementById']('hly-exclusion-rules-btn');_0x25e0e1&&_0x25e0e1[_0x2d6442(0x29a)](_0x2d6442(0x39f),()=>showRulesModal(_0x2d6442(0x2ec)));const _0x1f112b=document[_0x2d6442(0x214)]('hly-query-preprocessing-rules-btn');_0x1f112b&&_0x1f112b['addEventListener']('click',()=>showRulesModal('queryPreprocessing'));const _0x558a54=document[_0x2d6442(0x214)](_0x2d6442(0x286)),_0x13f699=document['getElementById'](_0x2d6442(0x375));_0x558a54&&_0x13f699&&(_0x558a54[_0x2d6442(0x29a)](_0x2d6442(0x39f),_0xf31c34=>{const _0x47841c=_0x2d6442;_0xf31c34[_0x47841c(0x257)]();const _0x33b429=_0x13f699[_0x47841c(0x22b)]['display']===_0x47841c(0x307);_0x13f699[_0x47841c(0x22b)][_0x47841c(0x3a8)]=_0x33b429?_0x47841c(0x312):_0x47841c(0x307);}),_0x13f699[_0x2d6442(0x29a)](_0x2d6442(0x1fc),_0xddf3b4=>{const _0x30a99b=_0x2d6442,_0x5475bf=_0xddf3b4['target'];if(_0x5475bf[_0x30a99b(0x31e)]!==_0x30a99b(0x325))return;const _0x18ba19=_0x13f699[_0x30a99b(0x285)](_0x30a99b(0x3a5)),_0x1f3e34=document[_0x30a99b(0x214)](_0x30a99b(0x2c3));if(_0x5475bf['id']===_0x30a99b(0x2c3))_0x18ba19[_0x30a99b(0x3dd)](_0x585cd8=>_0x585cd8[_0x30a99b(0x3a9)]=_0x5475bf[_0x30a99b(0x3a9)]);else{const _0x42fd1a=Array[_0x30a99b(0x3fb)](_0x18ba19)[_0x30a99b(0x251)](_0x61ce96=>_0x61ce96[_0x30a99b(0x3a9)]);_0x1f3e34[_0x30a99b(0x3a9)]=_0x42fd1a;}const _0x4faea4=_0x13f699[_0x30a99b(0x285)](_0x30a99b(0x3ef))['length'],_0x39cf62=_0x18ba19[_0x30a99b(0x341)];_0x558a54[_0x30a99b(0x30c)](_0x30a99b(0x2cd))[_0x30a99b(0x3e1)]=_0x30a99b(0x27e)+_0x4faea4+_0x30a99b(0x278)+_0x39cf62+_0x30a99b(0x37c);}),document[_0x2d6442(0x29a)]('click',_0x5c16ed=>{const _0x3eb234=_0x2d6442;!_0x558a54[_0x3eb234(0x310)](_0x5c16ed[_0x3eb234(0x335)])&&!_0x13f699[_0x3eb234(0x310)](_0x5c16ed['target'])&&(_0x13f699[_0x3eb234(0x22b)][_0x3eb234(0x3a8)]=_0x3eb234(0x312));}));const _0x4d42b1=document[_0x2d6442(0x214)](_0x2d6442(0x391));_0x4d42b1&&_0x4d42b1[_0x2d6442(0x29a)](_0x2d6442(0x39f),deleteAllLocalKnowledgeBases);const _0x17e211=document['getElementById']('hly-kb-move-all-to-local');_0x17e211&&_0x17e211[_0x2d6442(0x29a)]('click',()=>moveAllKnowledgeBases(_0x2d6442(0x267)));const _0x2da5c3=document[_0x2d6442(0x214)](_0x2d6442(0x374));_0x2da5c3&&_0x2da5c3[_0x2d6442(0x29a)]('click',()=>moveAllKnowledgeBases(_0x2d6442(0x3c5)));const _0x1bd6ca=[_0x2d6442(0x34c),_0x2d6442(0x31c)];_0x1bd6ca[_0x2d6442(0x3dd)](_0x2e8f5a=>{const _0x13ffc5=_0x2d6442,_0x24f8c0=document[_0x13ffc5(0x214)](_0x2e8f5a);_0x24f8c0&&(_0x24f8c0[_0x13ffc5(0x29a)]('click',handleKbAction),_0x24f8c0[_0x13ffc5(0x29a)](_0x13ffc5(0x1fc),handleKbAction));}),document['getElementById'](_0x2d6442(0x2de))[_0x2d6442(0x29a)](_0x2d6442(0x1fc),_0x13268c=>handleSelectAll(_0x13268c,'global')),document[_0x2d6442(0x214)]('hly-kb-select-all-local')[_0x2d6442(0x29a)](_0x2d6442(0x1fc),_0x2ef633=>handleSelectAll(_0x2ef633,_0x2d6442(0x2ed))),document[_0x2d6442(0x214)](_0x2d6442(0x382))['addEventListener'](_0x2d6442(0x39f),_0x424e52=>handleBulkAction(_0x424e52,'global')),document[_0x2d6442(0x214)](_0x2d6442(0x2d2))[_0x2d6442(0x29a)](_0x2d6442(0x39f),_0xa0e4c8=>handleBulkAction(_0xa0e4c8,_0x2d6442(0x2ed)));}function initializeUnifiedInjectionEditor(){const _0x5aa35f=_0x28d2da,_0x565d61=document[_0x5aa35f(0x214)](_0x5aa35f(0x392)),_0x3df534=document[_0x5aa35f(0x214)](_0x5aa35f(0x3cd)),_0x221b81=document[_0x5aa35f(0x214)](_0x5aa35f(0x3a7)),_0x201587=document['querySelectorAll'](_0x5aa35f(0x2b1)),_0x5550b6=document[_0x5aa35f(0x214)]('hly-unified-injection-depth'),_0x4dfe79=document[_0x5aa35f(0x214)](_0x5aa35f(0x27f));if(!_0x565d61)return;const _0x3e3d5a={'novel':_0x5aa35f(0x3ec),'chat':_0x5aa35f(0x334),'lorebook':_0x5aa35f(0x236),'manual':_0x5aa35f(0x2aa)};function _0x1cb71a(){const _0x2dbc04=_0x5aa35f,_0x51b4c6=_0x565d61[_0x2dbc04(0x25e)],_0x2e048c=_0x5a0ed1['getSettings'](),_0x5496d8=_0x2e048c[_0x2dbc04(0x2c6)+_0x51b4c6]||{};_0x3df534[_0x2dbc04(0x25e)]=_0x5496d8[_0x2dbc04(0x2b5)]||'',_0x221b81[_0x2dbc04(0x3e1)]='以\x20'+(_0x3e3d5a[_0x51b4c6]||'{{text}}')+_0x2dbc04(0x2f4);const _0x24f078=_0x5496d8[_0x2dbc04(0x30d)]!==undefined?String(_0x5496d8[_0x2dbc04(0x30d)]):'2';_0x201587[_0x2dbc04(0x3dd)](_0x3d788e=>_0x3d788e[_0x2dbc04(0x3a9)]=_0x3d788e['value']===_0x24f078),_0x5550b6['value']=_0x5496d8['depth']||0x0,_0x4dfe79['value']=_0x5496d8[_0x2dbc04(0x3b9)]!==undefined?String(_0x5496d8[_0x2dbc04(0x3b9)]):'0';const _0x4ac179=_0x24f078==='1';_0x5550b6[_0x2dbc04(0x298)]=!_0x4ac179,_0x4dfe79[_0x2dbc04(0x298)]=!_0x4ac179;}function _0x1d8a99(){const _0x349db5=_0x5aa35f,_0x233da5=_0x565d61[_0x349db5(0x25e)];updateAndSaveSetting('injection_'+_0x233da5+'.template',_0x3df534['value']);const _0x4bacc2=document[_0x349db5(0x30c)](_0x349db5(0x3c7));_0x4bacc2&&updateAndSaveSetting(_0x349db5(0x2c6)+_0x233da5+_0x349db5(0x3cc),parseInt(_0x4bacc2[_0x349db5(0x25e)],0xa)),updateAndSaveSetting(_0x349db5(0x2c6)+_0x233da5+_0x349db5(0x256),parseInt(_0x5550b6[_0x349db5(0x25e)],0xa)),updateAndSaveSetting(_0x349db5(0x2c6)+_0x233da5+_0x349db5(0x2fc),parseInt(_0x4dfe79[_0x349db5(0x25e)],0xa));}_0x565d61['addEventListener'](_0x5aa35f(0x1fc),_0x1cb71a);const _0x2ed4e4=debounce(_0x1d8a99,0x12c);_0x3df534[_0x5aa35f(0x29a)](_0x5aa35f(0x235),_0x2ed4e4),_0x5550b6[_0x5aa35f(0x29a)](_0x5aa35f(0x1fc),_0x1d8a99),_0x4dfe79[_0x5aa35f(0x29a)](_0x5aa35f(0x1fc),_0x1d8a99),_0x201587[_0x5aa35f(0x3dd)](_0x3ed4cf=>_0x3ed4cf[_0x5aa35f(0x29a)](_0x5aa35f(0x1fc),()=>{const _0x928f97=_0x5aa35f;_0x1d8a99();const _0x249673=_0x3ed4cf[_0x928f97(0x25e)]==='1'&&_0x3ed4cf['checked'];_0x5550b6[_0x928f97(0x298)]=!_0x249673,_0x4dfe79[_0x928f97(0x298)]=!_0x249673;})),_0x1cb71a();}function handleApiModeChange(){const _0x253c74=_0x28d2da,_0x5b6e02=document[_0x253c74(0x214)](_0x253c74(0x353))[_0x253c74(0x25e)],_0x42fea4=document['getElementById'](_0x253c74(0x36c)),_0x48deaf=document[_0x253c74(0x214)](_0x253c74(0x384)),_0xab017d=document[_0x253c74(0x214)]('hly-embedding-model'),_0x32d382=_0xab017d['previousElementSibling'];if(!_0x42fea4||!_0x48deaf)return;_0x42fea4[_0x253c74(0x22b)][_0x253c74(0x3a8)]=_0x253c74(0x307),_0x48deaf[_0x253c74(0x22b)]['display']=_0x253c74(0x307);switch(_0x5b6e02){case _0x253c74(0x210):_0x42fea4[_0x253c74(0x22b)][_0x253c74(0x3a8)]=_0x253c74(0x312),_0x48deaf['querySelector']('label')['textContent']=_0x253c74(0x2a0),_0x48deaf[_0x253c74(0x30c)](_0x253c74(0x235))['placeholder']=_0x253c74(0x229);break;case _0x253c74(0x364):_0x42fea4[_0x253c74(0x30c)](_0x253c74(0x287))[_0x253c74(0x3e1)]=_0x253c74(0x3db),_0x42fea4['querySelector'](_0x253c74(0x235))['placeholder']=_0x253c74(0x1ff),_0x48deaf['style']['display']=_0x253c74(0x312);break;case _0x253c74(0x3f9):default:_0x42fea4[_0x253c74(0x30c)](_0x253c74(0x287))[_0x253c74(0x3e1)]=_0x253c74(0x2dc),_0x42fea4[_0x253c74(0x30c)](_0x253c74(0x235))['placeholder']=_0x253c74(0x2ae),_0x48deaf['querySelector'](_0x253c74(0x287))[_0x253c74(0x3e1)]=_0x253c74(0x3bc);break;}}function loadSettingsToUI(){const _0x201612=_0x28d2da,_0x6c8a37=_0x5a0ed1[_0x201612(0x22a)]();if(!_0x6c8a37)return;document[_0x201612(0x214)](_0x201612(0x3f1))['checked']=_0x6c8a37[_0x201612(0x380)][_0x201612(0x3ee)],document[_0x201612(0x214)](_0x201612(0x353))[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x380)]['apiEndpoint'],document[_0x201612(0x214)]('hly-custom-api-url')[_0x201612(0x25e)]=_0x6c8a37['retrieval']['customApiUrl'],document[_0x201612(0x214)]('hly-api-key')[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x380)]['apiKey'];const _0x3cccd9=document[_0x201612(0x214)](_0x201612(0x261));if(_0x3cccd9[_0x201612(0x332)][_0x201612(0x341)]===0x0){const _0x574d2b=_0x6c8a37[_0x201612(0x380)][_0x201612(0x35b)],_0x4990eb=new Option(_0x574d2b,_0x574d2b,!![],!![]);_0x3cccd9[_0x201612(0x1f6)](_0x4990eb);}_0x3cccd9[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x380)]['embeddingModel'],document['getElementById'](_0x201612(0x350))['checked']=_0x6c8a37[_0x201612(0x380)][_0x201612(0x406)],document[_0x201612(0x214)](_0x201612(0x243))['value']=_0x6c8a37['advanced'][_0x201612(0x30b)],document['getElementById'](_0x201612(0x3a1))[_0x201612(0x25e)]=_0x6c8a37['advanced']['overlap'],document[_0x201612(0x214)]('hly-match-threshold')[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x34e)]['matchThreshold'],document[_0x201612(0x214)](_0x201612(0x2db))['value']=_0x6c8a37[_0x201612(0x34e)][_0x201612(0x316)],document[_0x201612(0x214)](_0x201612(0x2f3))[_0x201612(0x25e)]=_0x6c8a37['advanced'][_0x201612(0x2a9)],document['getElementById'](_0x201612(0x3de))[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x380)]['batchSize'],handleApiModeChange(),document[_0x201612(0x214)](_0x201612(0x399))[_0x201612(0x3a9)]=_0x6c8a37[_0x201612(0x2ec)]['enabled'],document[_0x201612(0x214)](_0x201612(0x2ad))[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x2ec)][_0x201612(0x3fa)],document[_0x201612(0x214)](_0x201612(0x1fb))[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x2ec)][_0x201612(0x403)],document[_0x201612(0x214)](_0x201612(0x383))[_0x201612(0x3a9)]=_0x6c8a37[_0x201612(0x2ec)][_0x201612(0x373)][_0x201612(0x26d)],document[_0x201612(0x214)](_0x201612(0x221))['checked']=_0x6c8a37['condensation'][_0x201612(0x373)]['ai'];const _0x680fd=document[_0x201612(0x214)](_0x201612(0x304)),_0x1e43f7=document[_0x201612(0x214)]('hly-tag-input'),_0x2d7c51=document[_0x201612(0x214)]('hly-tag-input-container');_0x680fd[_0x201612(0x3a9)]=_0x6c8a37[_0x201612(0x2ec)]['tagExtractionEnabled'],_0x1e43f7[_0x201612(0x25e)]=_0x6c8a37['condensation'][_0x201612(0x3ac)],_0x2d7c51[_0x201612(0x22b)][_0x201612(0x3a8)]=_0x680fd[_0x201612(0x3a9)]?'block':_0x201612(0x312),document[_0x201612(0x214)](_0x201612(0x2d8))[_0x201612(0x3a9)]=_0x6c8a37[_0x201612(0x28a)]['enabled'],document['getElementById'](_0x201612(0x3d0))[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x28a)][_0x201612(0x320)],document[_0x201612(0x214)](_0x201612(0x3a2))[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x28a)][_0x201612(0x206)];const _0x21e0db=document[_0x201612(0x214)]('hly-rerank-model');if(_0x21e0db[_0x201612(0x332)][_0x201612(0x341)]===0x0){const _0x32fc22=_0x6c8a37['rerank'][_0x201612(0x397)];if(_0x32fc22){const _0x3dff52=new Option(_0x32fc22,_0x32fc22,!![],!![]);_0x21e0db[_0x201612(0x1f6)](_0x3dff52);}}_0x21e0db[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x28a)][_0x201612(0x397)],document[_0x201612(0x214)]('hly-rerank-top-n')[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x28a)][_0x201612(0x38e)],document['getElementById']('hly-rerank-hybrid-alpha')[_0x201612(0x25e)]=_0x6c8a37[_0x201612(0x28a)][_0x201612(0x211)],document[_0x201612(0x214)](_0x201612(0x26c))[_0x201612(0x3a9)]=_0x6c8a37[_0x201612(0x28a)][_0x201612(0x406)],document['getElementById']('hly-super-sort-enabled')['checked']=_0x6c8a37[_0x201612(0x28a)][_0x201612(0x2b2)];const _0x11aba6=_0x6c8a37['rerank']['priorityRetrieval'];if(_0x11aba6){document[_0x201612(0x214)](_0x201612(0x3dc))[_0x201612(0x3a9)]=_0x11aba6[_0x201612(0x3ee)];const _0x328549=[_0x201612(0x38b),_0x201612(0x25a),_0x201612(0x2a1),_0x201612(0x395)];_0x328549['forEach'](_0x37eb92=>{const _0x37ba25=_0x201612,_0x733f84=_0x11aba6[_0x37ba25(0x3e3)][_0x37eb92];if(_0x733f84){const _0x517fd8=document['querySelector'](_0x37ba25(0x226)+_0x37eb92+'.enabled\x22]'),_0x38c290=document[_0x37ba25(0x30c)](_0x37ba25(0x226)+_0x37eb92+_0x37ba25(0x262));if(_0x517fd8)_0x517fd8[_0x37ba25(0x3a9)]=_0x733f84[_0x37ba25(0x3ee)];if(_0x38c290)_0x38c290['value']=_0x733f84[_0x37ba25(0x343)];}});}_0x6c8a37['queryPreprocessing']&&(document[_0x201612(0x214)](_0x201612(0x280))[_0x201612(0x3a9)]=_0x6c8a37['queryPreprocessing'][_0x201612(0x3ee)]),_0x6c8a37[_0x201612(0x380)][_0x201612(0x2fe)]!==undefined&&(document[_0x201612(0x214)](_0x201612(0x269))[_0x201612(0x3a9)]=_0x6c8a37[_0x201612(0x380)]['independentChatMemoryEnabled']);}function saveSettingsFromUI(_0x4956c3=!![]){const _0x4582fe=_0x28d2da,_0x59e8d8=document[_0x4582fe(0x214)](_0x4582fe(0x299));if(!_0x59e8d8)return;const _0x96a758=_0x59e8d8[_0x4582fe(0x285)](_0x4582fe(0x3fd));_0x96a758['forEach'](_0xc400f2=>{const _0x585818=_0x4582fe,_0x88e277=_0xc400f2[_0x585818(0x369)][_0x585818(0x215)];if(!_0x88e277)return;let _0x74d1e7;const _0x12e126=_0xc400f2['dataset'][_0x585818(0x31e)]||_0x585818(0x337);if(_0xc400f2[_0x585818(0x31e)]===_0x585818(0x325))_0x74d1e7=_0xc400f2['checked'];else{if(_0xc400f2['type']===_0x585818(0x2fa)){if(!_0xc400f2[_0x585818(0x3a9)])return;_0x74d1e7=_0xc400f2[_0x585818(0x25e)];}else _0x74d1e7=_0xc400f2[_0x585818(0x25e)];}switch(_0x12e126){case _0x585818(0x21e):_0x74d1e7=parseInt(_0x74d1e7,0xa);break;case _0x585818(0x2e3):_0x74d1e7=parseFloat(_0x74d1e7);break;case _0x585818(0x2e0):if(typeof _0x74d1e7!=='boolean')_0x74d1e7=_0x74d1e7===_0x585818(0x3bb);break;}const _0x10f567=_0x5a0ed1[_0x585818(0x22a)](),_0x544ffa=_0x88e277[_0x585818(0x3d5)]('.');let _0x535fc0=_0x10f567;for(let _0x5445e6=0x0;_0x5445e6<_0x544ffa[_0x585818(0x341)]-0x1;_0x5445e6++){_0x535fc0=_0x535fc0[_0x544ffa[_0x5445e6]]=_0x535fc0[_0x544ffa[_0x5445e6]]||{};}_0x535fc0[_0x544ffa[_0x544ffa[_0x585818(0x341)]-0x1]]=_0x74d1e7;}),_0x5a0ed1[_0x4582fe(0x342)](),!_0x4956c3&&(log(_0x4582fe(0x27c),_0x4582fe(0x224)),toastr[_0x4582fe(0x224)](_0x4582fe(0x22d),_0x4582fe(0x303)));}function resetSettingsToUI(){const _0x221d71=_0x28d2da;confirm(_0x221d71(0x3e5))&&(_0x5a0ed1[_0x221d71(0x2e2)](),loadSettingsToUI(),toastr[_0x221d71(0x390)](_0x221d71(0x24b),'诏曰'));}async function updatePanelStatus(){const _0x35cec2=_0x28d2da,_0x1cde32=_0x5a0ed1[_0x35cec2(0x274)](),_0x4c5e55=document[_0x35cec2(0x214)](_0x35cec2(0x35d)),_0x2248e6=document['getElementById'](_0x35cec2(0x277));if(_0x1cde32){const _0x32d178=_0x5a0ed1[_0x35cec2(0x2d4)]();_0x32d178&&(_0x4c5e55[_0x35cec2(0x3e1)]='会话已锁定',_0x2248e6[_0x35cec2(0x3e1)]=_0x32d178['id'],_0x2248e6['title']=_0x35cec2(0x33d)+_0x32d178['id'],_0x4c5e55[_0x35cec2(0x2c4)][_0x35cec2(0x1f6)](_0x35cec2(0x222)),_0x2248e6[_0x35cec2(0x2c4)]['add'](_0x35cec2(0x222)));}else _0x4c5e55['textContent']=_0x4966d0[_0x35cec2(0x1fd)](),_0x2248e6[_0x35cec2(0x3e1)]=_0x4966d0[_0x35cec2(0x276)]()||'无',_0x2248e6[_0x35cec2(0x27d)]='',_0x4c5e55['classList'][_0x35cec2(0x21a)](_0x35cec2(0x222)),_0x2248e6[_0x35cec2(0x2c4)][_0x35cec2(0x21a)](_0x35cec2(0x222));const _0x4f0a20=document[_0x35cec2(0x214)](_0x35cec2(0x2ef));_0x4f0a20[_0x35cec2(0x3e1)]=_0x35cec2(0x3b6);try{const _0x8f437e=await _0x5a0ed1[_0x35cec2(0x32c)]();_0x4f0a20[_0x35cec2(0x3e1)]=_0x8f437e;}catch(_0x5cfb5f){console[_0x35cec2(0x282)](_0x35cec2(0x1fa),_0x5cfb5f),_0x4f0a20[_0x35cec2(0x3e1)]=_0x35cec2(0x266),_0x4f0a20['title']='无法获取总数:\x20'+_0x5cfb5f[_0x35cec2(0x415)];}const _0x583b0c=document[_0x35cec2(0x214)](_0x35cec2(0x2ce));if(_0x583b0c&&!_0x583b0c[_0x35cec2(0x369)][_0x35cec2(0x25c)]){const _0x2318fc=_0x5a0ed1['getSettings'](),_0x105bf7=await _0x5a0ed1[_0x35cec2(0x2d3)]();if(_0x2318fc[_0x35cec2(0x23b)]&&_0x2318fc[_0x35cec2(0x23b)][_0x105bf7]){const _0x513227=_0x2318fc['condensationHistory'][_0x105bf7];_0x583b0c['innerHTML']='上次已从第\x20'+_0x513227['start']+'\x20楼凝识至第\x20'+_0x513227[_0x35cec2(0x2ee)]+_0x35cec2(0x2b0);}else _0x583b0c['innerHTML']='可在此预览凝识结果。

';}renderKnowledgeBases();}async function moveAllKnowledgeBases(_0x4d6d57){const _0x236ff5=_0x28d2da,_0x3d00e3=_0x4d6d57==='globalToLocal',_0x37a662=_0x3d00e3?_0x236ff5(0x328):_0x236ff5(0x2ed),_0x29df8c=_0x3d00e3?'局部':'全局',_0x5ddf43=_0x3d00e3?_0x5a0ed1[_0x236ff5(0x281)]():_0x5a0ed1[_0x236ff5(0x247)](),_0x54866b=Object['keys'](_0x5ddf43);if(_0x54866b['length']===0x0){toastr[_0x236ff5(0x390)](_0x236ff5(0x1f4)+(_0x3d00e3?'全局':'局部')+')没有任何知识库可供移动。','圣谕');return;}if(!confirm(_0x236ff5(0x270)+_0x54866b[_0x236ff5(0x341)]+_0x236ff5(0x2d0)+(_0x3d00e3?'全局':'局部')+_0x236ff5(0x349)+_0x29df8c+_0x236ff5(0x336)))return;log(_0x236ff5(0x289)+_0x54866b[_0x236ff5(0x341)]+_0x236ff5(0x260)+_0x37a662+'\x20移动到\x20'+(_0x3d00e3?_0x236ff5(0x2ed):_0x236ff5(0x328))+_0x236ff5(0x3b6),'info');const _0x5b8aac=_0x54866b['map'](_0xe86d8=>_0x5a0ed1['moveKnowledgeBase'](_0xe86d8,_0x37a662));try{await Promise[_0x236ff5(0x39d)](_0x5b8aac),toastr[_0x236ff5(0x224)](_0x236ff5(0x20c)+_0x54866b['length']+_0x236ff5(0x275),'大功告成'),log('批量移动完成。',_0x236ff5(0x224));}catch(_0x226574){toastr[_0x236ff5(0x282)](_0x236ff5(0x2ac)+_0x226574[_0x236ff5(0x415)],'警报'),log('批量移动失败:\x20'+_0x226574['message'],_0x236ff5(0x282));}finally{await updatePanelStatus();}}async function deleteAllLocalKnowledgeBases(){const _0x2f97d1=_0x28d2da,_0x10ff47=_0x5a0ed1[_0x2f97d1(0x247)](),_0x270144=Object[_0x2f97d1(0x3c9)](_0x10ff47);if(_0x270144[_0x2f97d1(0x341)]===0x0){toastr['info'](_0x2f97d1(0x1fe),'圣谕');return;}if(!confirm('您确定要永久删除【当前角色】的全部\x20'+_0x270144[_0x2f97d1(0x341)]+_0x2f97d1(0x2bf)))return;toastr[_0x2f97d1(0x390)]('正在删除\x20'+_0x270144[_0x2f97d1(0x341)]+_0x2f97d1(0x3ea),'圣旨'),log(_0x2f97d1(0x2e9)+_0x270144[_0x2f97d1(0x341)]+_0x2f97d1(0x3ea),_0x2f97d1(0x23d));let _0x3b3153=0x0,_0x6878c5=0x0;for(const _0x3a522c of _0x270144){try{await _0x5a0ed1[_0x2f97d1(0x2e1)](_0x3a522c,_0x2f97d1(0x2ed)),_0x3b3153++;}catch(_0x1b98ed){_0x6878c5++,log(_0x2f97d1(0x244)+_0x3a522c+_0x2f97d1(0x2b9)+_0x1b98ed[_0x2f97d1(0x415)],_0x2f97d1(0x282));}}_0x6878c5>0x0?toastr[_0x2f97d1(0x282)](_0x2f97d1(0x2cf)+_0x6878c5+_0x2f97d1(0x271),'警报'):toastr['success'](_0x2f97d1(0x20c)+_0x3b3153+_0x2f97d1(0x39e),_0x2f97d1(0x201)),log('局部知识库批量删除完成。成功:\x20'+_0x3b3153+',\x20失败:\x20'+_0x6878c5,_0x2f97d1(0x390)),await updatePanelStatus();}async function renderKnowledgeBases(){const _0x45c1a5=_0x28d2da,_0xcdf090=document[_0x45c1a5(0x214)](_0x45c1a5(0x34c)),_0x427456=document[_0x45c1a5(0x214)](_0x45c1a5(0x31c)),_0x156ed5=document['getElementById'](_0x45c1a5(0x2c2));if(!_0xcdf090||!_0x427456||!_0x156ed5)return;_0x156ed5[_0x45c1a5(0x3e1)]=_0x4966d0[_0x45c1a5(0x1fd)]()||_0x45c1a5(0x24c);try{const _0x43e82e=_0x5a0ed1[_0x45c1a5(0x247)](),_0x1eab4d=_0x5a0ed1[_0x45c1a5(0x281)]();await _renderKbList(_0x43e82e,_0xcdf090,_0x45c1a5(0x2ed),'hly-kb-list-local-placeholder'),await _renderKbList(_0x1eab4d,_0x427456,_0x45c1a5(0x328),'hly-kb-list-global-placeholder');}catch(_0x3aaa5e){console[_0x45c1a5(0x282)](_0x45c1a5(0x2c7),_0x3aaa5e),_0xcdf090[_0x45c1a5(0x30a)]=_0x45c1a5(0x288)+_0x3aaa5e[_0x45c1a5(0x415)]+_0x45c1a5(0x3df),_0x427456[_0x45c1a5(0x30a)]=_0x45c1a5(0x288)+_0x3aaa5e['message']+_0x45c1a5(0x3df);}}async function _renderKbList(_0x1fe686,_0xd46886,_0x2719f1,_0x1547d9){const _0x88d619=_0x28d2da,_0x34ba84=document[_0x88d619(0x214)](_0x1547d9);_0xd46886[_0x88d619(0x30a)]='',_0xd46886[_0x88d619(0x366)](_0x34ba84);if(Object[_0x88d619(0x3c9)](_0x1fe686)[_0x88d619(0x341)]===0x0){_0x34ba84[_0x88d619(0x22b)][_0x88d619(0x3a8)]=_0x88d619(0x307);return;}_0x34ba84[_0x88d619(0x22b)][_0x88d619(0x3a8)]=_0x88d619(0x312);for(const [_0x1219d4,_0x348d35]of Object[_0x88d619(0x34b)](_0x1fe686)){const _0x1aff8c=document['createElement'](_0x88d619(0x272));_0x1aff8c['className']=_0x88d619(0x36b),_0x1aff8c[_0x88d619(0x369)]['kbId']=_0x1219d4,_0x1aff8c['dataset']['kbScope']=_0x2719f1;const _0x25956c=await _0x5a0ed1['getVectorCount'](_0x1219d4,_0x2719f1),_0x5f5d0e=_0x2719f1===_0x88d619(0x2ed)?_0x88d619(0x351):_0x88d619(0x3cb);_0x1aff8c[_0x88d619(0x30a)]=_0x88d619(0x33c)+_0x1219d4+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x348d35['name']+'\x20('+_0x25956c+_0x88d619(0x2be)+_0x5f5d0e+_0x88d619(0x28e)+(_0x348d35[_0x88d619(0x3ee)]?_0x88d619(0x3a9):'')+_0x88d619(0x36d),_0xd46886[_0x88d619(0x366)](_0x1aff8c);}}async function handleKbAction(_0x2949b5){const _0x15573c=_0x28d2da,_0x135783=_0x2949b5['target'],_0x37c968=_0x135783[_0x15573c(0x265)](_0x15573c(0x2bd));if(!_0x37c968)return;const _0x46a723=_0x37c968[_0x15573c(0x369)][_0x15573c(0x3b0)],_0x31e3da=_0x37c968[_0x15573c(0x369)]['kbScope'],_0x768d10=_0x37c968['querySelector'](_0x15573c(0x2d1))[_0x15573c(0x3e1)]['split']('\x20(')[0x0];if(_0x135783[_0x15573c(0x265)](_0x15573c(0x23f))){const _0x5bdf91=_0x37c968[_0x15573c(0x30c)](_0x15573c(0x2d1))[_0x15573c(0x3e1)]['split']('\x20(')[0x0],_0x4b788f=prompt(_0x15573c(0x20b),_0x5bdf91);if(_0x4b788f&&_0x4b788f[_0x15573c(0x35c)]()&&_0x4b788f[_0x15573c(0x35c)]()!==_0x5bdf91)try{await _0x5a0ed1[_0x15573c(0x2f2)](_0x46a723,_0x4b788f,_0x31e3da),await updatePanelStatus();}catch(_0x4e04c2){log('重命名知识库\x20'+_0x5bdf91+_0x15573c(0x2b9)+_0x4e04c2[_0x15573c(0x415)],'error'),toastr['error']('重命名失败:\x20'+_0x4e04c2[_0x15573c(0x415)]);}return;}if(_0x135783[_0x15573c(0x2c4)][_0x15573c(0x310)](_0x15573c(0x356))){if(confirm(_0x15573c(0x31d)+_0x768d10+'】吗?此操作无法恢复!'))try{await _0x5a0ed1[_0x15573c(0x2e1)](_0x46a723,_0x31e3da),log('知识库\x20'+_0x768d10+_0x15573c(0x2a8)+_0x46a723+_0x15573c(0x21d),'success'),toastr[_0x15573c(0x224)](_0x15573c(0x3ad)+_0x768d10+_0x15573c(0x242)),await updatePanelStatus();}catch(_0x35f935){log(_0x15573c(0x2e7)+_0x768d10+_0x15573c(0x2b9)+_0x35f935[_0x15573c(0x415)],'error'),toastr[_0x15573c(0x282)](_0x15573c(0x249)+_0x35f935[_0x15573c(0x415)]);}}if(_0x135783[_0x15573c(0x265)](_0x15573c(0x388))){const _0x5f358e=_0x31e3da===_0x15573c(0x2ed)?'全局':'局部';if(confirm(_0x15573c(0x3e7)+_0x768d10+'】移动到【'+_0x5f358e+'】吗?'))try{await _0x5a0ed1[_0x15573c(0x315)](_0x46a723,_0x31e3da),await updatePanelStatus();}catch(_0x3be913){log(_0x15573c(0x313)+_0x768d10+_0x15573c(0x2b9)+_0x3be913['message'],_0x15573c(0x282)),toastr[_0x15573c(0x282)](_0x15573c(0x209)+_0x3be913[_0x15573c(0x415)]);}}if(_0x135783[_0x15573c(0x2c4)][_0x15573c(0x310)](_0x15573c(0x404))&&_0x2949b5[_0x15573c(0x31e)]==='change')try{await _0x5a0ed1[_0x15573c(0x2f0)](_0x46a723,_0x31e3da),log(_0x15573c(0x368)+_0x768d10+_0x15573c(0x39b),_0x15573c(0x224));}catch(_0x4ea435){log(_0x15573c(0x411)+_0x768d10+'\x20状态失败:\x20'+_0x4ea435[_0x15573c(0x415)],'error'),toastr[_0x15573c(0x282)]('切换状态失败:\x20'+_0x4ea435[_0x15573c(0x415)]),_0x135783['checked']=!_0x135783['checked'];}_0x135783[_0x15573c(0x2c4)]['contains']('hly-kb-item-checkbox')&&_0x2949b5[_0x15573c(0x31e)]===_0x15573c(0x1fc)&&updateBulkActionUI(_0x31e3da);}function handleSelectAll(_0x3d619a,_0xdc1be9){const _0x2e695f=_0x28d2da,_0x44b69a=_0x3d619a['target']['checked'],_0x57b2a8=document[_0x2e695f(0x214)](_0x2e695f(0x40b)+_0xdc1be9),_0x1a620a=_0x57b2a8[_0x2e695f(0x285)](_0x2e695f(0x362));_0x1a620a[_0x2e695f(0x3dd)](_0x2cbad1=>_0x2cbad1[_0x2e695f(0x3a9)]=_0x44b69a),updateBulkActionUI(_0xdc1be9);}function updateBulkActionUI(_0x24846e){const _0x51595c=_0x28d2da,_0x3812cc=document[_0x51595c(0x214)](_0x51595c(0x40b)+_0x24846e),_0x2ab30f=document[_0x51595c(0x214)](_0x51595c(0x389)+_0x24846e),_0x23a3df=document['getElementById'](_0x51595c(0x317)+_0x24846e),_0x1dc6f2=_0x3812cc['querySelectorAll'](_0x51595c(0x362)),_0x22870f=_0x3812cc[_0x51595c(0x285)](_0x51595c(0x405)),_0x4e8740=_0x22870f[_0x51595c(0x341)],_0x4bc76d=_0x1dc6f2[_0x51595c(0x341)];_0x4e8740>0x0?_0x2ab30f[_0x51595c(0x22b)][_0x51595c(0x3a8)]=_0x51595c(0x2f1):_0x2ab30f[_0x51595c(0x22b)][_0x51595c(0x3a8)]=_0x51595c(0x312);if(_0x4bc76d===0x0)_0x23a3df['checked']=![],_0x23a3df[_0x51595c(0x3be)]=![];else{if(_0x4e8740===_0x4bc76d)_0x23a3df[_0x51595c(0x3a9)]=!![],_0x23a3df[_0x51595c(0x3be)]=![];else _0x4e8740>0x0?(_0x23a3df[_0x51595c(0x3a9)]=![],_0x23a3df[_0x51595c(0x3be)]=!![]):(_0x23a3df[_0x51595c(0x3a9)]=![],_0x23a3df[_0x51595c(0x3be)]=![]);}}async function handleBulkAction(_0x1870d1,_0xa62ec3){const _0x4eab20=_0x28d2da,_0x2e9826=_0x1870d1[_0x4eab20(0x335)]['dataset']['action'];if(!_0x2e9826)return;const _0x19b794=document[_0x4eab20(0x214)](_0x4eab20(0x40b)+_0xa62ec3),_0x443bd2=_0x19b794[_0x4eab20(0x285)]('.hly-kb-item-checkbox:checked'),_0x413b68=Array[_0x4eab20(0x3fb)](_0x443bd2)[_0x4eab20(0x204)](_0x3002be=>_0x3002be[_0x4eab20(0x369)][_0x4eab20(0x3b0)]);if(_0x413b68[_0x4eab20(0x341)]===0x0){toastr[_0x4eab20(0x40a)](_0x4eab20(0x38f),'圣谕');return;}let _0x1fd9ac='',_0xc813,_0x2d9e1c='';switch(_0x2e9826){case _0x4eab20(0x2dd):_0x1fd9ac='您确定要永久删除选中的\x20'+_0x413b68[_0x4eab20(0x341)]+_0x4eab20(0x3bf),_0xc813=_0x3cdb61=>_0x5a0ed1[_0x4eab20(0x2e1)](_0x3cdb61,_0xa62ec3),_0x2d9e1c='成功删除了\x20'+_0x413b68[_0x4eab20(0x341)]+_0x4eab20(0x2e5);break;case _0x4eab20(0x25f):const _0x40895d=_0xa62ec3===_0x4eab20(0x2ed)?'全局':'局部';_0x1fd9ac=_0x4eab20(0x239)+_0x413b68['length']+_0x4eab20(0x3e0)+_0x40895d+_0x4eab20(0x336),_0xc813=_0x4544ff=>_0x5a0ed1[_0x4eab20(0x315)](_0x4544ff,_0xa62ec3),_0x2d9e1c=_0x4eab20(0x416)+_0x413b68[_0x4eab20(0x341)]+_0x4eab20(0x2e5);break;case _0x4eab20(0x29b):_0x1fd9ac=_0x4eab20(0x2b8)+_0x413b68[_0x4eab20(0x341)]+_0x4eab20(0x3ca),_0xc813=_0x9d6dee=>_0x5a0ed1[_0x4eab20(0x2f0)](_0x9d6dee,_0xa62ec3),_0x2d9e1c=_0x4eab20(0x2e6)+_0x413b68[_0x4eab20(0x341)]+_0x4eab20(0x3f3);break;default:return;}if(!confirm(_0x1fd9ac))return;toastr[_0x4eab20(0x390)](_0x4eab20(0x3c0)+_0x413b68[_0x4eab20(0x341)]+_0x4eab20(0x324),'圣旨'),log(_0x4eab20(0x3c4)+_0x413b68[_0x4eab20(0x341)]+_0x4eab20(0x33b)+_0xa62ec3+_0x4eab20(0x213)+_0x2e9826+'\x20操作...',_0x4eab20(0x390));try{const _0x3c4879=_0x413b68[_0x4eab20(0x204)](_0x56534b=>_0xc813(_0x56534b));await Promise[_0x4eab20(0x39d)](_0x3c4879),toastr[_0x4eab20(0x224)](_0x2d9e1c,_0x4eab20(0x201)),log('批量\x20'+_0x2e9826+_0x4eab20(0x3d3),'success');}catch(_0x4fce3c){toastr['error'](_0x4eab20(0x3f0)+_0x4fce3c[_0x4eab20(0x415)],'警报'),log(_0x4eab20(0x20d)+_0x2e9826+'\x20操作失败:\x20'+_0x4fce3c[_0x4eab20(0x415)],_0x4eab20(0x282));}finally{await updatePanelStatus();}}async function testApi(){const _0x2cf2bf=_0x28d2da;toastr['info'](_0x2cf2bf(0x220),'圣旨');try{await _0x5a0ed1[_0x2cf2bf(0x2f9)](),toastr[_0x2cf2bf(0x224)]('神力连接通畅!','圣意');}catch(_0x197973){toastr[_0x2cf2bf(0x282)](_0x2cf2bf(0x340)+_0x197973[_0x2cf2bf(0x415)],'警报');}}async function fetchHLYEmbeddingModels(){const _0x59a464=_0x28d2da,_0x57d860=document[_0x59a464(0x214)](_0x59a464(0x261)),_0x424e74=_0x57d860[_0x59a464(0x25e)];_0x57d860[_0x59a464(0x30a)]=_0x59a464(0x23c),_0x57d860[_0x59a464(0x298)]=!![];try{log('开始获取模型列表...','info');const _0xcbff8c=await _0x5a0ed1[_0x59a464(0x339)]();_0x57d860[_0x59a464(0x30a)]='';if(_0xcbff8c['length']===0x0){_0x57d860[_0x59a464(0x30a)]='',toastr[_0x59a464(0x23d)](_0x59a464(0x34d),_0x59a464(0x294)),log(_0x59a464(0x34d),_0x59a464(0x23d));return;}_0xcbff8c[_0x59a464(0x3dd)](_0x5366f2=>{const _0x3e6a0c=new Option(_0x5366f2,_0x5366f2);_0x57d860['add'](_0x3e6a0c);}),_0xcbff8c[_0x59a464(0x252)](_0x424e74)?_0x57d860[_0x59a464(0x25e)]=_0x424e74:_0x57d860[_0x59a464(0x346)]=0x0,toastr['success'](_0x59a464(0x3ff)+_0xcbff8c[_0x59a464(0x341)]+_0x59a464(0x284),'圣意'),log(_0x59a464(0x3ff)+_0xcbff8c[_0x59a464(0x341)]+'\x20个模型。',_0x59a464(0x224));}catch(_0x31afbb){console[_0x59a464(0x282)](_0x59a464(0x40d),_0x31afbb),toastr[_0x59a464(0x282)](_0x59a464(0x24a)+_0x31afbb[_0x59a464(0x415)],_0x59a464(0x1f8)),log('获取模型失败:\x20'+_0x31afbb[_0x59a464(0x415)],_0x59a464(0x282)),_0x57d860[_0x59a464(0x30a)]=_0x59a464(0x367);}finally{_0x57d860['disabled']=![];}}async function fetchHLYRerankModels(){const _0x4bc037=_0x28d2da,_0x5a77d2=document[_0x4bc037(0x214)]('hly-rerank-model'),_0x5c4c7f=_0x5a77d2['value'];_0x5a77d2[_0x4bc037(0x30a)]=_0x4bc037(0x23c),_0x5a77d2['disabled']=!![];try{log('开始获取Rerank模型列表...',_0x4bc037(0x390));const _0x7f41c9=await _0x5a0ed1['fetchRerankModels']();_0x5a77d2[_0x4bc037(0x30a)]='';if(_0x7f41c9[_0x4bc037(0x341)]===0x0){_0x5a77d2[_0x4bc037(0x30a)]=_0x4bc037(0x3da),toastr[_0x4bc037(0x23d)](_0x4bc037(0x35e),_0x4bc037(0x294)),log(_0x4bc037(0x35e),'warn');return;}_0x7f41c9[_0x4bc037(0x3dd)](_0x3ab806=>{const _0x32eaaf=new Option(_0x3ab806,_0x3ab806);_0x5a77d2['add'](_0x32eaaf);}),_0x7f41c9[_0x4bc037(0x252)](_0x5c4c7f)?_0x5a77d2['value']=_0x5c4c7f:_0x5a77d2[_0x4bc037(0x346)]=0x0,toastr[_0x4bc037(0x224)]('成功获取\x20'+_0x7f41c9[_0x4bc037(0x341)]+_0x4bc037(0x3bd),'圣意'),log('成功获取\x20'+_0x7f41c9[_0x4bc037(0x341)]+'\x20个Rerank模型。',_0x4bc037(0x224));}catch(_0x5853a1){console[_0x4bc037(0x282)](_0x4bc037(0x398),_0x5853a1),toastr[_0x4bc037(0x282)](_0x4bc037(0x268)+_0x5853a1[_0x4bc037(0x415)],_0x4bc037(0x1f8)),log(_0x4bc037(0x268)+_0x5853a1[_0x4bc037(0x415)],_0x4bc037(0x282)),_0x5a77d2[_0x4bc037(0x30a)]=_0x4bc037(0x367);}finally{_0x5a77d2['disabled']=![];}}async function purgeStorage(){const _0x146c44=_0x28d2da;if(confirm('此操作将彻底清空当前角色的所有忆识(向量),且无法恢复。您确定要继续吗?')){toastr['info'](_0x146c44(0x2b6),'圣旨');const _0x36cd20=await _0x5a0ed1['purgeStorage']();_0x36cd20?toastr[_0x146c44(0x224)](_0x146c44(0x2f8),'圣意'):toastr[_0x146c44(0x282)](_0x146c44(0x3b7),'警报'),await updatePanelStatus();}}async function startCondensation(){const _0x3032a9=_0x28d2da,_0x406056=document[_0x3032a9(0x214)](_0x3032a9(0x2ce)),_0xea97d0=_0x406056['dataset']['finalMessages'],_0x1c7782=document[_0x3032a9(0x214)](_0x3032a9(0x2ad))[_0x3032a9(0x25e)],_0xf1843=document[_0x3032a9(0x214)]('hly-layer-end')['value'],_0x456d14={'start':parseInt(_0x1c7782),'end':parseInt(_0xf1843)};try{let _0x4c6b36;_0xea97d0?(log('检测到预览后待处理的消息对象,开始精确凝识...',_0x3032a9(0x390)),toastr['info'](_0x3032a9(0x38a),'圣旨'),_0x4c6b36=JSON['parse'](_0xea97d0),delete _0x406056['dataset'][_0x3032a9(0x372)]):(log('未检测到预览文本,按标准流程采集消息...',_0x3032a9(0x390)),toastr[_0x3032a9(0x390)](_0x3032a9(0x2ab),'圣旨'),_0x4c6b36=_0x5a0ed1[_0x3032a9(0x205)]());if(!_0x4c6b36||_0x4c6b36[_0x3032a9(0x341)]===0x0){toastr[_0x3032a9(0x40a)]('未找到符合条件的消息可供凝识。',_0x3032a9(0x294)),_0x406056[_0x3032a9(0x3e1)]=_0x3032a9(0x330);return;}_0x406056['textContent']=_0x3032a9(0x308)+_0x4c6b36[_0x3032a9(0x341)]+_0x3032a9(0x30f),toastr['info']('已采集\x20'+_0x4c6b36[_0x3032a9(0x341)]+_0x3032a9(0x30f),_0x3032a9(0x294));const _0x3ca729=await _0x5a0ed1[_0x3032a9(0x333)](_0x4c6b36,log,_0x456d14);if(_0x3ca729[_0x3032a9(0x224)]){toastr['success'](_0x3032a9(0x218)+_0x3ca729['count']+_0x3032a9(0x3f5),_0x3032a9(0x201));const _0xa6e99b=_0x456d14[_0x3032a9(0x2ee)]===0x0?getContext()[_0x3032a9(0x37e)][_0x3032a9(0x341)]:_0x456d14[_0x3032a9(0x2ee)];_0x406056[_0x3032a9(0x3e1)]=_0x3032a9(0x2af)+_0x456d14[_0x3032a9(0x412)]+_0x3032a9(0x258)+_0xa6e99b+_0x3032a9(0x253)+_0x3ca729[_0x3032a9(0x343)]+'\x20条忆识。';}else throw new Error(_0x3ca729[_0x3032a9(0x282)]||'未知错误');}catch(_0x1b6417){console[_0x3032a9(0x282)](_0x3032a9(0x2d5),_0x1b6417),toastr[_0x3032a9(0x282)]('凝识失败:\x20'+_0x1b6417['message'],_0x3032a9(0x1f8)),_0x406056[_0x3032a9(0x3e1)]='凝识失败:\x20'+_0x1b6417['message'];}finally{await updatePanelStatus();}}async function loadWorldbookList(){const _0x1d9af3=_0x28d2da,_0xc40cdb=document['getElementById'](_0x1d9af3(0x3c2)),_0x43c325=document[_0x1d9af3(0x214)]('hly-worldbook-search');if(!_0xc40cdb)return;try{log(_0x1d9af3(0x361),_0x1d9af3(0x390));const _0x511552=await _0x798f38[_0x1d9af3(0x208)]();window[_0x1d9af3(0x24d)]=_0x511552,updateWorldbookOptions(_0xc40cdb,'',_0x511552);if(_0x43c325){const _0x341d5f=debounce(_0x2c9f20=>{updateWorldbookOptions(_0xc40cdb,_0x2c9f20,_0x511552);},0x12c);_0x43c325[_0x1d9af3(0x29a)](_0x1d9af3(0x235),_0x30337c=>{const _0x362325=_0x1d9af3;_0x341d5f(_0x30337c[_0x362325(0x335)]['value']);});}log(_0x1d9af3(0x2f5)+_0x511552[_0x1d9af3(0x341)]+_0x1d9af3(0x225),_0x1d9af3(0x224));}catch(_0x4e7bfd){console[_0x1d9af3(0x282)](_0x1d9af3(0x3a0),_0x4e7bfd),log(_0x1d9af3(0x26b)+_0x4e7bfd[_0x1d9af3(0x415)],_0x1d9af3(0x282)),_0xc40cdb&&(_0xc40cdb[_0x1d9af3(0x30a)]=_0x1d9af3(0x348));}}function updateWorldbookOptions(_0x1ab03d,_0x48a496,_0x380b5c){const _0x29806c=_0x28d2da,_0x12bbd9=filterWorldbooks(_0x48a496,_0x380b5c),_0x468e7c=_0x1ab03d[_0x29806c(0x25e)];_0x1ab03d[_0x29806c(0x30a)]='请选择一个书库...';if(_0x12bbd9[_0x29806c(0x341)]===0x0){_0x1ab03d[_0x29806c(0x30a)]=_0x48a496[_0x29806c(0x35c)]()?_0x29806c(0x3e9):_0x29806c(0x32e);return;}_0x12bbd9[_0x29806c(0x3dd)](_0x58323d=>{const _0x1904ec=_0x29806c,_0x2e8091=document[_0x1904ec(0x217)](_0x1904ec(0x20e));_0x2e8091[_0x1904ec(0x25e)]=_0x58323d,_0x2e8091[_0x1904ec(0x3e1)]=_0x58323d,_0x1ab03d[_0x1904ec(0x366)](_0x2e8091);}),_0x468e7c&&_0x12bbd9[_0x29806c(0x252)](_0x468e7c)&&(_0x1ab03d[_0x29806c(0x25e)]=_0x468e7c);}async function handleWorldbookSelectionChange(){const _0x317bdd=_0x28d2da,_0x55b3eb=document[_0x317bdd(0x214)](_0x317bdd(0x3c2)),_0x10e159=document['getElementById'](_0x317bdd(0x286)),_0x314b32=document[_0x317bdd(0x214)](_0x317bdd(0x375)),_0x3e8e0d=document[_0x317bdd(0x214)](_0x317bdd(0x241)),_0x18b27d=_0x55b3eb[_0x317bdd(0x25e)];_0x10e159[_0x317bdd(0x298)]=!![],_0x10e159['querySelector'](_0x317bdd(0x2cd))[_0x317bdd(0x3e1)]=_0x317bdd(0x3c8),_0x314b32[_0x317bdd(0x30a)]='',_0x314b32[_0x317bdd(0x22b)][_0x317bdd(0x3a8)]=_0x317bdd(0x312);_0x3e8e0d&&(_0x3e8e0d[_0x317bdd(0x25e)]='');if(!_0x18b27d){_0x10e159[_0x317bdd(0x30c)]('span')[_0x317bdd(0x3e1)]=_0x317bdd(0x2d7);return;}try{log(_0x317bdd(0x2c9)+_0x18b27d+_0x317bdd(0x292),_0x317bdd(0x390));const _0x3673c0=await _0x798f38['getLoresForWorldbook'](_0x18b27d);if(_0x3673c0['length']===0x0){_0x10e159[_0x317bdd(0x30c)](_0x317bdd(0x2cd))['textContent']=_0x317bdd(0x3b5);return;}window[_0x317bdd(0x302)]=_0x3673c0,updateEntryOptions('',_0x3673c0);if(_0x3e8e0d){_0x3e8e0d[_0x317bdd(0x3a3)]('input',_0x3e8e0d[_0x317bdd(0x410)]);const _0x22638e=debounce(_0x5d2f73=>{updateEntryOptions(_0x5d2f73,_0x3673c0);},0x12c);_0x3e8e0d[_0x317bdd(0x410)]=_0x331f66=>{const _0x4855ec=_0x317bdd;_0x22638e(_0x331f66[_0x4855ec(0x335)]['value']);},_0x3e8e0d[_0x317bdd(0x29a)]('input',_0x3e8e0d[_0x317bdd(0x410)]);}log(_0x317bdd(0x2f5)+_0x3673c0[_0x317bdd(0x341)]+_0x317bdd(0x279),'success');}catch(_0x1d9eb0){console[_0x317bdd(0x282)](_0x317bdd(0x3fc)+_0x18b27d+_0x317bdd(0x309),_0x1d9eb0),log('加载条目失败:\x20'+_0x1d9eb0[_0x317bdd(0x415)],_0x317bdd(0x282)),_0x10e159[_0x317bdd(0x30c)](_0x317bdd(0x2cd))[_0x317bdd(0x3e1)]=_0x317bdd(0x3f4);}finally{_0x10e159[_0x317bdd(0x298)]=![];}}function updateEntryOptions(_0x32cadc,_0x408bcd){const _0x1c56bb=_0x28d2da,_0x4245ea=document['getElementById'](_0x1c56bb(0x375)),_0x1f8be3=document[_0x1c56bb(0x214)]('hly-hist-entry-multiselect-btn'),_0x268ecd=filterWorldbookEntries(_0x32cadc,_0x408bcd);_0x4245ea[_0x1c56bb(0x30a)]='';const _0x3c688c='\x0a\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';_0x4245ea[_0x1c56bb(0x231)](_0x1c56bb(0x1f5),_0x3c688c);if(_0x268ecd[_0x1c56bb(0x341)]===0x0){const _0x4f4fc3=_0x1c56bb(0x376);_0x4245ea[_0x1c56bb(0x231)](_0x1c56bb(0x1f5),_0x4f4fc3),_0x1f8be3['querySelector'](_0x1c56bb(0x2cd))[_0x1c56bb(0x3e1)]=_0x1c56bb(0x2e8);return;}_0x268ecd[_0x1c56bb(0x3dd)](_0x475e32=>{const _0x429275=_0x1c56bb,_0x4143e3=_0x32cadc?highlightSearchMatch(_0x475e32[_0x429275(0x3e8)],_0x32cadc):_0x475e32[_0x429275(0x3e8)],_0x442cc1=_0x429275(0x3eb)+_0x475e32[_0x429275(0x3e8)]+'\x20(Key:\x20'+_0x475e32[_0x429275(0x203)]+_0x429275(0x37b)+_0x475e32[_0x429275(0x203)]+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x4143e3+_0x429275(0x233);_0x4245ea[_0x429275(0x231)](_0x429275(0x1f5),_0x442cc1);}),_0x1f8be3['querySelector']('span')[_0x1c56bb(0x3e1)]='已选择\x200\x20/\x20'+_0x268ecd['length']+_0x1c56bb(0x37c);}async function startHistoriography(){const _0x5ca924=_0x28d2da,_0x41eb45=document['getElementById'](_0x5ca924(0x3c2))[_0x5ca924(0x25e)],_0x225cfd=document[_0x5ca924(0x214)](_0x5ca924(0x375)),_0x52164b=document[_0x5ca924(0x214)](_0x5ca924(0x264)),_0x29394a=Array[_0x5ca924(0x3fb)](_0x225cfd['querySelectorAll']('.hly-hist-entry-checkbox:checked'))['map'](_0x38a306=>_0x38a306[_0x5ca924(0x25e)]);if(!_0x41eb45||_0x29394a['length']===0x0){toastr[_0x5ca924(0x40a)](_0x5ca924(0x378),_0x5ca924(0x3a6));return;}_0x52164b['textContent']=_0x5ca924(0x323)+_0x41eb45+_0x5ca924(0x3c1)+_0x29394a[_0x5ca924(0x341)]+_0x5ca924(0x40c),toastr[_0x5ca924(0x390)]('批量编纂任务已开始...','圣旨'),log(_0x5ca924(0x377)+_0x41eb45+_0x5ca924(0x3c1)+_0x29394a[_0x5ca924(0x341)]+_0x5ca924(0x3d4),_0x5ca924(0x390));try{const _0xe741a8=await _0x798f38[_0x5ca924(0x32f)](_0x41eb45,_0x29394a);_0x52164b[_0x5ca924(0x3e1)]=_0xe741a8[_0x5ca924(0x3b2)],_0xe741a8[_0x5ca924(0x224)]?toastr[_0x5ca924(0x224)](_0x5ca924(0x29c),'大功告成'):toastr['warning'](_0x5ca924(0x3a4),'圣谕'),log('对《'+_0x41eb45+_0x5ca924(0x250)+_0xe741a8['totalSuccess']+_0x5ca924(0x33e)+_0xe741a8[_0x5ca924(0x273)],_0x5ca924(0x224));}catch(_0x295926){console[_0x5ca924(0x282)](_0x5ca924(0x36a),_0x295926),toastr[_0x5ca924(0x282)](_0x5ca924(0x290)+_0x295926[_0x5ca924(0x415)],_0x5ca924(0x1f8)),_0x52164b['textContent']=_0x5ca924(0x290)+_0x295926['message'];}finally{await updatePanelStatus();}}async function showStats(){const _0x2eac30=_0x28d2da;try{log(_0x2eac30(0x3ce),'info'),toastr[_0x2eac30(0x390)](_0x2eac30(0x347),'圣旨');const _0x442c90=await _0x5a0ed1[_0x2eac30(0x32c)](),_0x4bf186=await _0x5a0ed1[_0x2eac30(0x2d3)](),_0x495c47=_0x5a0ed1[_0x2eac30(0x22a)](),_0x5e05b5='\x0a
\x0a翰林院宝库状态\x0a--------------------\x0a集合ID:\x20'+_0x4bf186+_0x2eac30(0x22f)+_0x442c90+_0x2eac30(0x25d)+_0x495c47[_0x2eac30(0x380)][_0x2eac30(0x25b)]+'\x0a所用模型:\x20'+_0x495c47['retrieval'][_0x2eac30(0x35b)]+_0x2eac30(0x39c);toastr['info'](_0x5e05b5,_0x2eac30(0x311),{'timeOut':0x3a98,'extendedTimeOut':0x1388,'tapToDismiss':!![],'closeButton':!![]}),log('查看宝库状态成功:集合ID='+_0x4bf186+_0x2eac30(0x381)+_0x442c90,_0x2eac30(0x224));}catch(_0x4be326){console['error'](_0x2eac30(0x2b3),_0x4be326),toastr[_0x2eac30(0x282)](_0x2eac30(0x27a)+_0x4be326[_0x2eac30(0x415)],_0x2eac30(0x1f8)),log('查询宝库状态失败:\x20'+_0x4be326['message'],_0x2eac30(0x282));}}function showRulesModal(_0x13e2f7){const _0x28fbc9=_0x28d2da,_0x3b2d01=_0x5a0ed1['getSettings'](),_0x4f2d11=_0x3b2d01[_0x13e2f7];if(!_0x4f2d11){console[_0x28fbc9(0x282)](_0x28fbc9(0x31b)+_0x13e2f7+_0x28fbc9(0x21f));return;}const _0x1a3ef3=_0x13e2f7===_0x28fbc9(0x2ec)?_0x28fbc9(0x3f7):_0x28fbc9(0x32a),_0x27f247=_0x4f2d11['exclusionRules']||[],_0x142892=(_0x3b8cd4={'start':'','end':''},_0x568e6c)=>_0x28fbc9(0x37f)+_0x568e6c+_0x28fbc9(0x29f)+(_0x3b8cd4[_0x28fbc9(0x412)]||'')['replace'](/"/g,'\x22')+_0x28fbc9(0x3b8)+(_0x3b8cd4[_0x28fbc9(0x2ee)]||'')[_0x28fbc9(0x2fb)](/"/g,'\x22')+_0x28fbc9(0x227),_0x40225e=_0x27f247[_0x28fbc9(0x204)](_0x142892)['join'](''),_0x5b4381=_0x13e2f7===_0x28fbc9(0x2bb)?_0x28fbc9(0x20f)+(_0x4f2d11[_0x28fbc9(0x3d2)]?_0x28fbc9(0x3a9):'')+_0x28fbc9(0x2b7)+(_0x4f2d11['tagExtractionEnabled']?_0x28fbc9(0x307):_0x28fbc9(0x312))+_0x28fbc9(0x2f7)+(_0x4f2d11[_0x28fbc9(0x3ac)]||'')+_0x28fbc9(0x38c):'',_0x9e2b71=_0x28fbc9(0x3fe)+_0x5b4381+_0x28fbc9(0x3e4)+(_0x40225e[_0x28fbc9(0x341)]>0x0?_0x40225e:_0x28fbc9(0x28c))+_0x28fbc9(0x2c8);showHtmlModal(_0x1a3ef3,_0x9e2b71,{'okText':_0x28fbc9(0x212),'onOk':_0x44256b=>{const _0x4d1ee0=_0x28fbc9,_0x108c96=[];_0x44256b[_0x4d1ee0(0x26a)](_0x4d1ee0(0x2ff))[_0x4d1ee0(0x2ea)](function(){const _0x3242f9=_0x4d1ee0,_0x365829=$(this)['find'](_0x3242f9(0x235))['eq'](0x0)[_0x3242f9(0x2f6)]()[_0x3242f9(0x35c)](),_0x4651ee=$(this)[_0x3242f9(0x26a)](_0x3242f9(0x235))['eq'](0x1)['val']()[_0x3242f9(0x35c)]();_0x365829&&_0x108c96['push']({'start':_0x365829,'end':_0x4651ee});});const _0x2066c9={..._0x4f2d11,'exclusionRules':_0x108c96};_0x13e2f7==='queryPreprocessing'&&(_0x2066c9[_0x4d1ee0(0x3d2)]=_0x44256b['find'](_0x4d1ee0(0x1f9))['is'](':checked'),_0x2066c9['tags']=_0x44256b[_0x4d1ee0(0x26a)](_0x4d1ee0(0x223))[_0x4d1ee0(0x2f6)]()),updateAndSaveSetting(_0x13e2f7,_0x2066c9),toastr[_0x4d1ee0(0x224)](_0x4d1ee0(0x2bc),_0x4d1ee0(0x303));},'onShow':_0x38a410=>{const _0x168f88=_0x28fbc9,_0x1e02ae=_0x38a410[_0x168f88(0x26a)](_0x168f88(0x2e4));_0x38a410[_0x168f88(0x26a)](_0x168f88(0x370))['on'](_0x168f88(0x39f),()=>{const _0x18ca7e=_0x168f88,_0x29d616=_0x1e02ae[_0x18ca7e(0x379)](_0x18ca7e(0x2ff))[_0x18ca7e(0x341)],_0x52521d=_0x142892(undefined,_0x29d616);_0x1e02ae[_0x18ca7e(0x26a)]('p')[_0x18ca7e(0x341)]>0x0?_0x1e02ae['html'](_0x52521d):_0x1e02ae[_0x18ca7e(0x40e)](_0x52521d);}),_0x1e02ae['on'](_0x168f88(0x39f),'.hly-delete-rule-btn',function(){const _0x5bdc6f=_0x168f88;$(this)[_0x5bdc6f(0x265)]('.hly-exclusion-rule-row')[_0x5bdc6f(0x21a)](),_0x1e02ae[_0x5bdc6f(0x379)]()[_0x5bdc6f(0x341)]===0x0&&_0x1e02ae[_0x5bdc6f(0x3ae)](_0x5bdc6f(0x28c));});if(_0x13e2f7===_0x168f88(0x2bb)){const _0x1931b4=_0x38a410[_0x168f88(0x26a)](_0x168f88(0x1f9)),_0x3f392b=_0x38a410[_0x168f88(0x26a)](_0x168f88(0x306));_0x1931b4['on'](_0x168f88(0x1fc),()=>{const _0x1bd41a=_0x168f88;_0x3f392b[_0x1bd41a(0x407)](_0x1bd41a(0x3a8),_0x1931b4['is'](':checked')?_0x1bd41a(0x307):_0x1bd41a(0x312));});}}});}function previewCondensation(){const _0x458e46=_0x28d2da,_0x4c9029=document[_0x458e46(0x214)](_0x458e46(0x2ce));try{const _0x2ef694=_0x5a0ed1[_0x458e46(0x22a)](),_0x40ec63=_0x2ef694['condensation'][_0x458e46(0x246)]||[],_0x23701a={'user':document['getElementById'](_0x458e46(0x383))[_0x458e46(0x3a9)],'ai':document[_0x458e46(0x214)](_0x458e46(0x221))['checked']},_0x37b140=document[_0x458e46(0x214)](_0x458e46(0x304))[_0x458e46(0x3a9)],_0x9c7f3e=_0x37b140?document['getElementById'](_0x458e46(0x34a))[_0x458e46(0x25e)][_0x458e46(0x3d5)](',')[_0x458e46(0x204)](_0x585f5d=>_0x585f5d[_0x458e46(0x35c)]())[_0x458e46(0x37a)](Boolean):[],_0x202b71=_0x5a0ed1[_0x458e46(0x205)](_0x23701a);if(!_0x202b71||_0x202b71[_0x458e46(0x341)]===0x0){_0x4c9029[_0x458e46(0x3e1)]=_0x458e46(0x3f8),toastr['warning'](_0x458e46(0x330),_0x458e46(0x294));return;}const _0x2c920a=getContext()[_0x458e46(0x37e)],_0x2e206f=_0x202b71['map']((_0x509ca6,_0x313c14)=>{const _0x4d55ed=_0x458e46;let _0xcb6b01;if(_0x509ca6[_0x4d55ed(0x2a7)])_0xcb6b01=_0x509ca6['mes'];else{if(_0x37b140&&_0x9c7f3e[_0x4d55ed(0x341)]>0x0){const _0x59fb00=extractBlocksByTags(_0x509ca6[_0x4d55ed(0x3f2)],_0x9c7f3e);_0x59fb00[_0x4d55ed(0x341)]>0x0?_0xcb6b01=_0x59fb00[_0x4d55ed(0x293)]('\x0a\x0a'):_0xcb6b01=_0x509ca6[_0x4d55ed(0x3f2)];}else _0xcb6b01=_0x509ca6['mes'];_0xcb6b01=applyExclusionRules(_0xcb6b01,_0x40ec63);}const _0xb852d=_0x2c920a[_0x4d55ed(0x401)](_0x12ac4f=>_0x12ac4f===_0x509ca6),_0x1fac31=_0xb852d!==-0x1?_0xb852d+0x1:-0x1;return{'id':_0x4d55ed(0x3d8)+_0x313c14,'name':_0x509ca6['name'],'content':_0xcb6b01[_0x4d55ed(0x35c)](),'floor':_0x1fac31,'is_user':_0x509ca6['is_user'],'send_date':_0x509ca6[_0x4d55ed(0x3d9)]};})[_0x458e46(0x37a)](_0x47c90a=>_0x47c90a[_0x458e46(0x3b2)]);if(_0x2e206f[_0x458e46(0x341)]===0x0){_0x4c9029[_0x458e46(0x3e1)]=_0x458e46(0x2cb),toastr[_0x458e46(0x40a)](_0x458e46(0x2cb),'翰林院启奏');return;}const _0x39226c=_0x2e206f['map']((_0x6f4bad,_0x3add8f)=>_0x458e46(0x35f)+_0x6f4bad['id']+_0x458e46(0x393)+_0x6f4bad[_0x458e46(0x28b)]+_0x458e46(0x237)+_0x6f4bad['name']+']\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'+_0x6f4bad[_0x458e46(0x3b2)]+_0x458e46(0x26f)+_0x6f4bad['id']+'\x22\x20title=\x22删除此条\x22>×\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20')['join']('');showHtmlModal(_0x458e46(0x238),''+_0x39226c+_0x458e46(0x2da),{'okText':'确认并更新预览','onOk':_0x2c3069=>{const _0x841267=_0x458e46,_0x528e12=[];_0x2c3069[_0x841267(0x26a)](_0x841267(0x329))[_0x841267(0x2ea)](function(){const _0x34b133=_0x841267,_0x15cfb7=$(this)[_0x34b133(0x26a)]('.hly-preview-textarea'),_0x5df252=_0x15cfb7[_0x34b133(0x2f6)]();_0x5df252[_0x34b133(0x35c)]()&&_0x528e12[_0x34b133(0x3b1)]({'mes':_0x5df252,'is_user':_0x15cfb7[_0x34b133(0x33f)](_0x34b133(0x21b)),'send_date':_0x15cfb7[_0x34b133(0x33f)](_0x34b133(0x23e)),'floor':_0x15cfb7[_0x34b133(0x33f)](_0x34b133(0x28b))});}),_0x4c9029[_0x841267(0x369)]['finalMessages']=JSON[_0x841267(0x338)](_0x528e12);const _0x556b93=document[_0x841267(0x214)]('hly-layer-start')[_0x841267(0x25e)],_0x58fd2b=document['getElementById'](_0x841267(0x1fb))[_0x841267(0x25e)];_0x4c9029['textContent']=_0x841267(0x27e)+_0x556b93+'\x20楼到\x20'+_0x58fd2b+_0x841267(0x2cc)+_0x528e12[_0x841267(0x341)]+_0x841267(0x314),toastr[_0x841267(0x224)](_0x841267(0x22c),_0x841267(0x303));}}),$(_0x458e46(0x2df))['on'](_0x458e46(0x39f),function(_0x49f34d){const _0x38da5c=_0x458e46;_0x49f34d[_0x38da5c(0x358)]();const _0x251f37=$(this)[_0x38da5c(0x33f)]('target');$('#'+_0x251f37)[_0x38da5c(0x21a)]();});}catch(_0x2b02a5){console[_0x458e46(0x282)]('[翰林院-枢纽]\x20预览过程发生错误:',_0x2b02a5),_0x4c9029['textContent']=_0x458e46(0x414)+_0x2b02a5[_0x458e46(0x415)],toastr[_0x458e46(0x282)](_0x458e46(0x414)+_0x2b02a5[_0x458e46(0x415)],_0x458e46(0x1f8));}}function log(_0x166e51,_0xc66294='info'){const _0x49d55b=_0x28d2da,_0x542375=document[_0x49d55b(0x214)](_0x49d55b(0x2a6));if(!_0x542375)return;const _0x4e3ca6=document[_0x49d55b(0x217)]('p'),_0x5748dd=new Date()[_0x49d55b(0x202)]();let _0x1427fd='fa-circle-info',_0x5bd2c1='log-info';switch(_0xc66294){case _0x49d55b(0x224):_0x1427fd=_0x49d55b(0x26e),_0x5bd2c1='log-success';break;case _0x49d55b(0x282):_0x1427fd=_0x49d55b(0x245),_0x5bd2c1=_0x49d55b(0x297);break;case _0x49d55b(0x23d):_0x1427fd='fa-exclamation-triangle',_0x5bd2c1=_0x49d55b(0x3ed);break;}_0x4e3ca6[_0x49d55b(0x2b4)]='hly-log-entry\x20'+_0x5bd2c1,_0x4e3ca6[_0x49d55b(0x30a)]=_0x49d55b(0x396)+_0x1427fd+_0x49d55b(0x345)+_0x5748dd+']\x20'+_0x166e51;const _0x20be44=_0x542375['querySelector'](_0x49d55b(0x2d6));_0x20be44&&_0x20be44[_0x49d55b(0x21a)](),_0x542375[_0x49d55b(0x366)](_0x4e3ca6),_0x542375[_0x49d55b(0x352)]=_0x542375[_0x49d55b(0x355)];}async function ingestManualText(){const _0x89a971=_0x28d2da,_0x10390b=document[_0x89a971(0x214)]('hly-manual-text'),_0x47a55b=_0x10390b['value'][_0x89a971(0x35c)]();if(!_0x47a55b){toastr['warning'](_0x89a971(0x38d),_0x89a971(0x294)),log(_0x89a971(0x359),'warn');return;}log('收到手动录入请求,文本长度:\x20'+_0x47a55b[_0x89a971(0x341)],'info'),toastr['info']('正在处理您提交的文书...','圣旨');try{const _0xdee09d=await _0x5a0ed1[_0x89a971(0x1f3)](_0x47a55b,'manual',{'sourceName':_0x89a971(0x2c1)});if(_0xdee09d['success'])toastr[_0x89a971(0x224)](_0x89a971(0x37d)+_0xdee09d[_0x89a971(0x343)]+_0x89a971(0x3f5),_0x89a971(0x201)),log(_0x89a971(0x39a)+_0xdee09d[_0x89a971(0x343)]+'\x20条忆识。',_0x89a971(0x224)),_0x10390b[_0x89a971(0x25e)]='';else throw new Error(_0xdee09d[_0x89a971(0x282)]||_0x89a971(0x24e));}catch(_0x3af794){console['error'](_0x89a971(0x29d),_0x3af794),toastr['error'](_0x89a971(0x326)+_0x3af794[_0x89a971(0x415)],'严重错误'),log(_0x89a971(0x2a5)+_0x3af794['message'],_0x89a971(0x282));}finally{await updatePanelStatus();}}
+function _0x3c62(_0x36035f,_0x1aa11a){const _0x4fc256=_0x4fc2();return _0x3c62=function(_0x3c622f,_0x1263d9){_0x3c622f=_0x3c622f-0xbb;let _0x41a3cc=_0x4fc256[_0x3c622f];return _0x41a3cc;},_0x3c62(_0x36035f,_0x1aa11a);}(function(_0x14cf00,_0xd78b88){const _0x1924e0=_0x3c62,_0x2ef673=_0x14cf00();while(!![]){try{const _0x2dc66d=parseInt(_0x1924e0(0xd1))/0x1+-parseInt(_0x1924e0(0xd2))/0x2*(-parseInt(_0x1924e0(0x141))/0x3)+-parseInt(_0x1924e0(0xc4))/0x4*(parseInt(_0x1924e0(0x127))/0x5)+parseInt(_0x1924e0(0xc0))/0x6*(-parseInt(_0x1924e0(0xc3))/0x7)+-parseInt(_0x1924e0(0x16e))/0x8+-parseInt(_0x1924e0(0x147))/0x9*(parseInt(_0x1924e0(0xc2))/0xa)+parseInt(_0x1924e0(0xda))/0xb;if(_0x2dc66d===_0xd78b88)break;else _0x2ef673['push'](_0x2ef673['shift']());}catch(_0x136c0f){_0x2ef673['push'](_0x2ef673['shift']());}}}(_0x4fc2,0x7d3e7));import{extension_settings,getContext}from'/scripts/extensions.js';import{extensionName,defaultSettings,saveSettings}from'../utils/settings.js';function _0x4fc2(){const _0x1f7aca=['preset','[Amily2-Ngms录]\x20[','请先选择一个要回溯的史册!','input','html','selected','圣谕有误','已镌刻!','_value','val','amily2_mhb_large_lore_selector','append','获取模型失败:\x20','\x0a\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','成功获取\x20','ngmsApiKey','[Amily2-Ngms]\x20已选择模型:\x20','key','forEach','className','addEventListener','.hly-exclusion-rule-row','圣谕不明','amily2_ngms_model_select','
\x20开始远征','display','dataset','idle','[Amily2号-工部]\x20【敕史局】的专属工匠已就位...','\x20测试中','.popup-button-ok','编辑内容排除规则','option','1725736GmQwAo','jailbreak','createElement','find','ngmsApiUrl','Ngms\x20模型获取','2195862bUdaYy','圣谕不全','440OtMsmK','7dMIhUu','732msmmJH','historiographySmallTriggerThreshold','请先选择国史馆','textContent','amily2_ngms_max_tokens','.hly-delete-rule-btn','block','historiography-tag-input-container','[Amily2号-Ngms]\x20测试连接失败:','historiography_retention_count','push','amily2_mhb_','closest','247431ZnlZJx','10yPmuJg','start','[Amily2号-Ngms]\x20获取模型列表失败:','text','extensionSettings','amily2_ngms_tavern_profile','openai_test','historiographyIngestToRag','11582230KTRIFB','远征阈值必须是大于0的数字。已重置。','[Amily2号-Ngms工部]\x20正在绑定Ngms\x20API事件...','amily2_mhb_small_expedition_execute','remove','historiographySmallJailbreakPrompt','正在翻阅旧档...','\x0a\x20\x20\x20\x20\x20\x20\x20\x20此国史馆为空','log','amily2-expedition-state-change','historiographyWriteToLorebook','historiographyVectorizeSummary','historiography-tag-input','name','未发现任何国史馆','error','success','amily2_ngms_compatible_config','amily2_mhb_restore_archive','_restore_button','amily2_ngms_api_key','amily2_mhb_archive_selector','圣旨已达','加载失败','change','amily2_mhb_small_auto_enabled','historiographyTags','amily2_mhb_large_worldbook_selector','prop','[Amily2号-Ngms]\x20加载SillyTavern预设失败:','historiographyRetentionCount','none','amily2_ngms_model','innerHTML','宏史卷','comment','保留层数必须是大于或等于0的数字。已重置。','historiographyLargeRefinePrompt','small','内容排除规则已保存。','\x20个模型','_editor','trim','historiographySmallSummaryPrompt','body','amily2_vectorize_summary_content','#historiography-add-rule-btn','historiography-exclusion-rules-btn','menu_button\x20small_button\x20interactable\x20success','disabled','请先选择一个国史馆及其中的史册条目!','破限谕旨','historiography-tag-extraction-toggle','historiography_auto_summary_interactive',']\x20设置为\x20->','amily2_mhb_small_trigger_count','amily2_mhb_small_manual_execute','已恢复为默认谕旨,请点击“保存当前”以确认。','amily2_ngms_content','微言录','amily2_ngms_test_connection','click',']\x20的新状态已保存。','warning','\x20获取中','sillytavern_preset','--\x20加载中\x20--','historiographyExclusionRules','_save_button','12710FrZdHM','info','historiographyTagExtractionEnabled','.popup-button-cancel','amily2_ngms_fetch_models','api','amily2_mhb_large_refresh_worldbooks','running','amily2_ngms_api_mode','dispatchEvent','state','getElementById','defaultValue','checked','正在检阅史册...','\x20继续远征','value','style','amily2_mhb_large_refine_execute','_prompt_selector','appendChild','detail','historiographySmallAutoEnable','[Amily2-Ngms令]\x20收到指令:\x20将\x20[','amily2_ngms_preset_config','selectedIndex','335838ToGJKC','ngmsModel','amily2_mhb_archive_current','已保存!','ngmsApiMode','ngmsMaxTokens','61407hHgIzJ','ngmsTavernProfile','historiographyAutoSummaryInteractive','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{const _0x25c5a1=_0x36d8ce,_0x16ffc6=_0x46de4a[_0x25c5a1(0x137)];_0x16ffc6===_0x25c5a1(0xbb)?_0x3f42c6[_0x25c5a1(0x137)]=extension_settings[extensionName][_0x40d2dc]:_0x3f42c6['value']=extension_settings[extensionName][_0x5d2a3f];};_0x46de4a[_0x36d8ce(0x161)](_0x36d8ce(0xfa),_0x35f613),_0x4b1252[_0x36d8ce(0x161)](_0x36d8ce(0x11f),()=>{const _0x13227f=_0x36d8ce,_0x2e1062=_0x46de4a[_0x13227f(0x137)];_0x2e1062===_0x13227f(0xbb)?extension_settings[extensionName][_0x40d2dc]=_0x3f42c6[_0x13227f(0x137)]:extension_settings[extensionName][_0x5d2a3f]=_0x3f42c6['value'],saveSettings()&&toastr[_0x13227f(0xf2)]((_0x5d93af===_0x13227f(0x108)?'微言录':_0x13227f(0x104))+'的'+(_0x2e1062==='jailbreak'?_0x13227f(0x115):'纲要')+_0x13227f(0x144));}),_0xdd61bc['addEventListener'](_0x36d8ce(0x11f),()=>{const _0x26980e=_0x36d8ce,_0x1aee6f=_0x46de4a[_0x26980e(0x137)];_0x1aee6f===_0x26980e(0xbb)?_0x3f42c6[_0x26980e(0x137)]=defaultSettings[_0x40d2dc]:_0x3f42c6[_0x26980e(0x137)]=defaultSettings[_0x5d2a3f],toastr[_0x26980e(0x128)](_0x26980e(0x11b));}),_0x35f613();const _0x578bd1=document[_0x36d8ce(0x132)](_0x36d8ce(0xcf)+_0x5d93af+'_expand_editor');_0x578bd1['addEventListener'](_0x36d8ce(0x11f),()=>{const _0xe9535b=_0x36d8ce,_0x5c9d50=_0x46de4a[_0xe9535b(0x137)],_0xc43bd=_0x46de4a['options'][_0x46de4a[_0xe9535b(0x140)]][_0xe9535b(0xd5)],_0x56b90b=_0x3f42c6['value'],_0xa8ef58='\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'+_0xc43bd+'\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',_0xf2e50b=$(_0xa8ef58)['appendTo'](_0xe9535b(0x10e)),_0xbb3df3=_0xf2e50b[_0xe9535b(0xbd)](_0xe9535b(0xe8));_0xbb3df3[_0xe9535b(0x156)](_0x56b90b);const _0x41169c=()=>{const _0x506b70=_0xe9535b;_0xf2e50b[0x0][_0x506b70(0xe6)](),_0xf2e50b[_0x506b70(0xde)]();};_0xf2e50b[_0xe9535b(0xbd)](_0xe9535b(0x16b))['on'](_0xe9535b(0x11f),()=>{const _0x1aad73=_0xe9535b,_0x40684f=_0xbb3df3['val']();_0x3f42c6[_0x1aad73(0x137)]=_0x40684f,_0x5c9d50===_0x1aad73(0xbb)?extension_settings[extensionName][_0x40d2dc]=_0x40684f:extension_settings[extensionName][_0x5d2a3f]=_0x40684f,saveSettings()&&toastr['success']((_0x5d93af===_0x1aad73(0x108)?_0x1aad73(0x11d):_0x1aad73(0x104))+'的'+_0xc43bd+_0x1aad73(0x154)),_0x41169c();}),_0xf2e50b[_0xe9535b(0xbd)](_0xe9535b(0x12a))['on'](_0xe9535b(0x11f),_0x41169c),_0xf2e50b[0x0][_0xe9535b(0xe2)]();});}export function bindHistoriographyEvents(){const _0x10cc7e=_0x3c62;console['log'](_0x10cc7e(0x169)),setupPromptEditor(_0x10cc7e(0x108)),setupPromptEditor('large'),bindNgmsApiEvents();const _0x55c074=document[_0x10cc7e(0x132)](_0x10cc7e(0xe7)),_0x2e5c92=document[_0x10cc7e(0x132)]('amily2_mhb_small_end_floor'),_0x287dc9=document[_0x10cc7e(0x132)](_0x10cc7e(0x11a)),_0x51ca72=document[_0x10cc7e(0x132)](_0x10cc7e(0xfb)),_0x2200a3=document[_0x10cc7e(0x132)](_0x10cc7e(0x119)),_0x2b747f=document[_0x10cc7e(0x132)]('historiography_write_to_lorebook'),_0x3cab35=document[_0x10cc7e(0x132)]('historiography_ingest_to_rag');_0x287dc9[_0x10cc7e(0x161)](_0x10cc7e(0x11f),()=>{const _0x3dda42=_0x10cc7e,_0x28e2ce=parseInt(_0x55c074['value'],0xa),_0x2787e7=parseInt(_0x2e5c92[_0x3dda42(0x137)],0xa);if(isNaN(_0x28e2ce)||isNaN(_0x2787e7)||_0x28e2ce<=0x0||_0x2787e7<=0x0||_0x28e2ce>_0x2787e7){toastr['error']('请输入有效的起始和结束楼层!',_0x3dda42(0x153));return;}executeManualSummary(_0x28e2ce,_0x2787e7);}),_0x51ca72[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x39fa87=>{const _0x2a309f=_0x10cc7e;extension_settings[extensionName]['historiographySmallAutoEnable']=_0x39fa87[_0x2a309f(0xe5)][_0x2a309f(0x134)],saveSettings();}),_0x2200a3[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x592c8b=>{const _0x3066d7=_0x10cc7e,_0x414e36=parseInt(_0x592c8b[_0x3066d7(0xe5)][_0x3066d7(0x137)],0xa);if(isNaN(_0x414e36)||_0x414e36<0x1){_0x592c8b[_0x3066d7(0xe5)][_0x3066d7(0x137)]=defaultSettings[_0x3066d7(0xc5)],toastr[_0x3066d7(0x121)](_0x3066d7(0xdb),_0x3066d7(0x153));return;}extension_settings[extensionName][_0x3066d7(0xc5)]=_0x414e36,saveSettings();});const _0x5b6e62=document[_0x10cc7e(0x132)](_0x10cc7e(0xcd));_0x5b6e62['addEventListener'](_0x10cc7e(0xfa),_0x43f112=>{const _0x1c3a78=_0x10cc7e,_0x3c294a=parseInt(_0x43f112['target'][_0x1c3a78(0x137)],0xa);if(isNaN(_0x3c294a)||_0x3c294a<0x0){_0x43f112[_0x1c3a78(0xe5)][_0x1c3a78(0x137)]=defaultSettings[_0x1c3a78(0x100)],toastr[_0x1c3a78(0x121)](_0x1c3a78(0x106),'圣谕有误');return;}extension_settings[extensionName]['historiographyRetentionCount']=_0x3c294a,saveSettings();}),_0x2b747f[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x23b734=>{const _0x390794=_0x10cc7e;extension_settings[extensionName][_0x390794(0xec)]=_0x23b734[_0x390794(0xe5)][_0x390794(0x134)],saveSettings();}),_0x3cab35[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x45e0b=>{const _0x3ebea4=_0x10cc7e;extension_settings[extensionName]['historiographyIngestToRag']=_0x45e0b[_0x3ebea4(0xe5)]['checked'],saveSettings();}),_0x51ca72['checked']=extension_settings[extensionName][_0x10cc7e(0x13d)]??![],_0x2200a3[_0x10cc7e(0x137)]=extension_settings[extensionName][_0x10cc7e(0xc5)]??0x1e,_0x5b6e62[_0x10cc7e(0x137)]=extension_settings[extensionName][_0x10cc7e(0x100)]??0x5,_0x2b747f[_0x10cc7e(0x134)]=extension_settings[extensionName][_0x10cc7e(0xec)]??!![],_0x3cab35[_0x10cc7e(0x134)]=extension_settings[extensionName][_0x10cc7e(0xd9)]??![];const _0x337329=document[_0x10cc7e(0x132)](_0x10cc7e(0x117));_0x337329[_0x10cc7e(0x134)]=extension_settings[extensionName][_0x10cc7e(0x149)]??![],_0x337329['addEventListener']('change',_0x2f4b47=>{const _0x308fe5=_0x10cc7e;extension_settings[extensionName][_0x308fe5(0x149)]=_0x2f4b47[_0x308fe5(0xe5)]['checked'],saveSettings();});const _0x3b176b=document[_0x10cc7e(0x132)](_0x10cc7e(0x116)),_0x97688=document['getElementById'](_0x10cc7e(0xcb)),_0x3e4a73=document[_0x10cc7e(0x132)](_0x10cc7e(0xee)),_0x28079b=document[_0x10cc7e(0x132)](_0x10cc7e(0x111));_0x3b176b[_0x10cc7e(0x134)]=extension_settings[extensionName]['historiographyTagExtractionEnabled']??![],_0x3e4a73[_0x10cc7e(0x137)]=extension_settings[extensionName]['historiographyTags']??'',_0x97688[_0x10cc7e(0x138)][_0x10cc7e(0x166)]=_0x3b176b[_0x10cc7e(0x134)]?'block':'none',_0x3b176b[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x39d4f1=>{const _0x100687=_0x10cc7e,_0x23484c=_0x39d4f1[_0x100687(0xe5)][_0x100687(0x134)];extension_settings[extensionName][_0x100687(0x129)]=_0x23484c,_0x97688[_0x100687(0x138)]['display']=_0x23484c?_0x100687(0xca):_0x100687(0x101),saveSettings();}),_0x3e4a73[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x594751=>{const _0x3a1e01=_0x10cc7e;extension_settings[extensionName][_0x3a1e01(0xfc)]=_0x594751[_0x3a1e01(0xe5)][_0x3a1e01(0x137)],saveSettings();}),_0x28079b[_0x10cc7e(0x161)](_0x10cc7e(0x11f),showHistoriographyExclusionRulesModal);const _0x57993f=document[_0x10cc7e(0x132)](_0x10cc7e(0xdd)),_0x6e242c=_0x51939c=>{const _0x4de8a4=_0x10cc7e;_0x57993f[_0x4de8a4(0x167)][_0x4de8a4(0x131)]=_0x51939c;switch(_0x51939c){case'running':_0x57993f[_0x4de8a4(0x103)]='\x20停止远征',_0x57993f[_0x4de8a4(0x160)]='menu_button\x20small_button\x20interactable\x20danger';break;case'paused':_0x57993f[_0x4de8a4(0x103)]=_0x4de8a4(0x136),_0x57993f[_0x4de8a4(0x160)]=_0x4de8a4(0x112);break;case _0x4de8a4(0x168):default:_0x57993f['innerHTML']=_0x4de8a4(0x165),_0x57993f[_0x4de8a4(0x160)]='menu_button\x20small_button\x20interactable';break;}};document[_0x10cc7e(0x161)](_0x10cc7e(0xeb),_0x455465=>{const _0x40f908=_0x10cc7e,{isRunning:_0x1689be,manualStop:_0x286acd}=_0x455465[_0x40f908(0x13c)];if(_0x1689be)_0x6e242c(_0x40f908(0x12e));else _0x286acd?_0x6e242c('paused'):_0x6e242c(_0x40f908(0x168));}),_0x57993f[_0x10cc7e(0x161)](_0x10cc7e(0x11f),()=>{const _0x43cc16=_0x10cc7e,_0x3e57a6=_0x57993f['dataset'][_0x43cc16(0x131)]||'idle';_0x3e57a6==='running'?stopExpedition():executeExpedition();}),_0x6e242c(_0x10cc7e(0x168));const _0x17c9a1=document[_0x10cc7e(0x132)](_0x10cc7e(0x143)),_0xb9b59=document[_0x10cc7e(0x132)](_0x10cc7e(0xf7)),_0x475be3=document['getElementById']('amily2_mhb_refresh_archives'),_0x2ca2db=document['getElementById'](_0x10cc7e(0xf4)),_0x96d273=async()=>{const _0x7f2b73=_0x10cc7e;_0xb9b59[_0x7f2b73(0x103)]=_0x7f2b73(0xe0);const _0x4f614f=await getArchivedLedgers();_0xb9b59[_0x7f2b73(0x103)]='',_0x4f614f&&_0x4f614f[_0x7f2b73(0x14c)]>0x0?_0x4f614f[_0x7f2b73(0x15f)](_0x507862=>{const _0x5f8c7a=_0x7f2b73,_0x32fd42=document[_0x5f8c7a(0xbc)](_0x5f8c7a(0x16d));_0x32fd42[_0x5f8c7a(0x137)]=_0x507862[_0x5f8c7a(0x15e)],_0x32fd42[_0x5f8c7a(0xc7)]=_0x507862[_0x5f8c7a(0x105)],_0xb9b59[_0x5f8c7a(0x13b)](_0x32fd42);}):_0xb9b59[_0x7f2b73(0x103)]='未发现归档史册';};_0x17c9a1[_0x10cc7e(0x161)](_0x10cc7e(0x11f),async()=>{if(confirm('确定要归档当前的【对话流水总帐】并停用它吗?\x0a这将允许您开始一段全新的历史记录。')){const _0x14311c=await archiveCurrentLedger();_0x14311c&&_0x96d273();}}),_0x475be3['addEventListener'](_0x10cc7e(0x11f),_0x96d273),_0x2ca2db[_0x10cc7e(0x161)](_0x10cc7e(0x11f),async()=>{const _0x106ba3=_0x10cc7e,_0x39aaf2=_0xb9b59[_0x106ba3(0x137)];if(!_0x39aaf2){toastr['warning'](_0x106ba3(0x14f),_0x106ba3(0x163));return;}confirm('确定要回溯选中的史册吗?\x0a当前的活跃史册(如果有)将被自动归档。')&&(await restoreArchivedLedger(_0x39aaf2),_0x96d273());});const _0x204793=document[_0x10cc7e(0x132)](_0x10cc7e(0xfd)),_0x4bafaa=document['getElementById'](_0x10cc7e(0x157)),_0x30a212=document[_0x10cc7e(0x132)](_0x10cc7e(0x12d)),_0x1f3f8e=document[_0x10cc7e(0x132)]('amily2_mhb_large_refresh_lores'),_0x193aae=document[_0x10cc7e(0x132)](_0x10cc7e(0x139)),_0x17b71a=async()=>{const _0x365db4=_0x10cc7e;_0x204793[_0x365db4(0x103)]='正在遍览帝国疆域...';const _0x1582c6=await getAvailableWorldbooks();_0x204793[_0x365db4(0x103)]='',_0x1582c6&&_0x1582c6[_0x365db4(0x14c)]>0x0?(_0x1582c6[_0x365db4(0x15f)](_0x42115e=>{const _0x591f0f=_0x365db4,_0x448cbe=document[_0x591f0f(0xbc)](_0x591f0f(0x16d));_0x448cbe[_0x591f0f(0x137)]=_0x42115e,_0x448cbe[_0x591f0f(0xc7)]=_0x42115e,_0x204793[_0x591f0f(0x13b)](_0x448cbe);}),_0x204793[_0x365db4(0x130)](new Event(_0x365db4(0xfa)))):_0x204793[_0x365db4(0x103)]=_0x365db4(0xf0);},_0x8553d=async()=>{const _0xe10a2e=_0x10cc7e,_0x545bf5=_0x204793['value'];if(!_0x545bf5){_0x4bafaa['innerHTML']=_0xe10a2e(0xc6);return;}_0x4bafaa[_0xe10a2e(0x103)]=_0xe10a2e(0x135);const _0x57ee86=await getLoresForWorldbook(_0x545bf5);_0x4bafaa[_0xe10a2e(0x103)]='',_0x57ee86&&_0x57ee86[_0xe10a2e(0x14c)]>0x0?_0x57ee86['forEach'](_0x565142=>{const _0x286bf0=_0xe10a2e,_0x5e0da6=document['createElement'](_0x286bf0(0x16d));_0x5e0da6['value']=_0x565142[_0x286bf0(0x15e)],_0x5e0da6['textContent']='['+_0x565142['key']+']\x20'+_0x565142[_0x286bf0(0x105)],_0x4bafaa['appendChild'](_0x5e0da6);}):_0x4bafaa[_0xe10a2e(0x103)]=_0xe10a2e(0xe9);};_0x30a212[_0x10cc7e(0x161)](_0x10cc7e(0x11f),_0x17b71a),_0x204793[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x8553d),_0x1f3f8e['addEventListener'](_0x10cc7e(0x11f),_0x8553d),_0x193aae[_0x10cc7e(0x161)](_0x10cc7e(0x11f),()=>{const _0x3901f1=_0x10cc7e,_0x1e82f7=_0x204793['value'],_0x434138=_0x4bafaa[_0x3901f1(0x137)];if(!_0x1e82f7||!_0x434138){toastr['error'](_0x3901f1(0x114),_0x3901f1(0xc1));return;}executeRefinement(_0x1e82f7,_0x434138);});const _0x54ce9b=document[_0x10cc7e(0x132)](_0x10cc7e(0x10f));_0x54ce9b['checked']=extension_settings[extensionName][_0x10cc7e(0xed)]??![],_0x54ce9b[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x863884=>{const _0x50f026=_0x10cc7e;extension_settings[extensionName][_0x50f026(0xed)]=_0x863884[_0x50f026(0xe5)]['checked'],saveSettings();});}function bindNgmsApiEvents(){const _0x94cd31=_0x3c62;console[_0x94cd31(0xea)](_0x94cd31(0xdc));const _0x464106=(_0x3b4622,_0xf96c73)=>{const _0x4bb96b=_0x94cd31;console['log'](_0x4bb96b(0x13e)+_0x3b4622+_0x4bb96b(0x118),_0xf96c73),!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][_0x3b4622]=_0xf96c73,saveSettings(),console['log'](_0x4bb96b(0x14e)+_0x3b4622+_0x4bb96b(0x120));},_0x5bf9cf=document[_0x94cd31(0x132)]('amily2_ngms_enabled'),_0x26703d=document['getElementById'](_0x94cd31(0x11c));_0x5bf9cf&&_0x26703d&&(_0x5bf9cf[_0x94cd31(0x134)]=extension_settings[extensionName][_0x94cd31(0xe4)]??![],_0x26703d[_0x94cd31(0x138)][_0x94cd31(0x166)]=_0x5bf9cf[_0x94cd31(0x134)]?_0x94cd31(0xca):_0x94cd31(0x101),_0x5bf9cf[_0x94cd31(0x161)](_0x94cd31(0xfa),function(){const _0x309bf5=_0x94cd31,_0x476aab=this[_0x309bf5(0x134)];_0x464106(_0x309bf5(0xe4),_0x476aab),_0x26703d[_0x309bf5(0x138)][_0x309bf5(0x166)]=_0x476aab?_0x309bf5(0xca):_0x309bf5(0x101);}));const _0x15072c=document[_0x94cd31(0x132)](_0x94cd31(0x12f)),_0x4d717a=document['getElementById'](_0x94cd31(0xf3)),_0x296456=document['getElementById'](_0x94cd31(0x13f));if(_0x15072c&&_0x4d717a&&_0x296456){_0x15072c['value']=extension_settings[extensionName]['ngmsApiMode']||_0x94cd31(0xd8);const _0x59f538=_0x24d4c6=>{const _0x337db6=_0x94cd31;_0x24d4c6===_0x337db6(0x123)?(_0x4d717a[_0x337db6(0x138)]['display']=_0x337db6(0x101),_0x296456['style']['display']=_0x337db6(0xca),loadNgmsTavernPresets()):(_0x4d717a['style'][_0x337db6(0x166)]='block',_0x296456[_0x337db6(0x138)][_0x337db6(0x166)]=_0x337db6(0x101));};_0x59f538(_0x15072c[_0x94cd31(0x137)]),_0x15072c['addEventListener']('change',function(){const _0x52b4a7=_0x94cd31;_0x464106(_0x52b4a7(0x145),this[_0x52b4a7(0x137)]),_0x59f538(this['value']);});}const _0x524eea=[{'id':'amily2_ngms_api_url','key':_0x94cd31(0xbe)},{'id':_0x94cd31(0xf6),'key':_0x94cd31(0x15c)},{'id':_0x94cd31(0x102),'key':'ngmsModel'}];_0x524eea[_0x94cd31(0x15f)](_0x320b80=>{const _0x2558e9=_0x94cd31,_0x38aa2c=document[_0x2558e9(0x132)](_0x320b80['id']);_0x38aa2c&&(_0x38aa2c['value']=extension_settings[extensionName][_0x320b80[_0x2558e9(0x15e)]]||'',_0x38aa2c['addEventListener'](_0x2558e9(0xfa),function(){const _0x4b192e=_0x2558e9;_0x464106(_0x320b80[_0x4b192e(0x15e)],this[_0x4b192e(0x137)]);}));});const _0xd26c3f=[{'id':_0x94cd31(0xc8),'key':_0x94cd31(0x146),'defaultValue':0xfa0},{'id':'amily2_ngms_temperature','key':_0x94cd31(0xe3),'defaultValue':0.7}];_0xd26c3f[_0x94cd31(0x15f)](_0x46d795=>{const _0x1b2d43=_0x94cd31,_0x26e31c=document['getElementById'](_0x46d795['id']),_0x35612d=document[_0x1b2d43(0x132)](_0x46d795['id']+_0x1b2d43(0x155));if(_0x26e31c&&_0x35612d){const _0x27f465=extension_settings[extensionName][_0x46d795['key']]||_0x46d795[_0x1b2d43(0x133)];_0x26e31c['value']=_0x27f465,_0x35612d[_0x1b2d43(0xc7)]=_0x27f465,_0x26e31c[_0x1b2d43(0x161)]('input',function(){const _0x5eb682=_0x1b2d43,_0x4d1dad=parseFloat(this[_0x5eb682(0x137)]);_0x35612d['textContent']=_0x4d1dad,_0x464106(_0x46d795['key'],_0x4d1dad);});}});const _0x6efb7c=document[_0x94cd31(0x132)](_0x94cd31(0xd7));_0x6efb7c&&(_0x6efb7c[_0x94cd31(0x137)]=extension_settings[extensionName][_0x94cd31(0x148)]||'',_0x6efb7c['addEventListener'](_0x94cd31(0xfa),function(){const _0x42a9ec=_0x94cd31;_0x464106(_0x42a9ec(0x148),this[_0x42a9ec(0x137)]);}));const _0xff00d=document['getElementById'](_0x94cd31(0x11e));_0xff00d&&_0xff00d[_0x94cd31(0x161)]('click',async function(){const _0x414e80=_0x94cd31,_0x43737f=$(this),_0xe3b759=_0x43737f[_0x414e80(0x151)]();_0x43737f[_0x414e80(0xfe)](_0x414e80(0x113),!![])[_0x414e80(0x151)](_0x414e80(0x16a));try{await testNgmsApiConnection();}catch(_0x7ea21b){console['error'](_0x414e80(0xcc),_0x7ea21b);}finally{_0x43737f['prop'](_0x414e80(0x113),![])[_0x414e80(0x151)](_0xe3b759);}});const _0x4475c9=document[_0x94cd31(0x132)](_0x94cd31(0x12b)),_0x11009e=document['getElementById'](_0x94cd31(0x164)),_0x574134=document[_0x94cd31(0x132)](_0x94cd31(0x102));_0x4475c9&&_0x11009e&&_0x574134&&_0x4475c9['addEventListener'](_0x94cd31(0x11f),async function(){const _0x7b6bf3=_0x94cd31,_0x361838=$(this),_0x2cb194=_0x361838[_0x7b6bf3(0x151)]();_0x361838[_0x7b6bf3(0xfe)]('disabled',!![])[_0x7b6bf3(0x151)](_0x7b6bf3(0x122));try{const _0x1687b9=await fetchNgmsModels();_0x1687b9&&_0x1687b9[_0x7b6bf3(0x14c)]>0x0?(_0x11009e[_0x7b6bf3(0x103)]='--\x20请选择模型\x20--',_0x1687b9[_0x7b6bf3(0x15f)](_0x58f5e2=>{const _0x4008f0=_0x7b6bf3,_0x12e5f0=document[_0x4008f0(0xbc)](_0x4008f0(0x16d));_0x12e5f0[_0x4008f0(0x137)]=_0x58f5e2['id']||_0x58f5e2['name']||_0x58f5e2,_0x12e5f0[_0x4008f0(0xc7)]=_0x58f5e2[_0x4008f0(0xef)]||_0x58f5e2['id']||_0x58f5e2,_0x11009e[_0x4008f0(0x13b)](_0x12e5f0);}),_0x11009e[_0x7b6bf3(0x138)]['display']=_0x7b6bf3(0xca),_0x574134[_0x7b6bf3(0x138)][_0x7b6bf3(0x166)]=_0x7b6bf3(0x101),_0x11009e[_0x7b6bf3(0x161)](_0x7b6bf3(0xfa),function(){const _0x4ec4fa=_0x7b6bf3,_0x369bbc=this[_0x4ec4fa(0x137)];_0x574134['value']=_0x369bbc,_0x464106(_0x4ec4fa(0x142),_0x369bbc),console[_0x4ec4fa(0xea)](_0x4ec4fa(0x15d)+_0x369bbc);}),toastr['success'](_0x7b6bf3(0x15b)+_0x1687b9['length']+_0x7b6bf3(0x10a),'Ngms\x20模型获取')):toastr[_0x7b6bf3(0x121)]('未获取到任何模型',_0x7b6bf3(0xbf));}catch(_0x2e0cab){console[_0x7b6bf3(0xf1)](_0x7b6bf3(0xd4),_0x2e0cab),toastr[_0x7b6bf3(0xf1)](_0x7b6bf3(0x159)+_0x2e0cab['message'],_0x7b6bf3(0xbf));}finally{_0x361838['prop'](_0x7b6bf3(0x113),![])[_0x7b6bf3(0x151)](_0x2cb194);}});}async function loadNgmsTavernPresets(){const _0x5d0b4f=_0x3c62,_0x114d0c=document[_0x5d0b4f(0x132)]('amily2_ngms_tavern_profile');if(!_0x114d0c)return;const _0x366c43=_0x114d0c[_0x5d0b4f(0x137)];_0x114d0c[_0x5d0b4f(0x103)]=_0x5d0b4f(0x124);try{const _0x50b3f6=getContext(),_0xea1458=_0x50b3f6[_0x5d0b4f(0xd6)]?.['connectionManager']?.['profiles']||[];_0x114d0c[_0x5d0b4f(0x103)]='--\x20请选择预设\x20--',_0xea1458[_0x5d0b4f(0x14c)]>0x0?_0xea1458[_0x5d0b4f(0x15f)](_0x72fc00=>{const _0x34ac7e=_0x5d0b4f;if(_0x72fc00[_0x34ac7e(0x12c)]&&_0x72fc00[_0x34ac7e(0x14d)]){const _0x3301d0=document['createElement'](_0x34ac7e(0x16d));_0x3301d0[_0x34ac7e(0x137)]=_0x72fc00['id'],_0x3301d0[_0x34ac7e(0xc7)]=_0x72fc00[_0x34ac7e(0xef)]||_0x72fc00['id'],_0x72fc00['id']===_0x366c43&&(_0x3301d0[_0x34ac7e(0x152)]=!![]),_0x114d0c[_0x34ac7e(0x13b)](_0x3301d0);}}):_0x114d0c[_0x5d0b4f(0x103)]='未找到可用预设';}catch(_0x259847){console[_0x5d0b4f(0xf1)](_0x5d0b4f(0xff),_0x259847),_0x114d0c[_0x5d0b4f(0x103)]=_0x5d0b4f(0xf9);}}function showHistoriographyExclusionRulesModal(){const _0x454641=_0x3c62,_0x2ce1ce=extension_settings[extensionName][_0x454641(0x125)]||[],_0x4c9eb3=(_0x1f7afd={'start':'','end':''},_0x15143f)=>_0x454641(0xe1)+_0x15143f+_0x454641(0x14a)+_0x1f7afd[_0x454641(0xd3)]+'\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',_0x40200e=_0x2ce1ce[_0x454641(0x14b)](_0x4c9eb3)['join'](''),_0x381b69=_0x454641(0x15a)+_0x40200e+'\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';showHtmlModal(_0x454641(0x16c),_0x381b69,{'okText':'保存规则','onOk':_0x4b524d=>{const _0x2baf07=_0x454641,_0x52e2c8=[];_0x4b524d['find']('.hly-exclusion-rule-row')['each'](function(){const _0x2734b9=_0x3c62,_0x140cd5=$(this)[_0x2734b9(0xbd)](_0x2734b9(0x150))['eq'](0x0)['val']()[_0x2734b9(0x10c)](),_0x8f0f26=$(this)[_0x2734b9(0xbd)](_0x2734b9(0x150))['eq'](0x1)[_0x2734b9(0x156)]()[_0x2734b9(0x10c)]();_0x140cd5&&_0x8f0f26&&_0x52e2c8[_0x2734b9(0xce)]({'start':_0x140cd5,'end':_0x8f0f26});}),extension_settings[extensionName][_0x2baf07(0x125)]=_0x52e2c8,saveSettings(),toastr[_0x2baf07(0xf2)](_0x2baf07(0x109),_0x2baf07(0xf8));},'onShow':_0x3af03e=>{const _0x51da14=_0x454641,_0x3a964e=_0x3af03e[_0x51da14(0xbd)]('#historiography-rules-list');_0x3af03e[_0x51da14(0xbd)](_0x51da14(0x110))['on'](_0x51da14(0x11f),()=>{const _0x57f05c=_0x51da14,_0x3e0464=_0x3a964e['children']()['length'],_0x5ad8c0=_0x4c9eb3({'start':'','end':''},_0x3e0464);_0x3a964e[_0x57f05c(0x158)](_0x5ad8c0);}),_0x3a964e['on'](_0x51da14(0x11f),_0x51da14(0xc9),function(){const _0x1976cb=_0x51da14;$(this)[_0x1976cb(0xd0)](_0x1976cb(0x162))['remove']();});}});} From a0a51dce7cc39611b2bb5095a474999ffdeda4f0 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:19:50 +0800 Subject: [PATCH 14/56] Update hanlinyuan-bindings.js --- ui/hanlinyuan-bindings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/hanlinyuan-bindings.js b/ui/hanlinyuan-bindings.js index 3f925fe..5be9b6f 100644 --- a/ui/hanlinyuan-bindings.js +++ b/ui/hanlinyuan-bindings.js @@ -1 +1 @@ -function _0x3c62(_0x36035f,_0x1aa11a){const _0x4fc256=_0x4fc2();return _0x3c62=function(_0x3c622f,_0x1263d9){_0x3c622f=_0x3c622f-0xbb;let _0x41a3cc=_0x4fc256[_0x3c622f];return _0x41a3cc;},_0x3c62(_0x36035f,_0x1aa11a);}(function(_0x14cf00,_0xd78b88){const _0x1924e0=_0x3c62,_0x2ef673=_0x14cf00();while(!![]){try{const _0x2dc66d=parseInt(_0x1924e0(0xd1))/0x1+-parseInt(_0x1924e0(0xd2))/0x2*(-parseInt(_0x1924e0(0x141))/0x3)+-parseInt(_0x1924e0(0xc4))/0x4*(parseInt(_0x1924e0(0x127))/0x5)+parseInt(_0x1924e0(0xc0))/0x6*(-parseInt(_0x1924e0(0xc3))/0x7)+-parseInt(_0x1924e0(0x16e))/0x8+-parseInt(_0x1924e0(0x147))/0x9*(parseInt(_0x1924e0(0xc2))/0xa)+parseInt(_0x1924e0(0xda))/0xb;if(_0x2dc66d===_0xd78b88)break;else _0x2ef673['push'](_0x2ef673['shift']());}catch(_0x136c0f){_0x2ef673['push'](_0x2ef673['shift']());}}}(_0x4fc2,0x7d3e7));import{extension_settings,getContext}from'/scripts/extensions.js';import{extensionName,defaultSettings,saveSettings}from'../utils/settings.js';function _0x4fc2(){const _0x1f7aca=['preset','[Amily2-Ngms录]\x20[','请先选择一个要回溯的史册!','input','html','selected','圣谕有误','已镌刻!','_value','val','amily2_mhb_large_lore_selector','append','获取模型失败:\x20','\x0a\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','成功获取\x20','ngmsApiKey','[Amily2-Ngms]\x20已选择模型:\x20','key','forEach','className','addEventListener','.hly-exclusion-rule-row','圣谕不明','amily2_ngms_model_select','\x20开始远征','display','dataset','idle','[Amily2号-工部]\x20【敕史局】的专属工匠已就位...','\x20测试中','.popup-button-ok','编辑内容排除规则','option','1725736GmQwAo','jailbreak','createElement','find','ngmsApiUrl','Ngms\x20模型获取','2195862bUdaYy','圣谕不全','440OtMsmK','7dMIhUu','732msmmJH','historiographySmallTriggerThreshold','请先选择国史馆','textContent','amily2_ngms_max_tokens','.hly-delete-rule-btn','block','historiography-tag-input-container','[Amily2号-Ngms]\x20测试连接失败:','historiography_retention_count','push','amily2_mhb_','closest','247431ZnlZJx','10yPmuJg','start','[Amily2号-Ngms]\x20获取模型列表失败:','text','extensionSettings','amily2_ngms_tavern_profile','openai_test','historiographyIngestToRag','11582230KTRIFB','远征阈值必须是大于0的数字。已重置。','[Amily2号-Ngms工部]\x20正在绑定Ngms\x20API事件...','amily2_mhb_small_expedition_execute','remove','historiographySmallJailbreakPrompt','正在翻阅旧档...','\x0a\x20\x20\x20\x20\x20\x20\x20\x20此国史馆为空','log','amily2-expedition-state-change','historiographyWriteToLorebook','historiographyVectorizeSummary','historiography-tag-input','name','未发现任何国史馆','error','success','amily2_ngms_compatible_config','amily2_mhb_restore_archive','_restore_button','amily2_ngms_api_key','amily2_mhb_archive_selector','圣旨已达','加载失败','change','amily2_mhb_small_auto_enabled','historiographyTags','amily2_mhb_large_worldbook_selector','prop','[Amily2号-Ngms]\x20加载SillyTavern预设失败:','historiographyRetentionCount','none','amily2_ngms_model','innerHTML','宏史卷','comment','保留层数必须是大于或等于0的数字。已重置。','historiographyLargeRefinePrompt','small','内容排除规则已保存。','\x20个模型','_editor','trim','historiographySmallSummaryPrompt','body','amily2_vectorize_summary_content','#historiography-add-rule-btn','historiography-exclusion-rules-btn','menu_button\x20small_button\x20interactable\x20success','disabled','请先选择一个国史馆及其中的史册条目!','破限谕旨','historiography-tag-extraction-toggle','historiography_auto_summary_interactive',']\x20设置为\x20->','amily2_mhb_small_trigger_count','amily2_mhb_small_manual_execute','已恢复为默认谕旨,请点击“保存当前”以确认。','amily2_ngms_content','微言录','amily2_ngms_test_connection','click',']\x20的新状态已保存。','warning','\x20获取中','sillytavern_preset','--\x20加载中\x20--','historiographyExclusionRules','_save_button','12710FrZdHM','info','historiographyTagExtractionEnabled','.popup-button-cancel','amily2_ngms_fetch_models','api','amily2_mhb_large_refresh_worldbooks','running','amily2_ngms_api_mode','dispatchEvent','state','getElementById','defaultValue','checked','正在检阅史册...','\x20继续远征','value','style','amily2_mhb_large_refine_execute','_prompt_selector','appendChild','detail','historiographySmallAutoEnable','[Amily2-Ngms令]\x20收到指令:\x20将\x20[','amily2_ngms_preset_config','selectedIndex','335838ToGJKC','ngmsModel','amily2_mhb_archive_current','已保存!','ngmsApiMode','ngmsMaxTokens','61407hHgIzJ','ngmsTavernProfile','historiographyAutoSummaryInteractive','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{const _0x25c5a1=_0x36d8ce,_0x16ffc6=_0x46de4a[_0x25c5a1(0x137)];_0x16ffc6===_0x25c5a1(0xbb)?_0x3f42c6[_0x25c5a1(0x137)]=extension_settings[extensionName][_0x40d2dc]:_0x3f42c6['value']=extension_settings[extensionName][_0x5d2a3f];};_0x46de4a[_0x36d8ce(0x161)](_0x36d8ce(0xfa),_0x35f613),_0x4b1252[_0x36d8ce(0x161)](_0x36d8ce(0x11f),()=>{const _0x13227f=_0x36d8ce,_0x2e1062=_0x46de4a[_0x13227f(0x137)];_0x2e1062===_0x13227f(0xbb)?extension_settings[extensionName][_0x40d2dc]=_0x3f42c6[_0x13227f(0x137)]:extension_settings[extensionName][_0x5d2a3f]=_0x3f42c6['value'],saveSettings()&&toastr[_0x13227f(0xf2)]((_0x5d93af===_0x13227f(0x108)?'微言录':_0x13227f(0x104))+'的'+(_0x2e1062==='jailbreak'?_0x13227f(0x115):'纲要')+_0x13227f(0x144));}),_0xdd61bc['addEventListener'](_0x36d8ce(0x11f),()=>{const _0x26980e=_0x36d8ce,_0x1aee6f=_0x46de4a[_0x26980e(0x137)];_0x1aee6f===_0x26980e(0xbb)?_0x3f42c6[_0x26980e(0x137)]=defaultSettings[_0x40d2dc]:_0x3f42c6[_0x26980e(0x137)]=defaultSettings[_0x5d2a3f],toastr[_0x26980e(0x128)](_0x26980e(0x11b));}),_0x35f613();const _0x578bd1=document[_0x36d8ce(0x132)](_0x36d8ce(0xcf)+_0x5d93af+'_expand_editor');_0x578bd1['addEventListener'](_0x36d8ce(0x11f),()=>{const _0xe9535b=_0x36d8ce,_0x5c9d50=_0x46de4a[_0xe9535b(0x137)],_0xc43bd=_0x46de4a['options'][_0x46de4a[_0xe9535b(0x140)]][_0xe9535b(0xd5)],_0x56b90b=_0x3f42c6['value'],_0xa8ef58='\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'+_0xc43bd+'\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',_0xf2e50b=$(_0xa8ef58)['appendTo'](_0xe9535b(0x10e)),_0xbb3df3=_0xf2e50b[_0xe9535b(0xbd)](_0xe9535b(0xe8));_0xbb3df3[_0xe9535b(0x156)](_0x56b90b);const _0x41169c=()=>{const _0x506b70=_0xe9535b;_0xf2e50b[0x0][_0x506b70(0xe6)](),_0xf2e50b[_0x506b70(0xde)]();};_0xf2e50b[_0xe9535b(0xbd)](_0xe9535b(0x16b))['on'](_0xe9535b(0x11f),()=>{const _0x1aad73=_0xe9535b,_0x40684f=_0xbb3df3['val']();_0x3f42c6[_0x1aad73(0x137)]=_0x40684f,_0x5c9d50===_0x1aad73(0xbb)?extension_settings[extensionName][_0x40d2dc]=_0x40684f:extension_settings[extensionName][_0x5d2a3f]=_0x40684f,saveSettings()&&toastr['success']((_0x5d93af===_0x1aad73(0x108)?_0x1aad73(0x11d):_0x1aad73(0x104))+'的'+_0xc43bd+_0x1aad73(0x154)),_0x41169c();}),_0xf2e50b[_0xe9535b(0xbd)](_0xe9535b(0x12a))['on'](_0xe9535b(0x11f),_0x41169c),_0xf2e50b[0x0][_0xe9535b(0xe2)]();});}export function bindHistoriographyEvents(){const _0x10cc7e=_0x3c62;console['log'](_0x10cc7e(0x169)),setupPromptEditor(_0x10cc7e(0x108)),setupPromptEditor('large'),bindNgmsApiEvents();const _0x55c074=document[_0x10cc7e(0x132)](_0x10cc7e(0xe7)),_0x2e5c92=document[_0x10cc7e(0x132)]('amily2_mhb_small_end_floor'),_0x287dc9=document[_0x10cc7e(0x132)](_0x10cc7e(0x11a)),_0x51ca72=document[_0x10cc7e(0x132)](_0x10cc7e(0xfb)),_0x2200a3=document[_0x10cc7e(0x132)](_0x10cc7e(0x119)),_0x2b747f=document[_0x10cc7e(0x132)]('historiography_write_to_lorebook'),_0x3cab35=document[_0x10cc7e(0x132)]('historiography_ingest_to_rag');_0x287dc9[_0x10cc7e(0x161)](_0x10cc7e(0x11f),()=>{const _0x3dda42=_0x10cc7e,_0x28e2ce=parseInt(_0x55c074['value'],0xa),_0x2787e7=parseInt(_0x2e5c92[_0x3dda42(0x137)],0xa);if(isNaN(_0x28e2ce)||isNaN(_0x2787e7)||_0x28e2ce<=0x0||_0x2787e7<=0x0||_0x28e2ce>_0x2787e7){toastr['error']('请输入有效的起始和结束楼层!',_0x3dda42(0x153));return;}executeManualSummary(_0x28e2ce,_0x2787e7);}),_0x51ca72[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x39fa87=>{const _0x2a309f=_0x10cc7e;extension_settings[extensionName]['historiographySmallAutoEnable']=_0x39fa87[_0x2a309f(0xe5)][_0x2a309f(0x134)],saveSettings();}),_0x2200a3[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x592c8b=>{const _0x3066d7=_0x10cc7e,_0x414e36=parseInt(_0x592c8b[_0x3066d7(0xe5)][_0x3066d7(0x137)],0xa);if(isNaN(_0x414e36)||_0x414e36<0x1){_0x592c8b[_0x3066d7(0xe5)][_0x3066d7(0x137)]=defaultSettings[_0x3066d7(0xc5)],toastr[_0x3066d7(0x121)](_0x3066d7(0xdb),_0x3066d7(0x153));return;}extension_settings[extensionName][_0x3066d7(0xc5)]=_0x414e36,saveSettings();});const _0x5b6e62=document[_0x10cc7e(0x132)](_0x10cc7e(0xcd));_0x5b6e62['addEventListener'](_0x10cc7e(0xfa),_0x43f112=>{const _0x1c3a78=_0x10cc7e,_0x3c294a=parseInt(_0x43f112['target'][_0x1c3a78(0x137)],0xa);if(isNaN(_0x3c294a)||_0x3c294a<0x0){_0x43f112[_0x1c3a78(0xe5)][_0x1c3a78(0x137)]=defaultSettings[_0x1c3a78(0x100)],toastr[_0x1c3a78(0x121)](_0x1c3a78(0x106),'圣谕有误');return;}extension_settings[extensionName]['historiographyRetentionCount']=_0x3c294a,saveSettings();}),_0x2b747f[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x23b734=>{const _0x390794=_0x10cc7e;extension_settings[extensionName][_0x390794(0xec)]=_0x23b734[_0x390794(0xe5)][_0x390794(0x134)],saveSettings();}),_0x3cab35[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x45e0b=>{const _0x3ebea4=_0x10cc7e;extension_settings[extensionName]['historiographyIngestToRag']=_0x45e0b[_0x3ebea4(0xe5)]['checked'],saveSettings();}),_0x51ca72['checked']=extension_settings[extensionName][_0x10cc7e(0x13d)]??![],_0x2200a3[_0x10cc7e(0x137)]=extension_settings[extensionName][_0x10cc7e(0xc5)]??0x1e,_0x5b6e62[_0x10cc7e(0x137)]=extension_settings[extensionName][_0x10cc7e(0x100)]??0x5,_0x2b747f[_0x10cc7e(0x134)]=extension_settings[extensionName][_0x10cc7e(0xec)]??!![],_0x3cab35[_0x10cc7e(0x134)]=extension_settings[extensionName][_0x10cc7e(0xd9)]??![];const _0x337329=document[_0x10cc7e(0x132)](_0x10cc7e(0x117));_0x337329[_0x10cc7e(0x134)]=extension_settings[extensionName][_0x10cc7e(0x149)]??![],_0x337329['addEventListener']('change',_0x2f4b47=>{const _0x308fe5=_0x10cc7e;extension_settings[extensionName][_0x308fe5(0x149)]=_0x2f4b47[_0x308fe5(0xe5)]['checked'],saveSettings();});const _0x3b176b=document[_0x10cc7e(0x132)](_0x10cc7e(0x116)),_0x97688=document['getElementById'](_0x10cc7e(0xcb)),_0x3e4a73=document[_0x10cc7e(0x132)](_0x10cc7e(0xee)),_0x28079b=document[_0x10cc7e(0x132)](_0x10cc7e(0x111));_0x3b176b[_0x10cc7e(0x134)]=extension_settings[extensionName]['historiographyTagExtractionEnabled']??![],_0x3e4a73[_0x10cc7e(0x137)]=extension_settings[extensionName]['historiographyTags']??'',_0x97688[_0x10cc7e(0x138)][_0x10cc7e(0x166)]=_0x3b176b[_0x10cc7e(0x134)]?'block':'none',_0x3b176b[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x39d4f1=>{const _0x100687=_0x10cc7e,_0x23484c=_0x39d4f1[_0x100687(0xe5)][_0x100687(0x134)];extension_settings[extensionName][_0x100687(0x129)]=_0x23484c,_0x97688[_0x100687(0x138)]['display']=_0x23484c?_0x100687(0xca):_0x100687(0x101),saveSettings();}),_0x3e4a73[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x594751=>{const _0x3a1e01=_0x10cc7e;extension_settings[extensionName][_0x3a1e01(0xfc)]=_0x594751[_0x3a1e01(0xe5)][_0x3a1e01(0x137)],saveSettings();}),_0x28079b[_0x10cc7e(0x161)](_0x10cc7e(0x11f),showHistoriographyExclusionRulesModal);const _0x57993f=document[_0x10cc7e(0x132)](_0x10cc7e(0xdd)),_0x6e242c=_0x51939c=>{const _0x4de8a4=_0x10cc7e;_0x57993f[_0x4de8a4(0x167)][_0x4de8a4(0x131)]=_0x51939c;switch(_0x51939c){case'running':_0x57993f[_0x4de8a4(0x103)]='\x20停止远征',_0x57993f[_0x4de8a4(0x160)]='menu_button\x20small_button\x20interactable\x20danger';break;case'paused':_0x57993f[_0x4de8a4(0x103)]=_0x4de8a4(0x136),_0x57993f[_0x4de8a4(0x160)]=_0x4de8a4(0x112);break;case _0x4de8a4(0x168):default:_0x57993f['innerHTML']=_0x4de8a4(0x165),_0x57993f[_0x4de8a4(0x160)]='menu_button\x20small_button\x20interactable';break;}};document[_0x10cc7e(0x161)](_0x10cc7e(0xeb),_0x455465=>{const _0x40f908=_0x10cc7e,{isRunning:_0x1689be,manualStop:_0x286acd}=_0x455465[_0x40f908(0x13c)];if(_0x1689be)_0x6e242c(_0x40f908(0x12e));else _0x286acd?_0x6e242c('paused'):_0x6e242c(_0x40f908(0x168));}),_0x57993f[_0x10cc7e(0x161)](_0x10cc7e(0x11f),()=>{const _0x43cc16=_0x10cc7e,_0x3e57a6=_0x57993f['dataset'][_0x43cc16(0x131)]||'idle';_0x3e57a6==='running'?stopExpedition():executeExpedition();}),_0x6e242c(_0x10cc7e(0x168));const _0x17c9a1=document[_0x10cc7e(0x132)](_0x10cc7e(0x143)),_0xb9b59=document[_0x10cc7e(0x132)](_0x10cc7e(0xf7)),_0x475be3=document['getElementById']('amily2_mhb_refresh_archives'),_0x2ca2db=document['getElementById'](_0x10cc7e(0xf4)),_0x96d273=async()=>{const _0x7f2b73=_0x10cc7e;_0xb9b59[_0x7f2b73(0x103)]=_0x7f2b73(0xe0);const _0x4f614f=await getArchivedLedgers();_0xb9b59[_0x7f2b73(0x103)]='',_0x4f614f&&_0x4f614f[_0x7f2b73(0x14c)]>0x0?_0x4f614f[_0x7f2b73(0x15f)](_0x507862=>{const _0x5f8c7a=_0x7f2b73,_0x32fd42=document[_0x5f8c7a(0xbc)](_0x5f8c7a(0x16d));_0x32fd42[_0x5f8c7a(0x137)]=_0x507862[_0x5f8c7a(0x15e)],_0x32fd42[_0x5f8c7a(0xc7)]=_0x507862[_0x5f8c7a(0x105)],_0xb9b59[_0x5f8c7a(0x13b)](_0x32fd42);}):_0xb9b59[_0x7f2b73(0x103)]='未发现归档史册';};_0x17c9a1[_0x10cc7e(0x161)](_0x10cc7e(0x11f),async()=>{if(confirm('确定要归档当前的【对话流水总帐】并停用它吗?\x0a这将允许您开始一段全新的历史记录。')){const _0x14311c=await archiveCurrentLedger();_0x14311c&&_0x96d273();}}),_0x475be3['addEventListener'](_0x10cc7e(0x11f),_0x96d273),_0x2ca2db[_0x10cc7e(0x161)](_0x10cc7e(0x11f),async()=>{const _0x106ba3=_0x10cc7e,_0x39aaf2=_0xb9b59[_0x106ba3(0x137)];if(!_0x39aaf2){toastr['warning'](_0x106ba3(0x14f),_0x106ba3(0x163));return;}confirm('确定要回溯选中的史册吗?\x0a当前的活跃史册(如果有)将被自动归档。')&&(await restoreArchivedLedger(_0x39aaf2),_0x96d273());});const _0x204793=document[_0x10cc7e(0x132)](_0x10cc7e(0xfd)),_0x4bafaa=document['getElementById'](_0x10cc7e(0x157)),_0x30a212=document[_0x10cc7e(0x132)](_0x10cc7e(0x12d)),_0x1f3f8e=document[_0x10cc7e(0x132)]('amily2_mhb_large_refresh_lores'),_0x193aae=document[_0x10cc7e(0x132)](_0x10cc7e(0x139)),_0x17b71a=async()=>{const _0x365db4=_0x10cc7e;_0x204793[_0x365db4(0x103)]='正在遍览帝国疆域...';const _0x1582c6=await getAvailableWorldbooks();_0x204793[_0x365db4(0x103)]='',_0x1582c6&&_0x1582c6[_0x365db4(0x14c)]>0x0?(_0x1582c6[_0x365db4(0x15f)](_0x42115e=>{const _0x591f0f=_0x365db4,_0x448cbe=document[_0x591f0f(0xbc)](_0x591f0f(0x16d));_0x448cbe[_0x591f0f(0x137)]=_0x42115e,_0x448cbe[_0x591f0f(0xc7)]=_0x42115e,_0x204793[_0x591f0f(0x13b)](_0x448cbe);}),_0x204793[_0x365db4(0x130)](new Event(_0x365db4(0xfa)))):_0x204793[_0x365db4(0x103)]=_0x365db4(0xf0);},_0x8553d=async()=>{const _0xe10a2e=_0x10cc7e,_0x545bf5=_0x204793['value'];if(!_0x545bf5){_0x4bafaa['innerHTML']=_0xe10a2e(0xc6);return;}_0x4bafaa[_0xe10a2e(0x103)]=_0xe10a2e(0x135);const _0x57ee86=await getLoresForWorldbook(_0x545bf5);_0x4bafaa[_0xe10a2e(0x103)]='',_0x57ee86&&_0x57ee86[_0xe10a2e(0x14c)]>0x0?_0x57ee86['forEach'](_0x565142=>{const _0x286bf0=_0xe10a2e,_0x5e0da6=document['createElement'](_0x286bf0(0x16d));_0x5e0da6['value']=_0x565142[_0x286bf0(0x15e)],_0x5e0da6['textContent']='['+_0x565142['key']+']\x20'+_0x565142[_0x286bf0(0x105)],_0x4bafaa['appendChild'](_0x5e0da6);}):_0x4bafaa[_0xe10a2e(0x103)]=_0xe10a2e(0xe9);};_0x30a212[_0x10cc7e(0x161)](_0x10cc7e(0x11f),_0x17b71a),_0x204793[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x8553d),_0x1f3f8e['addEventListener'](_0x10cc7e(0x11f),_0x8553d),_0x193aae[_0x10cc7e(0x161)](_0x10cc7e(0x11f),()=>{const _0x3901f1=_0x10cc7e,_0x1e82f7=_0x204793['value'],_0x434138=_0x4bafaa[_0x3901f1(0x137)];if(!_0x1e82f7||!_0x434138){toastr['error'](_0x3901f1(0x114),_0x3901f1(0xc1));return;}executeRefinement(_0x1e82f7,_0x434138);});const _0x54ce9b=document[_0x10cc7e(0x132)](_0x10cc7e(0x10f));_0x54ce9b['checked']=extension_settings[extensionName][_0x10cc7e(0xed)]??![],_0x54ce9b[_0x10cc7e(0x161)](_0x10cc7e(0xfa),_0x863884=>{const _0x50f026=_0x10cc7e;extension_settings[extensionName][_0x50f026(0xed)]=_0x863884[_0x50f026(0xe5)]['checked'],saveSettings();});}function bindNgmsApiEvents(){const _0x94cd31=_0x3c62;console[_0x94cd31(0xea)](_0x94cd31(0xdc));const _0x464106=(_0x3b4622,_0xf96c73)=>{const _0x4bb96b=_0x94cd31;console['log'](_0x4bb96b(0x13e)+_0x3b4622+_0x4bb96b(0x118),_0xf96c73),!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][_0x3b4622]=_0xf96c73,saveSettings(),console['log'](_0x4bb96b(0x14e)+_0x3b4622+_0x4bb96b(0x120));},_0x5bf9cf=document[_0x94cd31(0x132)]('amily2_ngms_enabled'),_0x26703d=document['getElementById'](_0x94cd31(0x11c));_0x5bf9cf&&_0x26703d&&(_0x5bf9cf[_0x94cd31(0x134)]=extension_settings[extensionName][_0x94cd31(0xe4)]??![],_0x26703d[_0x94cd31(0x138)][_0x94cd31(0x166)]=_0x5bf9cf[_0x94cd31(0x134)]?_0x94cd31(0xca):_0x94cd31(0x101),_0x5bf9cf[_0x94cd31(0x161)](_0x94cd31(0xfa),function(){const _0x309bf5=_0x94cd31,_0x476aab=this[_0x309bf5(0x134)];_0x464106(_0x309bf5(0xe4),_0x476aab),_0x26703d[_0x309bf5(0x138)][_0x309bf5(0x166)]=_0x476aab?_0x309bf5(0xca):_0x309bf5(0x101);}));const _0x15072c=document[_0x94cd31(0x132)](_0x94cd31(0x12f)),_0x4d717a=document['getElementById'](_0x94cd31(0xf3)),_0x296456=document['getElementById'](_0x94cd31(0x13f));if(_0x15072c&&_0x4d717a&&_0x296456){_0x15072c['value']=extension_settings[extensionName]['ngmsApiMode']||_0x94cd31(0xd8);const _0x59f538=_0x24d4c6=>{const _0x337db6=_0x94cd31;_0x24d4c6===_0x337db6(0x123)?(_0x4d717a[_0x337db6(0x138)]['display']=_0x337db6(0x101),_0x296456['style']['display']=_0x337db6(0xca),loadNgmsTavernPresets()):(_0x4d717a['style'][_0x337db6(0x166)]='block',_0x296456[_0x337db6(0x138)][_0x337db6(0x166)]=_0x337db6(0x101));};_0x59f538(_0x15072c[_0x94cd31(0x137)]),_0x15072c['addEventListener']('change',function(){const _0x52b4a7=_0x94cd31;_0x464106(_0x52b4a7(0x145),this[_0x52b4a7(0x137)]),_0x59f538(this['value']);});}const _0x524eea=[{'id':'amily2_ngms_api_url','key':_0x94cd31(0xbe)},{'id':_0x94cd31(0xf6),'key':_0x94cd31(0x15c)},{'id':_0x94cd31(0x102),'key':'ngmsModel'}];_0x524eea[_0x94cd31(0x15f)](_0x320b80=>{const _0x2558e9=_0x94cd31,_0x38aa2c=document[_0x2558e9(0x132)](_0x320b80['id']);_0x38aa2c&&(_0x38aa2c['value']=extension_settings[extensionName][_0x320b80[_0x2558e9(0x15e)]]||'',_0x38aa2c['addEventListener'](_0x2558e9(0xfa),function(){const _0x4b192e=_0x2558e9;_0x464106(_0x320b80[_0x4b192e(0x15e)],this[_0x4b192e(0x137)]);}));});const _0xd26c3f=[{'id':_0x94cd31(0xc8),'key':_0x94cd31(0x146),'defaultValue':0xfa0},{'id':'amily2_ngms_temperature','key':_0x94cd31(0xe3),'defaultValue':0.7}];_0xd26c3f[_0x94cd31(0x15f)](_0x46d795=>{const _0x1b2d43=_0x94cd31,_0x26e31c=document['getElementById'](_0x46d795['id']),_0x35612d=document[_0x1b2d43(0x132)](_0x46d795['id']+_0x1b2d43(0x155));if(_0x26e31c&&_0x35612d){const _0x27f465=extension_settings[extensionName][_0x46d795['key']]||_0x46d795[_0x1b2d43(0x133)];_0x26e31c['value']=_0x27f465,_0x35612d[_0x1b2d43(0xc7)]=_0x27f465,_0x26e31c[_0x1b2d43(0x161)]('input',function(){const _0x5eb682=_0x1b2d43,_0x4d1dad=parseFloat(this[_0x5eb682(0x137)]);_0x35612d['textContent']=_0x4d1dad,_0x464106(_0x46d795['key'],_0x4d1dad);});}});const _0x6efb7c=document[_0x94cd31(0x132)](_0x94cd31(0xd7));_0x6efb7c&&(_0x6efb7c[_0x94cd31(0x137)]=extension_settings[extensionName][_0x94cd31(0x148)]||'',_0x6efb7c['addEventListener'](_0x94cd31(0xfa),function(){const _0x42a9ec=_0x94cd31;_0x464106(_0x42a9ec(0x148),this[_0x42a9ec(0x137)]);}));const _0xff00d=document['getElementById'](_0x94cd31(0x11e));_0xff00d&&_0xff00d[_0x94cd31(0x161)]('click',async function(){const _0x414e80=_0x94cd31,_0x43737f=$(this),_0xe3b759=_0x43737f[_0x414e80(0x151)]();_0x43737f[_0x414e80(0xfe)](_0x414e80(0x113),!![])[_0x414e80(0x151)](_0x414e80(0x16a));try{await testNgmsApiConnection();}catch(_0x7ea21b){console['error'](_0x414e80(0xcc),_0x7ea21b);}finally{_0x43737f['prop'](_0x414e80(0x113),![])[_0x414e80(0x151)](_0xe3b759);}});const _0x4475c9=document[_0x94cd31(0x132)](_0x94cd31(0x12b)),_0x11009e=document['getElementById'](_0x94cd31(0x164)),_0x574134=document[_0x94cd31(0x132)](_0x94cd31(0x102));_0x4475c9&&_0x11009e&&_0x574134&&_0x4475c9['addEventListener'](_0x94cd31(0x11f),async function(){const _0x7b6bf3=_0x94cd31,_0x361838=$(this),_0x2cb194=_0x361838[_0x7b6bf3(0x151)]();_0x361838[_0x7b6bf3(0xfe)]('disabled',!![])[_0x7b6bf3(0x151)](_0x7b6bf3(0x122));try{const _0x1687b9=await fetchNgmsModels();_0x1687b9&&_0x1687b9[_0x7b6bf3(0x14c)]>0x0?(_0x11009e[_0x7b6bf3(0x103)]='--\x20请选择模型\x20--',_0x1687b9[_0x7b6bf3(0x15f)](_0x58f5e2=>{const _0x4008f0=_0x7b6bf3,_0x12e5f0=document[_0x4008f0(0xbc)](_0x4008f0(0x16d));_0x12e5f0[_0x4008f0(0x137)]=_0x58f5e2['id']||_0x58f5e2['name']||_0x58f5e2,_0x12e5f0[_0x4008f0(0xc7)]=_0x58f5e2[_0x4008f0(0xef)]||_0x58f5e2['id']||_0x58f5e2,_0x11009e[_0x4008f0(0x13b)](_0x12e5f0);}),_0x11009e[_0x7b6bf3(0x138)]['display']=_0x7b6bf3(0xca),_0x574134[_0x7b6bf3(0x138)][_0x7b6bf3(0x166)]=_0x7b6bf3(0x101),_0x11009e[_0x7b6bf3(0x161)](_0x7b6bf3(0xfa),function(){const _0x4ec4fa=_0x7b6bf3,_0x369bbc=this[_0x4ec4fa(0x137)];_0x574134['value']=_0x369bbc,_0x464106(_0x4ec4fa(0x142),_0x369bbc),console[_0x4ec4fa(0xea)](_0x4ec4fa(0x15d)+_0x369bbc);}),toastr['success'](_0x7b6bf3(0x15b)+_0x1687b9['length']+_0x7b6bf3(0x10a),'Ngms\x20模型获取')):toastr[_0x7b6bf3(0x121)]('未获取到任何模型',_0x7b6bf3(0xbf));}catch(_0x2e0cab){console[_0x7b6bf3(0xf1)](_0x7b6bf3(0xd4),_0x2e0cab),toastr[_0x7b6bf3(0xf1)](_0x7b6bf3(0x159)+_0x2e0cab['message'],_0x7b6bf3(0xbf));}finally{_0x361838['prop'](_0x7b6bf3(0x113),![])[_0x7b6bf3(0x151)](_0x2cb194);}});}async function loadNgmsTavernPresets(){const _0x5d0b4f=_0x3c62,_0x114d0c=document[_0x5d0b4f(0x132)]('amily2_ngms_tavern_profile');if(!_0x114d0c)return;const _0x366c43=_0x114d0c[_0x5d0b4f(0x137)];_0x114d0c[_0x5d0b4f(0x103)]=_0x5d0b4f(0x124);try{const _0x50b3f6=getContext(),_0xea1458=_0x50b3f6[_0x5d0b4f(0xd6)]?.['connectionManager']?.['profiles']||[];_0x114d0c[_0x5d0b4f(0x103)]='--\x20请选择预设\x20--',_0xea1458[_0x5d0b4f(0x14c)]>0x0?_0xea1458[_0x5d0b4f(0x15f)](_0x72fc00=>{const _0x34ac7e=_0x5d0b4f;if(_0x72fc00[_0x34ac7e(0x12c)]&&_0x72fc00[_0x34ac7e(0x14d)]){const _0x3301d0=document['createElement'](_0x34ac7e(0x16d));_0x3301d0[_0x34ac7e(0x137)]=_0x72fc00['id'],_0x3301d0[_0x34ac7e(0xc7)]=_0x72fc00[_0x34ac7e(0xef)]||_0x72fc00['id'],_0x72fc00['id']===_0x366c43&&(_0x3301d0[_0x34ac7e(0x152)]=!![]),_0x114d0c[_0x34ac7e(0x13b)](_0x3301d0);}}):_0x114d0c[_0x5d0b4f(0x103)]='未找到可用预设';}catch(_0x259847){console[_0x5d0b4f(0xf1)](_0x5d0b4f(0xff),_0x259847),_0x114d0c[_0x5d0b4f(0x103)]=_0x5d0b4f(0xf9);}}function showHistoriographyExclusionRulesModal(){const _0x454641=_0x3c62,_0x2ce1ce=extension_settings[extensionName][_0x454641(0x125)]||[],_0x4c9eb3=(_0x1f7afd={'start':'','end':''},_0x15143f)=>_0x454641(0xe1)+_0x15143f+_0x454641(0x14a)+_0x1f7afd[_0x454641(0xd3)]+'\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',_0x40200e=_0x2ce1ce[_0x454641(0x14b)](_0x4c9eb3)['join'](''),_0x381b69=_0x454641(0x15a)+_0x40200e+'\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';showHtmlModal(_0x454641(0x16c),_0x381b69,{'okText':'保存规则','onOk':_0x4b524d=>{const _0x2baf07=_0x454641,_0x52e2c8=[];_0x4b524d['find']('.hly-exclusion-rule-row')['each'](function(){const _0x2734b9=_0x3c62,_0x140cd5=$(this)[_0x2734b9(0xbd)](_0x2734b9(0x150))['eq'](0x0)['val']()[_0x2734b9(0x10c)](),_0x8f0f26=$(this)[_0x2734b9(0xbd)](_0x2734b9(0x150))['eq'](0x1)[_0x2734b9(0x156)]()[_0x2734b9(0x10c)]();_0x140cd5&&_0x8f0f26&&_0x52e2c8[_0x2734b9(0xce)]({'start':_0x140cd5,'end':_0x8f0f26});}),extension_settings[extensionName][_0x2baf07(0x125)]=_0x52e2c8,saveSettings(),toastr[_0x2baf07(0xf2)](_0x2baf07(0x109),_0x2baf07(0xf8));},'onShow':_0x3af03e=>{const _0x51da14=_0x454641,_0x3a964e=_0x3af03e[_0x51da14(0xbd)]('#historiography-rules-list');_0x3af03e[_0x51da14(0xbd)](_0x51da14(0x110))['on'](_0x51da14(0x11f),()=>{const _0x57f05c=_0x51da14,_0x3e0464=_0x3a964e['children']()['length'],_0x5ad8c0=_0x4c9eb3({'start':'','end':''},_0x3e0464);_0x3a964e[_0x57f05c(0x158)](_0x5ad8c0);}),_0x3a964e['on'](_0x51da14(0x11f),_0x51da14(0xc9),function(){const _0x1976cb=_0x51da14;$(this)[_0x1976cb(0xd0)](_0x1976cb(0x162))['remove']();});}});} +const _0x15063a=_0x1493;(function(_0x34aeee,_0x57ca71){const _0xd13f55=_0x1493,_0x5679d6=_0x34aeee();while(!![]){try{const _0x1bcd02=-parseInt(_0xd13f55(0x179))/0x1*(parseInt(_0xd13f55(0x1e5))/0x2)+-parseInt(_0xd13f55(0x27c))/0x3+parseInt(_0xd13f55(0x320))/0x4*(parseInt(_0xd13f55(0x23b))/0x5)+parseInt(_0xd13f55(0x28d))/0x6+parseInt(_0xd13f55(0x2a0))/0x7*(parseInt(_0xd13f55(0x325))/0x8)+parseInt(_0xd13f55(0x307))/0x9+-parseInt(_0xd13f55(0x276))/0xa;if(_0x1bcd02===_0x57ca71)break;else _0x5679d6['push'](_0x5679d6['shift']());}catch(_0x4b1d3d){_0x5679d6['push'](_0x5679d6['shift']());}}}(_0x4662,0x4d9d8));import{getContext}from'/scripts/extensions.js';import*as _0x4b5037 from'../core/rag-processor.js';import*as _0x337832 from'../core/historiographer.js';import*as _0x535b3f from'../core/utils/context-utils.js';import*as _0x405f63 from'../core/ingestion-manager.js';import{showContentModal,showHtmlModal}from'./page-window.js';import{extractBlocksByTags,applyExclusionRules}from'../core/utils/rag-tag-extractor.js';import{filterWorldbooks,filterWorldbookEntries,highlightSearchMatch,debounce}from'../core/rag-processor.js';_0x15063a(0x235);function setupGlobalEventHandlers(){const _0x6c22d1=_0x15063a;window[_0x6c22d1(0x196)]=()=>saveSettingsFromUI(![]),window[_0x6c22d1(0x1dd)]=resetSettingsToUI,window[_0x6c22d1(0x25d)]=testApi,window['fetchHLYEmbeddingModels']=fetchHLYEmbeddingModels,window['fetchHLYRerankModels']=fetchHLYRerankModels,window['updateHLYMemoryCount']=updatePanelStatus,window[_0x6c22d1(0x1ea)]=purgeStorage,window[_0x6c22d1(0x20c)]=startCondensation,window[_0x6c22d1(0x2f8)]=previewCondensation,window[_0x6c22d1(0x30e)]=ingestManualText,window[_0x6c22d1(0x18e)]=log,window[_0x6c22d1(0x223)]=showStats,window['startHLYHistoriography']=startHistoriography;}function updateAndSaveSetting(_0x1b4d0d,_0x6b43af){const _0x32e269=_0x15063a,_0x57337f=_0x4b5037['getSettings']();if(!_0x57337f)return;const _0x169b53=_0x1b4d0d['split']('.');let _0x1fc950=_0x57337f;for(let _0x323e66=0x0;_0x323e66<_0x169b53[_0x32e269(0x30f)]-0x1;_0x323e66++){_0x1fc950=_0x1fc950[_0x169b53[_0x323e66]]=_0x1fc950[_0x169b53[_0x323e66]]||{};}_0x1fc950[_0x169b53[_0x169b53[_0x32e269(0x30f)]-0x1]]=_0x6b43af,_0x4b5037[_0x32e269(0x347)](),log('[自动保存]\x20设置项\x20\x27'+_0x1b4d0d+_0x32e269(0x168)+JSON[_0x32e269(0x187)](_0x6b43af),_0x32e269(0x336));}function bindAutoSaveEvents(){const _0x2dceed=_0x15063a,_0x41bfbe=document[_0x2dceed(0x220)](_0x2dceed(0x1cf));if(!_0x41bfbe)return;_0x41bfbe['addEventListener'](_0x2dceed(0x1c5),_0xd4f9f0=>{const _0x121712=_0x2dceed,_0x4d06bd=_0xd4f9f0[_0x121712(0x2a7)],_0x5878ad=_0x4d06bd[_0x121712(0x193)][_0x121712(0x360)];if(!_0x5878ad)return;let _0x5374ad;const _0x33a129=_0x4d06bd[_0x121712(0x193)][_0x121712(0x2f3)]||'string';if(_0x4d06bd[_0x121712(0x2f3)]===_0x121712(0x353))_0x5374ad=_0x4d06bd[_0x121712(0x2d8)];else{if(_0x4d06bd[_0x121712(0x2f3)]===_0x121712(0x2b9)){if(_0x4d06bd['checked']){const _0x9e2027=_0x41bfbe[_0x121712(0x1f3)](_0x121712(0x2c9)+_0x4d06bd[_0x121712(0x265)]+'\x22]'),_0x5c3e78=Array[_0x121712(0x173)](_0x9e2027)[_0x121712(0x210)](_0x214dff=>_0x214dff[_0x121712(0x2d8)]);_0x5374ad=_0x5c3e78[_0x121712(0x314)];}else return;}else _0x5374ad=_0x4d06bd['value'];}switch(_0x33a129){case _0x121712(0x190):_0x5374ad=parseInt(_0x5374ad,0xa);break;case _0x121712(0x340):_0x5374ad=parseFloat(_0x5374ad);break;case _0x121712(0x1f4):typeof _0x5374ad!==_0x121712(0x1f4)&&(_0x5374ad=_0x5374ad===_0x121712(0x275));break;}if(_0x4d06bd[_0x121712(0x2f3)]===_0x121712(0x2b9)&&!_0x4d06bd['checked'])return;updateAndSaveSetting(_0x5878ad,_0x5374ad),_0x5878ad==='retrieval.independentChatMemoryEnabled'&&updatePanelStatus();});}export function bindHanlinyuanEvents(){const _0x513356=_0x15063a,_0x49ddcc=getContext();if(!_0x49ddcc){console[_0x513356(0x2f5)](_0x513356(0x2e9));return;}setupGlobalEventHandlers(),bindPanelToggleEvents(),bindInternalUIEvents(),bindTutorialEvents(),bindAutoSaveEvents(),bindSessionLockEvent(),initializeUnifiedInjectionEditor();if(_0x4b5037[_0x513356(0x2c0)])_0x4b5037['initialize']();else{console[_0x513356(0x2f5)]('[翰林院-枢纽]\x20核心法典未能提供初始化圣旨!');return;}loadSettingsToUI(),loadWorldbookList(),log(_0x513356(0x35a),'info');const _0x4dce75=document[_0x513356(0x220)](_0x513356(0x1b7)),_0x3111b5=document[_0x513356(0x220)](_0x513356(0x1cd)),_0x131295=document[_0x513356(0x220)](_0x513356(0x2e2)),_0x37f902=document[_0x513356(0x220)](_0x513356(0x2b6)),_0x204cbe=document[_0x513356(0x220)](_0x513356(0x234)),_0x17069e=document[_0x513356(0x220)]('hanlinyuan-ingest-progress-bar'),_0xcbbbbe=document['getElementById'](_0x513356(0x37b)),_0x20c66e=document[_0x513356(0x220)](_0x513356(0x212));let _0x30c9ae=null,_0x58fa0e=null;_0x4dce75['addEventListener'](_0x513356(0x1c5),_0x3ecb7f=>{const _0x190dab=_0x513356;_0x30c9ae=_0x3ecb7f['target'][_0x190dab(0x1bd)][0x0],_0x30c9ae?(_0x3111b5['textContent']=_0x30c9ae[_0x190dab(0x265)],_0x3111b5['title']=_0x30c9ae['name']):_0x3111b5[_0x190dab(0x17b)]=_0x190dab(0x2cf);}),_0x131295['addEventListener']('click',async()=>{const _0x540cec=_0x513356;if(!_0x30c9ae){toastr[_0x540cec(0x181)](_0x540cec(0x24d));return;}let _0x52461f=0x0;const _0x17d79a=_0x405f63['generateJobId'](_0x30c9ae),_0x42b33f=_0x405f63[_0x540cec(0x249)](_0x17d79a);if(_0x42b33f){const _0x2dfce5=(_0x42b33f['processedChunks']/_0x42b33f[_0x540cec(0x1d9)]*0x64)[_0x540cec(0x22e)](0x1),_0x559a2e=confirm(_0x540cec(0x31e)+_0x2dfce5+'%。是否从上次中断之处继续?');_0x559a2e?(_0x52461f=_0x42b33f[_0x540cec(0x24c)],toastr[_0x540cec(0x1d7)](_0x540cec(0x2ef)+(_0x52461f+0x1)+_0x540cec(0x35d),'圣旨已达'),log('[断点续传]\x20用户选择继续任务\x20'+_0x17d79a+_0x540cec(0x301)+_0x52461f+_0x540cec(0x2dc),_0x540cec(0x1d7))):(_0x405f63[_0x540cec(0x1a7)](_0x17d79a),toastr[_0x540cec(0x1d7)](_0x540cec(0x17f),_0x540cec(0x369)),log('[断点续传]\x20用户选择放弃旧任务\x20'+_0x17d79a+_0x540cec(0x18a),_0x540cec(0x195)));}_0x58fa0e=new AbortController();const _0x5ce50b=_0x58fa0e[_0x540cec(0x244)];_0x20c66e[_0x540cec(0x2f6)][_0x540cec(0x208)]='none',_0x204cbe[_0x540cec(0x2f6)][_0x540cec(0x208)]=_0x540cec(0x2b5),_0xcbbbbe[_0x540cec(0x17b)]=_0x540cec(0x32c),_0x17069e['value']=0x0;try{const _0x552cdb=await _0x30c9ae[_0x540cec(0x293)](),_0x989ca8=_0x6501=>{const _0x1b3530=_0x540cec;_0xcbbbbe[_0x1b3530(0x17b)]=_0x1b3530(0x32a)+_0x6501[_0x1b3530(0x2fd)]+'\x20('+_0x6501[_0x1b3530(0x248)]+'/'+_0x6501[_0x1b3530(0x1fc)]+')',_0x17069e[_0x1b3530(0x314)]=_0x6501[_0x1b3530(0x248)]/_0x6501['total']*0x64;},_0x54d4f0=()=>{const _0x149147=_0x540cec;updatePanelStatus(),log('[实时刷新]\x20批次完成,忆识总数已更新。',_0x149147(0x1d7));},_0x6d1b44=await _0x4b5037[_0x540cec(0x344)](_0x552cdb,_0x540cec(0x21e),{'sourceName':_0x30c9ae[_0x540cec(0x265)]},_0x989ca8,_0x5ce50b,log,_0x54d4f0,_0x17d79a,_0x52461f);if(_0x6d1b44[_0x540cec(0x336)])toastr['success'](_0x540cec(0x27f)+_0x6d1b44[_0x540cec(0x310)]+'\x20个知识块'),_0xcbbbbe[_0x540cec(0x17b)]=_0x540cec(0x183)+_0x6d1b44[_0x540cec(0x310)]+_0x540cec(0x171),_0x17069e[_0x540cec(0x314)]=0x64,updatePanelStatus();else throw new Error(_0x6d1b44[_0x540cec(0x2f5)]||_0x540cec(0x297));}catch(_0x60a7ad){_0x60a7ad['name']==='AbortError'?(toastr['info']('任务已由用户中止。进度已保存,可随时继续。'),_0xcbbbbe[_0x540cec(0x17b)]=_0x540cec(0x1fb)):(toastr['error']('录入失败:\x20'+_0x60a7ad[_0x540cec(0x2fd)]+_0x540cec(0x206)),_0xcbbbbe[_0x540cec(0x17b)]='错误:\x20'+_0x60a7ad[_0x540cec(0x2fd)]);}finally{setTimeout(()=>{const _0x132dc5=_0x540cec;_0x20c66e['style'][_0x132dc5(0x208)]=_0x132dc5(0x26f),_0x204cbe['style'][_0x132dc5(0x208)]=_0x132dc5(0x222),_0x4dce75[_0x132dc5(0x314)]='',_0x30c9ae=null,_0x3111b5[_0x132dc5(0x17b)]=_0x132dc5(0x2cf);},0xbb8);}}),_0x37f902['addEventListener'](_0x513356(0x1c6),()=>{const _0x1037da=_0x513356;_0x58fa0e&&_0x58fa0e[_0x1037da(0x20d)]();});}function bindSessionLockEvent(){const _0x38511b=_0x15063a,_0x1cb385=document[_0x38511b(0x220)]('hly-session-lock-btn');if(!_0x1cb385)return;_0x1cb385[_0x38511b(0x23f)]('click',async()=>{const _0x99a514=_0x38511b,_0x4f7f05=await _0x4b5037[_0x99a514(0x1d8)]();updateSessionLockUI(_0x4f7f05);if(_0x4f7f05){const _0x1f77b6=_0x4b5037['getLockedSessionInfo']();_0x1f77b6&&(toastr['success'](_0x99a514(0x292)+_0x1f77b6['id'],_0x99a514(0x26d)),log(_0x99a514(0x1b9)+_0x1f77b6['id'],'success'));}else toastr['info'](_0x99a514(0x1f1),'诏曰'),log('会话已解锁。',_0x99a514(0x1d7));updatePanelStatus();}),updateSessionLockUI(_0x4b5037[_0x38511b(0x2d7)]());}function updateSessionLockUI(_0x57406e){const _0x2e044a=_0x15063a,_0x2c65ee=document[_0x2e044a(0x220)](_0x2e044a(0x263));if(!_0x2c65ee)return;const _0x8248eb=_0x2c65ee[_0x2e044a(0x267)]('i'),_0x1715b5=_0x2c65ee[_0x2e044a(0x267)](_0x2e044a(0x191));_0x57406e?(_0x2c65ee[_0x2e044a(0x29e)][_0x2e044a(0x1ca)](_0x2e044a(0x229)),_0x8248eb[_0x2e044a(0x366)]='fas\x20fa-lock',_0x1715b5[_0x2e044a(0x17b)]=_0x2e044a(0x2be),_0x2c65ee['title']=_0x2e044a(0x2b8)):(_0x2c65ee[_0x2e044a(0x29e)][_0x2e044a(0x371)]('active'),_0x8248eb[_0x2e044a(0x366)]=_0x2e044a(0x277),_0x1715b5[_0x2e044a(0x17b)]=_0x2e044a(0x2cc),_0x2c65ee['title']=_0x2e044a(0x377));}function bindPanelToggleEvents(){const _0x498667=_0x15063a,_0x1cd151=document['getElementById'](_0x498667(0x1e4));if(_0x1cd151){}}function bindTutorialEvents(){const _0x4fb183=_0x15063a,_0x3bbf24=document[_0x4fb183(0x220)](_0x4fb183(0x271));_0x3bbf24&&_0x3bbf24['addEventListener']('click',()=>{const _0x398ab1=_0x4fb183;showContentModal(_0x398ab1(0x28e),'scripts/extensions/third-party/ST-Amily2-Chat-Optimisation/HanLin.md');});}function bindInternalUIEvents(){const _0x5e6894=_0x15063a,_0x14e4a3=document[_0x5e6894(0x1f3)](_0x5e6894(0x170));_0x14e4a3[_0x5e6894(0x19b)](_0x570d60=>{const _0x1da4d6=_0x5e6894;_0x570d60[_0x1da4d6(0x23f)](_0x1da4d6(0x1c6),()=>{const _0x18f995=_0x1da4d6,_0x1efcb3=_0x570d60[_0x18f995(0x193)][_0x18f995(0x16b)],_0xff5b4b=_0x18f995(0x355)+_0x1efcb3+'-tab';document['querySelectorAll'](_0x18f995(0x376))[_0x18f995(0x19b)](_0x55ac83=>{const _0x5da533=_0x18f995;_0x55ac83['classList']['toggle'](_0x5da533(0x229),_0x55ac83['id']===_0xff5b4b);}),_0x14e4a3[_0x18f995(0x19b)](_0xbb3f45=>_0xbb3f45['classList'][_0x18f995(0x207)](_0x18f995(0x229),_0xbb3f45===_0x570d60));});});const _0x5b2642=document[_0x5e6894(0x220)](_0x5e6894(0x339));_0x5b2642&&_0x5b2642[_0x5e6894(0x23f)](_0x5e6894(0x1c5),handleApiModeChange);const _0x3c631f=document[_0x5e6894(0x220)](_0x5e6894(0x2e5)),_0x29ed01=document['getElementById'](_0x5e6894(0x22f));_0x3c631f&&_0x29ed01&&_0x3c631f['addEventListener'](_0x5e6894(0x1c5),()=>{const _0x4da4ed=_0x5e6894;_0x29ed01[_0x4da4ed(0x2f6)][_0x4da4ed(0x208)]=_0x3c631f[_0x4da4ed(0x2d8)]?_0x4da4ed(0x2b5):_0x4da4ed(0x222);});const _0x21dcd3=document[_0x5e6894(0x220)]('hly-hist-select-library');_0x21dcd3&&_0x21dcd3['addEventListener'](_0x5e6894(0x1c5),handleWorldbookSelectionChange);const _0x5f357f=document[_0x5e6894(0x220)](_0x5e6894(0x266));_0x5f357f&&_0x5f357f[_0x5e6894(0x23f)]('click',()=>showRulesModal('condensation'));const _0x78e230=document[_0x5e6894(0x220)]('hly-query-preprocessing-rules-btn');_0x78e230&&_0x78e230[_0x5e6894(0x23f)](_0x5e6894(0x1c6),()=>showRulesModal(_0x5e6894(0x2d4)));const _0x520da4=document[_0x5e6894(0x220)]('hly-hist-entry-multiselect-btn'),_0x5032f3=document['getElementById']('hly-hist-entry-multiselect-options');_0x520da4&&_0x5032f3&&(_0x520da4['addEventListener'](_0x5e6894(0x1c6),_0xb24f2c=>{const _0xfbaafd=_0x5e6894;_0xb24f2c[_0xfbaafd(0x316)]();const _0x265df2=_0x5032f3[_0xfbaafd(0x2f6)][_0xfbaafd(0x208)]===_0xfbaafd(0x2b5);_0x5032f3[_0xfbaafd(0x2f6)][_0xfbaafd(0x208)]=_0x265df2?_0xfbaafd(0x222):'block';}),_0x5032f3[_0x5e6894(0x23f)](_0x5e6894(0x1c5),_0xaf842d=>{const _0x6a1fdd=_0x5e6894,_0x2c7851=_0xaf842d['target'];if(_0x2c7851['type']!==_0x6a1fdd(0x353))return;const _0x2541b3=_0x5032f3[_0x6a1fdd(0x1f3)]('.hly-hist-entry-checkbox'),_0x4accaf=document[_0x6a1fdd(0x220)](_0x6a1fdd(0x237));if(_0x2c7851['id']===_0x6a1fdd(0x237))_0x2541b3[_0x6a1fdd(0x19b)](_0x2dbd15=>_0x2dbd15['checked']=_0x2c7851[_0x6a1fdd(0x2d8)]);else{const _0x5578f6=Array['from'](_0x2541b3)[_0x6a1fdd(0x29b)](_0x10dffa=>_0x10dffa[_0x6a1fdd(0x2d8)]);_0x4accaf['checked']=_0x5578f6;}const _0xa74060=_0x5032f3[_0x6a1fdd(0x1f3)](_0x6a1fdd(0x28b))[_0x6a1fdd(0x30f)],_0x4fa187=_0x2541b3['length'];_0x520da4[_0x6a1fdd(0x267)]('span')['textContent']='已选择\x20'+_0xa74060+_0x6a1fdd(0x16e)+_0x4fa187+_0x6a1fdd(0x36c);}),document[_0x5e6894(0x23f)]('click',_0xf7f376=>{const _0x52de9e=_0x5e6894;!_0x520da4[_0x52de9e(0x312)](_0xf7f376['target'])&&!_0x5032f3[_0x52de9e(0x312)](_0xf7f376['target'])&&(_0x5032f3[_0x52de9e(0x2f6)]['display']=_0x52de9e(0x222));}));const _0x5b7e35=document[_0x5e6894(0x220)](_0x5e6894(0x250));_0x5b7e35&&_0x5b7e35[_0x5e6894(0x23f)](_0x5e6894(0x1c6),deleteAllLocalKnowledgeBases);const _0x10fb46=document[_0x5e6894(0x220)](_0x5e6894(0x2c8));_0x10fb46&&_0x10fb46['addEventListener'](_0x5e6894(0x1c6),()=>moveAllKnowledgeBases(_0x5e6894(0x17a)));const _0x119b1a=document[_0x5e6894(0x220)](_0x5e6894(0x270));_0x119b1a&&_0x119b1a[_0x5e6894(0x23f)]('click',()=>moveAllKnowledgeBases(_0x5e6894(0x2ff)));const _0x297877=['hly-kb-list-local','hly-kb-list-global'];_0x297877[_0x5e6894(0x19b)](_0x4ca3f5=>{const _0x1584f6=_0x5e6894,_0x21d63b=document[_0x1584f6(0x220)](_0x4ca3f5);_0x21d63b&&(_0x21d63b[_0x1584f6(0x23f)]('click',handleKbAction),_0x21d63b['addEventListener']('change',handleKbAction));}),document['getElementById'](_0x5e6894(0x34b))[_0x5e6894(0x23f)](_0x5e6894(0x1c5),_0x432233=>handleSelectAll(_0x432233,_0x5e6894(0x285))),document[_0x5e6894(0x220)](_0x5e6894(0x330))[_0x5e6894(0x23f)](_0x5e6894(0x1c5),_0x1b54e7=>handleSelectAll(_0x1b54e7,'local')),document[_0x5e6894(0x220)](_0x5e6894(0x321))[_0x5e6894(0x23f)](_0x5e6894(0x1c6),_0x402faf=>handleBulkAction(_0x402faf,_0x5e6894(0x285))),document['getElementById'](_0x5e6894(0x33f))[_0x5e6894(0x23f)]('click',_0x45270a=>handleBulkAction(_0x45270a,_0x5e6894(0x251)));}function initializeUnifiedInjectionEditor(){const _0xebe17d=_0x15063a,_0x1233f0=document[_0xebe17d(0x220)]('hly-injection-source-selector'),_0x3ec990=document[_0xebe17d(0x220)]('hly-unified-template-editor'),_0xac1592=document[_0xebe17d(0x220)](_0xebe17d(0x2ee)),_0x5cacca=document[_0xebe17d(0x1f3)]('input[name=\x22hly-unified-injection-position\x22]'),_0x27e5ce=document[_0xebe17d(0x220)](_0xebe17d(0x1ef)),_0x2286e0=document[_0xebe17d(0x220)](_0xebe17d(0x2a5));if(!_0x1233f0)return;const _0x26fd34={'novel':'{{novel_text}}','chat':_0xebe17d(0x203),'lorebook':_0xebe17d(0x1b1),'manual':_0xebe17d(0x2ce)};function _0x3f2b38(){const _0x17c3aa=_0xebe17d,_0x36de2b=_0x1233f0[_0x17c3aa(0x314)],_0x460ea5=_0x4b5037[_0x17c3aa(0x2d1)](),_0x527f6d=_0x460ea5[_0x17c3aa(0x1aa)+_0x36de2b]||{};_0x3ec990[_0x17c3aa(0x314)]=_0x527f6d[_0x17c3aa(0x338)]||'',_0xac1592['textContent']='以\x20'+(_0x26fd34[_0x36de2b]||_0x17c3aa(0x2c4))+_0x17c3aa(0x1ba);const _0x4397bb=_0x527f6d[_0x17c3aa(0x202)]!==undefined?String(_0x527f6d[_0x17c3aa(0x202)]):'2';_0x5cacca[_0x17c3aa(0x19b)](_0x28a5d1=>_0x28a5d1['checked']=_0x28a5d1[_0x17c3aa(0x314)]===_0x4397bb),_0x27e5ce[_0x17c3aa(0x314)]=_0x527f6d['depth']||0x0,_0x2286e0[_0x17c3aa(0x314)]=_0x527f6d[_0x17c3aa(0x37f)]!==undefined?String(_0x527f6d[_0x17c3aa(0x37f)]):'0';const _0x22bac3=_0x4397bb==='1';_0x27e5ce[_0x17c3aa(0x2a6)]=!_0x22bac3,_0x2286e0['disabled']=!_0x22bac3;}function _0x2a9ed8(){const _0xe7fcbc=_0xebe17d,_0x2e8e18=_0x1233f0['value'];updateAndSaveSetting(_0xe7fcbc(0x1aa)+_0x2e8e18+_0xe7fcbc(0x31c),_0x3ec990[_0xe7fcbc(0x314)]);const _0x197749=document[_0xe7fcbc(0x267)](_0xe7fcbc(0x317));_0x197749&&updateAndSaveSetting(_0xe7fcbc(0x1aa)+_0x2e8e18+_0xe7fcbc(0x2e8),parseInt(_0x197749[_0xe7fcbc(0x314)],0xa)),updateAndSaveSetting(_0xe7fcbc(0x1aa)+_0x2e8e18+'.depth',parseInt(_0x27e5ce[_0xe7fcbc(0x314)],0xa)),updateAndSaveSetting(_0xe7fcbc(0x1aa)+_0x2e8e18+'.depth_role',parseInt(_0x2286e0[_0xe7fcbc(0x314)],0xa));}_0x1233f0[_0xebe17d(0x23f)](_0xebe17d(0x1c5),_0x3f2b38);const _0x14bbde=debounce(_0x2a9ed8,0x12c);_0x3ec990[_0xebe17d(0x23f)]('input',_0x14bbde),_0x27e5ce[_0xebe17d(0x23f)](_0xebe17d(0x1c5),_0x2a9ed8),_0x2286e0[_0xebe17d(0x23f)](_0xebe17d(0x1c5),_0x2a9ed8),_0x5cacca['forEach'](_0x4d9d55=>_0x4d9d55[_0xebe17d(0x23f)]('change',()=>{const _0xd2d4ae=_0xebe17d;_0x2a9ed8();const _0x52d02f=_0x4d9d55['value']==='1'&&_0x4d9d55[_0xd2d4ae(0x2d8)];_0x27e5ce[_0xd2d4ae(0x2a6)]=!_0x52d02f,_0x2286e0[_0xd2d4ae(0x2a6)]=!_0x52d02f;})),_0x3f2b38();}function _0x4662(){const _0xb530e7=['\x20个知识库的启用状态吗?','position','{{chat_text}}','hly-kb-select-all-','\x20操作失败:\x20','。进度已保存,可稍后重试。','toggle','display','移动失败:\x20','local_proxy','log-error','startHLYCondensation','abort','翰林院设定已重置为初始状态。','\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\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\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\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\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','\x20个知识库。','active','请至少选择一个知识库进行操作。','》的批量编纂任务已完成。成功:\x20','通行令牌\x20(API\x20Key):','label','toFixed','hly-tag-input-container','hly-worldbook-search','所有\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','signal','queryMessageCount','\x20状态失败:\x20','closest','processed','loadProgress','createElement','appendChild','processedChunks','请先选择一个\x20.txt\x20文件','hly-current-character-name','hly-include-user','hly-kb-delete-local-btn','local','.count\x22]','未找到符合条件的消息可供凝识。','获取模型失败:\x20','.hly-kb-item-checkbox','','hly-match-threshold','成功删除了\x20','#hly-modal-tag-input-container','hly-kb-toggle','\x20个模型。','\x20个知识库从\x20','testHLYApi','getCollectionId','您确定要永久删除知识库【','[翰林院-枢纽]\x20手动录入过程发生错误:','condensation','翰林院设定已存档封印。','hly-session-lock-btn','\x20楼:\x20[','name','hly-exclusion-rules-btn','querySelector','.hly-kb-list-item','N/A','matchThreshold','\x20楼。

','renameKnowledgeBase','圣旨已下','includes','flex','hly-kb-move-all-to-global','amily2_open_hanlin_tutorial','\x20个知识库执行批量操作...','\x20个知识库吗?此操作无法恢复!','录入内容不能为空。','true','9657320kdzLaf','fas\x20fa-lock-open','\x20失败:\x20','\x20个Rerank模型。','准备对《','batchSize','324894jFmEVF','removeEventListener','data','成功录入\x20','lorebook','hly-log-entry\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\x20\x20\x20\x20在这里定义需要从提取内容中排除的文本片段。例如,排除HTML注释,可以设置开始字符串为\x20``。

\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','moveKnowledgeBase','开始对《','global','成功加载\x20','\x0a所用模型:\x20','independentChatMemoryEnabled','html','上次已从第\x20','.hly-hist-entry-checkbox:checked','hly-super-sort-enabled','2350428eAxUuY','翰林院使用教程','preventDefault','未能获取到任何模型。','user','会话已锁定到:\x20','text','hly-local-kb-char-name','此操作将彻底清空当前角色的所有忆识(向量),且无法恢复。您确定要继续吗?','\x22\x20title=\x22删除此条\x22>×\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','未知错误','批量编纂任务已开始...','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20正在获取...','您确定要将选中的\x20','[翰林院-枢纽]\x20渲染知识库列表失败:','hly-embedding-model','解锁会话','hly-rerank-enabled','initialize','成功移动了\x20','未能获取到任何Rerank模型。','hly-log-output','{{text}}','本地代理地址:','mes','清空宝库失败。','hly-kb-move-all-to-local','input[name=\x22','移动知识库\x20','hly-rerank-api-key','锁定会话','批量\x20','{{manual_text}}','未选择文件','floor','getSettings','.enabled\x22]','hly-condensation-enabled','queryPreprocessing','allWorldbooks','hly-kb-list-global-placeholder','isSessionLocked','checked','advanced','hly-hist-entry-multiselect-options','previousElementSibling','\x20块开始。','正在对\x20','manual','url','innerHTML','processCondensation','hanlinyuan-ingest-novel-start','getVectorCount','正在为《','hly-tag-extraction-toggle','可在此预览凝识结果。

','all','.position','[翰林院-枢纽]\x20未能获取SillyTavern上下文,绑定失败。','hly-query-message-count','embeddingModel','hly-layer-end','hly-rerank-notify','hly-unified-template-notes','遵命,将从第\x20','start','exclusionRules','getLockedSessionInfo','type','>\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×\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','error','style',')\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','contains','[data-setting-key=\x22rerank.priorityRetrieval.sources.','value','您确定要将所有设定恢复为出厂默认值吗?','stopPropagation','input[name=\x22hly-unified-injection-position\x22]:checked',')\x20已被删除','_searchHandler','enabled','totalVectors','.template','hly-hist-entry-multiselect-btn','启禀大人,发现此书上次录入已完成\x20','.hly-log-placeholder','2517464ZkscmA','hly-kb-bulk-actions-global','selectedIndex',')\x20执行批量\x20','未找到匹配的条目','17504GJzkGF','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20未找到匹配的书库','[翰林院-枢纽]\x20查询宝库状态失败:','hly-kb-select-all-local','\x20条消息,开始凝识...','#hly-modal-tag-input',',\x20忆识总数=','getMessagesForCondensation','会话已锁定','success','开始将\x20','template','hly-api-endpoint','\x20操作成功。','hly-rerank-hybrid-alpha','hly-historiography-results','append','\x20楼凝识至第\x20','hly-kb-bulk-actions-local','float','content','批量移动过程中发生错误:\x20','end','ingestTextToHanlinyuan','input','圣谕不明','saveSettings','加载书库列表失败:\x20','无法获取总数:\x20','is-user','hly-kb-select-all-global','批量移动完成。','已选择\x20','hly-entry-search','toLocaleTimeString','保存规则','finalText','\x20个局部知识库...','checkbox','hly-kb-list-global','hly-','正在处理您提交的文书...','\x20条忆识。','rerank','神力连接通畅!','[翰林院-枢纽]\x20已成功连接各部,政令畅通。','tags','fa-exclamation-triangle','\x20块继续录入。','神力连接失败:\x20','comment','settingKey','请先选择书库','.hly-kb-rename-btn','priorityRetrieval','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','hly-chunk-size','className','layerStart',':checked','圣旨已达','split','您确定要将知识库【','\x20个条目','join','maxResults','成功切换了\x20','\x20(Key:\x20','remove','hly-query-preprocessing-enabled','\x22\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\x20data-is-user=\x22','indeterminate','\x20操作...','.hly-tab-pane','点击以锁定,让翰林院固定操作当前角色的宝库','notify','\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','insertAdjacentHTML','hanlinyuan-ingest-status','未找到匹配的条目','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a翰林院宝库状态\x0a--------------------\x0a集合ID:\x20','custom','\x20/\x20','trim','.hly-nav-item','\x20个知识块。','getChatId','from','检测到预览后待处理的消息对象,开始精确凝识...','hly-hist-select-library','\x20楼到第\x20','正在清空宝库...','预览内容已更新,可随时开始凝识。','1VYGKzK','globalToLocal','textContent','加载失败','编纂失败:\x20','】吗?','遵命,将从头开始录入此书。','您确定要永久删除【当前角色】的全部\x20','warning','局部知识库批量删除完成。成功:\x20','任务完成!成功录入\x20','\x20(ID:\x20','.hly-delete-rule-btn','delete','stringify','已采集\x20','entries',',重新开始。','.hly-kb-item-checkbox:checked','is_user','宝库状态','hlyLog','chunkSize','integer','span','allEntries','dataset','toggleKnowledgeBase','warn','saveHLYSettings','getCharacterName','apiEndpoint','[翰林院-枢纽]\x20预览过程发生错误:','filter','forEach','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\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\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','clearJob','getAvailableWorldbooks','您确定要永久删除选中的\x20','injection_','#hly-rules-list','hly-independent-chat-memory-enabled','已选择\x200\x20/\x20','凝识完成!新增\x20','凝识失败:\x20','hly-kb-list-local-placeholder','{{lorebook_text}}','自定义路径:','\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20加载失败:\x20','send_date','删除局部知识库\x20','hanlinyuan-ingest-novel-file-input','.hly-preview-item-v2','会话已锁定到宝库:\x20','\x20为占位符。','hly-locked-status','executeCompilation','files','Google\x20API\x20Key:','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','重命名失败:\x20','testApiConnection','log-success','finalMessages','例如\x20http://127.0.0.1:8000/v1','change','click','beforeend','正在删除\x20','children','add',',\x20向量:\x20','tagExtractionEnabled','hanlinyuan-ingest-novel-file-name','css','hly-modal-container','hly-include-ai','hly-rerank-top-n','fa-check-circle',')没有任何知识库可供移动。','option','...','google_direct','info','toggleSessionLock','totalChunks','.hly-preview-textarea','未找到任何书库','keys','resetHLYSettings','preview-item-','》获取条目列表...','开始获取Rerank模型列表...','重命名知识库\x20','严重错误','

','amily2_open_rag_palace','398422Ylaorf','[翰林院-枢纽]\x20凝识过程发生错误:','#hly-modal-tag-extraction-enabled','retrieval','获取Rerank模型失败:\x20','purgeHLYStorage','model','\x20个知识库删除失败。','[翰林院-枢纽]\x20获取Rerank模型列表失败:',';\x22>\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\x20\x20\x20\x20','hly-unified-injection-depth','getLocalKnowledgeBases','会话已解锁,将跟随当前角色。','加载条目失败:\x20','querySelectorAll','boolean','.hly-preview-delete-btn-v2','根据标签提取或内容排除条件,未找到任何有效内容。','\x22\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\x20data-send-date=\x22','\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','[翰林院-枢纽]\x20未找到类型为\x20\x22','开始对\x20','任务已中止。','total','】移动到【','\x22>\x20[','大功告成','请选择一个书库...'];_0x4662=function(){return _0xb530e7;};return _0x4662();}function handleApiModeChange(){const _0xf7300e=_0x15063a,_0x468c46=document['getElementById'](_0xf7300e(0x339))[_0xf7300e(0x314)],_0xc42ee9=document[_0xf7300e(0x220)](_0xf7300e(0x19f)),_0x4f4672=document[_0xf7300e(0x220)]('hly-api-key-group'),_0x39f536=document['getElementById'](_0xf7300e(0x2bd)),_0x2e6f24=_0x39f536[_0xf7300e(0x2db)];if(!_0xc42ee9||!_0x4f4672)return;_0xc42ee9[_0xf7300e(0x2f6)][_0xf7300e(0x208)]=_0xf7300e(0x2b5),_0x4f4672['style']['display']=_0xf7300e(0x2b5);switch(_0x468c46){case _0xf7300e(0x1d6):_0xc42ee9[_0xf7300e(0x2f6)][_0xf7300e(0x208)]='none',_0x4f4672[_0xf7300e(0x267)](_0xf7300e(0x22d))[_0xf7300e(0x17b)]=_0xf7300e(0x1be),_0x4f4672[_0xf7300e(0x267)](_0xf7300e(0x345))[_0xf7300e(0x217)]='请输入您的Google\x20API\x20Key';break;case _0xf7300e(0x20a):_0xc42ee9[_0xf7300e(0x267)]('label')[_0xf7300e(0x17b)]=_0xf7300e(0x2c5),_0xc42ee9[_0xf7300e(0x267)](_0xf7300e(0x345))[_0xf7300e(0x217)]=_0xf7300e(0x1c4),_0x4f4672[_0xf7300e(0x2f6)]['display']=_0xf7300e(0x222);break;case _0xf7300e(0x16d):default:_0xc42ee9[_0xf7300e(0x267)](_0xf7300e(0x22d))[_0xf7300e(0x17b)]=_0xf7300e(0x1b2),_0xc42ee9['querySelector'](_0xf7300e(0x345))[_0xf7300e(0x217)]='输入兼容OpenAI的embeddings端点',_0x4f4672[_0xf7300e(0x267)]('label')['textContent']=_0xf7300e(0x22c);break;}}function loadSettingsToUI(){const _0x48a0e2=_0x15063a,_0x2fc55a=_0x4b5037[_0x48a0e2(0x2d1)]();if(!_0x2fc55a)return;document[_0x48a0e2(0x220)](_0x48a0e2(0x1a5))['checked']=_0x2fc55a[_0x48a0e2(0x1e8)]['enabled'],document['getElementById']('hly-api-endpoint')[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x1e8)][_0x48a0e2(0x198)],document[_0x48a0e2(0x220)](_0x48a0e2(0x238))[_0x48a0e2(0x314)]=_0x2fc55a['retrieval']['customApiUrl'],document[_0x48a0e2(0x220)](_0x48a0e2(0x304))['value']=_0x2fc55a['retrieval'][_0x48a0e2(0x19d)];const _0x45ac7b=document[_0x48a0e2(0x220)](_0x48a0e2(0x2bd));if(_0x45ac7b[_0x48a0e2(0x221)][_0x48a0e2(0x30f)]===0x0){const _0x160a31=_0x2fc55a[_0x48a0e2(0x1e8)][_0x48a0e2(0x2eb)],_0x5ec88e=new Option(_0x160a31,_0x160a31,!![],!![]);_0x45ac7b[_0x48a0e2(0x1ca)](_0x5ec88e);}_0x45ac7b[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x1e8)]['embeddingModel'],document[_0x48a0e2(0x220)](_0x48a0e2(0x23e))[_0x48a0e2(0x2d8)]=_0x2fc55a[_0x48a0e2(0x1e8)][_0x48a0e2(0x378)],document[_0x48a0e2(0x220)](_0x48a0e2(0x365))[_0x48a0e2(0x314)]=_0x2fc55a['advanced'][_0x48a0e2(0x18f)],document[_0x48a0e2(0x220)](_0x48a0e2(0x211))[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x2d9)]['overlap'],document['getElementById'](_0x48a0e2(0x257))[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x2d9)][_0x48a0e2(0x26a)],document[_0x48a0e2(0x220)](_0x48a0e2(0x2ea))[_0x48a0e2(0x314)]=_0x2fc55a['advanced'][_0x48a0e2(0x245)],document[_0x48a0e2(0x220)]('hly-max-results')[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x2d9)][_0x48a0e2(0x36e)],document[_0x48a0e2(0x220)]('hly-batch-size')['value']=_0x2fc55a[_0x48a0e2(0x1e8)][_0x48a0e2(0x27b)],handleApiModeChange(),document[_0x48a0e2(0x220)](_0x48a0e2(0x2d3))[_0x48a0e2(0x2d8)]=_0x2fc55a['condensation'][_0x48a0e2(0x31a)],document[_0x48a0e2(0x220)](_0x48a0e2(0x305))['value']=_0x2fc55a[_0x48a0e2(0x261)][_0x48a0e2(0x367)],document[_0x48a0e2(0x220)]('hly-layer-end')[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x261)]['layerEnd'],document[_0x48a0e2(0x220)](_0x48a0e2(0x24f))['checked']=_0x2fc55a[_0x48a0e2(0x261)][_0x48a0e2(0x23a)][_0x48a0e2(0x291)],document['getElementById'](_0x48a0e2(0x1d0))[_0x48a0e2(0x2d8)]=_0x2fc55a[_0x48a0e2(0x261)][_0x48a0e2(0x23a)]['ai'];const _0x19e786=document[_0x48a0e2(0x220)](_0x48a0e2(0x2e5)),_0x3f8e3a=document['getElementById'](_0x48a0e2(0x2b0)),_0x179acf=document[_0x48a0e2(0x220)]('hly-tag-input-container');_0x19e786[_0x48a0e2(0x2d8)]=_0x2fc55a[_0x48a0e2(0x261)][_0x48a0e2(0x1cc)],_0x3f8e3a[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x261)][_0x48a0e2(0x35b)],_0x179acf['style'][_0x48a0e2(0x208)]=_0x19e786['checked']?_0x48a0e2(0x2b5):_0x48a0e2(0x222),document[_0x48a0e2(0x220)](_0x48a0e2(0x2bf))[_0x48a0e2(0x2d8)]=_0x2fc55a[_0x48a0e2(0x358)][_0x48a0e2(0x31a)],document['getElementById']('hly-rerank-url')['value']=_0x2fc55a['rerank'][_0x48a0e2(0x2df)],document[_0x48a0e2(0x220)](_0x48a0e2(0x2cb))[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x358)][_0x48a0e2(0x19d)];const _0x2bdb95=document[_0x48a0e2(0x220)](_0x48a0e2(0x2fa));if(_0x2bdb95[_0x48a0e2(0x221)][_0x48a0e2(0x30f)]===0x0){const _0x151d63=_0x2fc55a['rerank'][_0x48a0e2(0x1eb)];if(_0x151d63){const _0x2978b9=new Option(_0x151d63,_0x151d63,!![],!![]);_0x2bdb95[_0x48a0e2(0x1ca)](_0x2978b9);}}_0x2bdb95[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x358)][_0x48a0e2(0x1eb)],document[_0x48a0e2(0x220)](_0x48a0e2(0x1d1))[_0x48a0e2(0x314)]=_0x2fc55a[_0x48a0e2(0x358)][_0x48a0e2(0x2ac)],document[_0x48a0e2(0x220)](_0x48a0e2(0x33b))['value']=_0x2fc55a[_0x48a0e2(0x358)]['hybrid_alpha'],document[_0x48a0e2(0x220)](_0x48a0e2(0x2ed))[_0x48a0e2(0x2d8)]=_0x2fc55a[_0x48a0e2(0x358)]['notify'],document[_0x48a0e2(0x220)](_0x48a0e2(0x28c))[_0x48a0e2(0x2d8)]=_0x2fc55a[_0x48a0e2(0x358)]['superSortEnabled'];const _0x4249c8=_0x2fc55a[_0x48a0e2(0x358)][_0x48a0e2(0x363)];if(_0x4249c8){document[_0x48a0e2(0x220)]('hly-priority-retrieval-enabled')[_0x48a0e2(0x2d8)]=_0x4249c8[_0x48a0e2(0x31a)];const _0x4dbc41=[_0x48a0e2(0x21e),'chat_history',_0x48a0e2(0x280),_0x48a0e2(0x2de)];_0x4dbc41[_0x48a0e2(0x19b)](_0x1a3fad=>{const _0x3a7436=_0x48a0e2,_0x5ae7cb=_0x4249c8[_0x3a7436(0x328)][_0x1a3fad];if(_0x5ae7cb){const _0x21ceb2=document[_0x3a7436(0x267)](_0x3a7436(0x313)+_0x1a3fad+_0x3a7436(0x2d2)),_0x4e0168=document[_0x3a7436(0x267)]('[data-setting-key=\x22rerank.priorityRetrieval.sources.'+_0x1a3fad+_0x3a7436(0x252));if(_0x21ceb2)_0x21ceb2[_0x3a7436(0x2d8)]=_0x5ae7cb['enabled'];if(_0x4e0168)_0x4e0168[_0x3a7436(0x314)]=_0x5ae7cb['count'];}});}_0x2fc55a[_0x48a0e2(0x2d4)]&&(document[_0x48a0e2(0x220)](_0x48a0e2(0x372))['checked']=_0x2fc55a[_0x48a0e2(0x2d4)][_0x48a0e2(0x31a)]),_0x2fc55a[_0x48a0e2(0x1e8)][_0x48a0e2(0x288)]!==undefined&&(document[_0x48a0e2(0x220)](_0x48a0e2(0x1ac))[_0x48a0e2(0x2d8)]=_0x2fc55a['retrieval']['independentChatMemoryEnabled']);}function saveSettingsFromUI(_0x4e7740=!![]){const _0x112101=_0x15063a,_0x1ec81e=document['getElementById']('hly-modal-container');if(!_0x1ec81e)return;const _0x44fd28=_0x1ec81e[_0x112101(0x1f3)](_0x112101(0x2a8));_0x44fd28[_0x112101(0x19b)](_0xd1625b=>{const _0x467755=_0x112101,_0x1e6a9c=_0xd1625b['dataset']['settingKey'];if(!_0x1e6a9c)return;let _0x250678;const _0x1b9975=_0xd1625b[_0x467755(0x193)][_0x467755(0x2f3)]||'string';if(_0xd1625b[_0x467755(0x2f3)]===_0x467755(0x353))_0x250678=_0xd1625b[_0x467755(0x2d8)];else{if(_0xd1625b[_0x467755(0x2f3)]===_0x467755(0x2b9)){if(!_0xd1625b['checked'])return;_0x250678=_0xd1625b[_0x467755(0x314)];}else _0x250678=_0xd1625b['value'];}switch(_0x1b9975){case _0x467755(0x190):_0x250678=parseInt(_0x250678,0xa);break;case _0x467755(0x340):_0x250678=parseFloat(_0x250678);break;case _0x467755(0x1f4):if(typeof _0x250678!==_0x467755(0x1f4))_0x250678=_0x250678==='true';break;}const _0xf404cb=_0x4b5037[_0x467755(0x2d1)](),_0x3e1f5a=_0x1e6a9c[_0x467755(0x36a)]('.');let _0x15bf34=_0xf404cb;for(let _0x508628=0x0;_0x508628<_0x3e1f5a[_0x467755(0x30f)]-0x1;_0x508628++){_0x15bf34=_0x15bf34[_0x3e1f5a[_0x508628]]=_0x15bf34[_0x3e1f5a[_0x508628]]||{};}_0x15bf34[_0x3e1f5a[_0x3e1f5a[_0x467755(0x30f)]-0x1]]=_0x250678;}),_0x4b5037[_0x112101(0x347)](),!_0x4e7740&&(log('【手动存档】所有设定已存档封印。','success'),toastr[_0x112101(0x336)](_0x112101(0x262),_0x112101(0x369)));}function resetSettingsToUI(){const _0x812b80=_0x15063a;confirm(_0x812b80(0x315))&&(_0x4b5037[_0x812b80(0x16a)](),loadSettingsToUI(),toastr[_0x812b80(0x1d7)](_0x812b80(0x20e),'诏曰'));}async function updatePanelStatus(){const _0x51612e=_0x15063a,_0x7543dc=_0x4b5037[_0x51612e(0x2d7)](),_0x1ecfa7=document['getElementById'](_0x51612e(0x24e)),_0x50ec7d=document[_0x51612e(0x220)]('hly-current-chat-id');if(_0x7543dc){const _0x508d92=_0x4b5037[_0x51612e(0x2f2)]();_0x508d92&&(_0x1ecfa7[_0x51612e(0x17b)]=_0x51612e(0x335),_0x50ec7d[_0x51612e(0x17b)]=_0x508d92['id'],_0x50ec7d[_0x51612e(0x2aa)]=_0x51612e(0x308)+_0x508d92['id'],_0x1ecfa7[_0x51612e(0x29e)][_0x51612e(0x1ca)](_0x51612e(0x1bb)),_0x50ec7d[_0x51612e(0x29e)]['add'](_0x51612e(0x1bb)));}else _0x1ecfa7[_0x51612e(0x17b)]=_0x535b3f[_0x51612e(0x197)](),_0x50ec7d['textContent']=_0x535b3f[_0x51612e(0x172)]()||'无',_0x50ec7d['title']='',_0x1ecfa7['classList']['remove']('hly-locked-status'),_0x50ec7d[_0x51612e(0x29e)]['remove'](_0x51612e(0x1bb));const _0x3d26e4=document[_0x51612e(0x220)]('hly-current-vector-count');_0x3d26e4[_0x51612e(0x17b)]=_0x51612e(0x1d5);try{const _0x423904=await _0x4b5037['getVectorCount']();_0x3d26e4[_0x51612e(0x17b)]=_0x423904;}catch(_0x275a28){console['error'](_0x51612e(0x300),_0x275a28),_0x3d26e4['textContent']=_0x51612e(0x269),_0x3d26e4[_0x51612e(0x2aa)]=_0x51612e(0x349)+_0x275a28[_0x51612e(0x2fd)];}const _0x157691=document['getElementById'](_0x51612e(0x19e));if(_0x157691&&!_0x157691[_0x51612e(0x193)][_0x51612e(0x351)]){const _0x12652c=_0x4b5037['getSettings'](),_0x3a50da=await _0x4b5037[_0x51612e(0x25e)]();if(_0x12652c[_0x51612e(0x30b)]&&_0x12652c[_0x51612e(0x30b)][_0x3a50da]){const _0x11ce4c=_0x12652c['condensationHistory'][_0x3a50da];_0x157691[_0x51612e(0x2e0)]=_0x51612e(0x28a)+_0x11ce4c[_0x51612e(0x2f0)]+_0x51612e(0x33e)+_0x11ce4c[_0x51612e(0x343)]+_0x51612e(0x26b);}else _0x157691['innerHTML']=_0x51612e(0x2e6);}renderKnowledgeBases();}async function moveAllKnowledgeBases(_0x57ba30){const _0x3dfee4=_0x15063a,_0x3b35c8=_0x57ba30===_0x3dfee4(0x17a),_0x32b4b5=_0x3b35c8?'global':_0x3dfee4(0x251),_0x1ac964=_0x3b35c8?'局部':'全局',_0x15ef02=_0x3b35c8?_0x4b5037[_0x3dfee4(0x2af)]():_0x4b5037[_0x3dfee4(0x1f0)](),_0x525158=Object[_0x3dfee4(0x1dc)](_0x15ef02);if(_0x525158[_0x3dfee4(0x30f)]===0x0){toastr['info']('源区域('+(_0x3b35c8?'全局':'局部')+_0x3dfee4(0x1d3),'圣谕');return;}if(!confirm('您确定要将\x20'+_0x525158[_0x3dfee4(0x30f)]+'\x20个知识库从【'+(_0x3b35c8?'全局':'局部')+_0x3dfee4(0x1fd)+_0x1ac964+_0x3dfee4(0x17e)))return;log(_0x3dfee4(0x337)+_0x525158[_0x3dfee4(0x30f)]+_0x3dfee4(0x25c)+_0x32b4b5+_0x3dfee4(0x226)+(_0x3b35c8?_0x3dfee4(0x251):'global')+_0x3dfee4(0x1d5),'info');const _0x2a0cd9=_0x525158[_0x3dfee4(0x2a1)](_0x58e8c6=>_0x4b5037[_0x3dfee4(0x283)](_0x58e8c6,_0x32b4b5));try{await Promise[_0x3dfee4(0x2e7)](_0x2a0cd9),toastr[_0x3dfee4(0x336)](_0x3dfee4(0x231)+_0x525158[_0x3dfee4(0x30f)]+_0x3dfee4(0x1a1),'大功告成'),log(_0x3dfee4(0x34c),_0x3dfee4(0x336));}catch(_0x2465e5){toastr[_0x3dfee4(0x2f5)](_0x3dfee4(0x342)+_0x2465e5['message'],'警报'),log(_0x3dfee4(0x2fc)+_0x2465e5[_0x3dfee4(0x2fd)],_0x3dfee4(0x2f5));}finally{await updatePanelStatus();}}async function deleteAllLocalKnowledgeBases(){const _0x50aed0=_0x15063a,_0x277461=_0x4b5037[_0x50aed0(0x1f0)](),_0xea8212=Object[_0x50aed0(0x1dc)](_0x277461);if(_0xea8212[_0x50aed0(0x30f)]===0x0){toastr[_0x50aed0(0x1d7)](_0x50aed0(0x29f),'圣谕');return;}if(!confirm(_0x50aed0(0x180)+_0xea8212[_0x50aed0(0x30f)]+_0x50aed0(0x218)))return;toastr[_0x50aed0(0x1d7)](_0x50aed0(0x1c8)+_0xea8212[_0x50aed0(0x30f)]+'\x20个局部知识库...','圣旨'),log(_0x50aed0(0x169)+_0xea8212[_0x50aed0(0x30f)]+_0x50aed0(0x352),_0x50aed0(0x195));let _0x174b54=0x0,_0x5d1998=0x0;for(const _0x3b86fe of _0xea8212){try{await _0x4b5037['removeKnowledgeBase'](_0x3b86fe,_0x50aed0(0x251)),_0x174b54++;}catch(_0x5f2dce){_0x5d1998++,log(_0x50aed0(0x1b6)+_0x3b86fe+_0x50aed0(0x278)+_0x5f2dce[_0x50aed0(0x2fd)],_0x50aed0(0x2f5));}}_0x5d1998>0x0?toastr[_0x50aed0(0x2f5)]('操作完成,但有\x20'+_0x5d1998+_0x50aed0(0x1ec),'警报'):toastr[_0x50aed0(0x336)](_0x50aed0(0x231)+_0x174b54+'\x20个局部知识库均已成功删除。',_0x50aed0(0x1ff)),log(_0x50aed0(0x182)+_0x174b54+_0x50aed0(0x30c)+_0x5d1998,_0x50aed0(0x1d7)),await updatePanelStatus();}async function renderKnowledgeBases(){const _0x545044=_0x15063a,_0x5615ae=document[_0x545044(0x220)]('hly-kb-list-local'),_0x473117=document[_0x545044(0x220)](_0x545044(0x354)),_0x149d5d=document['getElementById'](_0x545044(0x294));if(!_0x5615ae||!_0x473117||!_0x149d5d)return;_0x149d5d[_0x545044(0x17b)]=_0x535b3f[_0x545044(0x197)]()||_0x545044(0x2b7);try{const _0x25e8f7=_0x4b5037[_0x545044(0x1f0)](),_0xa84874=_0x4b5037['getGlobalKnowledgeBases']();await _renderKbList(_0x25e8f7,_0x5615ae,_0x545044(0x251),_0x545044(0x1b0)),await _renderKbList(_0xa84874,_0x473117,_0x545044(0x285),_0x545044(0x2d6));}catch(_0x42d8c3){console[_0x545044(0x2f5)](_0x545044(0x2bc),_0x42d8c3),_0x5615ae[_0x545044(0x2e0)]=_0x545044(0x1b4)+_0x42d8c3[_0x545044(0x2fd)]+_0x545044(0x1e3),_0x473117['innerHTML']=_0x545044(0x1b4)+_0x42d8c3[_0x545044(0x2fd)]+_0x545044(0x1e3);}}async function _renderKbList(_0x2b4708,_0x53480e,_0x19eb68,_0x786fb3){const _0x252cca=_0x15063a,_0x3e1dc8=document[_0x252cca(0x220)](_0x786fb3);_0x53480e['innerHTML']='',_0x53480e['appendChild'](_0x3e1dc8);if(Object[_0x252cca(0x1dc)](_0x2b4708)[_0x252cca(0x30f)]===0x0){_0x3e1dc8[_0x252cca(0x2f6)][_0x252cca(0x208)]=_0x252cca(0x2b5);return;}_0x3e1dc8['style'][_0x252cca(0x208)]=_0x252cca(0x222);for(const [_0x21e2b5,_0x3919ca]of Object[_0x252cca(0x189)](_0x2b4708)){const _0x34acec=document[_0x252cca(0x24a)]('div');_0x34acec[_0x252cca(0x366)]='hly-kb-list-item',_0x34acec[_0x252cca(0x193)][_0x252cca(0x21d)]=_0x21e2b5,_0x34acec[_0x252cca(0x193)][_0x252cca(0x21c)]=_0x19eb68;const _0x441197=await _0x4b5037['getVectorCount'](_0x21e2b5,_0x19eb68),_0x444f20=_0x19eb68===_0x252cca(0x251)?'':_0x252cca(0x243);_0x34acec[_0x252cca(0x2e0)]=_0x252cca(0x232)+_0x21e2b5+_0x252cca(0x299)+_0x21e2b5+'\x22>'+_0x3919ca[_0x252cca(0x265)]+'\x20('+_0x441197+'条)\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'+_0x444f20+'\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_0x5a56d6[_0x54f530(0x2d8)]=_0x376234),updateBulkActionUI(_0x4d13b4);}function updateBulkActionUI(_0x2fa2e4){const _0x4c935c=_0x15063a,_0x5dffc4=document['getElementById']('hly-kb-list-'+_0x2fa2e4),_0x10747f=document[_0x4c935c(0x220)]('hly-kb-bulk-actions-'+_0x2fa2e4),_0x1a7812=document[_0x4c935c(0x220)](_0x4c935c(0x204)+_0x2fa2e4),_0x1dcd13=_0x5dffc4['querySelectorAll'](_0x4c935c(0x255)),_0x483a25=_0x5dffc4[_0x4c935c(0x1f3)](_0x4c935c(0x18b)),_0x55e7e6=_0x483a25[_0x4c935c(0x30f)],_0x326eb0=_0x1dcd13['length'];_0x55e7e6>0x0?_0x10747f[_0x4c935c(0x2f6)][_0x4c935c(0x208)]=_0x4c935c(0x26f):_0x10747f[_0x4c935c(0x2f6)][_0x4c935c(0x208)]=_0x4c935c(0x222);if(_0x326eb0===0x0)_0x1a7812[_0x4c935c(0x2d8)]=![],_0x1a7812[_0x4c935c(0x374)]=![];else{if(_0x55e7e6===_0x326eb0)_0x1a7812[_0x4c935c(0x2d8)]=!![],_0x1a7812[_0x4c935c(0x374)]=![];else _0x55e7e6>0x0?(_0x1a7812['checked']=![],_0x1a7812[_0x4c935c(0x374)]=!![]):(_0x1a7812[_0x4c935c(0x2d8)]=![],_0x1a7812['indeterminate']=![]);}}async function handleBulkAction(_0x3fe9cc,_0x381e2){const _0x4b20ff=_0x15063a,_0x5355c8=_0x3fe9cc[_0x4b20ff(0x2a7)][_0x4b20ff(0x193)]['action'];if(!_0x5355c8)return;const _0x510e59=document['getElementById']('hly-kb-list-'+_0x381e2),_0x122b5a=_0x510e59[_0x4b20ff(0x1f3)](_0x4b20ff(0x18b)),_0x399711=Array[_0x4b20ff(0x173)](_0x122b5a)[_0x4b20ff(0x2a1)](_0x224ade=>_0x224ade[_0x4b20ff(0x193)][_0x4b20ff(0x21d)]);if(_0x399711[_0x4b20ff(0x30f)]===0x0){toastr[_0x4b20ff(0x181)](_0x4b20ff(0x22a),'圣谕');return;}let _0x6e451b='',_0x236cde,_0xff07dd='';switch(_0x5355c8){case _0x4b20ff(0x186):_0x6e451b=_0x4b20ff(0x1a9)+_0x399711[_0x4b20ff(0x30f)]+_0x4b20ff(0x273),_0x236cde=_0x54c9bd=>_0x4b5037[_0x4b20ff(0x2b4)](_0x54c9bd,_0x381e2),_0xff07dd=_0x4b20ff(0x258)+_0x399711[_0x4b20ff(0x30f)]+_0x4b20ff(0x228);break;case _0x4b20ff(0x32b):const _0x155018=_0x381e2===_0x4b20ff(0x251)?'全局':'局部';_0x6e451b=_0x4b20ff(0x2bb)+_0x399711[_0x4b20ff(0x30f)]+_0x4b20ff(0x37e)+_0x155018+_0x4b20ff(0x17e),_0x236cde=_0x344f3b=>_0x4b5037[_0x4b20ff(0x283)](_0x344f3b,_0x381e2),_0xff07dd=_0x4b20ff(0x2c1)+_0x399711[_0x4b20ff(0x30f)]+'\x20个知识库。';break;case _0x4b20ff(0x207):_0x6e451b='您确定要切换选中的\x20'+_0x399711[_0x4b20ff(0x30f)]+_0x4b20ff(0x201),_0x236cde=_0x1d3aca=>_0x4b5037['toggleKnowledgeBase'](_0x1d3aca,_0x381e2),_0xff07dd=_0x4b20ff(0x36f)+_0x399711[_0x4b20ff(0x30f)]+'\x20个知识库的状态。';break;default:return;}if(!confirm(_0x6e451b))return;toastr[_0x4b20ff(0x1d7)](_0x4b20ff(0x2dd)+_0x399711[_0x4b20ff(0x30f)]+_0x4b20ff(0x272),'圣旨'),log(_0x4b20ff(0x1fa)+_0x399711['length']+'\x20个知识库\x20(范围:\x20'+_0x381e2+_0x4b20ff(0x323)+_0x5355c8+_0x4b20ff(0x375),'info');try{const _0x5a4b31=_0x399711[_0x4b20ff(0x2a1)](_0x5897a5=>_0x236cde(_0x5897a5));await Promise[_0x4b20ff(0x2e7)](_0x5a4b31),toastr['success'](_0xff07dd,_0x4b20ff(0x1ff)),log(_0x4b20ff(0x2cd)+_0x5355c8+_0x4b20ff(0x33a),_0x4b20ff(0x336));}catch(_0x36445a){toastr[_0x4b20ff(0x2f5)](_0x4b20ff(0x2a2)+_0x36445a['message'],'警报'),log(_0x4b20ff(0x2cd)+_0x5355c8+_0x4b20ff(0x205)+_0x36445a[_0x4b20ff(0x2fd)],_0x4b20ff(0x2f5));}finally{await updatePanelStatus();}}async function testApi(){const _0x51c804=_0x15063a;toastr['info']('正在测试神力连接...','圣旨');try{await _0x4b5037[_0x51c804(0x1c1)](),toastr[_0x51c804(0x336)](_0x51c804(0x359),'圣意');}catch(_0x3d17aa){toastr[_0x51c804(0x2f5)](_0x51c804(0x35e)+_0x3d17aa[_0x51c804(0x2fd)],'警报');}}async function fetchHLYEmbeddingModels(){const _0x58a8ff=_0x15063a,_0x56bc74=document[_0x58a8ff(0x220)](_0x58a8ff(0x2bd)),_0x1ecc67=_0x56bc74[_0x58a8ff(0x314)];_0x56bc74[_0x58a8ff(0x2e0)]=_0x58a8ff(0x2ba),_0x56bc74[_0x58a8ff(0x2a6)]=!![];try{log(_0x58a8ff(0x225),'info');const _0x242344=await _0x4b5037['fetchEmbeddingModels']();_0x56bc74[_0x58a8ff(0x2e0)]='';if(_0x242344[_0x58a8ff(0x30f)]===0x0){_0x56bc74[_0x58a8ff(0x2e0)]=_0x58a8ff(0x256),toastr[_0x58a8ff(0x195)](_0x58a8ff(0x290),_0x58a8ff(0x2a3)),log('未能获取到任何模型。',_0x58a8ff(0x195));return;}_0x242344[_0x58a8ff(0x19b)](_0x7a9949=>{const _0x3a67b9=_0x58a8ff,_0x50bd70=new Option(_0x7a9949,_0x7a9949);_0x56bc74[_0x3a67b9(0x1ca)](_0x50bd70);}),_0x242344[_0x58a8ff(0x26e)](_0x1ecc67)?_0x56bc74[_0x58a8ff(0x314)]=_0x1ecc67:_0x56bc74[_0x58a8ff(0x322)]=0x0,toastr[_0x58a8ff(0x336)]('成功获取\x20'+_0x242344[_0x58a8ff(0x30f)]+'\x20个模型。','圣意'),log(_0x58a8ff(0x1a4)+_0x242344[_0x58a8ff(0x30f)]+_0x58a8ff(0x25b),_0x58a8ff(0x336));}catch(_0x7aca38){console[_0x58a8ff(0x2f5)](_0x58a8ff(0x1a3),_0x7aca38),toastr['error'](_0x58a8ff(0x254)+_0x7aca38['message'],_0x58a8ff(0x1e2)),log(_0x58a8ff(0x254)+_0x7aca38[_0x58a8ff(0x2fd)],'error'),_0x56bc74['innerHTML']='';}finally{_0x56bc74[_0x58a8ff(0x2a6)]=![];}}async function fetchHLYRerankModels(){const _0x120cf3=_0x15063a,_0x26a78f=document[_0x120cf3(0x220)]('hly-rerank-model'),_0x57b4dd=_0x26a78f['value'];_0x26a78f[_0x120cf3(0x2e0)]='',_0x26a78f[_0x120cf3(0x2a6)]=!![];try{log(_0x120cf3(0x1e0),'info');const _0x5f28a0=await _0x4b5037['fetchRerankModels']();_0x26a78f[_0x120cf3(0x2e0)]='';if(_0x5f28a0['length']===0x0){_0x26a78f[_0x120cf3(0x2e0)]=_0x120cf3(0x256),toastr['warn'](_0x120cf3(0x2c2),_0x120cf3(0x2a3)),log(_0x120cf3(0x2c2),_0x120cf3(0x195));return;}_0x5f28a0[_0x120cf3(0x19b)](_0x3f13b5=>{const _0x5ddadb=new Option(_0x3f13b5,_0x3f13b5);_0x26a78f['add'](_0x5ddadb);}),_0x5f28a0[_0x120cf3(0x26e)](_0x57b4dd)?_0x26a78f[_0x120cf3(0x314)]=_0x57b4dd:_0x26a78f[_0x120cf3(0x322)]=0x0,toastr['success'](_0x120cf3(0x1a4)+_0x5f28a0[_0x120cf3(0x30f)]+_0x120cf3(0x279),'圣意'),log(_0x120cf3(0x1a4)+_0x5f28a0[_0x120cf3(0x30f)]+_0x120cf3(0x279),_0x120cf3(0x336));}catch(_0x2ddfc4){console['error'](_0x120cf3(0x1ed),_0x2ddfc4),toastr[_0x120cf3(0x2f5)]('获取Rerank模型失败:\x20'+_0x2ddfc4[_0x120cf3(0x2fd)],_0x120cf3(0x1e2)),log(_0x120cf3(0x1e9)+_0x2ddfc4[_0x120cf3(0x2fd)],_0x120cf3(0x2f5)),_0x26a78f[_0x120cf3(0x2e0)]='';}finally{_0x26a78f[_0x120cf3(0x2a6)]=![];}}async function purgeStorage(){const _0x39ee6f=_0x15063a;if(confirm(_0x39ee6f(0x295))){toastr[_0x39ee6f(0x1d7)](_0x39ee6f(0x177),'圣旨');const _0x4b4dac=await _0x4b5037['purgeStorage']();_0x4b4dac?toastr[_0x39ee6f(0x336)](_0x39ee6f(0x2b1),'圣意'):toastr[_0x39ee6f(0x2f5)](_0x39ee6f(0x2c7),'警报'),await updatePanelStatus();}}async function startCondensation(){const _0x4ef3cd=_0x15063a,_0x49801d=document['getElementById']('hly-condensation-results'),_0x141e5f=_0x49801d['dataset'][_0x4ef3cd(0x1c3)],_0x238942=document['getElementById'](_0x4ef3cd(0x305))['value'],_0x4ed14f=document['getElementById'](_0x4ef3cd(0x2ec))['value'],_0x3095de={'start':parseInt(_0x238942),'end':parseInt(_0x4ed14f)};try{let _0x146571;_0x141e5f?(log(_0x4ef3cd(0x174),_0x4ef3cd(0x1d7)),toastr[_0x4ef3cd(0x1d7)]('正在处理您确认后的文书...','圣旨'),_0x146571=JSON['parse'](_0x141e5f),delete _0x49801d[_0x4ef3cd(0x193)][_0x4ef3cd(0x1c3)]):(log('未检测到预览文本,按标准流程采集消息...',_0x4ef3cd(0x1d7)),toastr[_0x4ef3cd(0x1d7)]('正在准备凝识...','圣旨'),_0x146571=_0x4b5037[_0x4ef3cd(0x334)]());if(!_0x146571||_0x146571[_0x4ef3cd(0x30f)]===0x0){toastr['warning'](_0x4ef3cd(0x253),_0x4ef3cd(0x2a3)),_0x49801d[_0x4ef3cd(0x17b)]=_0x4ef3cd(0x241);return;}_0x49801d['textContent']=_0x4ef3cd(0x188)+_0x146571[_0x4ef3cd(0x30f)]+_0x4ef3cd(0x331),toastr[_0x4ef3cd(0x1d7)](_0x4ef3cd(0x188)+_0x146571[_0x4ef3cd(0x30f)]+'\x20条消息,开始凝识...',_0x4ef3cd(0x2a3));const _0x261252=await _0x4b5037[_0x4ef3cd(0x2e1)](_0x146571,log,_0x3095de);if(_0x261252[_0x4ef3cd(0x336)]){toastr[_0x4ef3cd(0x336)](_0x4ef3cd(0x1ae)+_0x261252[_0x4ef3cd(0x310)]+_0x4ef3cd(0x357),_0x4ef3cd(0x1ff));const _0x4b1d51=_0x3095de[_0x4ef3cd(0x343)]===0x0?getContext()[_0x4ef3cd(0x216)][_0x4ef3cd(0x30f)]:_0x3095de[_0x4ef3cd(0x343)];_0x49801d[_0x4ef3cd(0x17b)]='聊天记录从第\x20'+_0x3095de[_0x4ef3cd(0x2f0)]+_0x4ef3cd(0x176)+_0x4b1d51+'\x20楼已成功凝识,新增\x20'+_0x261252[_0x4ef3cd(0x310)]+_0x4ef3cd(0x357);}else throw new Error(_0x261252[_0x4ef3cd(0x2f5)]||'未知错误');}catch(_0x317456){console['error'](_0x4ef3cd(0x1e6),_0x317456),toastr['error'](_0x4ef3cd(0x1af)+_0x317456[_0x4ef3cd(0x2fd)],_0x4ef3cd(0x1e2)),_0x49801d[_0x4ef3cd(0x17b)]=_0x4ef3cd(0x1af)+_0x317456[_0x4ef3cd(0x2fd)];}finally{await updatePanelStatus();}}async function loadWorldbookList(){const _0x4c51a6=_0x15063a,_0x45f9f1=document[_0x4c51a6(0x220)](_0x4c51a6(0x175)),_0x4cc109=document[_0x4c51a6(0x220)](_0x4c51a6(0x230));if(!_0x45f9f1)return;try{log('正在获取可用书库列表...',_0x4c51a6(0x1d7));const _0x2d93a4=await _0x337832[_0x4c51a6(0x1a8)]();window[_0x4c51a6(0x2d5)]=_0x2d93a4,updateWorldbookOptions(_0x45f9f1,'',_0x2d93a4);if(_0x4cc109){const _0x3fe15a=debounce(_0x4d94be=>{updateWorldbookOptions(_0x45f9f1,_0x4d94be,_0x2d93a4);},0x12c);_0x4cc109[_0x4c51a6(0x23f)]('input',_0x38d7c4=>{const _0x1fa619=_0x4c51a6;_0x3fe15a(_0x38d7c4['target'][_0x1fa619(0x314)]);});}log(_0x4c51a6(0x286)+_0x2d93a4[_0x4c51a6(0x30f)]+'\x20个书库。',_0x4c51a6(0x336));}catch(_0x2af16a){console[_0x4c51a6(0x2f5)]('[翰林院-枢纽]\x20加载书库列表失败:',_0x2af16a),log(_0x4c51a6(0x348)+_0x2af16a[_0x4c51a6(0x2fd)],_0x4c51a6(0x2f5)),_0x45f9f1&&(_0x45f9f1['innerHTML']='加载失败');}}function updateWorldbookOptions(_0x2ee94b,_0x20f70e,_0x70e4d5){const _0x9be578=_0x15063a,_0x539c9e=filterWorldbooks(_0x20f70e,_0x70e4d5),_0x33a5ee=_0x2ee94b[_0x9be578(0x314)];_0x2ee94b['innerHTML']=_0x9be578(0x200);if(_0x539c9e[_0x9be578(0x30f)]===0x0){_0x2ee94b['innerHTML']=_0x20f70e['trim']()?_0x9be578(0x32e):_0x9be578(0x1db);return;}_0x539c9e[_0x9be578(0x19b)](_0x58e077=>{const _0x55c463=_0x9be578,_0x7a16ab=document[_0x55c463(0x24a)](_0x55c463(0x1d4));_0x7a16ab[_0x55c463(0x314)]=_0x58e077,_0x7a16ab[_0x55c463(0x17b)]=_0x58e077,_0x2ee94b[_0x55c463(0x24b)](_0x7a16ab);}),_0x33a5ee&&_0x539c9e[_0x9be578(0x26e)](_0x33a5ee)&&(_0x2ee94b['value']=_0x33a5ee);}async function handleWorldbookSelectionChange(){const _0x43169b=_0x15063a,_0x5b15d4=document[_0x43169b(0x220)]('hly-hist-select-library'),_0x124182=document[_0x43169b(0x220)]('hly-hist-entry-multiselect-btn'),_0x4df83c=document['getElementById']('hly-hist-entry-multiselect-options'),_0x43860a=document[_0x43169b(0x220)](_0x43169b(0x34e)),_0x1e52d6=_0x5b15d4[_0x43169b(0x314)];_0x124182[_0x43169b(0x2a6)]=!![],_0x124182[_0x43169b(0x267)]('span')['textContent']=_0x43169b(0x21b),_0x4df83c['innerHTML']='',_0x4df83c[_0x43169b(0x2f6)][_0x43169b(0x208)]=_0x43169b(0x222);_0x43860a&&(_0x43860a[_0x43169b(0x314)]='');if(!_0x1e52d6){_0x124182[_0x43169b(0x267)]('span')[_0x43169b(0x17b)]=_0x43169b(0x361);return;}try{log(_0x43169b(0x2e4)+_0x1e52d6+_0x43169b(0x1df),_0x43169b(0x1d7));const _0x26f88c=await _0x337832[_0x43169b(0x2ad)](_0x1e52d6);if(_0x26f88c[_0x43169b(0x30f)]===0x0){_0x124182[_0x43169b(0x267)]('span')[_0x43169b(0x17b)]=_0x43169b(0x215);return;}window[_0x43169b(0x192)]=_0x26f88c,updateEntryOptions('',_0x26f88c);if(_0x43860a){_0x43860a[_0x43169b(0x27d)](_0x43169b(0x345),_0x43860a[_0x43169b(0x319)]);const _0x42d9a8=debounce(_0x22f83e=>{updateEntryOptions(_0x22f83e,_0x26f88c);},0x12c);_0x43860a[_0x43169b(0x319)]=_0x32b3ef=>{const _0x419901=_0x43169b;_0x42d9a8(_0x32b3ef['target'][_0x419901(0x314)]);},_0x43860a[_0x43169b(0x23f)](_0x43169b(0x345),_0x43860a[_0x43169b(0x319)]);}log(_0x43169b(0x286)+_0x26f88c[_0x43169b(0x30f)]+'\x20个条目。',_0x43169b(0x336));}catch(_0x347fa0){console['error']('[翰林院-枢纽]\x20加载《'+_0x1e52d6+'》的条目失败:',_0x347fa0),log(_0x43169b(0x1f2)+_0x347fa0[_0x43169b(0x2fd)],_0x43169b(0x2f5)),_0x124182[_0x43169b(0x267)](_0x43169b(0x191))[_0x43169b(0x17b)]=_0x43169b(0x17c);}finally{_0x124182[_0x43169b(0x2a6)]=![];}}function updateEntryOptions(_0xc1a57b,_0x1eb300){const _0x563b8f=_0x15063a,_0x3c1a75=document[_0x563b8f(0x220)](_0x563b8f(0x2da)),_0x123a23=document[_0x563b8f(0x220)](_0x563b8f(0x31d)),_0xf3a4fd=filterWorldbookEntries(_0xc1a57b,_0x1eb300);_0x3c1a75[_0x563b8f(0x2e0)]='';const _0x4a13d9='\x0a\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';_0x3c1a75['insertAdjacentHTML'](_0x563b8f(0x1c7),_0x4a13d9);if(_0xf3a4fd['length']===0x0){const _0x2d7b56=_0x563b8f(0x37c);_0x3c1a75[_0x563b8f(0x37a)](_0x563b8f(0x1c7),_0x2d7b56),_0x123a23[_0x563b8f(0x267)]('span')[_0x563b8f(0x17b)]=_0x563b8f(0x324);return;}_0xf3a4fd[_0x563b8f(0x19b)](_0x4c6560=>{const _0x2db439=_0x563b8f,_0x41d785=_0xc1a57b?highlightSearchMatch(_0x4c6560['comment'],_0xc1a57b):_0x4c6560[_0x2db439(0x35f)],_0x3e091c=_0x2db439(0x21f)+_0x4c6560[_0x2db439(0x35f)]+_0x2db439(0x370)+_0x4c6560['key']+_0x2db439(0x2f7)+_0x4c6560['key']+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x41d785+_0x2db439(0x364);_0x3c1a75['insertAdjacentHTML']('beforeend',_0x3e091c);}),_0x123a23['querySelector'](_0x563b8f(0x191))['textContent']=_0x563b8f(0x1ad)+_0xf3a4fd[_0x563b8f(0x30f)]+_0x563b8f(0x36c);}async function startHistoriography(){const _0x31d6a5=_0x15063a,_0x279987=document['getElementById'](_0x31d6a5(0x175))['value'],_0x46578b=document[_0x31d6a5(0x220)](_0x31d6a5(0x2da)),_0xf67df5=document[_0x31d6a5(0x220)](_0x31d6a5(0x33c)),_0x47c686=Array[_0x31d6a5(0x173)](_0x46578b[_0x31d6a5(0x1f3)](_0x31d6a5(0x28b)))['map'](_0x2b3732=>_0x2b3732[_0x31d6a5(0x314)]);if(!_0x279987||_0x47c686[_0x31d6a5(0x30f)]===0x0){toastr['warning'](_0x31d6a5(0x309),_0x31d6a5(0x346));return;}_0xf67df5[_0x31d6a5(0x17b)]=_0x31d6a5(0x27a)+_0x279987+'》中的\x20'+_0x47c686['length']+_0x31d6a5(0x2b2),toastr[_0x31d6a5(0x1d7)](_0x31d6a5(0x298),'圣旨'),log(_0x31d6a5(0x284)+_0x279987+'》中的\x20'+_0x47c686[_0x31d6a5(0x30f)]+_0x31d6a5(0x23d),'info');try{const _0x2cff07=await _0x337832[_0x31d6a5(0x1bc)](_0x279987,_0x47c686);_0xf67df5[_0x31d6a5(0x17b)]=_0x2cff07[_0x31d6a5(0x341)],_0x2cff07['success']?toastr[_0x31d6a5(0x336)]('批量编纂任务已完成。','大功告成'):toastr[_0x31d6a5(0x181)]('批量编纂任务已完成,但有部分错误。','圣谕'),log('对《'+_0x279987+_0x31d6a5(0x22b)+_0x2cff07['totalSuccess']+_0x31d6a5(0x1cb)+_0x2cff07[_0x31d6a5(0x31b)],_0x31d6a5(0x336));}catch(_0x476c6c){console[_0x31d6a5(0x2f5)](_0x31d6a5(0x214),_0x476c6c),toastr[_0x31d6a5(0x2f5)]('编纂失败:\x20'+_0x476c6c[_0x31d6a5(0x2fd)],_0x31d6a5(0x1e2)),_0xf67df5[_0x31d6a5(0x17b)]=_0x31d6a5(0x17d)+_0x476c6c['message'];}finally{await updatePanelStatus();}}function _0x1493(_0x50dca1,_0x4f35f8){const _0x46629b=_0x4662();return _0x1493=function(_0x1493ad,_0x1fef35){_0x1493ad=_0x1493ad-0x168;let _0x2d261c=_0x46629b[_0x1493ad];return _0x2d261c;},_0x1493(_0x50dca1,_0x4f35f8);}async function showStats(){const _0x3bc917=_0x15063a;try{log('用户请求查看宝库状态。','info'),toastr[_0x3bc917(0x1d7)]('正在查询宝库状态...','圣旨');const _0x3e15c9=await _0x4b5037[_0x3bc917(0x2e3)](),_0x5185ae=await _0x4b5037['getCollectionId'](),_0x420f63=_0x4b5037['getSettings'](),_0x379047=_0x3bc917(0x16c)+_0x5185ae+_0x3bc917(0x1a0)+_0x3e15c9+'\x0a--------------------\x0aAPI端点:\x20'+_0x420f63['retrieval']['apiEndpoint']+_0x3bc917(0x287)+_0x420f63[_0x3bc917(0x1e8)][_0x3bc917(0x2eb)]+_0x3bc917(0x311);toastr[_0x3bc917(0x1d7)](_0x379047,_0x3bc917(0x18d),{'timeOut':0x3a98,'extendedTimeOut':0x1388,'tapToDismiss':!![],'closeButton':!![]}),log('查看宝库状态成功:集合ID='+_0x5185ae+_0x3bc917(0x333)+_0x3e15c9,'success');}catch(_0x407c45){console['error'](_0x3bc917(0x32f),_0x407c45),toastr[_0x3bc917(0x2f5)](_0x3bc917(0x236)+_0x407c45[_0x3bc917(0x2fd)],'严重错误'),log(_0x3bc917(0x236)+_0x407c45[_0x3bc917(0x2fd)],_0x3bc917(0x2f5));}}function showRulesModal(_0x5ac04c){const _0x1b56d3=_0x15063a,_0x1ba971=_0x4b5037[_0x1b56d3(0x2d1)](),_0x2d354f=_0x1ba971[_0x5ac04c];if(!_0x2d354f){console[_0x1b56d3(0x2f5)](_0x1b56d3(0x1f9)+_0x5ac04c+'\x22\x20的配置项。');return;}const _0x28773e=_0x5ac04c==='condensation'?_0x1b56d3(0x29d):'编辑检索内容排除规则',_0x1cdd83=_0x2d354f[_0x1b56d3(0x2f1)]||[],_0xfb0978=(_0x4e74f9={'start':'','end':''},_0x559375)=>_0x1b56d3(0x37d)+_0x559375+_0x1b56d3(0x1b3)+(_0x4e74f9[_0x1b56d3(0x2f0)]||'')['replace'](/"/g,'\x22')+'\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',_0x29cab1=_0x1cdd83[_0x1b56d3(0x2a1)](_0xfb0978)[_0x1b56d3(0x36d)](''),_0x59ee92=_0x5ac04c==='queryPreprocessing'?_0x1b56d3(0x19c)+(_0x2d354f[_0x1b56d3(0x1cc)]?_0x1b56d3(0x2d8):'')+_0x1b56d3(0x213)+(_0x2d354f[_0x1b56d3(0x1cc)]?'block':_0x1b56d3(0x222))+_0x1b56d3(0x1ee)+(_0x2d354f[_0x1b56d3(0x35b)]||'')+_0x1b56d3(0x379):'',_0x134b96=_0x1b56d3(0x1bf)+_0x59ee92+_0x1b56d3(0x282)+(_0x29cab1[_0x1b56d3(0x30f)]>0x0?_0x29cab1:'暂无规则

')+_0x1b56d3(0x227);showHtmlModal(_0x28773e,_0x134b96,{'okText':_0x1b56d3(0x350),'onOk':_0x1a19e5=>{const _0x5f015d=_0x1b56d3,_0x2f9e25=[];_0x1a19e5['find'](_0x5f015d(0x242))[_0x5f015d(0x29a)](function(){const _0x4f32c5=_0x5f015d,_0x595b5b=$(this)[_0x4f32c5(0x210)]('input')['eq'](0x0)[_0x4f32c5(0x239)]()[_0x4f32c5(0x16f)](),_0x4b1b72=$(this)[_0x4f32c5(0x210)](_0x4f32c5(0x345))['eq'](0x1)[_0x4f32c5(0x239)]()[_0x4f32c5(0x16f)]();_0x595b5b&&_0x2f9e25['push']({'start':_0x595b5b,'end':_0x4b1b72});});const _0x17a36d={..._0x2d354f,'exclusionRules':_0x2f9e25};_0x5ac04c===_0x5f015d(0x2d4)&&(_0x17a36d[_0x5f015d(0x1cc)]=_0x1a19e5[_0x5f015d(0x210)](_0x5f015d(0x1e7))['is'](':checked'),_0x17a36d[_0x5f015d(0x35b)]=_0x1a19e5['find'](_0x5f015d(0x332))[_0x5f015d(0x239)]()),updateAndSaveSetting(_0x5ac04c,_0x17a36d),toastr[_0x5f015d(0x336)]('规则已保存。',_0x5f015d(0x369));},'onShow':_0x447a82=>{const _0x2323b6=_0x1b56d3,_0x239bda=_0x447a82[_0x2323b6(0x210)](_0x2323b6(0x1ab));_0x447a82[_0x2323b6(0x210)](_0x2323b6(0x306))['on'](_0x2323b6(0x1c6),()=>{const _0x3c90e9=_0x2323b6,_0x21429b=_0x239bda[_0x3c90e9(0x1c9)](_0x3c90e9(0x242))[_0x3c90e9(0x30f)],_0x2d800d=_0xfb0978(undefined,_0x21429b);_0x239bda[_0x3c90e9(0x210)]('p')['length']>0x0?_0x239bda[_0x3c90e9(0x289)](_0x2d800d):_0x239bda[_0x3c90e9(0x33d)](_0x2d800d);}),_0x239bda['on'](_0x2323b6(0x1c6),_0x2323b6(0x185),function(){const _0x2a3cc5=_0x2323b6;$(this)[_0x2a3cc5(0x247)]('.hly-exclusion-rule-row')['remove'](),_0x239bda[_0x2a3cc5(0x1c9)]()[_0x2a3cc5(0x30f)]===0x0&&_0x239bda[_0x2a3cc5(0x289)]('暂无规则

');});if(_0x5ac04c===_0x2323b6(0x2d4)){const _0x567434=_0x447a82[_0x2323b6(0x210)](_0x2323b6(0x1e7)),_0x4c513d=_0x447a82['find'](_0x2323b6(0x259));_0x567434['on'](_0x2323b6(0x1c5),()=>{const _0xd1e5f=_0x2323b6;_0x4c513d[_0xd1e5f(0x1ce)](_0xd1e5f(0x208),_0x567434['is'](_0xd1e5f(0x368))?_0xd1e5f(0x2b5):'none');});}}});}function previewCondensation(){const _0x4be9d3=_0x15063a,_0xc4e9f2=document[_0x4be9d3(0x220)]('hly-condensation-results');try{const _0x3c3bb7=_0x4b5037[_0x4be9d3(0x2d1)](),_0x2f81da=_0x3c3bb7[_0x4be9d3(0x261)][_0x4be9d3(0x2f1)]||[],_0x4f4139={'user':document[_0x4be9d3(0x220)](_0x4be9d3(0x24f))[_0x4be9d3(0x2d8)],'ai':document[_0x4be9d3(0x220)](_0x4be9d3(0x1d0))[_0x4be9d3(0x2d8)]},_0x3f0e53=document['getElementById'](_0x4be9d3(0x2e5))[_0x4be9d3(0x2d8)],_0x4acdc1=_0x3f0e53?document[_0x4be9d3(0x220)](_0x4be9d3(0x2b0))[_0x4be9d3(0x314)][_0x4be9d3(0x36a)](',')[_0x4be9d3(0x2a1)](_0x272004=>_0x272004[_0x4be9d3(0x16f)]())[_0x4be9d3(0x19a)](Boolean):[],_0x2f6263=_0x4b5037['getMessagesForCondensation'](_0x4f4139);if(!_0x2f6263||_0x2f6263['length']===0x0){_0xc4e9f2['textContent']='根据当前勾选条件,未找到符合的消息可供预览。',toastr['warning'](_0x4be9d3(0x241),_0x4be9d3(0x2a3));return;}const _0xf6bd62=getContext()[_0x4be9d3(0x216)],_0x14410a=_0x2f6263['map']((_0x3b618f,_0x151c8f)=>{const _0x2ce44a=_0x4be9d3;let _0x1458d1;if(_0x3b618f['is_user'])_0x1458d1=_0x3b618f['mes'];else{if(_0x3f0e53&&_0x4acdc1['length']>0x0){const _0x4b2951=extractBlocksByTags(_0x3b618f[_0x2ce44a(0x2c6)],_0x4acdc1);_0x4b2951['length']>0x0?_0x1458d1=_0x4b2951[_0x2ce44a(0x36d)]('\x0a\x0a'):_0x1458d1=_0x3b618f['mes'];}else _0x1458d1=_0x3b618f[_0x2ce44a(0x2c6)];_0x1458d1=applyExclusionRules(_0x1458d1,_0x2f81da);}const _0x4eb868=_0xf6bd62[_0x2ce44a(0x240)](_0x89d390=>_0x89d390===_0x3b618f),_0x50aff7=_0x4eb868!==-0x1?_0x4eb868+0x1:-0x1;return{'id':_0x2ce44a(0x1de)+_0x151c8f,'name':_0x3b618f[_0x2ce44a(0x265)],'content':_0x1458d1[_0x2ce44a(0x16f)](),'floor':_0x50aff7,'is_user':_0x3b618f[_0x2ce44a(0x18c)],'send_date':_0x3b618f[_0x2ce44a(0x1b5)]};})[_0x4be9d3(0x19a)](_0x212c38=>_0x212c38['content']);if(_0x14410a[_0x4be9d3(0x30f)]===0x0){_0xc4e9f2[_0x4be9d3(0x17b)]=_0x4be9d3(0x1f6),toastr['warning'](_0x4be9d3(0x1f6),_0x4be9d3(0x2a3));return;}const _0x58a465=_0x14410a[_0x4be9d3(0x2a1)]((_0x1bf1f3,_0x87ec56)=>_0x4be9d3(0x326)+_0x1bf1f3['id']+_0x4be9d3(0x1f8)+_0x1bf1f3['floor']+_0x4be9d3(0x264)+_0x1bf1f3[_0x4be9d3(0x265)]+']\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'+_0x1bf1f3[_0x4be9d3(0x341)]+_0x4be9d3(0x20f)+_0x1bf1f3['id']+_0x4be9d3(0x296))[_0x4be9d3(0x36d)]('');showHtmlModal('预览并编辑凝识内容',_0x4be9d3(0x1a6)+_0x58a465+'',{'okText':'确认并更新预览','onOk':_0xc674c5=>{const _0x1f96ed=_0x4be9d3,_0x1c1501=[];_0xc674c5[_0x1f96ed(0x210)](_0x1f96ed(0x1b8))[_0x1f96ed(0x29a)](function(){const _0x495a73=_0x1f96ed,_0x41d3ce=$(this)[_0x495a73(0x210)](_0x495a73(0x1da)),_0x234872=_0x41d3ce[_0x495a73(0x239)]();_0x234872[_0x495a73(0x16f)]()&&_0x1c1501['push']({'mes':_0x234872,'is_user':_0x41d3ce['data'](_0x495a73(0x34a)),'send_date':_0x41d3ce[_0x495a73(0x27e)]('send-date'),'floor':_0x41d3ce['data'](_0x495a73(0x2d0))});}),_0xc4e9f2['dataset']['finalMessages']=JSON[_0x1f96ed(0x187)](_0x1c1501);const _0x1c521b=document[_0x1f96ed(0x220)]('hly-layer-start')[_0x1f96ed(0x314)],_0x544c81=document[_0x1f96ed(0x220)](_0x1f96ed(0x2ec))[_0x1f96ed(0x314)];_0xc4e9f2[_0x1f96ed(0x17b)]=_0x1f96ed(0x34d)+_0x1c521b+_0x1f96ed(0x327)+_0x544c81+_0x1f96ed(0x2f9)+_0x1c1501['length']+_0x1f96ed(0x30d),toastr['success'](_0x1f96ed(0x178),'圣旨已达');}}),$(_0x4be9d3(0x1f5))['on'](_0x4be9d3(0x1c6),function(_0x323c1c){const _0x1873dd=_0x4be9d3;_0x323c1c[_0x1873dd(0x28f)]();const _0x317d89=$(this)['data'](_0x1873dd(0x2a7));$('#'+_0x317d89)[_0x1873dd(0x371)]();});}catch(_0x10886b){console[_0x4be9d3(0x2f5)](_0x4be9d3(0x199),_0x10886b),_0xc4e9f2['textContent']='预览失败:\x20'+_0x10886b[_0x4be9d3(0x2fd)],toastr[_0x4be9d3(0x2f5)]('预览失败:\x20'+_0x10886b[_0x4be9d3(0x2fd)],_0x4be9d3(0x1e2));}}function log(_0x319dac,_0x203739='info'){const _0x42c98b=_0x15063a,_0x4f5728=document[_0x42c98b(0x220)](_0x42c98b(0x2c3));if(!_0x4f5728)return;const _0x55a16a=document['createElement']('p'),_0x2fd4b8=new Date()[_0x42c98b(0x34f)]();let _0x3c0197='fa-circle-info',_0x257e7d='log-info';switch(_0x203739){case _0x42c98b(0x336):_0x3c0197=_0x42c98b(0x1d2),_0x257e7d=_0x42c98b(0x1c2);break;case _0x42c98b(0x2f5):_0x3c0197=_0x42c98b(0x302),_0x257e7d=_0x42c98b(0x20b);break;case _0x42c98b(0x195):_0x3c0197=_0x42c98b(0x35c),_0x257e7d=_0x42c98b(0x30a);break;}_0x55a16a[_0x42c98b(0x366)]=_0x42c98b(0x281)+_0x257e7d,_0x55a16a[_0x42c98b(0x2e0)]=_0x42c98b(0x303)+_0x3c0197+_0x42c98b(0x1fe)+_0x2fd4b8+']\x20'+_0x319dac;const _0x13f854=_0x4f5728[_0x42c98b(0x267)](_0x42c98b(0x31f));_0x13f854&&_0x13f854[_0x42c98b(0x371)](),_0x4f5728[_0x42c98b(0x24b)](_0x55a16a),_0x4f5728[_0x42c98b(0x1a2)]=_0x4f5728['scrollHeight'];}async function ingestManualText(){const _0x360c14=_0x15063a,_0x5b5301=document[_0x360c14(0x220)]('hly-manual-text'),_0x286211=_0x5b5301['value']['trim']();if(!_0x286211){toastr['warning'](_0x360c14(0x274),_0x360c14(0x2a3)),log('用户尝试录入空文本。',_0x360c14(0x195));return;}log(_0x360c14(0x21a)+_0x286211[_0x360c14(0x30f)],'info'),toastr[_0x360c14(0x1d7)](_0x360c14(0x356),'圣旨');try{const _0xe4852b=await _0x4b5037['ingestTextToHanlinyuan'](_0x286211,_0x360c14(0x2de),{'sourceName':_0x360c14(0x2fb)});if(_0xe4852b[_0x360c14(0x336)])toastr[_0x360c14(0x336)](_0x360c14(0x2b3)+_0xe4852b['count']+_0x360c14(0x357),'大功告成'),log('手动录入成功,新增\x20'+_0xe4852b[_0x360c14(0x310)]+'\x20条忆识。',_0x360c14(0x336)),_0x5b5301['value']='';else throw new Error(_0xe4852b[_0x360c14(0x2f5)]||_0x360c14(0x297));}catch(_0x36bcc4){console[_0x360c14(0x2f5)](_0x360c14(0x260),_0x36bcc4),toastr[_0x360c14(0x2f5)]('文书录入失败:\x20'+_0x36bcc4[_0x360c14(0x2fd)],_0x360c14(0x1e2)),log(_0x360c14(0x2ab)+_0x36bcc4['message'],_0x360c14(0x2f5));}finally{await updatePanelStatus();}} From 886273b4ab62330444abe2dc05ef88ca8b4b9130 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:20:08 +0800 Subject: [PATCH 15/56] Update historiography-bindings.js --- ui/historiography-bindings.js | 48 ++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/ui/historiography-bindings.js b/ui/historiography-bindings.js index 9d9da5a..ae4b2b7 100644 --- a/ui/historiography-bindings.js +++ b/ui/historiography-bindings.js @@ -10,7 +10,8 @@ import { applyExclusionRules, extractBlocksByTags } from '../core/utils/rag-tag- import { getAvailableWorldbooks, getLoresForWorldbook, executeManualSummary, executeRefinement, - executeExpedition, stopExpedition + executeExpedition, stopExpedition, + archiveCurrentLedger, getArchivedLedgers, restoreArchivedLedger } from "../core/historiographer.js"; import { getNgmsApiSettings, testNgmsApiConnection, fetchNgmsModels } from "../core/api/Ngms_api.js"; @@ -265,6 +266,51 @@ export function bindHistoriographyEvents() { updateExpeditionButtonUI('idle'); + // ========== 📚 史册归档与回溯 绑定 ========== + const archiveCurrentBtn = document.getElementById("amily2_mhb_archive_current"); + const archiveSelector = document.getElementById("amily2_mhb_archive_selector"); + const refreshArchivesBtn = document.getElementById("amily2_mhb_refresh_archives"); + const restoreArchiveBtn = document.getElementById("amily2_mhb_restore_archive"); + + const updateArchiveList = async () => { + archiveSelector.innerHTML = ''; + const archives = await getArchivedLedgers(); + archiveSelector.innerHTML = ""; // 清空 + if (archives && archives.length > 0) { + archives.forEach((arch) => { + const option = document.createElement("option"); + option.value = arch.key; + option.textContent = arch.comment; + archiveSelector.appendChild(option); + }); + } else { + archiveSelector.innerHTML = ''; + } + }; + + archiveCurrentBtn.addEventListener("click", async () => { + if (confirm("确定要归档当前的【对话流水总帐】并停用它吗?\n这将允许您开始一段全新的历史记录。")) { + const success = await archiveCurrentLedger(); + if (success) { + updateArchiveList(); // 归档成功后刷新列表 + } + } + }); + + refreshArchivesBtn.addEventListener("click", updateArchiveList); + + restoreArchiveBtn.addEventListener("click", async () => { + const selectedKey = archiveSelector.value; + if (!selectedKey) { + toastr.warning("请先选择一个要回溯的史册!", "圣谕不明"); + return; + } + if (confirm("确定要回溯选中的史册吗?\n当前的活跃史册(如果有)将被自动归档。")) { + await restoreArchivedLedger(selectedKey); + updateArchiveList(); // 回溯后刷新列表 + } + }); + // ========== 💎 宏史卷 (史册精炼) 绑定 ========== const largeWbSelector = document.getElementById( "amily2_mhb_large_worldbook_selector", From b8523539e3bc523adf9425607ecf7ed53ff4282f Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:20:52 +0800 Subject: [PATCH 16/56] Update page-window.js --- ui/page-window.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ui/page-window.js b/ui/page-window.js index 4dabebc..a831a1f 100644 --- a/ui/page-window.js +++ b/ui/page-window.js @@ -120,12 +120,22 @@ export function showHtmlModal(title, htmlContent, options = {}) { } +function escapeHtml(text) { + if (!text) return ''; + return text + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + export function showSummaryModal(summaryText, callbacks) { const { onConfirm, onRegenerate, onCancel } = callbacks; const modalHtml = `
- +
`; From 6595b7554ad32c92a880484cd288bc3bc8a5d2f2 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 23 Nov 2025 22:21:52 +0800 Subject: [PATCH 17/56] Update manifest.json --- manifest.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index b8b708b..5b2bf15 100644 --- a/manifest.json +++ b/manifest.json @@ -1,9 +1,9 @@ { "name": "Amily2号聊天优化助手", "display_name": "Amily2号助手", - "version": "1.6.4", + "version": "1.6.5", "author": "Wx-2025", - "description": "一个拥有独立UI的智能引擎,正文优化、自动总结、记忆表格、rag向量、隐藏楼层、剧情推进六大功能整合。", + "description": "一个拥有独立UI的智能引擎,正文优化、自动总结、记忆表格、rag向量、隐藏楼层、剧情推进等多功能整合。", "minSillyTavernVersion": "1.10.0", "requires": [], "homePage": "https://github.com/Wx-2025/ST-Amily2-Chat-Optimisation.git", @@ -35,5 +35,6 @@ + From 86fef030446f8295c7c180fd380ed44229d74913 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Mon, 24 Nov 2025 21:13:56 +0800 Subject: [PATCH 18/56] Update api.js --- core/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api.js b/core/api.js index 139f560..0c410b2 100644 --- a/core/api.js +++ b/core/api.js @@ -46,7 +46,7 @@ const UPDATE_CHECK_URL = "https://raw.githubusercontent.com/Wx-2025/ST-Amily2-Chat-Optimisation/refs/heads/main/amily2_update_info.json"; const MESSAGE_BOARD_URL = - "https://raw.githubusercontent.com/Wx-2025/ST-Amily2-Chat-Optimisation/refs/heads/main/amily2_message_board.json"; + "https://amilyservice.amily49.cc/amily2_message_board.json"; export async function fetchMessageBoardContent() { if (!MESSAGE_BOARD_URL) { From d8011885f131fcf29b2bfa18b9c7c62ce619685f Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Mon, 24 Nov 2025 21:14:23 +0800 Subject: [PATCH 19/56] Update index.js --- index.js | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/index.js b/index.js index 614ee81..2ab4d2f 100644 --- a/index.js +++ b/index.js @@ -193,14 +193,22 @@ async function handleUpdateCheck() { } async function handleMessageBoard() { - const messageData = await fetchMessageBoardContent(); - if (messageData && messageData.message) { - const messageBoard = $('#amily2_message_board'); - const messageContent = $('#amily2_message_content'); - messageContent.html(messageData.message); - messageBoard.show(); - console.log("【Amily2号-内务府】已成功获取并展示来自陛下的最新圣谕。"); - } + const updateMessage = async () => { + try { + const messageData = await fetchMessageBoardContent(); + if (messageData && messageData.message) { + const messageBoard = $('#amily2_message_board'); + const messageContent = $('#amily2_message_content'); + messageContent.html(messageData.message); + messageBoard.show(); + console.log("【Amily2号-内务府】已成功获取并展示来自陛下的最新圣谕。"); + } + } catch (error) { + console.error("【Amily2号-内务府】获取留言板失败:", error); + } + }; + await updateMessage(); + setInterval(updateMessage, 60000); } @@ -763,7 +771,7 @@ jQuery(async () => { handleUpdateCheck(); handleMessageBoard(); - initializeOnlineTracker(); + initializeOnlineTracker(); // 【Amily2号-在线统计】启动在线人数统计 initializeRenderer(); @@ -804,7 +812,7 @@ jQuery(async () => { }); function initializeOnlineTracker() { - const wsUrl = 'ws://service.amily49.cc:2086'; + const wsUrl = 'wss://amilyservice.amily49.cc'; let ws; let reconnectInterval; @@ -818,6 +826,7 @@ function initializeOnlineTracker() { if ($('#amily2-online-tracker').length > 0) return; const $container = $('
'); $container.html('Connecting...'); + $drawerContent.prepend($container); connect(); @@ -867,4 +876,3 @@ function initializeOnlineTracker() { // 启动挂载流程 mountTracker(); } - From aff7ade9c1f82d7c2748e59e5014da3570e76225 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Mon, 24 Nov 2025 21:59:21 +0800 Subject: [PATCH 20/56] Update index.js --- index.js | 879 +------------------------------------------------------ 1 file changed, 1 insertion(+), 878 deletions(-) diff --git a/index.js b/index.js index 2ab4d2f..cec78d4 100644 --- a/index.js +++ b/index.js @@ -1,878 +1 @@ -import { createDrawer } from "./ui/drawer.js"; -import "./MiZheSi/index.js"; // 【密折司】独立模块 -import "./PresetSettings/index.js"; // 【预设设置】独立模块 -import "./PreOptimizationViewer/index.js"; // 【优化前文查看器】独立模块 -import "./WorldEditor/WorldEditor.js"; // 【世界编辑器】独立模块 -import { registerSlashCommands } from "./core/commands.js"; -import { onMessageReceived, handleTableUpdate } from "./core/events.js"; -import { processPlotOptimization } from "./core/summarizer.js"; -import { getContext } from "/scripts/extensions.js"; -import { characters, this_chid } from '/script.js'; -import { injectTableData, generateTableContent } from "./core/table-system/injector.js"; -import { initialize as initializeRagProcessor } from "./core/rag-processor.js"; -import { loadTables, clearHighlights, rollbackAndRefill, rollbackState, commitPendingDeletions, saveStateToMessage, getMemoryState, clearUpdatedTables } from './core/table-system/manager.js'; -import { fillWithSecondaryApi } from './core/table-system/secondary-filler.js'; -import { renderTables } from './ui/table-bindings.js'; -import { log } from './core/table-system/logger.js'; -import { eventSource, event_types, saveSettingsDebounced } from '/script.js'; -import { checkForUpdates, fetchMessageBoardContent } from './core/api.js'; -import { setUpdateInfo, applyUpdateIndicator } from './ui/state.js'; -import { pluginVersion, extensionName, defaultSettings } from './utils/settings.js'; -import { tableSystemDefaultSettings } from './core/table-system/settings.js'; -import { extension_settings } from '/scripts/extensions.js'; -import { manageLorebookEntriesForChat } from './core/lore.js'; -import { initializeCharacterWorldBook } from './CharacterWorldBook/cwb_index.js'; -import { cwbDefaultSettings } from './CharacterWorldBook/src/cwb_config.js'; -import { bindGlossaryEvents } from './glossary/GT_bindings.js'; -import './core/amily2-updater.js'; -import { updateOrInsertTableInChat, startContinuousRendering, stopContinuousRendering } from './ui/message-table-renderer.js'; -import { initializeRenderer } from './core/tavern-helper/renderer.js'; -import { initializeApiListener, registerApiHandler, amilyHelper, initializeAmilyHelper } from './core/tavern-helper/main.js'; - -const STYLE_SETTINGS_KEY = 'amily2_custom_styles'; -const STYLE_ROOT_SELECTOR = '#amily2_memorisation_forms_panel'; -let styleRoot = null; - -function getStyleRoot() { - if (!styleRoot) { - styleRoot = document.querySelector(STYLE_ROOT_SELECTOR); - } - return styleRoot; -} - -function applyStyles(styleObject) { - const root = getStyleRoot(); - if (!root || !styleObject) return; - delete styleObject._comment; - - for (const [key, value] of Object.entries(styleObject)) { - if (key.startsWith('--am2-')) { - root.style.setProperty(key, value); - } - } -} - -function loadAndApplyStyles() { - const savedStyles = extension_settings[extensionName]?.[STYLE_SETTINGS_KEY]; - if (savedStyles && typeof savedStyles === 'object' && Object.keys(savedStyles).length > 0) { - applyStyles(savedStyles); - } -} - -function saveStyles(styleObject) { - if (!extension_settings[extensionName]) { - extension_settings[extensionName] = {}; - } - extension_settings[extensionName][STYLE_SETTINGS_KEY] = styleObject; - saveSettingsDebounced(); -} - -function resetToDefaultStyles() { - const root = getStyleRoot(); - if (!root) return; - const savedStyles = extension_settings[extensionName]?.[STYLE_SETTINGS_KEY]; - if (savedStyles && typeof savedStyles === 'object') { - for (const key of Object.keys(savedStyles)) { - if (key.startsWith('--am2-')) { - root.style.removeProperty(key); - } - } - } - saveStyles(null); - toastr.success('已恢复默认界面样式。'); -} - -function getDefaultCssVars() { - return { - "--am2-font-size-base": "14px", "--am2-gap-main": "10px", "--am2-padding-main": "8px 5px", - "--am2-container-bg": "rgba(0,0,0,0.1)", "--am2-container-border": "1px solid rgba(255, 255, 255, 0.2)", - "--am2-container-border-radius": "12px", "--am2-container-padding": "10px", "--am2-container-shadow": "inset 0 0 15px rgba(0,0,0,0.2)", - "--am2-title-font-size": "1.1em", "--am2-title-font-weight": "bold", "--am2-title-text-shadow": "0 0 5px rgba(200, 200, 255, 0.3)", - "--am2-title-gradient-start": "#c0bde4", "--am2-title-gradient-end": "#dfdff0", "--am2-title-icon-color": "#9e8aff", - "--am2-title-icon-margin": "10px", "--am2-table-bg": "rgba(0,0,0,0.2)", "--am2-table-border": "1px solid rgba(255, 255, 255, 0.25)", - "--am2-table-cell-padding": "6px 8px", "--am2-table-cell-font-size": "0.95em", "--am2-header-bg": "rgba(255, 255, 255, 0.1)", - "--am2-header-color": "#e0e0e0", "--am2-header-editable-bg": "rgba(172, 216, 255, 0.1)", "--am2-header-editable-focus-bg": "rgba(172, 216, 255, 0.25)", - "--am2-header-editable-focus-outline": "1px solid #79b8ff", "--am2-cell-editable-bg": "rgba(255, 255, 172, 0.1)", - "--am2-cell-editable-focus-bg": "rgba(255, 255, 172, 0.25)", "--am2-cell-editable-focus-outline": "1px solid #ffc107", - "--am2-index-col-bg": "rgba(0, 0, 0, 0.3) !important", "--am2-index-col-color": "#aaa !important", "--am2-index-col-width": "40px", - "--am2-index-col-padding": "10px 5px !important", "--am2-controls-gap": "5px", "--am2-controls-margin-bottom": "10px", - "--am2-cell-highlight-bg": "rgba(144, 238, 144, 0.3)" - }; -} - -function exportStyles() { - const root = getStyleRoot(); - if (!root) { toastr.error('无法导出样式:找不到根元素。'); return; } - const computedStyle = getComputedStyle(root); - const stylesToExport = {}; - const defaultVars = getDefaultCssVars(); - for (const key of Object.keys(defaultVars)) { - stylesToExport[key] = computedStyle.getPropertyValue(key).trim(); - } - const blob = new Blob([JSON.stringify(stylesToExport, null, 2)], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = `Amily2-Theme-${new Date().toISOString().slice(0, 10)}.json`; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - URL.revokeObjectURL(url); - toastr.success('主题文件已开始下载。', '导出成功'); -} - -function importStyles() { - const input = document.createElement('input'); - input.type = 'file'; - input.accept = '.json'; - input.style.display = 'none'; - - const cleanup = () => { - if (document.body.contains(input)) { - document.body.removeChild(input); - } - }; - - input.onchange = e => { - const file = e.target.files[0]; - if (!file) { - cleanup(); - return; - } - const reader = new FileReader(); - reader.onload = event => { - try { - const importedStyles = JSON.parse(event.target.result); - if (typeof importedStyles !== 'object' || Array.isArray(importedStyles)) { - throw new Error('无效的JSON格式。'); - } - applyStyles(importedStyles); - saveStyles(importedStyles); - toastr.success('主题已成功导入并应用!'); - } catch (error) { - toastr.error(`导入失败:${error.message}`, '错误'); - } finally { - cleanup(); - } - }; - reader.readAsText(file); - }; - - document.body.appendChild(input); - input.click(); -} - -function compareVersions(v1, v2) { - const parts1 = v1.split('.').map(Number); - const parts2 = v2.split('.').map(Number); - const len = Math.max(parts1.length, parts2.length); - - for (let i = 0; i < len; i++) { - const p1 = parts1[i] || 0; - const p2 = parts2[i] || 0; - if (p1 > p2) return true; - if (p1 < p2) return false; - } - return false; -} - -async function handleUpdateCheck() { - console.log("【Amily2号】帝国已就绪,现派遣外交官,为陛下探查外界新情报..."); - const updateInfo = await checkForUpdates(); - - if (updateInfo && updateInfo.version) { - const isNew = compareVersions(updateInfo.version, pluginVersion); - if(isNew) { - console.log(`【Amily2号-情报部】捷报!发现新版本: ${updateInfo.version}。情报已转交内务府。`); - } else { - console.log(`【Amily2号-情报部】一切安好,帝国已是最新版本。情报已转交内务府备案。`); - } - setUpdateInfo(isNew, updateInfo); - applyUpdateIndicator(); - } -} - -async function handleMessageBoard() { - const updateMessage = async () => { - try { - const messageData = await fetchMessageBoardContent(); - if (messageData && messageData.message) { - const messageBoard = $('#amily2_message_board'); - const messageContent = $('#amily2_message_content'); - messageContent.html(messageData.message); - messageBoard.show(); - console.log("【Amily2号-内务府】已成功获取并展示来自陛下的最新圣谕。"); - } - } catch (error) { - console.error("【Amily2号-内务府】获取留言板失败:", error); - } - }; - await updateMessage(); - setInterval(updateMessage, 60000); -} - - - -function loadPluginStyles() { - const loadStyleFile = (fileName) => { - const styleId = `amily2-style-${fileName.split('.')[0]}`; - if (document.getElementById(styleId)) return; - - const extensionPath = `scripts/extensions/third-party/${extensionName}/assets/${fileName}?v=${Date.now()}`; - - const link = document.createElement("link"); - link.id = styleId; - link.rel = "stylesheet"; - link.type = "text/css"; - link.href = extensionPath; - document.head.appendChild(link); - console.log(`[Amily2号-皇家制衣局] 已为帝国披上华服: ${fileName}`); - }; - - // 颁布三道制衣圣谕 - loadStyleFile("style.css"); // 【第一道圣谕】为帝国主体宫殿披上通用华服 - loadStyleFile("historiography.css"); // 【第二道圣谕】为敕史局披上其专属华服 - loadStyleFile("hanlinyuan.css"); // 【第三道圣谕】为翰林院披上其专属华服 - loadStyleFile("amily2-glossary.css"); // 【新圣谕】为术语表披上其专属华服 - loadStyleFile("table.css"); // 【第四道圣谕】为内存储司披上其专属华服 - loadStyleFile("optimization.css"); // 【第五道圣谕】为剧情优化披上其专属华服 - loadStyleFile("renderer.css"); // 【新圣谕】为渲染器披上其专属华服 - loadStyleFile("iframe-renderer.css"); // 【新圣谕】为iframe渲染内容披上其专属华服 - - // 【第六道圣谕】为角色世界书披上其专属华服 - const cwbStyleId = 'cwb-feature-style'; - if (!document.getElementById(cwbStyleId)) { - const cwbLink = document.createElement("link"); - cwbLink.id = cwbStyleId; - cwbLink.rel = "stylesheet"; - cwbLink.type = "text/css"; - cwbLink.href = `scripts/extensions/third-party/${extensionName}/CharacterWorldBook/cwb_style.css?v=${Date.now()}`; - document.head.appendChild(cwbLink); - console.log(`[Amily2号-皇家制衣局] 已为角色世界书披上华服: cwb_style.css`); - } - - // 【第七道圣谕】为世界编辑器披上其专属华服 - const worldEditorStyleId = 'world-editor-style'; - if (!document.getElementById(worldEditorStyleId)) { - const worldEditorLink = document.createElement("link"); - worldEditorLink.id = worldEditorStyleId; - worldEditorLink.rel = "stylesheet"; - worldEditorLink.type = "text/css"; - worldEditorLink.href = `scripts/extensions/third-party/${extensionName}/WorldEditor/WorldEditor.css?v=${Date.now()}`; - document.head.appendChild(worldEditorLink); - console.log(`[Amily2号-皇家制衣局] 已为世界编辑器披上华服: WorldEditor.css`); - } - -} - - -window.addEventListener('message', function (event) { - // 处理头像获取请求 - if (event.data && event.data.type === 'getAvatars') { - // 【兼容性修复】如果 LittleWhiteBox 激活,则不处理此消息,避免冲突 - if (window.isXiaobaixEnabled) { - return; - } - const userAvatar = `/characters/${getContext().userCharacter?.avatar ?? ''}`; - const charAvatar = `/characters/${getContext().characters[this_chid]?.avatar ?? ''}`; - event.source.postMessage({ - source: 'amily2-host', - type: 'avatars', - urls: { user: userAvatar, char: charAvatar } - }, '*'); - return; - } - - // 处理来自 iframe 的交互事件 - if (event.data && event.data.source === 'amily2-iframe') { - const { action, detail } = event.data; - console.log(`[Amily2-主窗口] 收到来自iframe的动作: ${action}`, detail); - - switch (action) { - case 'sendMessage': - if (detail && detail.message) { - $('#send_textarea').val(detail.message).trigger('input'); - $('#send_but').trigger('click'); - console.log(`[Amily2-主窗口] 已发送消息: ${detail.message}`); - } - break; - - case 'showToast': - if (detail && detail.message && window.toastr) { - const toastType = detail.type || 'info'; - if (typeof window.toastr[toastType] === 'function') { - window.toastr[toastType](detail.message, detail.title || '通知'); - } - } - break; - - case 'buttonClick': - console.log(`[Amily2-主窗口] 按钮被点击:`, detail); - if (window.toastr) { - window.toastr.info(`按钮 "${detail.buttonId || '未知'}" 被点击`, 'iframe交互'); - } - break; - - default: - console.warn(`[Amily2-主窗口] 未知的动作类型: ${action}`); - } - } -}); - -window.addEventListener("error", (event) => { - const stackTrace = event.error?.stack || ""; - if (stackTrace.includes("ST-Amily2-Chat-Optimisation")) { - console.error("[Amily2-全局卫队] 捕获到严重错误:", event.error); - toastr.error(`Amily2插件错误: ${event.error?.message || "未知错误"}`, "严重错误", { timeOut: 10000 }); - } -}); - - -jQuery(async () => { - console.log("[Amily2号-帝国枢密院] 开始执行开国大典..."); - initializeApiListener(); - - registerApiHandler('getChatMessages', async (data) => { - return amilyHelper.getChatMessages(data.range, data.options); - }); - - registerApiHandler('setChatMessages', async (data) => { - return await amilyHelper.setChatMessages(data.messages, data.options); - }); - - registerApiHandler('setChatMessage', async (data) => { - const field_values = data.field_values || data.content; - const message_id = data.message_id !== undefined ? data.message_id : data.index; - const options = data.options || {}; - - console.log('[Amily2-API] setChatMessage 收到参数:', { field_values, message_id, options, raw_data: data }); - - return await amilyHelper.setChatMessage(field_values, message_id, options); - }); - - registerApiHandler('createChatMessages', async (data) => { - return await amilyHelper.createChatMessages(data.messages, data.options); - }); - - registerApiHandler('deleteChatMessages', async (data) => { - return await amilyHelper.deleteChatMessages(data.ids, data.options); - }); - - registerApiHandler('getLorebooks', async (data) => { - return await amilyHelper.getLorebooks(); - }); - - registerApiHandler('getCharLorebooks', async (data) => { - return await amilyHelper.getCharLorebooks(data.options); - }); - - registerApiHandler('getLorebookEntries', async (data) => { - return await amilyHelper.getLorebookEntries(data.bookName); - }); - - registerApiHandler('setLorebookEntries', async (data) => { - return await amilyHelper.setLorebookEntries(data.bookName, data.entries); - }); - - registerApiHandler('createLorebookEntries', async (data) => { - return await amilyHelper.createLorebookEntries(data.bookName, data.entries); - }); - - registerApiHandler('createLorebook', async (data) => { - return await amilyHelper.createLorebook(data.bookName); - }); - - registerApiHandler('triggerSlash', async (data) => { - return await amilyHelper.triggerSlash(data.command); - }); - - registerApiHandler('getLastMessageId', async (data) => { - return amilyHelper.getLastMessageId(); - }); - - registerApiHandler('toastr', async (data) => { - if (window.toastr && typeof window.toastr[data.type] === 'function') { - window.toastr[data.type](data.message, data.title); - } - return true; - }); - - registerApiHandler('switchSwipe', async (data) => { - const { messageIndex, swipeIndex } = data; - const messages = await amilyHelper.getChatMessages(messageIndex, { include_swipes: true }); - - if (messages && messages.length > 0 && messages[0].swipes) { - const content = messages[0].swipes[swipeIndex]; - if (content !== undefined) { - await amilyHelper.setChatMessages([{ - message_id: messageIndex, - message: content - }], { refresh: 'affected' }); - - const context = getContext(); - if (context.chat[messageIndex]) { - context.chat[messageIndex].swipe_id = swipeIndex; - } - - return { success: true, message: `已切换至开场白 ${swipeIndex}` }; - } - } - - throw new Error(`无法切换到开场白 ${swipeIndex}`); - }); - - initializeAmilyHelper(); - - console.log("[Amily2号-帝国枢密院] 开始执行开国大典..."); - - if (!extension_settings[extensionName]) { - extension_settings[extensionName] = {}; - } - const combinedDefaultSettings = { ...defaultSettings, ...tableSystemDefaultSettings, ...cwbDefaultSettings, render_on_every_message: false, amily_render_enabled: false }; - - for (const key in combinedDefaultSettings) { - if (extension_settings[extensionName][key] === undefined) { - extension_settings[extensionName][key] = combinedDefaultSettings[key]; - } - } - console.log("[Amily2号-帝国枢密院] 帝国基本法已确认,档案室已与国库对接完毕。"); - - let attempts = 0; - const maxAttempts = 100; - const checkInterval = 100; - const targetSelector = "#sys-settings-button"; - - const deploymentInterval = setInterval(async () => { - if ($(targetSelector).length > 0) { - clearInterval(deploymentInterval); - console.log("[Amily2号-帝国枢密院] SillyTavern宫殿主体已确认,开国大典正式开始!"); - - try { - console.log("[Amily2号-开国大典] 步骤一:为宫殿披上华服..."); - loadPluginStyles(); - - console.log("[Amily2号-开国大典] 步骤二:皇家仪仗队就位..."); - await registerSlashCommands(); - - console.log("[Amily2号-开国大典] 步骤三:开始召唤府邸..."); - createDrawer(); - - function waitForGlossaryPanelAndBindEvents() { - let attempts = 0; - const maxAttempts = 50; - const interval = 100; - - const checker = setInterval(() => { - const glossaryPanel = document.getElementById('amily2_glossary_panel'); - - if (glossaryPanel) { - clearInterval(checker); - try { - console.log("[Amily2号-开国大典] 步骤3.6:侦测到术语表停泊位,开始绑定事件..."); - bindGlossaryEvents(); - console.log("[Amily2号-开国大典] 术语表事件已成功绑定。"); - } catch (error) { - console.error("!!!【术语表事件绑定失败】:", error); - } - } else { - attempts++; - if (attempts >= maxAttempts) { - clearInterval(checker); - console.error("!!!【术语表事件绑定失败】: 等待面板 #amily2_glossary_panel 超时。"); - } - } - }, interval); - } - waitForGlossaryPanelAndBindEvents(); - - function waitForCwbPanelAndInitialize() { - let attempts = 0; - const maxAttempts = 50; - const interval = 100; - - const checker = setInterval(async () => { - const $cwbPanel = $('#amily2_character_world_book_panel'); - - if ($cwbPanel.length > 0) { - clearInterval(checker); - try { - console.log("[Amily2号-开国大典] 步骤3.5:侦测到角色世界书停泊位,开始构建..."); - await initializeCharacterWorldBook($cwbPanel); - console.log("[Amily2号-开国大典] 角色世界书已成功构建并融入帝国。"); - } catch (error) { - console.error("!!!【角色世界书构建失败】:", error); - } - } else { - attempts++; - if (attempts >= maxAttempts) { - clearInterval(checker); - console.error("!!!【角色世界书构建失败】: 等待面板 #amily2_character_world_book_panel 超时。"); - } - } - }, interval); - } - - waitForCwbPanelAndInitialize(); - - console.log("[Amily2号-开国大典] 步骤3.8:注册表格占位符宏..."); - try { - const context = getContext(); - if (context && typeof context.registerMacro === 'function') { - context.registerMacro('Amily2EditContent', () => { - const content = generateTableContent(); - if (content) { - window.AMILY2_MACRO_REPLACED = true; - } - return content; - }); - console.log('[Amily2-核心引擎] 已成功注册表格占位符宏: {{Amily2EditContent}}'); - } else { - console.warn('[Amily2-核心引擎] 无法注册表格宏,可能是 SillyTavern 版本不兼容。'); - } - } catch (error) { - console.error('[Amily2-核心引擎] 注册表格宏时发生错误:', error); - } - - console.log("[Amily2号-开国大典] 步骤四:部署帝国哨兵网络..."); - - let isProcessingPlotOptimization = false; - - async function onPlotGenerationAfterCommands(type, params, dryRun) { - clearUpdatedTables(); - - - console.log("[Amily2-剧情优化] Generation after commands triggered", { type, params, dryRun, isProcessing: isProcessingPlotOptimization }); - - if (type === 'regenerate' || isProcessingPlotOptimization || dryRun) { - console.log("[Amily2-剧情优化] Skipping due to conditions:", { type, isProcessing: isProcessingPlotOptimization, dryRun }); - return; - } - - const globalSettings = extension_settings[extensionName]; - if (globalSettings?.plotOpt_enabled === false) { - return; - } - - const isJqyhEnabled = globalSettings?.jqyhEnabled === true; - const isMainApiConfigured = !!globalSettings?.apiUrl || !!globalSettings?.tavernProfile; - - if (!isJqyhEnabled && !isMainApiConfigured) { - console.log("[Amily2-剧情优化] 优化已启用,但Jqyh API已禁用且主页API未配置。"); - return; - } - - isProcessingPlotOptimization = true; - let plotOptimizationToast = null; - const cancellationState = { isCancelled: false }; - - try { - const userMessage = $('#send_textarea').val(); - if (!userMessage) { - isProcessingPlotOptimization = false; - return false; - } - - const toastMessage = ` -
- 正在进行剧情优化... - -
- `; - - let cancellationReject; - const cancellationPromise = new Promise((_, reject) => { - cancellationReject = reject; - }); - - plotOptimizationToast = toastr.info(toastMessage, '剧情优化', { - timeOut: 0, - extendedTimeOut: 0, - tapToDismiss: false, - onclick: null, - escapeHtml: false, - onShown: function() { - $('#amily2-cancel-optimization-btn').one('click', function(event) { - event.stopPropagation(); - - if (plotOptimizationToast) { - plotOptimizationToast.remove(); - plotOptimizationToast = null; - } - - cancellationState.isCancelled = true; - cancellationReject(new Error("Optimization cancelled by user")); - }); - } - }); - - const context = getContext(); - const contextTurnCount = globalSettings.plotOpt_contextLimit || 10; - let slicedContext = []; - if (contextTurnCount > 0) { - slicedContext = context.chat.slice(-contextTurnCount); - } - - const optimizationPromise = processPlotOptimization({ mes: userMessage }, slicedContext, cancellationState); - - const result = await Promise.race([optimizationPromise, cancellationPromise]); - - if (result && result.contentToAppend) { - const currentUserInput = $('#send_textarea').val(); - const finalMessage = currentUserInput + '\n' + result.contentToAppend; - $('#send_textarea').val(finalMessage).trigger('input'); - toastr.success('剧情优化已完成并注入。', '操作成功'); - } else { - console.log("[Amily2-剧情优化] Plot optimization returned no result. Sending original message."); - } - - return false; - - } catch (error) { - if (error.message === "Optimization cancelled by user") { - console.log("[Amily2-剧情优化] 优化流程已被用户中止。发送原始消息。"); - toastr.warning('剧情优化任务已中止...', '操作取消', { timeOut: 2000 }); - } else { - console.error(`[Amily2-剧情优化] 处理发送前事件时出错:`, error); - toastr.error('剧情优化处理失败。', '错误'); - } - return false; - } finally { - isProcessingPlotOptimization = false; - if (plotOptimizationToast) { - toastr.clear(plotOptimizationToast); - plotOptimizationToast = null; - } - } - } - if (!window.amily2EventsRegistered) { - eventSource.on(event_types.GENERATION_AFTER_COMMANDS, onPlotGenerationAfterCommands); - eventSource.on(event_types.MESSAGE_RECEIVED, onMessageReceived); - eventSource.on(event_types.IMPERSONATE_READY, onMessageReceived); - eventSource.on(event_types.MESSAGE_RECEIVED, (chat_id) => handleTableUpdate(chat_id)); - eventSource.on(event_types.MESSAGE_SWIPED, async (chat_id) => { - const context = getContext(); - if (context.chat.length < 2) { - log('【监察系统】检测到消息滑动,但聊天记录不足,已跳过状态回退。', 'info'); - return; - } - - log('【监察系统】检测到消息滑动 (SWIPED),开始执行状态回退...', 'warn'); - rollbackState(); - - const latestMessage = context.chat[chat_id] || context.chat[context.chat.length - 1]; - if (latestMessage.is_user) { - log('【监察系统】滑动后最新消息是用户,跳过填表。', 'info'); - renderTables(); - return; - } - - const settings = extension_settings[extensionName]; - const fillingMode = settings.filling_mode || 'main-api'; - - if (fillingMode === 'main-api') { - log(`【监察系统】主填表模式,回退后强制刷新消息ID: ${chat_id}。`, 'info'); - await handleTableUpdate(chat_id, true); - } else if (fillingMode === 'secondary-api' || fillingMode === 'optimized') { - log('【监察系统】分步/优化模式,回退后强制二次填表最新消息。', 'info'); - await fillWithSecondaryApi(latestMessage, true); - } else { - log('【监察系统】未配置填表模式,跳过填表。', 'info'); - } - - renderTables(); - log('【监察系统】滑动后填表完成,UI 已刷新。', 'success'); - }); - eventSource.on(event_types.MESSAGE_EDITED, (mes_id) => { - handleTableUpdate(mes_id); - updateOrInsertTableInChat(); - }); - - eventSource.on(event_types.CHAT_CHANGED, () => { - window.lastPreOptimizationResult = null; - document.dispatchEvent(new CustomEvent('preOptimizationTextUpdated')); - - manageLorebookEntriesForChat(); - setTimeout(() => { - log("【监察系统】检测到“朝代更迭”(CHAT_CHANGED),开始重修史书并刷新宫殿...", 'info'); - clearHighlights(); - clearUpdatedTables(); - loadTables(); - renderTables(); - - if (extension_settings[extensionName].render_on_every_message) { - startContinuousRendering(); - } else { - stopContinuousRendering(); - } - }, 100); - }); - - eventSource.on(event_types.MESSAGE_DELETED, (message, index) => { - log(`【监察系统】检测到消息 ${index} 被删除,开始精确回滚UI状态。`, 'warn'); - clearHighlights(); - loadTables(index); - renderTables(); - }); - - eventSource.on(event_types.MESSAGE_RECEIVED, updateOrInsertTableInChat); - eventSource.on(event_types.chat_updated, updateOrInsertTableInChat); - - window.amily2EventsRegistered = true; - } - - console.log("[Amily2号-开国大典] 步骤五:初始化RAG处理器..."); - - try { - initializeRagProcessor(); - console.log('[Amily2-翰林院] RAG处理器已成功初始化'); - } catch (error) { - console.error('[Amily2-翰林院] RAG处理器初始化失败:', error); - } - - console.log("[Amily2号-开国大典] 步骤六:智能冲突检测与注入策略..."); - - async function executeAmily2Injection(...args) { - console.log('[Amily2-核心引擎] 开始执行统一注入 (聊天长度:', args[0]?.length || 0, ')'); - - try { - await injectTableData(...args); - } catch (error) { - console.error('[Amily2-内存储司] 表格注入失败:', error); - } - - if (window.hanlinyuanRagProcessor && typeof window.hanlinyuanRagProcessor.rearrangeChat === 'function') { - try { - console.log('[Amily2-核心引擎] 执行内置RAG注入。'); - await window.hanlinyuanRagProcessor.rearrangeChat(...args); - } catch (error) { - console.error('[Amily2-翰林院] RAG注入失败:', error); - } - } - } - - console.log('[Amily2-策略] 采用“完全主导”策略,覆盖 `vectors_rearrangeChat`。'); - window['vectors_rearrangeChat'] = executeAmily2Injection; - - if (window['amily2HanlinyuanInjector']) { - window['amily2HanlinyuanInjector'] = null; - } - - console.log("【Amily2号】帝国秩序已完美建立。Amily2号的府邸已恭候陛下的莅临。"); - - console.log("[Amily2号-开国大典] 步骤七:初始化版本显示系统..."); - if (typeof window.amily2Updater !== 'undefined') { - setTimeout(() => { - console.log("[Amily2号-版本系统] 正在启动版本检测器..."); - window.amily2Updater.initialize(); - }, 2000); - } else { - console.warn("[Amily2号-版本系统] 版本检测器未找到,可能加载失败"); - } - - handleUpdateCheck(); - handleMessageBoard(); - initializeOnlineTracker(); // 【Amily2号-在线统计】启动在线人数统计 - - initializeRenderer(); - - if (extension_settings[extensionName].render_on_every_message) { - startContinuousRendering(); - } - - setTimeout(() => { - try { - loadAndApplyStyles(); - - const importThemeBtn = document.getElementById('amily2-import-theme-btn'); - const exportThemeBtn = document.getElementById('amily2-export-theme-btn'); - const resetThemeBtn = document.getElementById('amily2-reset-theme-btn'); - - if (importThemeBtn) importThemeBtn.addEventListener('click', importStyles); - if (exportThemeBtn) exportThemeBtn.addEventListener('click', exportStyles); - if (resetThemeBtn) resetThemeBtn.addEventListener('click', resetToDefaultStyles); - - log('【凤凰阁】内联主题系统已通过延迟加载成功初始化并绑定事件。', 'success'); - } catch (error) { - log(`【凤凰阁】内联主题系统初始化失败: ${error}`, 'error'); - } - }, 500); - - } catch (error) { - console.error("!!!【开国大典失败】在执行系列法令时发生严重错误:", error); - } - - } else { - attempts++; - if (attempts >= maxAttempts) { - clearInterval(deploymentInterval); - console.error(`[Amily2号] 部署失败:等待 ${targetSelector} 超时。`); - } - } - }, checkInterval); -}); - -function initializeOnlineTracker() { - const wsUrl = 'wss://amilyservice.amily49.cc'; - - let ws; - let reconnectInterval; - - function mountTracker() { - const $drawerContent = $('#amily2_drawer_content'); - if ($drawerContent.length === 0 || !$drawerContent.data('initialized')) { - setTimeout(mountTracker, 1000); - return; - } - if ($('#amily2-online-tracker').length > 0) return; - const $container = $('
'); - $container.html('Connecting...'); - - $drawerContent.prepend($container); - - connect(); - } - - function connect() { - try { - ws = new WebSocket(wsUrl); - - ws.onopen = () => { - console.log('[Amily2-在线统计] 已连接到服务器'); - if (reconnectInterval) { - clearInterval(reconnectInterval); - reconnectInterval = null; - } - }; - - ws.onmessage = (event) => { - try { - const data = JSON.parse(event.data); - if (data.type === 'online_count') { - $('#amily2-online-count').text(`${data.count} 人在线`); - } - } catch (e) { - console.error('[Amily2-在线统计] 解析消息失败:', e); - } - }; - - ws.onclose = () => { - console.log('[Amily2-在线统计] 连接断开,尝试重连...'); - $('#amily2-online-count').text('离线'); - - if (!reconnectInterval) { - reconnectInterval = setInterval(connect, 5000); - } - }; - - ws.onerror = (err) => { - console.warn('[Amily2-在线统计] 连接错误:', err); - ws.close(); - }; - } catch (e) { - console.error('[Amily2-在线统计] 初始化失败:', e); - } - } - - // 启动挂载流程 - mountTracker(); -} +function _0x3ce3(_0x1b6de7,_0x176954){const _0x278f43=_0x278f();return _0x3ce3=function(_0x3ce3e7,_0x2dbc99){_0x3ce3e7=_0x3ce3e7-0x84;let _0x1318b=_0x278f43[_0x3ce3e7];return _0x1318b;},_0x3ce3(_0x1b6de7,_0x176954);}const _0x169b9e=_0x3ce3;(function(_0x4c65d4,_0x2548ab){const _0x5cce67=_0x3ce3,_0x721dcc=_0x4c65d4();while(!![]){try{const _0x27c9a4=parseInt(_0x5cce67(0x196))/0x1*(-parseInt(_0x5cce67(0x98))/0x2)+-parseInt(_0x5cce67(0x138))/0x3+parseInt(_0x5cce67(0x13e))/0x4+parseInt(_0x5cce67(0x148))/0x5*(-parseInt(_0x5cce67(0x128))/0x6)+parseInt(_0x5cce67(0x100))/0x7*(-parseInt(_0x5cce67(0x157))/0x8)+parseInt(_0x5cce67(0x145))/0x9*(-parseInt(_0x5cce67(0x102))/0xa)+parseInt(_0x5cce67(0x152))/0xb;if(_0x27c9a4===_0x2548ab)break;else _0x721dcc['push'](_0x721dcc['shift']());}catch(_0x1910ad){_0x721dcc['push'](_0x721dcc['shift']());}}}(_0x278f,0x32564));import{createDrawer}from'./ui/drawer.js';import'./MiZheSi/index.js';import'./PresetSettings/index.js';import'./PreOptimizationViewer/index.js';import'./WorldEditor/WorldEditor.js';import{registerSlashCommands}from'./core/commands.js';import{onMessageReceived,handleTableUpdate}from'./core/events.js';import{processPlotOptimization}from'./core/summarizer.js';import{getContext}from'/scripts/extensions.js';import{characters,this_chid}from'/script.js';import{injectTableData,generateTableContent}from'./core/table-system/injector.js';import{initialize as _0x4ccd67}from'./core/rag-processor.js';import{loadTables,clearHighlights,rollbackAndRefill,rollbackState,commitPendingDeletions,saveStateToMessage,getMemoryState,clearUpdatedTables}from'./core/table-system/manager.js';import{fillWithSecondaryApi}from'./core/table-system/secondary-filler.js';import{renderTables}from'./ui/table-bindings.js';import{log}from'./core/table-system/logger.js';import{eventSource,event_types,saveSettingsDebounced}from'/script.js';import{checkForUpdates,fetchMessageBoardContent}from'./core/api.js';import{setUpdateInfo,applyUpdateIndicator}from'./ui/state.js';import{pluginVersion,extensionName,defaultSettings}from'./utils/settings.js';import{tableSystemDefaultSettings}from'./core/table-system/settings.js';import{extension_settings}from'/scripts/extensions.js';import{manageLorebookEntriesForChat}from'./core/lore.js';import{initializeCharacterWorldBook}from'./CharacterWorldBook/cwb_index.js';import{cwbDefaultSettings}from'./CharacterWorldBook/src/cwb_config.js';import{bindGlossaryEvents}from'./glossary/GT_bindings.js';import'./core/amily2-updater.js';import{updateOrInsertTableInChat,startContinuousRendering,stopContinuousRendering}from'./ui/message-table-renderer.js';import{initializeRenderer}from'./core/tavern-helper/renderer.js';import{initializeApiListener,registerApiHandler,amilyHelper,initializeAmilyHelper}from'./core/tavern-helper/main.js';const STYLE_SETTINGS_KEY='amily2_custom_styles',STYLE_ROOT_SELECTOR='#amily2_memorisation_forms_panel';let styleRoot=null;function getStyleRoot(){const _0x537b3f=_0x3ce3;return!styleRoot&&(styleRoot=document[_0x537b3f(0x12c)](STYLE_ROOT_SELECTOR)),styleRoot;}function applyStyles(_0x2624cc){const _0x188771=_0x3ce3,_0x4fa8cd=getStyleRoot();if(!_0x4fa8cd||!_0x2624cc)return;delete _0x2624cc[_0x188771(0xa5)];for(const [_0x4c58d7,_0x498020]of Object[_0x188771(0x13d)](_0x2624cc)){_0x4c58d7[_0x188771(0x119)](_0x188771(0x182))&&_0x4fa8cd[_0x188771(0x133)][_0x188771(0x14f)](_0x4c58d7,_0x498020);}}function loadAndApplyStyles(){const _0x157edd=_0x3ce3,_0x453e35=extension_settings[extensionName]?.[STYLE_SETTINGS_KEY];_0x453e35&&typeof _0x453e35===_0x157edd(0xaf)&&Object[_0x157edd(0x132)](_0x453e35)[_0x157edd(0x97)]>0x0&&applyStyles(_0x453e35);}function saveStyles(_0x304214){!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][STYLE_SETTINGS_KEY]=_0x304214,saveSettingsDebounced();}function resetToDefaultStyles(){const _0x15b795=_0x3ce3,_0xa5574b=getStyleRoot();if(!_0xa5574b)return;const _0x2eb7e6=extension_settings[extensionName]?.[STYLE_SETTINGS_KEY];if(_0x2eb7e6&&typeof _0x2eb7e6===_0x15b795(0xaf))for(const _0x5cd040 of Object[_0x15b795(0x132)](_0x2eb7e6)){_0x5cd040['startsWith'](_0x15b795(0x182))&&_0xa5574b['style'][_0x15b795(0x8d)](_0x5cd040);}saveStyles(null),toastr[_0x15b795(0x18d)](_0x15b795(0xd2));}function getDefaultCssVars(){const _0x169c17=_0x3ce3;return{'--am2-font-size-base':'14px','--am2-gap-main':_0x169c17(0x9b),'--am2-padding-main':_0x169c17(0x147),'--am2-container-bg':_0x169c17(0xfd),'--am2-container-border':_0x169c17(0x199),'--am2-container-border-radius':_0x169c17(0x13a),'--am2-container-padding':'10px','--am2-container-shadow':_0x169c17(0x191),'--am2-title-font-size':_0x169c17(0x165),'--am2-title-font-weight':_0x169c17(0x188),'--am2-title-text-shadow':'0\x200\x205px\x20rgba(200,\x20200,\x20255,\x200.3)','--am2-title-gradient-start':_0x169c17(0x88),'--am2-title-gradient-end':_0x169c17(0x87),'--am2-title-icon-color':_0x169c17(0x122),'--am2-title-icon-margin':_0x169c17(0x9b),'--am2-table-bg':'rgba(0,0,0,0.2)','--am2-table-border':_0x169c17(0xc1),'--am2-table-cell-padding':_0x169c17(0x168),'--am2-table-cell-font-size':_0x169c17(0x137),'--am2-header-bg':_0x169c17(0x130),'--am2-header-color':_0x169c17(0xa6),'--am2-header-editable-bg':'rgba(172,\x20216,\x20255,\x200.1)','--am2-header-editable-focus-bg':_0x169c17(0x121),'--am2-header-editable-focus-outline':_0x169c17(0xfa),'--am2-cell-editable-bg':_0x169c17(0xeb),'--am2-cell-editable-focus-bg':_0x169c17(0x84),'--am2-cell-editable-focus-outline':'1px\x20solid\x20#ffc107','--am2-index-col-bg':_0x169c17(0x178),'--am2-index-col-color':_0x169c17(0x181),'--am2-index-col-width':_0x169c17(0xcf),'--am2-index-col-padding':_0x169c17(0xb8),'--am2-controls-gap':_0x169c17(0xda),'--am2-controls-margin-bottom':_0x169c17(0x9b),'--am2-cell-highlight-bg':'rgba(144,\x20238,\x20144,\x200.3)'};}function exportStyles(){const _0x4e1013=_0x3ce3,_0x4b8b39=getStyleRoot();if(!_0x4b8b39){toastr['error'](_0x4e1013(0x115));return;}const _0x684c8b=getComputedStyle(_0x4b8b39),_0x81d609={},_0x33587d=getDefaultCssVars();for(const _0x12c9e1 of Object[_0x4e1013(0x132)](_0x33587d)){_0x81d609[_0x12c9e1]=_0x684c8b[_0x4e1013(0x198)](_0x12c9e1)[_0x4e1013(0xbc)]();}const _0x330012=new Blob([JSON[_0x4e1013(0xad)](_0x81d609,null,0x2)],{'type':'application/json'}),_0xaee03=URL[_0x4e1013(0xe8)](_0x330012),_0x38842b=document[_0x4e1013(0x11f)]('a');_0x38842b[_0x4e1013(0x139)]=_0xaee03,_0x38842b[_0x4e1013(0xe2)]=_0x4e1013(0x127)+new Date()[_0x4e1013(0xc3)]()[_0x4e1013(0x16d)](0x0,0xa)+_0x4e1013(0xf3),document[_0x4e1013(0x151)][_0x4e1013(0xdf)](_0x38842b),_0x38842b['click'](),document['body'][_0x4e1013(0xed)](_0x38842b),URL[_0x4e1013(0x8f)](_0xaee03),toastr['success'](_0x4e1013(0xfc),_0x4e1013(0x17f));}function _0x278f(){const _0x481bfa=['version','swipe_id','count','title','剧情优化已完成并注入。','[Amily2-翰林院]\x20RAG处理器初始化失败:','无法导出样式:找不到根元素。','plotOpt_contextLimit','[Amily2-剧情优化]\x20Plot\x20optimization\x20returned\x20no\x20result.\x20Sending\x20original\x20message.','stylesheet','startsWith','[Amily2号-皇家制衣局]\x20已为世界编辑器披上华服:\x20WorldEditor.css','isArray','hanlinyuanRagProcessor','readAsText','online_count','createElement','[Amily2-剧情优化]\x20Skipping\x20due\x20to\x20conditions:','rgba(172,\x20216,\x20255,\x200.25)','#9e8aff','#sys-settings-button','files','[Amily2号-版本系统]\x20版本检测器未找到,可能加载失败','【Amily2号-情报部】捷报!发现新版本:\x20','Amily2-Theme-','1898538fssKbb','onchange','[Amily2号-皇家制衣局]\x20已为角色世界书披上华服:\x20cwb_style.css','getCharLorebooks','querySelector','#send_but','【监察系统】未配置填表模式,跳过填表。','buttonClick','rgba(255,\x20255,\x20255,\x200.1)','amily2Updater','keys','style','[Amily2号-开国大典]\x20步骤四:部署帝国哨兵网络...','Connecting...
','secondary-api','0.95em','640314KycLEF','href','12px','onclose','click','entries','1482028fMxBdR','source','content','【监察系统】分步/优化模式,回退后强制二次填表最新消息。','preOptimizationTextUpdated','index','buttonId','45coowHL','triggerSlash','8px\x205px','5RQNXCQ','AMILY2_MACRO_REPLACED','swipes','message_id','plotOpt_enabled','[Amily2号-开国大典]\x20步骤七:初始化版本显示系统...','[Amily2-核心引擎]\x20执行内置RAG注入。','setProperty','switchSwipe','body','13221472LLiUXG','text','getChatMessages','undefined','historiography.css','1448cesqlM','[Amily2-在线统计]\x20连接断开,尝试重连...','contentToAppend','无效的JSON格式。','tavernProfile','deleteChatMessages','display','【监察系统】主填表模式,回退后强制刷新消息ID:\x20','[Amily2号-开国大典]\x20步骤五:初始化RAG处理器...','now','[Amily2号-帝国枢密院]\x20SillyTavern宫殿主体已确认,开国大典正式开始!','!!!【开国大典失败】在执行系列法令时发生严重错误:','ST-Amily2-Chat-Optimisation','onerror','1.1em','one','剧情优化','6px\x208px','getLastMessageId','IMPERSONATE_READY','jqyhEnabled','messages','slice','[Amily2号-开国大典]\x20步骤三:开始召唤府邸...','trigger','dispatchEvent','[Amily2-内存储司]\x20表格注入失败:','。情报已转交内务府。','amily2-glossary.css','getLorebooks','[Amily2-剧情优化]\x20Generation\x20after\x20commands\x20triggered','chat','[Amily2号-开国大典]\x20步骤一:为宫殿披上华服...','rgba(0,\x200,\x200,\x200.3)\x20!important','【Amily2号-情报部】一切安好,帝国已是最新版本。情报已转交内务府备案。','\x20超时。','characters','race','amily2-host','none','导出成功','剧情优化处理失败。','#aaa\x20!important','--am2-','setChatMessage','[Amily2-主窗口]\x20未知的动作类型:\x20','CHAT_CHANGED','getElementById','Amily2插件错误:\x20','bold','includes','【监察系统】滑动后最新消息是用户,跳过填表。','','setChatMessages','success','[Amily2号-开国大典]\x20术语表事件已成功绑定。','isCancelled','\x20人在线','inset\x200\x200\x2015px\x20rgba(0,0,0,0.2)','filling_mode','chat_updated','\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正在进行剧情优化...\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
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','【凤凰阁】内联主题系统已通过延迟加载成功初始化并绑定事件。','2KOElVF','ids','getPropertyValue','1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.2)','iframe交互','contains','scripts/extensions/third-party/','amily2-reset-theme-btn','max','rgba(255,\x20255,\x20172,\x200.25)','\x20被删除,开始精确回滚UI状态。','toastr','#dfdff0','#c0bde4','result','userCharacter','[Amily2号-皇家制衣局]\x20已为帝国披上华服:\x20','[Amily2-核心引擎]\x20无法注册表格宏,可能是\x20SillyTavern\x20版本不兼容。','removeProperty','type','revokeObjectURL','【监察系统】检测到“朝代更迭”(CHAT_CHANGED),开始重修史书并刷新宫殿...','!!!【术语表事件绑定失败】:','#amily2_message_board','remove','is_user','【监察系统】检测到消息滑动,但聊天记录不足,已跳过状态回退。','【Amily2号-内务府】已成功获取并展示来自陛下的最新圣谕。','length','253726kecFuh','render_on_every_message','link','10px','amily2_glossary_panel','avatar','data','amily2HanlinyuanInjector','prepend','未知错误','[Amily2号-开国大典]\x20步骤3.6:侦测到术语表停泊位,开始绑定事件...','log','【Amily2号-内务府】获取留言板失败:','_comment','#e0e0e0','info','rel','[Amily2号-开国大典]\x20步骤二:皇家仪仗队就位...','已切换至开场白\x20','#amily2-online-count','[Amily2-核心引擎]\x20注册表格宏时发生错误:','stringify','style.css','object','操作取消','split','bookName','command','createLorebookEntries','主题已成功导入并应用!','optimized','warn','10px\x205px\x20!important','onmessage','amily2-export-theme-btn','hanlinyuan.css','trim','[Amily2-在线统计]\x20连接错误:','val','regenerate','world-editor-style','1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.25)','show','toISOString','text/css','MESSAGE_RECEIVED','options','table.css','warning','#amily2-cancel-optimization-btn','input','!!!【术语表事件绑定失败】:\x20等待面板\x20#amily2_glossary_panel\x20超时。','onload','amily2-iframe','/CharacterWorldBook/cwb_style.css?v=','40px','[Amily2-主窗口]\x20收到来自iframe的动作:\x20','clear','已恢复默认界面样式。','[Amily2-主窗口]\x20已发送消息:\x20','stack','[Amily2-全局卫队]\x20捕获到严重错误:','?v=','[Amily2-剧情优化]\x20处理发送前事件时出错:','amily2-style-','按钮\x20\x22','5px','addEventListener','#send_textarea','message','#amily2_message_content','appendChild','MESSAGE_DELETED','createLorebook','download','error','parse','[Amily2号-开国大典]\x20角色世界书已成功构建并融入帝国。','剧情优化任务已中止...','head','createObjectURL','optimization.css','rearrangeChat','rgba(255,\x20255,\x20172,\x200.1)','/assets/','removeChild','MESSAGE_SWIPED','avatars','Optimization\x20cancelled\x20by\x20user','target','map','.json','【凤凰阁】内联主题系统初始化失败:\x20','[Amily2-翰林院]\x20RAG注入失败:','【Amily2号】帝国已就绪,现派遣外交官,为陛下探查外界新情报...','/characters/','[Amily2号-帝国枢密院]\x20开始执行开国大典...','stopPropagation','1px\x20solid\x20#79b8ff','isXiaobaixEnabled','主题文件已开始下载。','rgba(0,0,0,0.1)','[Amily2号-开国大典]\x20步骤3.5:侦测到角色世界书停泊位,开始构建...','[Amily2-核心引擎]\x20开始执行统一注入\x20(聊天长度:','14119ZjBDUb','createChatMessages','435230HmpxwA','严重错误','html','getLorebookEntries','function','wss://amilyservice.amily49.cc','apiUrl','registerMacro','[Amily2-翰林院]\x20RAG处理器已成功初始化','\x22\x20被点击','sendMessage','【监察系统】滑动后填表完成,UI\x20已刷新。','导入失败:'];_0x278f=function(){return _0x481bfa;};return _0x278f();}function importStyles(){const _0x2df74b=_0x3ce3,_0x104b19=document['createElement']('input');_0x104b19[_0x2df74b(0x8e)]='file',_0x104b19['accept']=_0x2df74b(0xf3),_0x104b19['style'][_0x2df74b(0x15d)]=_0x2df74b(0x17e);const _0x512c44=()=>{const _0x371668=_0x2df74b;document[_0x371668(0x151)][_0x371668(0x19b)](_0x104b19)&&document[_0x371668(0x151)][_0x371668(0xed)](_0x104b19);};_0x104b19[_0x2df74b(0x129)]=_0x8a8039=>{const _0x1550e8=_0x2df74b,_0x317ac6=_0x8a8039[_0x1550e8(0xf1)][_0x1550e8(0x124)][0x0];if(!_0x317ac6){_0x512c44();return;}const _0xe4c495=new FileReader();_0xe4c495[_0x1550e8(0xcc)]=_0x45f968=>{const _0x34b31b=_0x1550e8;try{const _0x76f1f8=JSON[_0x34b31b(0xe4)](_0x45f968[_0x34b31b(0xf1)][_0x34b31b(0x89)]);if(typeof _0x76f1f8!=='object'||Array[_0x34b31b(0x11b)](_0x76f1f8))throw new Error(_0x34b31b(0x15a));applyStyles(_0x76f1f8),saveStyles(_0x76f1f8),toastr[_0x34b31b(0x18d)](_0x34b31b(0xb5));}catch(_0x53ebe5){toastr['error'](_0x34b31b(0x10e)+_0x53ebe5[_0x34b31b(0xdd)],'错误');}finally{_0x512c44();}},_0xe4c495[_0x1550e8(0x11d)](_0x317ac6);},document[_0x2df74b(0x151)][_0x2df74b(0xdf)](_0x104b19),_0x104b19[_0x2df74b(0x13c)]();}function compareVersions(_0x10255e,_0x57f06f){const _0x524710=_0x3ce3,_0x10a7d2=_0x10255e['split']('.')[_0x524710(0xf2)](Number),_0x22fc16=_0x57f06f['split']('.')['map'](Number),_0x1a9328=Math[_0x524710(0x19e)](_0x10a7d2[_0x524710(0x97)],_0x22fc16[_0x524710(0x97)]);for(let _0x1499b0=0x0;_0x1499b0<_0x1a9328;_0x1499b0++){const _0x100e90=_0x10a7d2[_0x1499b0]||0x0,_0x575e77=_0x22fc16[_0x1499b0]||0x0;if(_0x100e90>_0x575e77)return!![];if(_0x100e90<_0x575e77)return![];}return![];}async function handleUpdateCheck(){const _0x5c9d18=_0x3ce3;console[_0x5c9d18(0xa3)](_0x5c9d18(0xf6));const _0x5ad03e=await checkForUpdates();if(_0x5ad03e&&_0x5ad03e[_0x5c9d18(0x10f)]){const _0x1a9ab8=compareVersions(_0x5ad03e[_0x5c9d18(0x10f)],pluginVersion);_0x1a9ab8?console[_0x5c9d18(0xa3)](_0x5c9d18(0x126)+_0x5ad03e['version']+_0x5c9d18(0x172)):console[_0x5c9d18(0xa3)](_0x5c9d18(0x179)),setUpdateInfo(_0x1a9ab8,_0x5ad03e),applyUpdateIndicator();}}async function handleMessageBoard(){const _0x544d47=async()=>{const _0x1a405e=_0x3ce3;try{const _0x69090f=await fetchMessageBoardContent();if(_0x69090f&&_0x69090f['message']){const _0x528b7a=$(_0x1a405e(0x92)),_0x25843c=$(_0x1a405e(0xde));_0x25843c[_0x1a405e(0x104)](_0x69090f['message']),_0x528b7a[_0x1a405e(0xc2)](),console[_0x1a405e(0xa3)](_0x1a405e(0x96));}}catch(_0x1f0846){console[_0x1a405e(0xe3)](_0x1a405e(0xa4),_0x1f0846);}};await _0x544d47(),setInterval(_0x544d47,0xea60);}function loadPluginStyles(){const _0x26e600=_0x3ce3,_0x3b44ec=_0xf57d3f=>{const _0x226c4c=_0x3ce3,_0x245262=_0x226c4c(0xd8)+_0xf57d3f[_0x226c4c(0xb1)]('.')[0x0];if(document[_0x226c4c(0x186)](_0x245262))return;const _0xeba667=_0x226c4c(0x19c)+extensionName+_0x226c4c(0xec)+_0xf57d3f+_0x226c4c(0xd6)+Date[_0x226c4c(0x160)](),_0x3b5b89=document[_0x226c4c(0x11f)](_0x226c4c(0x9a));_0x3b5b89['id']=_0x245262,_0x3b5b89['rel']='stylesheet',_0x3b5b89[_0x226c4c(0x8e)]=_0x226c4c(0xc4),_0x3b5b89['href']=_0xeba667,document[_0x226c4c(0xe7)][_0x226c4c(0xdf)](_0x3b5b89),console[_0x226c4c(0xa3)](_0x226c4c(0x8b)+_0xf57d3f);};_0x3b44ec(_0x26e600(0xae)),_0x3b44ec(_0x26e600(0x156)),_0x3b44ec(_0x26e600(0xbb)),_0x3b44ec(_0x26e600(0x173)),_0x3b44ec(_0x26e600(0xc7)),_0x3b44ec(_0x26e600(0xe9)),_0x3b44ec('renderer.css'),_0x3b44ec('iframe-renderer.css');const _0x5202f8='cwb-feature-style';if(!document[_0x26e600(0x186)](_0x5202f8)){const _0x12073c=document[_0x26e600(0x11f)](_0x26e600(0x9a));_0x12073c['id']=_0x5202f8,_0x12073c[_0x26e600(0xa8)]=_0x26e600(0x118),_0x12073c['type']=_0x26e600(0xc4),_0x12073c[_0x26e600(0x139)]=_0x26e600(0x19c)+extensionName+_0x26e600(0xce)+Date['now'](),document[_0x26e600(0xe7)][_0x26e600(0xdf)](_0x12073c),console[_0x26e600(0xa3)](_0x26e600(0x12a));}const _0x5e4941=_0x26e600(0xc0);if(!document['getElementById'](_0x5e4941)){const _0x2bcc46=document[_0x26e600(0x11f)]('link');_0x2bcc46['id']=_0x5e4941,_0x2bcc46['rel']=_0x26e600(0x118),_0x2bcc46[_0x26e600(0x8e)]='text/css',_0x2bcc46['href']=_0x26e600(0x19c)+extensionName+'/WorldEditor/WorldEditor.css?v='+Date[_0x26e600(0x160)](),document[_0x26e600(0xe7)][_0x26e600(0xdf)](_0x2bcc46),console['log'](_0x26e600(0x11a));}}window[_0x169b9e(0xdb)](_0x169b9e(0xdd),function(_0x36bec6){const _0x186dd9=_0x169b9e;if(_0x36bec6[_0x186dd9(0x9e)]&&_0x36bec6[_0x186dd9(0x9e)][_0x186dd9(0x8e)]==='getAvatars'){if(window[_0x186dd9(0xfb)])return;const _0x3f38d3=_0x186dd9(0xf7)+(getContext()[_0x186dd9(0x8a)]?.[_0x186dd9(0x9d)]??''),_0x22341b=_0x186dd9(0xf7)+(getContext()[_0x186dd9(0x17b)][this_chid]?.['avatar']??'');_0x36bec6[_0x186dd9(0x13f)]['postMessage']({'source':_0x186dd9(0x17d),'type':_0x186dd9(0xef),'urls':{'user':_0x3f38d3,'char':_0x22341b}},'*');return;}if(_0x36bec6['data']&&_0x36bec6[_0x186dd9(0x9e)][_0x186dd9(0x13f)]===_0x186dd9(0xcd)){const {action:_0x59fc9c,detail:_0x22b182}=_0x36bec6[_0x186dd9(0x9e)];console[_0x186dd9(0xa3)](_0x186dd9(0xd0)+_0x59fc9c,_0x22b182);switch(_0x59fc9c){case _0x186dd9(0x10c):_0x22b182&&_0x22b182[_0x186dd9(0xdd)]&&($(_0x186dd9(0xdc))[_0x186dd9(0xbe)](_0x22b182['message'])[_0x186dd9(0x16f)](_0x186dd9(0xca)),$(_0x186dd9(0x12d))[_0x186dd9(0x16f)](_0x186dd9(0x13c)),console[_0x186dd9(0xa3)](_0x186dd9(0xd3)+_0x22b182[_0x186dd9(0xdd)]));break;case'showToast':if(_0x22b182&&_0x22b182[_0x186dd9(0xdd)]&&window[_0x186dd9(0x86)]){const _0x5dfca5=_0x22b182['type']||_0x186dd9(0xa7);typeof window[_0x186dd9(0x86)][_0x5dfca5]===_0x186dd9(0x106)&&window[_0x186dd9(0x86)][_0x5dfca5](_0x22b182['message'],_0x22b182[_0x186dd9(0x112)]||'通知');}break;case _0x186dd9(0x12f):console[_0x186dd9(0xa3)]('[Amily2-主窗口]\x20按钮被点击:',_0x22b182);window['toastr']&&window[_0x186dd9(0x86)][_0x186dd9(0xa7)](_0x186dd9(0xd9)+(_0x22b182[_0x186dd9(0x144)]||'未知')+_0x186dd9(0x10b),_0x186dd9(0x19a));break;default:console[_0x186dd9(0xb7)](_0x186dd9(0x184)+_0x59fc9c);}}}),window['addEventListener'](_0x169b9e(0xe3),_0x5c79ad=>{const _0x1f3537=_0x169b9e,_0x26638a=_0x5c79ad['error']?.[_0x1f3537(0xd4)]||'';_0x26638a[_0x1f3537(0x189)](_0x1f3537(0x163))&&(console[_0x1f3537(0xe3)](_0x1f3537(0xd5),_0x5c79ad[_0x1f3537(0xe3)]),toastr[_0x1f3537(0xe3)](_0x1f3537(0x187)+(_0x5c79ad[_0x1f3537(0xe3)]?.['message']||_0x1f3537(0xa1)),_0x1f3537(0x103),{'timeOut':0x2710}));}),jQuery(async()=>{const _0x112550=_0x169b9e;console['log'](_0x112550(0xf8)),initializeApiListener(),registerApiHandler(_0x112550(0x154),async _0x49f8a3=>{const _0x3a36f7=_0x112550;return amilyHelper[_0x3a36f7(0x154)](_0x49f8a3['range'],_0x49f8a3[_0x3a36f7(0xc6)]);}),registerApiHandler(_0x112550(0x18c),async _0x8d9f59=>{const _0xb5b44e=_0x112550;return await amilyHelper[_0xb5b44e(0x18c)](_0x8d9f59['messages'],_0x8d9f59[_0xb5b44e(0xc6)]);}),registerApiHandler(_0x112550(0x183),async _0x58feb8=>{const _0x2573cf=_0x112550,_0x14992a=_0x58feb8['field_values']||_0x58feb8[_0x2573cf(0x140)],_0x5e5820=_0x58feb8[_0x2573cf(0x14b)]!==undefined?_0x58feb8[_0x2573cf(0x14b)]:_0x58feb8[_0x2573cf(0x143)],_0x3fb4ef=_0x58feb8[_0x2573cf(0xc6)]||{};return console['log']('[Amily2-API]\x20setChatMessage\x20收到参数:',{'field_values':_0x14992a,'message_id':_0x5e5820,'options':_0x3fb4ef,'raw_data':_0x58feb8}),await amilyHelper[_0x2573cf(0x183)](_0x14992a,_0x5e5820,_0x3fb4ef);}),registerApiHandler(_0x112550(0x101),async _0x4d4cdf=>{const _0xb2868c=_0x112550;return await amilyHelper[_0xb2868c(0x101)](_0x4d4cdf[_0xb2868c(0x16c)],_0x4d4cdf['options']);}),registerApiHandler(_0x112550(0x15c),async _0x8cc21e=>{const _0x263fba=_0x112550;return await amilyHelper['deleteChatMessages'](_0x8cc21e[_0x263fba(0x197)],_0x8cc21e['options']);}),registerApiHandler(_0x112550(0x174),async _0x59a202=>{return await amilyHelper['getLorebooks']();}),registerApiHandler(_0x112550(0x12b),async _0x595987=>{const _0x5993f0=_0x112550;return await amilyHelper['getCharLorebooks'](_0x595987[_0x5993f0(0xc6)]);}),registerApiHandler(_0x112550(0x105),async _0x5cd1ac=>{const _0x39b449=_0x112550;return await amilyHelper[_0x39b449(0x105)](_0x5cd1ac['bookName']);}),registerApiHandler('setLorebookEntries',async _0x2bd175=>{const _0x2cc4c0=_0x112550;return await amilyHelper['setLorebookEntries'](_0x2bd175['bookName'],_0x2bd175[_0x2cc4c0(0x13d)]);}),registerApiHandler(_0x112550(0xb4),async _0x214b92=>{const _0x17658b=_0x112550;return await amilyHelper[_0x17658b(0xb4)](_0x214b92[_0x17658b(0xb2)],_0x214b92[_0x17658b(0x13d)]);}),registerApiHandler('createLorebook',async _0x3adde=>{const _0x3e8940=_0x112550;return await amilyHelper[_0x3e8940(0xe1)](_0x3adde[_0x3e8940(0xb2)]);}),registerApiHandler(_0x112550(0x146),async _0x4e4180=>{const _0x3fe483=_0x112550;return await amilyHelper[_0x3fe483(0x146)](_0x4e4180[_0x3fe483(0xb3)]);}),registerApiHandler(_0x112550(0x169),async _0x2a8f3b=>{const _0x220096=_0x112550;return amilyHelper[_0x220096(0x169)]();}),registerApiHandler('toastr',async _0x184d3f=>{const _0x2ad3ab=_0x112550;return window[_0x2ad3ab(0x86)]&&typeof window[_0x2ad3ab(0x86)][_0x184d3f[_0x2ad3ab(0x8e)]]===_0x2ad3ab(0x106)&&window[_0x2ad3ab(0x86)][_0x184d3f[_0x2ad3ab(0x8e)]](_0x184d3f[_0x2ad3ab(0xdd)],_0x184d3f[_0x2ad3ab(0x112)]),!![];}),registerApiHandler(_0x112550(0x150),async _0xdc634=>{const _0x58c5a5=_0x112550,{messageIndex:_0x5abb04,swipeIndex:_0x945f02}=_0xdc634,_0x9b82b4=await amilyHelper[_0x58c5a5(0x154)](_0x5abb04,{'include_swipes':!![]});if(_0x9b82b4&&_0x9b82b4['length']>0x0&&_0x9b82b4[0x0][_0x58c5a5(0x14a)]){const _0x105fa8=_0x9b82b4[0x0][_0x58c5a5(0x14a)][_0x945f02];if(_0x105fa8!==undefined){await amilyHelper[_0x58c5a5(0x18c)]([{'message_id':_0x5abb04,'message':_0x105fa8}],{'refresh':'affected'});const _0xa6b3ae=getContext();return _0xa6b3ae[_0x58c5a5(0x176)][_0x5abb04]&&(_0xa6b3ae[_0x58c5a5(0x176)][_0x5abb04][_0x58c5a5(0x110)]=_0x945f02),{'success':!![],'message':_0x58c5a5(0xaa)+_0x945f02};}}throw new Error('无法切换到开场白\x20'+_0x945f02);}),initializeAmilyHelper(),console[_0x112550(0xa3)](_0x112550(0xf8));!extension_settings[extensionName]&&(extension_settings[extensionName]={});const _0x2b2528={...defaultSettings,...tableSystemDefaultSettings,...cwbDefaultSettings,'render_on_every_message':![],'amily_render_enabled':![]};for(const _0x278f26 in _0x2b2528){extension_settings[extensionName][_0x278f26]===undefined&&(extension_settings[extensionName][_0x278f26]=_0x2b2528[_0x278f26]);}console['log']('[Amily2号-帝国枢密院]\x20帝国基本法已确认,档案室已与国库对接完毕。');let _0x39ace3=0x0;const _0x1eb1b3=0x64,_0x346f23=0x64,_0xc81b8e=_0x112550(0x123),_0x3ad4b3=setInterval(async()=>{const _0x26c102=_0x112550;if($(_0xc81b8e)[_0x26c102(0x97)]>0x0){clearInterval(_0x3ad4b3),console[_0x26c102(0xa3)](_0x26c102(0x161));try{console[_0x26c102(0xa3)](_0x26c102(0x177)),loadPluginStyles(),console[_0x26c102(0xa3)](_0x26c102(0xa9)),await registerSlashCommands(),console[_0x26c102(0xa3)](_0x26c102(0x16e)),createDrawer();function _0x2996fb(){let _0x39e16a=0x0;const _0x416727=0x32,_0x27be83=0x64,_0x54355f=setInterval(()=>{const _0x1e2982=_0x3ce3,_0x330cf9=document['getElementById'](_0x1e2982(0x9c));if(_0x330cf9){clearInterval(_0x54355f);try{console['log'](_0x1e2982(0xa2)),bindGlossaryEvents(),console[_0x1e2982(0xa3)](_0x1e2982(0x18e));}catch(_0x543023){console[_0x1e2982(0xe3)](_0x1e2982(0x91),_0x543023);}}else _0x39e16a++,_0x39e16a>=_0x416727&&(clearInterval(_0x54355f),console[_0x1e2982(0xe3)](_0x1e2982(0xcb)));},_0x27be83);}_0x2996fb();function _0x28dcff(){let _0x41b309=0x0;const _0x391c7a=0x32,_0x110bff=0x64,_0x1a0ccd=setInterval(async()=>{const _0x1ab22f=_0x3ce3,_0x11b0eb=$('#amily2_character_world_book_panel');if(_0x11b0eb[_0x1ab22f(0x97)]>0x0){clearInterval(_0x1a0ccd);try{console['log'](_0x1ab22f(0xfe)),await initializeCharacterWorldBook(_0x11b0eb),console[_0x1ab22f(0xa3)](_0x1ab22f(0xe5));}catch(_0x332238){console[_0x1ab22f(0xe3)]('!!!【角色世界书构建失败】:',_0x332238);}}else _0x41b309++,_0x41b309>=_0x391c7a&&(clearInterval(_0x1a0ccd),console[_0x1ab22f(0xe3)]('!!!【角色世界书构建失败】:\x20等待面板\x20#amily2_character_world_book_panel\x20超时。'));},_0x110bff);}_0x28dcff(),console['log']('[Amily2号-开国大典]\x20步骤3.8:注册表格占位符宏...');try{const _0x5998ba=getContext();_0x5998ba&&typeof _0x5998ba['registerMacro']===_0x26c102(0x106)?(_0x5998ba[_0x26c102(0x109)]('Amily2EditContent',()=>{const _0x3ca309=_0x26c102,_0x28910f=generateTableContent();return _0x28910f&&(window[_0x3ca309(0x149)]=!![]),_0x28910f;}),console[_0x26c102(0xa3)]('[Amily2-核心引擎]\x20已成功注册表格占位符宏:\x20{{Amily2EditContent}}')):console[_0x26c102(0xb7)](_0x26c102(0x8c));}catch(_0x3bc957){console[_0x26c102(0xe3)](_0x26c102(0xac),_0x3bc957);}console[_0x26c102(0xa3)](_0x26c102(0x134));let _0x23dfe4=![];async function _0x20d422(_0x5db41f,_0x142c94,_0x4a163b){const _0x37cf46=_0x26c102;clearUpdatedTables(),console[_0x37cf46(0xa3)](_0x37cf46(0x175),{'type':_0x5db41f,'params':_0x142c94,'dryRun':_0x4a163b,'isProcessing':_0x23dfe4});if(_0x5db41f===_0x37cf46(0xbf)||_0x23dfe4||_0x4a163b){console[_0x37cf46(0xa3)](_0x37cf46(0x120),{'type':_0x5db41f,'isProcessing':_0x23dfe4,'dryRun':_0x4a163b});return;}const _0x5824f8=extension_settings[extensionName];if(_0x5824f8?.[_0x37cf46(0x14c)]===![])return;const _0x415e3a=_0x5824f8?.[_0x37cf46(0x16b)]===!![],_0x79a5a9=!!_0x5824f8?.[_0x37cf46(0x108)]||!!_0x5824f8?.[_0x37cf46(0x15b)];if(!_0x415e3a&&!_0x79a5a9){console[_0x37cf46(0xa3)]('[Amily2-剧情优化]\x20优化已启用,但Jqyh\x20API已禁用且主页API未配置。');return;}_0x23dfe4=!![];let _0xdb246b=null;const _0x494812={'isCancelled':![]};try{const _0x380ba4=$(_0x37cf46(0xdc))[_0x37cf46(0xbe)]();if(!_0x380ba4)return _0x23dfe4=![],![];const _0x331064=_0x37cf46(0x194);let _0x374331;const _0x22b6b0=new Promise((_0x2cbc99,_0x147500)=>{_0x374331=_0x147500;});_0xdb246b=toastr['info'](_0x331064,_0x37cf46(0x167),{'timeOut':0x0,'extendedTimeOut':0x0,'tapToDismiss':![],'onclick':null,'escapeHtml':![],'onShown':function(){const _0x4619d7=_0x37cf46;$(_0x4619d7(0xc9))[_0x4619d7(0x166)]('click',function(_0x5e5961){const _0x2d8046=_0x4619d7;_0x5e5961[_0x2d8046(0xf9)](),_0xdb246b&&(_0xdb246b[_0x2d8046(0x93)](),_0xdb246b=null),_0x494812[_0x2d8046(0x18f)]=!![],_0x374331(new Error(_0x2d8046(0xf0)));});}});const _0x1232b5=getContext(),_0x5afa66=_0x5824f8[_0x37cf46(0x116)]||0xa;let _0x171444=[];_0x5afa66>0x0&&(_0x171444=_0x1232b5[_0x37cf46(0x176)][_0x37cf46(0x16d)](-_0x5afa66));const _0xf99809=processPlotOptimization({'mes':_0x380ba4},_0x171444,_0x494812),_0x1762ac=await Promise[_0x37cf46(0x17c)]([_0xf99809,_0x22b6b0]);if(_0x1762ac&&_0x1762ac[_0x37cf46(0x159)]){const _0x48a8c3=$(_0x37cf46(0xdc))[_0x37cf46(0xbe)](),_0x4617ea=_0x48a8c3+'\x0a'+_0x1762ac[_0x37cf46(0x159)];$(_0x37cf46(0xdc))[_0x37cf46(0xbe)](_0x4617ea)[_0x37cf46(0x16f)]('input'),toastr[_0x37cf46(0x18d)](_0x37cf46(0x113),'操作成功');}else console[_0x37cf46(0xa3)](_0x37cf46(0x117));return![];}catch(_0x22d340){return _0x22d340[_0x37cf46(0xdd)]===_0x37cf46(0xf0)?(console[_0x37cf46(0xa3)]('[Amily2-剧情优化]\x20优化流程已被用户中止。发送原始消息。'),toastr[_0x37cf46(0xc8)](_0x37cf46(0xe6),_0x37cf46(0xb0),{'timeOut':0x7d0})):(console[_0x37cf46(0xe3)](_0x37cf46(0xd7),_0x22d340),toastr[_0x37cf46(0xe3)](_0x37cf46(0x180),'错误')),![];}finally{_0x23dfe4=![],_0xdb246b&&(toastr[_0x37cf46(0xd1)](_0xdb246b),_0xdb246b=null);}}!window['amily2EventsRegistered']&&(eventSource['on'](event_types['GENERATION_AFTER_COMMANDS'],_0x20d422),eventSource['on'](event_types[_0x26c102(0xc5)],onMessageReceived),eventSource['on'](event_types[_0x26c102(0x16a)],onMessageReceived),eventSource['on'](event_types[_0x26c102(0xc5)],_0x1c6aa0=>handleTableUpdate(_0x1c6aa0)),eventSource['on'](event_types[_0x26c102(0xee)],async _0x55a42f=>{const _0x144e0c=_0x26c102,_0x4a9482=getContext();if(_0x4a9482[_0x144e0c(0x176)][_0x144e0c(0x97)]<0x2){log(_0x144e0c(0x95),_0x144e0c(0xa7));return;}log('【监察系统】检测到消息滑动\x20(SWIPED),开始执行状态回退...',_0x144e0c(0xb7)),rollbackState();const _0x236854=_0x4a9482[_0x144e0c(0x176)][_0x55a42f]||_0x4a9482[_0x144e0c(0x176)][_0x4a9482['chat'][_0x144e0c(0x97)]-0x1];if(_0x236854[_0x144e0c(0x94)]){log(_0x144e0c(0x18a),_0x144e0c(0xa7)),renderTables();return;}const _0x5bf6b5=extension_settings[extensionName],_0x3d5d19=_0x5bf6b5[_0x144e0c(0x192)]||'main-api';if(_0x3d5d19==='main-api')log(_0x144e0c(0x15e)+_0x55a42f+'。','info'),await handleTableUpdate(_0x55a42f,!![]);else _0x3d5d19===_0x144e0c(0x136)||_0x3d5d19===_0x144e0c(0xb6)?(log(_0x144e0c(0x141),_0x144e0c(0xa7)),await fillWithSecondaryApi(_0x236854,!![])):log(_0x144e0c(0x12e),_0x144e0c(0xa7));renderTables(),log(_0x144e0c(0x10d),_0x144e0c(0x18d));}),eventSource['on'](event_types['MESSAGE_EDITED'],_0x5811c1=>{handleTableUpdate(_0x5811c1),updateOrInsertTableInChat();}),eventSource['on'](event_types[_0x26c102(0x185)],()=>{const _0x1dd81d=_0x26c102;window['lastPreOptimizationResult']=null,document[_0x1dd81d(0x170)](new CustomEvent(_0x1dd81d(0x142))),manageLorebookEntriesForChat(),setTimeout(()=>{const _0x2e69e4=_0x1dd81d;log(_0x2e69e4(0x90),_0x2e69e4(0xa7)),clearHighlights(),clearUpdatedTables(),loadTables(),renderTables(),extension_settings[extensionName][_0x2e69e4(0x99)]?startContinuousRendering():stopContinuousRendering();},0x64);}),eventSource['on'](event_types[_0x26c102(0xe0)],(_0x144d53,_0x541447)=>{const _0x456c36=_0x26c102;log('【监察系统】检测到消息\x20'+_0x541447+_0x456c36(0x85),_0x456c36(0xb7)),clearHighlights(),loadTables(_0x541447),renderTables();}),eventSource['on'](event_types[_0x26c102(0xc5)],updateOrInsertTableInChat),eventSource['on'](event_types[_0x26c102(0x193)],updateOrInsertTableInChat),window['amily2EventsRegistered']=!![]);console[_0x26c102(0xa3)](_0x26c102(0x15f));try{_0x4ccd67(),console[_0x26c102(0xa3)](_0x26c102(0x10a));}catch(_0x3045bd){console['error'](_0x26c102(0x114),_0x3045bd);}console['log']('[Amily2号-开国大典]\x20步骤六:智能冲突检测与注入策略...');async function _0x239d89(..._0xc51884){const _0x5c66bc=_0x26c102;console['log'](_0x5c66bc(0xff),_0xc51884[0x0]?.[_0x5c66bc(0x97)]||0x0,')');try{await injectTableData(..._0xc51884);}catch(_0x370236){console[_0x5c66bc(0xe3)](_0x5c66bc(0x171),_0x370236);}if(window[_0x5c66bc(0x11c)]&&typeof window[_0x5c66bc(0x11c)][_0x5c66bc(0xea)]===_0x5c66bc(0x106))try{console[_0x5c66bc(0xa3)](_0x5c66bc(0x14e)),await window[_0x5c66bc(0x11c)]['rearrangeChat'](..._0xc51884);}catch(_0x1013cd){console['error'](_0x5c66bc(0xf5),_0x1013cd);}}console[_0x26c102(0xa3)]('[Amily2-策略]\x20采用“完全主导”策略,覆盖\x20`vectors_rearrangeChat`。'),window['vectors_rearrangeChat']=_0x239d89,window[_0x26c102(0x9f)]&&(window['amily2HanlinyuanInjector']=null),console[_0x26c102(0xa3)]('【Amily2号】帝国秩序已完美建立。Amily2号的府邸已恭候陛下的莅临。'),console['log'](_0x26c102(0x14d)),typeof window[_0x26c102(0x131)]!==_0x26c102(0x155)?setTimeout(()=>{const _0x1fcc7a=_0x26c102;console['log']('[Amily2号-版本系统]\x20正在启动版本检测器...'),window[_0x1fcc7a(0x131)]['initialize']();},0x7d0):console[_0x26c102(0xb7)](_0x26c102(0x125)),handleUpdateCheck(),handleMessageBoard(),initializeOnlineTracker(),initializeRenderer(),extension_settings[extensionName]['render_on_every_message']&&startContinuousRendering(),setTimeout(()=>{const _0x3043bd=_0x26c102;try{loadAndApplyStyles();const _0x4a29cc=document['getElementById']('amily2-import-theme-btn'),_0x4a0e77=document[_0x3043bd(0x186)](_0x3043bd(0xba)),_0x32554f=document[_0x3043bd(0x186)](_0x3043bd(0x19d));if(_0x4a29cc)_0x4a29cc[_0x3043bd(0xdb)](_0x3043bd(0x13c),importStyles);if(_0x4a0e77)_0x4a0e77[_0x3043bd(0xdb)](_0x3043bd(0x13c),exportStyles);if(_0x32554f)_0x32554f[_0x3043bd(0xdb)](_0x3043bd(0x13c),resetToDefaultStyles);log(_0x3043bd(0x195),_0x3043bd(0x18d));}catch(_0x4dd785){log(_0x3043bd(0xf4)+_0x4dd785,_0x3043bd(0xe3));}},0x1f4);}catch(_0x1fca21){console[_0x26c102(0xe3)](_0x26c102(0x162),_0x1fca21);}}else _0x39ace3++,_0x39ace3>=_0x1eb1b3&&(clearInterval(_0x3ad4b3),console[_0x26c102(0xe3)]('[Amily2号]\x20部署失败:等待\x20'+_0xc81b8e+_0x26c102(0x17a)));},_0x346f23);});function initializeOnlineTracker(){const _0x28762e=_0x169b9e,_0x573a3b=_0x28762e(0x107);let _0x304890,_0x5b746c;function _0x1b2149(){const _0x25361d=_0x28762e,_0x17ed2f=$('#amily2_drawer_content');if(_0x17ed2f['length']===0x0||!_0x17ed2f[_0x25361d(0x9e)]('initialized')){setTimeout(_0x1b2149,0x3e8);return;}if($('#amily2-online-tracker')['length']>0x0)return;const _0x4d0fb8=$(_0x25361d(0x18b));_0x4d0fb8[_0x25361d(0x104)](_0x25361d(0x135)),_0x17ed2f[_0x25361d(0xa0)](_0x4d0fb8),_0x64bafa();}function _0x64bafa(){const _0x164a45=_0x28762e;try{_0x304890=new WebSocket(_0x573a3b),_0x304890['onopen']=()=>{const _0x482c62=_0x3ce3;console[_0x482c62(0xa3)]('[Amily2-在线统计]\x20已连接到服务器'),_0x5b746c&&(clearInterval(_0x5b746c),_0x5b746c=null);},_0x304890[_0x164a45(0xb9)]=_0x3de188=>{const _0x2ab6e9=_0x164a45;try{const _0x24188=JSON[_0x2ab6e9(0xe4)](_0x3de188[_0x2ab6e9(0x9e)]);_0x24188[_0x2ab6e9(0x8e)]===_0x2ab6e9(0x11e)&&$('#amily2-online-count')[_0x2ab6e9(0x153)](_0x24188[_0x2ab6e9(0x111)]+_0x2ab6e9(0x190));}catch(_0x104abb){console['error']('[Amily2-在线统计]\x20解析消息失败:',_0x104abb);}},_0x304890[_0x164a45(0x13b)]=()=>{const _0x5dba0e=_0x164a45;console[_0x5dba0e(0xa3)](_0x5dba0e(0x158)),$(_0x5dba0e(0xab))[_0x5dba0e(0x153)]('离线'),!_0x5b746c&&(_0x5b746c=setInterval(_0x64bafa,0x1388));},_0x304890[_0x164a45(0x164)]=_0x34de60=>{const _0x4dbc13=_0x164a45;console[_0x4dbc13(0xb7)](_0x4dbc13(0xbd),_0x34de60),_0x304890['close']();};}catch(_0x374491){console[_0x164a45(0xe3)]('[Amily2-在线统计]\x20初始化失败:',_0x374491);}}_0x1b2149();} From e3ad7b36e33d4a8a10ffc34d3b4205cd30eb1ec4 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Thu, 27 Nov 2025 21:38:33 +0800 Subject: [PATCH 21/56] Update auth.js --- utils/auth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/auth.js b/utils/auth.js index d7625dd..cb90c0d 100644 --- a/utils/auth.js +++ b/utils/auth.js @@ -1 +1 @@ -function _0x5943(_0x27efe6,_0x2b1f1f){const _0x488ccd=_0x488c();return _0x5943=function(_0x594375,_0x4f86c2){_0x594375=_0x594375-0x118;let _0x2779dd=_0x488ccd[_0x594375];return _0x2779dd;},_0x5943(_0x27efe6,_0x2b1f1f);}function _0x488c(){const _0x2d20da=['authorized','201ngwizO','','toISOString','padStart','授权码无效或服务器连接失败','http://accdn.silencelurker.xyz:2086','ceil','removeItem','#auth_panel','[Amily2号]\x20检测到授权已过期,已清理本地存储。','getDate','toLocaleDateString','3389600cJYYqr','\x20授权已过期','slideDown','\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20授权有效期:\x20','getItem','setItem','.plugin-features','每日授权激活成功!有效期至:\x20','plugin_activated','plugin_auto_login','error','服务器验证连接失败,尝试本地验证...','Amily2号启用','12052894geKlDl','getFullYear','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','激活失败','241908eoKmcK','67624XnSnEI','success','expiryDate','getMonth','plugin_user_type','天\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20有效期至:\x20','json','3582815XhMPxt','2025-12-31','type','stringify','Amily-','793400xoeXih','true','当前授权有效期至:\x20','plugin_valid_until','enabled','expired','warn','setDate','application/json','15540712FMwvFZ','plugin_auth_code','\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20'];_0x488c=function(){return _0x2d20da;};return _0x488c();}const _0x4de1b4=_0x5943;(function(_0x53ab51,_0x17120a){const _0x50342f=_0x5943,_0x2740dc=_0x53ab51();while(!![]){try{const _0x22b808=parseInt(_0x50342f(0x12c))/0x1+-parseInt(_0x50342f(0x145))/0x2+parseInt(_0x50342f(0x139))/0x3*(-parseInt(_0x50342f(0x120))/0x4)+-parseInt(_0x50342f(0x127))/0x5+parseInt(_0x50342f(0x11f))/0x6+parseInt(_0x50342f(0x11b))/0x7+parseInt(_0x50342f(0x135))/0x8;if(_0x22b808===_0x17120a)break;else _0x2740dc['push'](_0x2740dc['shift']());}catch(_0x5c6a26){_0x2740dc['push'](_0x2740dc['shift']());}}}(_0x488c,0xe8ee4));import{extension_settings}from'/scripts/extensions.js';import{saveSettings,extensionName}from'./settings.js';import{updateUI}from'../ui/state.js';export const pluginAuthStatus={'authorized':![],'expired':![]};const SERVER_URL=_0x4de1b4(0x13e),AUTH_CONFIG={'expiryDate':new Date(_0x4de1b4(0x128))};export function getPasswordForDate(_0x14c29d){const _0xa039e3=_0x4de1b4,_0x410c69=_0x14c29d[_0xa039e3(0x11c)](),_0x14b8f7=String(_0x14c29d[_0xa039e3(0x123)]()+0x1)[_0xa039e3(0x13c)](0x2,'0'),_0x3e019d=String(_0x14c29d[_0xa039e3(0x143)]())[_0xa039e3(0x13c)](0x2,'0');return _0xa039e3(0x12b)+_0x410c69+_0x14b8f7+_0x3e019d;}export function checkAuthorization(){const _0x58e269=_0x4de1b4,_0x110a46=new Date(),_0x2960ce=localStorage['getItem'](_0x58e269(0x12f));if(_0x2960ce){const _0x68cff9=new Date(_0x2960ce);_0x110a46>_0x68cff9?pluginAuthStatus[_0x58e269(0x131)]=!![]:pluginAuthStatus['expired']=![];}else pluginAuthStatus[_0x58e269(0x131)]=_0x110a46>AUTH_CONFIG[_0x58e269(0x122)];pluginAuthStatus[_0x58e269(0x131)]&&(localStorage[_0x58e269(0x140)](_0x58e269(0x14d)),localStorage[_0x58e269(0x140)](_0x58e269(0x136)),localStorage[_0x58e269(0x140)]('plugin_user_type'),localStorage[_0x58e269(0x140)](_0x58e269(0x12f)),console['log'](_0x58e269(0x142)));const _0x2ac23a=localStorage[_0x58e269(0x149)](_0x58e269(0x14d))===_0x58e269(0x12d);return pluginAuthStatus[_0x58e269(0x138)]=_0x2ac23a&&!pluginAuthStatus[_0x58e269(0x131)],pluginAuthStatus[_0x58e269(0x138)];}export async function activatePluginAuthorization(_0x4bebb3){const _0x27652b=_0x4de1b4;try{const _0x1caf49=await fetch(SERVER_URL+'/verify',{'method':'POST','headers':{'Content-Type':_0x27652b(0x134)},'body':JSON[_0x27652b(0x12a)]({'code':_0x4bebb3})}),_0x2a841d=await _0x1caf49[_0x27652b(0x126)]();if(_0x2a841d[_0x27652b(0x121)]){localStorage['setItem'](_0x27652b(0x136),_0x4bebb3),localStorage[_0x27652b(0x14a)]('plugin_activated',_0x27652b(0x12d)),localStorage['setItem'](_0x27652b(0x14e),'true'),localStorage['setItem'](_0x27652b(0x124),_0x2a841d[_0x27652b(0x129)]),localStorage[_0x27652b(0x140)](_0x27652b(0x12f));const _0x3df35d=_0x2a841d['note']||_0x2a841d[_0x27652b(0x129)];return toastr[_0x27652b(0x121)]('授权激活成功!用户类型:\x20'+_0x3df35d,_0x27652b(0x11a)),pluginAuthStatus[_0x27652b(0x138)]=!![],enablePluginUI(),!![];}}catch(_0x32088e){console[_0x27652b(0x132)](_0x27652b(0x119),_0x32088e);}const _0x27b709=getPasswordForDate(new Date());if(_0x4bebb3===_0x27b709){const _0x328a13=new Date();return _0x328a13[_0x27652b(0x133)](_0x328a13[_0x27652b(0x143)]()+0x7),localStorage[_0x27652b(0x14a)](_0x27652b(0x136),_0x4bebb3),localStorage['setItem'](_0x27652b(0x14d),_0x27652b(0x12d)),localStorage[_0x27652b(0x14a)](_0x27652b(0x14e),_0x27652b(0x12d)),localStorage[_0x27652b(0x14a)](_0x27652b(0x124),'1'),localStorage[_0x27652b(0x14a)](_0x27652b(0x12f),_0x328a13[_0x27652b(0x13b)]()),toastr['success'](_0x27652b(0x14c)+_0x328a13[_0x27652b(0x144)](),_0x27652b(0x11a)),pluginAuthStatus[_0x27652b(0x138)]=!![],enablePluginUI(),!![];}return toastr[_0x27652b(0x118)](_0x27652b(0x13d),_0x27652b(0x11e)),![];}function enablePluginUI(){const _0x52d670=_0x4de1b4;$(_0x52d670(0x141))['slideUp'](0x190,function(){const _0x4960ff=_0x52d670;$(_0x4960ff(0x14b))[_0x4960ff(0x147)](0x190),updateUI();}),extension_settings[extensionName][_0x52d670(0x130)]=!![],saveSettings();}export function displayExpiryInfo(){const _0x280be5=_0x4de1b4,_0x2c076c=new Date(),_0xf273e5=Math[_0x280be5(0x13f)]((AUTH_CONFIG[_0x280be5(0x122)]-_0x2c076c)/(0x3e8*0x3c*0x3c*0x18)),_0x36adfc=localStorage[_0x280be5(0x149)](_0x280be5(0x12f));if(pluginAuthStatus[_0x280be5(0x131)])return _0x280be5(0x146);else{let _0x406c1c='';if(_0x36adfc){const _0x7dcb49=new Date(_0x36adfc);_0x406c1c=_0x280be5(0x12e)+_0x7dcb49['toLocaleDateString']()+_0x280be5(0x13a);}return _0x280be5(0x148)+_0xf273e5+_0x280be5(0x125)+AUTH_CONFIG[_0x280be5(0x122)][_0x280be5(0x144)]()+_0x280be5(0x11d)+_0x406c1c+_0x280be5(0x137);}} +const _0x2fa4d3=_0x16f9;function _0x509b(){const _0x38a5f7=['22642704zvbZES','#auth_panel','getFullYear','getMonth','authorized','https://amilyservice.amily49.cc','removeItem','expired','expiryDate','\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20','ceil','plugin_user_type','true','success','getDate','Amily-','556588jIHnAe','padStart','note','2093270VxyNNi','log','application/json','2338143JBHgir','slideDown','每日授权激活成功!有效期至:\x20','当前授权有效期至:\x20','.plugin-features','4092174ruUeaQ','enabled','getItem','stringify','服务器验证连接失败,尝试本地验证...','[Amily2号]\x20检测到授权已过期,已清理本地存储。','setItem','type','plugin_auth_code','8zdjtba','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','970960FUcxgD','warn','7931028WMdZcd','2025-12-31','激活失败','\x20授权已过期','setDate','toLocaleDateString','Amily2号启用','\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20授权有效期:\x20','授权码无效或服务器连接失败','toISOString','plugin_activated','plugin_valid_until'];_0x509b=function(){return _0x38a5f7;};return _0x509b();}function _0x16f9(_0x42fc5b,_0x143a9e){const _0x509b7c=_0x509b();return _0x16f9=function(_0x16f92a,_0x153cf8){_0x16f92a=_0x16f92a-0x139;let _0x56c34b=_0x509b7c[_0x16f92a];return _0x56c34b;},_0x16f9(_0x42fc5b,_0x143a9e);}(function(_0x3f27ea,_0x45cfe4){const _0x2c0955=_0x16f9,_0x1ccd9b=_0x3f27ea();while(!![]){try{const _0x4b8205=parseInt(_0x2c0955(0x14f))/0x1+-parseInt(_0x2c0955(0x165))/0x2+parseInt(_0x2c0955(0x155))/0x3+parseInt(_0x2c0955(0x163))/0x4*(parseInt(_0x2c0955(0x152))/0x5)+parseInt(_0x2c0955(0x15a))/0x6+parseInt(_0x2c0955(0x167))/0x7+-parseInt(_0x2c0955(0x13f))/0x8;if(_0x4b8205===_0x45cfe4)break;else _0x1ccd9b['push'](_0x1ccd9b['shift']());}catch(_0x383e8e){_0x1ccd9b['push'](_0x1ccd9b['shift']());}}}(_0x509b,0xa42ec));import{extension_settings}from'/scripts/extensions.js';import{saveSettings,extensionName}from'./settings.js';import{updateUI}from'../ui/state.js';export const pluginAuthStatus={'authorized':![],'expired':![]};const SERVER_URL=_0x2fa4d3(0x144),AUTH_CONFIG={'expiryDate':new Date(_0x2fa4d3(0x168))};export function getPasswordForDate(_0x66610e){const _0x1d96dd=_0x2fa4d3,_0x4b1efa=_0x66610e[_0x1d96dd(0x141)](),_0x11c4b8=String(_0x66610e[_0x1d96dd(0x142)]()+0x1)['padStart'](0x2,'0'),_0x43c29d=String(_0x66610e[_0x1d96dd(0x14d)]())[_0x1d96dd(0x150)](0x2,'0');return _0x1d96dd(0x14e)+_0x4b1efa+_0x11c4b8+_0x43c29d;}export function checkAuthorization(){const _0x437588=_0x2fa4d3,_0x14ea85=new Date(),_0x4deb2b=localStorage['getItem'](_0x437588(0x13e));if(_0x4deb2b){const _0x42cb14=new Date(_0x4deb2b);_0x14ea85>_0x42cb14?pluginAuthStatus[_0x437588(0x146)]=!![]:pluginAuthStatus[_0x437588(0x146)]=![];}else pluginAuthStatus['expired']=_0x14ea85>AUTH_CONFIG[_0x437588(0x147)];pluginAuthStatus[_0x437588(0x146)]&&(localStorage[_0x437588(0x145)]('plugin_activated'),localStorage[_0x437588(0x145)]('plugin_auth_code'),localStorage['removeItem'](_0x437588(0x14a)),localStorage[_0x437588(0x145)](_0x437588(0x13e)),console[_0x437588(0x153)](_0x437588(0x15f)));const _0x59f2b4=localStorage[_0x437588(0x15c)](_0x437588(0x13d))===_0x437588(0x14b);return pluginAuthStatus[_0x437588(0x143)]=_0x59f2b4&&!pluginAuthStatus[_0x437588(0x146)],pluginAuthStatus[_0x437588(0x143)];}export async function activatePluginAuthorization(_0x10d045){const _0x4cd4d1=_0x2fa4d3;try{const _0x1768ff=await fetch(SERVER_URL+'/verify',{'method':'POST','headers':{'Content-Type':_0x4cd4d1(0x154)},'body':JSON[_0x4cd4d1(0x15d)]({'code':_0x10d045})}),_0x474ae7=await _0x1768ff['json']();if(_0x474ae7[_0x4cd4d1(0x14c)]){localStorage[_0x4cd4d1(0x160)](_0x4cd4d1(0x162),_0x10d045),localStorage['setItem']('plugin_activated','true'),localStorage[_0x4cd4d1(0x160)]('plugin_auto_login',_0x4cd4d1(0x14b)),localStorage[_0x4cd4d1(0x160)](_0x4cd4d1(0x14a),_0x474ae7[_0x4cd4d1(0x161)]),localStorage[_0x4cd4d1(0x145)](_0x4cd4d1(0x13e));const _0x204084=_0x474ae7[_0x4cd4d1(0x151)]||_0x474ae7['type'];return toastr[_0x4cd4d1(0x14c)]('授权激活成功!用户:\x20'+_0x204084,_0x4cd4d1(0x139)),pluginAuthStatus['authorized']=!![],enablePluginUI(),!![];}}catch(_0x1579d8){console[_0x4cd4d1(0x166)](_0x4cd4d1(0x15e),_0x1579d8);}const _0x5edd70=getPasswordForDate(new Date());if(_0x10d045===_0x5edd70){const _0x3ecc17=new Date();return _0x3ecc17[_0x4cd4d1(0x16b)](_0x3ecc17[_0x4cd4d1(0x14d)]()+0x7),localStorage[_0x4cd4d1(0x160)]('plugin_auth_code',_0x10d045),localStorage[_0x4cd4d1(0x160)]('plugin_activated',_0x4cd4d1(0x14b)),localStorage[_0x4cd4d1(0x160)]('plugin_auto_login',_0x4cd4d1(0x14b)),localStorage[_0x4cd4d1(0x160)](_0x4cd4d1(0x14a),'1'),localStorage[_0x4cd4d1(0x160)](_0x4cd4d1(0x13e),_0x3ecc17[_0x4cd4d1(0x13c)]()),toastr['success'](_0x4cd4d1(0x157)+_0x3ecc17[_0x4cd4d1(0x16c)](),'Amily2号启用'),pluginAuthStatus[_0x4cd4d1(0x143)]=!![],enablePluginUI(),!![];}return toastr['error'](_0x4cd4d1(0x13b),_0x4cd4d1(0x169)),![];}function enablePluginUI(){const _0x47ab2f=_0x2fa4d3;$(_0x47ab2f(0x140))['slideUp'](0x190,function(){const _0x4661b0=_0x47ab2f;$(_0x4661b0(0x159))[_0x4661b0(0x156)](0x190),updateUI();}),extension_settings[extensionName][_0x47ab2f(0x15b)]=!![],saveSettings();}export function displayExpiryInfo(){const _0x2662bd=_0x2fa4d3,_0x53cae0=new Date(),_0x190589=Math[_0x2662bd(0x149)]((AUTH_CONFIG['expiryDate']-_0x53cae0)/(0x3e8*0x3c*0x3c*0x18)),_0x40883e=localStorage[_0x2662bd(0x15c)](_0x2662bd(0x13e));if(pluginAuthStatus[_0x2662bd(0x146)])return _0x2662bd(0x16a);else{let _0x54dc36='';if(_0x40883e){const _0x1014f2=new Date(_0x40883e);_0x54dc36=_0x2662bd(0x158)+_0x1014f2['toLocaleDateString']()+'';}return _0x2662bd(0x13a)+_0x190589+'天\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20有效期至:\x20'+AUTH_CONFIG[_0x2662bd(0x147)][_0x2662bd(0x16c)]()+_0x2662bd(0x164)+_0x54dc36+_0x2662bd(0x148);}} From 4f8b8973e889265758c7899d76a57cdba4473894 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 22:58:41 +0800 Subject: [PATCH 22/56] Add files via upload --- core/context-optimizer.js | 195 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 core/context-optimizer.js diff --git a/core/context-optimizer.js b/core/context-optimizer.js new file mode 100644 index 0000000..3a865e3 --- /dev/null +++ b/core/context-optimizer.js @@ -0,0 +1,195 @@ +import { log } from "./table-system/logger.js"; +import { getContext } from "/scripts/extensions.js"; +import { eventSource, event_types } from "/script.js"; + +function collectDataToBuffer(buffer, tableName, rowObj) { + if (!buffer[tableName]) { + buffer[tableName] = { + headers: Object.keys(rowObj), + rows: [] + }; + } else { + const newKeys = Object.keys(rowObj); + newKeys.forEach(k => { + if (!buffer[tableName].headers.includes(k)) { + buffer[tableName].headers.push(k); + } + }); + } + buffer[tableName].rows.push(rowObj); +} + +function flushBufferToMarkdown(buffer) { + let output = ""; + const tableNames = Object.keys(buffer); + + if (tableNames.length === 0) return ""; + + for (const tableName of tableNames) { + const { headers, rows } = buffer[tableName]; + if (rows.length === 0) continue; + + const firstColKey = headers[0]; + const firstColVal = rows[0] ? rows[0][firstColKey] : ''; + const isIndexCol = (firstColKey && (firstColKey.includes('索引') || firstColKey.includes('Index'))) || + (typeof firstColVal === 'string' && /^\s*M\d+/.test(firstColVal)); + + if (isIndexCol) { + rows.sort((a, b) => { + const valA = String(a[firstColKey] || ''); + const valB = String(b[firstColKey] || ''); + return valA.localeCompare(valB, undefined, { numeric: true }); + }); + } else { + + rows.reverse(); + } + + output += `\n# ${tableName}档案\n`; + output += `| ${headers.join(' | ')} |\n`; + output += `|${headers.map(() => '---').join('|')}|\n`; + + for (const rowObj of rows) { + const rowArr = headers.map(h => { + const val = rowObj[h]; + let safeVal = (val === undefined || val === null) ? '' : String(val); + safeVal = safeVal.replace(/\|/g, '\\|').replace(/\n/g, ' '); + return safeVal; + }); + output += `| ${rowArr.join(' | ')} |\n`; + } + output += `\n`; + } + return output; +} + +function processText(text) { + const blockRegex = /【(.*?)档案[::]\s*.*?】\s*((?:-\s*.*?[::].*?(?:\r?\n|$))+)/g; + const itemRegex = /-\s*(.*?)[::]\s*(.*?)(?:\r?\n|$)/g; + + const buffer = {}; + let found = false; + + const cleanText = text.replace(blockRegex, (match, tableName, content) => { + found = true; + const rowObj = {}; + + let itemMatch; + itemRegex.lastIndex = 0; + + while ((itemMatch = itemRegex.exec(content)) !== null) { + const key = itemMatch[1].trim(); + const val = itemMatch[2].trim(); + if (key) { + rowObj[key] = val; + } + } + + if (Object.keys(rowObj).length > 0) { + collectDataToBuffer(buffer, tableName, rowObj); + } + + return ""; // 移除原始文本 + }); + + return { cleanText, buffer, found }; +} + +function handlePromptProcessing(data) { + if (!data) return; + + if (typeof data.prompt === 'string') { + const { cleanText, buffer, found } = processText(data.prompt); + if (found) { + const mergedTable = flushBufferToMarkdown(buffer); + if (mergedTable) { + data.prompt = cleanText + "\n" + mergedTable; + log('[ContextOptimizer] 已优化上下文:合并了分散的世界书条目 (Text Mode)。', 'success'); + } + } + + } else if (Array.isArray(data.chat)) { + console.log('[ContextOptimizer] 检测到 Chat Completion 格式...'); + + const newChat = []; + let modifiedCount = 0; + + for (const msg of data.chat) { + const newMsg = { ...msg }; + + if (typeof newMsg.content === 'string') { + const { cleanText, buffer, found } = processText(newMsg.content); + + if (found) { + const mergedTable = flushBufferToMarkdown(buffer); + if (mergedTable) { + newMsg.content = cleanText + "\n" + mergedTable; + modifiedCount++; + } + } + } + newChat.push(newMsg); + } + + if (modifiedCount > 0) { + console.log(`[ContextOptimizer] 已原地优化 ${modifiedCount} 条消息中的表格数据。`); + + // 全量替换,确保生效 + data.chat.splice(0, data.chat.length, ...newChat); + log('[ContextOptimizer] 已优化上下文:合并了分散的世界书条目 (Chat Mode - In Place)。', 'success'); + } + + } +} + +/** + * 注册监听器 + */ +export function registerContextOptimizerMacros() { + console.log('[ContextOptimizer] 正在注册监听器...'); + const context = getContext(); + + if (context) { + console.log('[ContextOptimizer] Context APIs:', Object.keys(context)); + } + + if (context && context.registerChatCompletionModifier) { + context.registerChatCompletionModifier((chat) => { + console.log('[ContextOptimizer] ChatCompletionModifier 触发'); + const data = { chat: chat }; + handlePromptProcessing(data); + return data.chat; + }); + log('[ContextOptimizer] 已注册 Chat Completion Modifier。', 'success'); + + } else if (context && context.registerPromptModifier) { + context.registerPromptModifier((prompt) => { + console.log('[ContextOptimizer] PromptModifier 触发'); + const data = { prompt: prompt }; + handlePromptProcessing(data); + return data.prompt; + }); + log('[ContextOptimizer] 已注册 Prompt Modifier (正则模式)。', 'success'); + + } else if (eventSource) { + eventSource.on('chat_completion_prompt_ready', (...args) => { + if (args[0] && typeof args[0] === 'object') { + handlePromptProcessing(args[0]); + } + }); + + eventSource.on(event_types.GENERATION_STARTED, (...args) => { + if (args.length > 1 && args[1] && typeof args[1].prompt === 'string') { + handlePromptProcessing(args[1]); + } else if (args[0] && typeof args[0].prompt === 'string') { + handlePromptProcessing(args[0]); + } + }); + + log('[ContextOptimizer] 已绑定事件监听 (Text/Chat 双模式)。', 'info'); + } else { + console.error('[ContextOptimizer] 无法获取 eventSource。'); + } +} +export function resetContextBuffer() { +} From 268e6ef4951263e0711b859fabc3218f27399313 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:00:13 +0800 Subject: [PATCH 23/56] Add files via upload --- super-memory/bindings.js | 89 +++++++++++++ super-memory/index.html | 85 ++++++++++++ super-memory/lorebook-bridge.js | 228 ++++++++++++++++++++++++++++++++ super-memory/manager.js | 203 ++++++++++++++++++++++++++++ super-memory/smart-indexer.js | 77 +++++++++++ 5 files changed, 682 insertions(+) create mode 100644 super-memory/bindings.js create mode 100644 super-memory/index.html create mode 100644 super-memory/lorebook-bridge.js create mode 100644 super-memory/manager.js create mode 100644 super-memory/smart-indexer.js diff --git a/super-memory/bindings.js b/super-memory/bindings.js new file mode 100644 index 0000000..591de3f --- /dev/null +++ b/super-memory/bindings.js @@ -0,0 +1,89 @@ +import { extensionName } from "../../utils/settings.js"; +import { extension_settings } from "/scripts/extensions.js"; +import { saveSettingsDebounced } from "/script.js"; +import { initializeSuperMemory } from "./manager.js"; + +export function bindSuperMemoryEvents() { + const panel = $('#amily2_super_memory_panel'); + if (panel.length === 0) return; + + panel.on('click', '.sm-nav-item', function() { + const tab = $(this).data('tab'); + + panel.find('.sm-nav-item').removeClass('active'); + $(this).addClass('active'); + + panel.find('.sm-tab-pane').removeClass('active'); + panel.find(`#sm-${tab}-tab`).addClass('active'); + }); + + panel.on('change', 'input[type="checkbox"]', function() { + if (!extension_settings[extensionName]) extension_settings[extensionName] = {}; + + const id = this.id; + let key = null; + + if (id === 'sm-system-enabled') key = 'super_memory_enabled'; + if (id === 'sm-bridge-enabled') key = 'superMemory_bridgeEnabled'; + + if (key) { + extension_settings[extensionName][key] = this.checked; + saveSettingsDebounced(); + console.log(`[Amily2-SuperMemory] Setting updated: ${key} = ${this.checked}`); + } + }); + + panel.on('change', 'input[type="number"], input[type="text"]', function() { + if (!extension_settings[extensionName]) extension_settings[extensionName] = {}; + + const id = this.id; + let key = null; + + if (id === 'sm-index-depth') key = 'superMemory_indexDepth'; + if (id === 'sm-detail-depth') key = 'superMemory_detailDepth'; + + if (key) { + let value = this.value; + if (this.type === 'number') value = parseInt(value, 10); + + extension_settings[extensionName][key] = value; + saveSettingsDebounced(); + console.log(`[Amily2-SuperMemory] Setting updated: ${key} = ${value}`); + } + }); + + loadSuperMemorySettings(); + + console.log('[Amily2-SuperMemory] Events bound successfully.'); +} + +function loadSuperMemorySettings() { + const settings = extension_settings[extensionName] || {}; + + $('#sm-system-enabled').prop('checked', settings.super_memory_enabled ?? false); + $('#sm-bridge-enabled').prop('checked', settings.superMemory_bridgeEnabled ?? false); + + $('#sm-index-depth').val(settings.superMemory_indexDepth ?? 0); + $('#sm-detail-depth').val(settings.superMemory_detailDepth ?? 2); +} + +window.sm_initializeSystem = async function() { + toastr.info('超级记忆系统正在初始化...'); + $('#sm-system-status').text('初始化中...').css('color', 'yellow'); + + try { + await initializeSuperMemory(); + toastr.success('超级记忆系统初始化完成。'); + } catch (error) { + console.error(error); + toastr.error('初始化失败,请检查控制台。'); + $('#sm-system-status').text('错误').css('color', 'red'); + } +}; + +window.sm_purgeMemory = function() { + if (confirm('您确定要清空所有超级记忆数据吗?')) { + toastr.warning('记忆已清空。'); + $('#sm-system-status').text('未初始化').css('color', '#ffc107'); + } +}; diff --git a/super-memory/index.html b/super-memory/index.html new file mode 100644 index 0000000..dcb5240 --- /dev/null +++ b/super-memory/index.html @@ -0,0 +1,85 @@ +
+
+ 灵台 · 记忆中枢 +
+ +
+
+ +
+
+

究极长期记忆 (Super Memory)

+

欢迎来到 Amily2 的核心记忆中枢。这里掌管着世界的记忆,连接着每一个角色、每一个物品与每一段传说。

+

通过“三级金字塔”注入策略,我们将实现极致的 Token 节省与无限的记忆深度。

+
+ +
+ + + +
+ +
+ +
+
+ 状态监控 +
+ + 未初始化 +
+
+ + 0 条目 +
+
+ + 0 条目 +
+
+ + +
+
+
+ + +
+
+ 记忆策略配置 +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ 关联网络 (The Mesh) +

关联触发逻辑正在开发中...

+
+
+
+
diff --git a/super-memory/lorebook-bridge.js b/super-memory/lorebook-bridge.js new file mode 100644 index 0000000..dfdcfcf --- /dev/null +++ b/super-memory/lorebook-bridge.js @@ -0,0 +1,228 @@ +import { amilyHelper } from "../tavern-helper/main.js"; +import { extension_settings, getContext } from "/scripts/extensions.js"; +import { extensionName } from "../../utils/settings.js"; +import { this_chid, characters } from "/script.js"; + +function getMemoryBookName() { + let charName = "Global"; + const context = getContext(); + + if (this_chid !== undefined && characters[this_chid]) { + charName = characters[this_chid].name; + } else if (context.characterId !== undefined && characters[context.characterId]) { + charName = characters[context.characterId].name; + } + + const safeCharName = charName.replace(/[<>:"/\\|?*]/g, '_'); + return `Amily2_Memory_${safeCharName}`; +} + +export async function syncToLorebook(tableName, data, indexText, role, headers, rowStatuses, depth = 100) { + console.log(`[Amily2-Bridge] 开始同步表格: ${tableName} (Depth: ${depth})`); + + await ensureMemoryBook(); + + const bookName = getMemoryBookName(); + + let entries = await amilyHelper.getLorebookEntries(bookName); + if (!entries) entries = []; + + const entriesToUpdate = []; + const entriesToCreate = []; + + const processEntry = (comment, keys, content, type = 'selective', enabled = true) => { + const existingEntry = entries.find(e => e.comment === comment); + if (existingEntry) { + existingEntry.content = content; + existingEntry.key = keys; + existingEntry.order = depth; + + if (type === 'constant') { + existingEntry.constant = true; + } else { + existingEntry.constant = false; + } + if (existingEntry.enabled !== undefined) { + existingEntry.enabled = enabled; + } else { + existingEntry.disable = !enabled; + } + entriesToUpdate.push(existingEntry); + } else { + entriesToCreate.push({ + comment: comment, + keys: keys, + content: content, + type: type, + position: 1, + order: depth, + enabled: enabled + }); + } + }; + + if (role === 'database') { + const indexKey = [`Amily_Index_${tableName}`]; + const indexComment = `[Amily2] Index for ${tableName}`; + let indexContent = `【${tableName} 索引】\n${indexText.trim()}`; + + if (tableName.includes("大纲")) { + indexContent += `\n\n【Amily2-前瞻性预测指令】\n为了实现“提前一轮触发绿灯世界书”的高级记忆回流,请在生成本轮回复时,根据当前剧情走向,**大胆预测并自然提及**下一轮可能出现的索引编码。可自行增加一个标签并使用html注释掉该编码。这将激活系统的预加载机制,确保剧情发展的连贯性。\n`; + } + + processEntry(indexComment, indexKey, indexContent, 'constant'); + } + + data.forEach((row, index) => { + if (!row || row.length === 0) return; + + const primaryVal = row[0]; + + if (!primaryVal) return; + + const isPendingDeletion = rowStatuses && rowStatuses[index] === 'pending-deletion'; + const isEnabled = !isPendingDeletion; + + const triggerKeys = [primaryVal]; + const entryComment = `[Amily2] Detail: ${tableName} - ${primaryVal}`; + + let finalHeaders = headers; + if (!finalHeaders || finalHeaders.length < row.length) { + finalHeaders = []; + for(let i=0; i 0) { + console.log(`[Amily2-Bridge] 清理 ${entriesToDelete.length} 个废弃条目...`); + await amilyHelper.deleteLorebookEntries(bookName, entriesToDelete); + } + + if (entriesToUpdate.length > 0) { + console.log(`[Amily2-Bridge] 更新 ${entriesToUpdate.length} 个条目...`); + await amilyHelper.setLorebookEntries(bookName, entriesToUpdate); + } + + if (entriesToCreate.length > 0) { + console.log(`[Amily2-Bridge] 创建 ${entriesToCreate.length} 个新条目...`); + await amilyHelper.createLorebookEntries(bookName, entriesToCreate); + } + console.log(`[Amily2-Bridge] 同步完成: ${tableName}`); +} + +export async function ensureMemoryBook() { + const bookName = getMemoryBookName(); + const books = await amilyHelper.getLorebooks(); + + if (!books.includes(bookName)) { + console.log(`[Amily2-Bridge] 创建角色专用世界书: ${bookName}`); + await amilyHelper.createLorebook(bookName); + } + + const settings = extension_settings[extensionName] || {}; + const shouldBind = settings.superMemory_autoBind === true; + + if (shouldBind && bookName.startsWith("Amily2_Memory_") && bookName !== "Amily2_Memory_Global") { + console.log(`[Amily2-Bridge] 自动绑定世界书到当前角色...`); + await amilyHelper.bindLorebookToCharacter(bookName); + } else if (!shouldBind) { + console.log(`[Amily2-Bridge] 跳过自动绑定 (设置已禁用)。请手动在世界书管理中激活: ${bookName}`); + } +} + +function createEntryTemplate() { + return { + uid: Date.now() + Math.floor(Math.random() * 1000), + key: [], + keysecondary: [], + comment: "", + content: "", + constant: false, + selective: true, + order: 100, + position: 1, + enabled: true + }; +} + +export async function updateTransientHint(hint) { + console.log('[Amily2-Bridge] 更新瞬时记忆提示...'); + await ensureMemoryBook(); + const bookName = getMemoryBookName(); + + const comment = "[Amily2] Active Memory Hint"; + const content = hint ? `\n\n【重要记忆回响】\n${hint}\n\n` : ""; + const enabled = !!hint; + + let entries = await amilyHelper.getLorebookEntries(bookName); + if (!entries) entries = []; + + const existingEntry = entries.find(e => e.comment === comment); + + if (existingEntry) { + existingEntry.content = content; + existingEntry.enabled = enabled; + existingEntry.order = 0; + existingEntry.constant = true; + + await amilyHelper.setLorebookEntries(bookName, [existingEntry]); + } else if (hint) { + const newEntry = { + comment: comment, + keys: [], + content: content, + constant: true, + selective: false, + order: 0, + position: 0, + enabled: true + }; + await amilyHelper.createLorebookEntries(bookName, [newEntry]); + } + + console.log(`[Amily2-Bridge] 瞬时记忆提示已${enabled ? '启用' : '清除'}。`); +} diff --git a/super-memory/manager.js b/super-memory/manager.js new file mode 100644 index 0000000..38f633d --- /dev/null +++ b/super-memory/manager.js @@ -0,0 +1,203 @@ +import { extension_settings, getContext } from "/scripts/extensions.js"; +import { extensionName } from "../../utils/settings.js"; +import { amilyHelper } from "../tavern-helper/main.js"; +import { generateIndex } from "./smart-indexer.js"; +import { syncToLorebook, ensureMemoryBook, updateTransientHint } from "./lorebook-bridge.js"; +import { getMemoryState, loadMemoryState, saveMemoryState } from "../table-system/manager.js"; +import { eventSource, event_types } from "/script.js"; + +let isInitialized = false; +let updateQueue = []; +let isProcessing = false; +let lastChatId = null; + +const METADATA_KEY = 'Amily2_Memory_Data'; + +export async function initializeSuperMemory() { + const settings = extension_settings[extensionName] || {}; + if (settings.super_memory_enabled === false) { + console.log('[Amily2-SuperMemory] 功能已禁用 (super_memory_enabled = false)。'); + if (window.$) $('#sm-system-status').text('已禁用').css('color', 'gray'); + return; + } + + if (isInitialized) return; + console.log('[Amily2-SuperMemory] 初始化核心管理器...'); + + if (!amilyHelper) { + console.error('[Amily2-SuperMemory] 致命错误:AmilyHelper 未就绪。'); + return; + } + + document.addEventListener('AMILY2_TABLE_UPDATED', handleTableUpdate); + + eventSource.on(event_types.CHAT_CHANGED, async () => { + const settings = extension_settings[extensionName] || {}; + if (settings.super_memory_enabled === false) return; + + console.log('[Amily2-SuperMemory] 检测到聊天切换,正在刷新记忆状态...'); + await checkWorldBookStatus(); + + await tryRestoreStateFromMetadata(); + + await forceSyncAll(); + }); + + await checkWorldBookStatus(); + + await tryRestoreStateFromMetadata(); + + await forceSyncAll(); + + isInitialized = true; + console.log('[Amily2-SuperMemory] 核心管理器初始化完成。'); + + if (window.$) { + $('#sm-system-status').text('运行中').css('color', '#4caf50'); + } +} + +async function checkWorldBookStatus() { + try { + await ensureMemoryBook(); + } catch (error) { + console.error('[Amily2-SuperMemory] 检查世界书状态失败:', error); + } +} + +function handleTableUpdate(event) { + const settings = extension_settings[extensionName] || {}; + if (settings.super_memory_enabled === false) return; + + const { tableName, data, role, hint, headers, rowStatuses } = event.detail; + console.log(`[Amily2-SuperMemory] 检测到表格更新: ${tableName} (Role: ${role})`); + + updateQueue.push({ tableName, data, role, hint, headers, rowStatuses }); + processQueue(); +} + +async function processQueue() { + if (isProcessing || updateQueue.length === 0) return; + isProcessing = true; + + try { + while (updateQueue.length > 0) { + const task = updateQueue.shift(); + await processUpdateTask(task); + } + + await saveStateToMetadata(); + + } catch (error) { + console.error('[Amily2-SuperMemory] 处理更新队列失败:', error); + } finally { + isProcessing = false; + } +} + +async function processUpdateTask(task) { + const { tableName, data, role, hint, headers, rowStatuses } = task; + + const activeData = data.filter((_, i) => !rowStatuses || rowStatuses[i] !== 'pending-deletion'); + const indexText = generateIndex(activeData, role, tableName); + + const allTables = getMemoryState(); + const tableIndex = allTables.findIndex(t => t.name === tableName); + const depth = 8001 + (tableIndex >= 0 ? tableIndex : 99); + + await syncToLorebook(tableName, data, indexText, role, headers, rowStatuses, depth); + + if (hint) { + console.log(`[Amily2-SuperMemory] 应用主动记忆提示: ${hint}`); + await updateTransientHint(hint); + } + + console.log(`[Amily2-SuperMemory] 任务完成: ${tableName}`); + + updateDashboardCounters(); +} + +async function saveStateToMetadata() { + const context = getContext(); + if (!context.chat || context.chat.length === 0) return; + + const lastMsgIndex = context.chat.length - 1; + const lastMsg = context.chat[lastMsgIndex]; + + const currentState = getMemoryState(); + + if (!lastMsg.metadata) lastMsg.metadata = {}; + + lastMsg.metadata[METADATA_KEY] = JSON.parse(JSON.stringify(currentState)); + + if (context.saveChat) { + await context.saveChat(); + } + + console.log(`[Amily2-SuperMemory] 状态已保存至消息 #${lastMsgIndex}`); +} + +export async function tryRestoreStateFromMetadata() { + const context = getContext(); + if (!context.chat || context.chat.length === 0) return; + + let foundState = null; + let foundIndex = -1; + + for (let i = context.chat.length - 1; i >= 0; i--) { + const msg = context.chat[i]; + if (msg.metadata && msg.metadata[METADATA_KEY]) { + foundState = msg.metadata[METADATA_KEY]; + foundIndex = i; + break; + } + } + + if (foundState) { + console.log(`[Amily2-SuperMemory] 发现历史状态 (Msg #${foundIndex}),正在恢复...`); + if (typeof loadMemoryState === 'function') { + loadMemoryState(foundState); + await forceSyncAll(); + } else { + console.warn('[Amily2-SuperMemory] table-system 缺少 loadMemoryState 方法,无法恢复状态。'); + } + } else { + console.log('[Amily2-SuperMemory] 未在聊天记录中发现历史状态,使用默认/当前状态。'); + } +} + +function updateDashboardCounters() { + const tables = getMemoryState(); + if (tables && window.$) { + $('#sm-index-count').text(`${tables.length} 个索引`); + const totalRows = tables.reduce((acc, t) => acc + (t.rows ? t.rows.length : 0), 0); + $('#sm-detail-count').text(`${totalRows} 个详情`); + } +} + +export async function forceSyncAll() { + console.log('[Amily2-SuperMemory] 正在执行全量同步...'); + const tables = getMemoryState(); + + if (!tables || tables.length === 0) { + console.warn('[Amily2-SuperMemory] 没有可同步的表格数据。'); + return; + } + + for (const table of tables) { + let role = 'database'; + if (table.name.includes('时空') || table.name.includes('世界钟')) role = 'anchor'; + if (table.name.includes('日志') || table.name.includes('Log')) role = 'log'; + + updateQueue.push({ + tableName: table.name, + data: table.rows, + headers: table.headers, + rowStatuses: table.rowStatuses || [], + role: role + }); + } + + await processQueue(); + console.log('[Amily2-SuperMemory] 全量同步完成。'); +} diff --git a/super-memory/smart-indexer.js b/super-memory/smart-indexer.js new file mode 100644 index 0000000..57cd6a7 --- /dev/null +++ b/super-memory/smart-indexer.js @@ -0,0 +1,77 @@ +export function generateIndex(data, role, tableName = "") { + if (!Array.isArray(data) || data.length === 0) { + return ""; + } + + const headers = Object.keys(data[0]); + if (headers.length === 0) return ""; + + const indexColumns = identifyIndexColumns(data, headers); + + let indexLines = []; + indexLines.push(`| ${indexColumns.join(' | ')} |`); + indexLines.push(`| ${indexColumns.map(() => '---').join(' | ')} |`); + + let processedData = [...data]; + + const firstColKey = headers[0]; + const firstColVal = data[0] ? data[0][firstColKey] : ''; + const isIndexCol = (firstColKey && (firstColKey.includes('索引') || firstColKey.includes('Index'))) || + (typeof firstColVal === 'string' && /^\s*M\d+/.test(firstColVal)) || + (tableName && (tableName.includes('总结') || tableName.includes('大纲'))); + + if (isIndexCol) { + processedData.sort((a, b) => { + const valA = String(a[firstColKey] || ''); + const valB = String(b[firstColKey] || ''); + return valA.localeCompare(valB, undefined, { numeric: true }); + }); + } + + for (const row of processedData) { + const lineParts = indexColumns.map(col => { + let val = row[col]; + if (val === undefined || val === null) return ""; + val = String(val).trim(); + if (val.length > 15) val = val.substring(0, 12) + "..."; + return val; + }); + indexLines.push(`| ${lineParts.join(' | ')} |`); + } + + return indexLines.join('\n'); +} + +function identifyIndexColumns(data, headers) { + if (headers.length <= 2) return headers; + + const candidates = []; + const maxColumns = 3; + + for (const header of headers) { + if (candidates.length >= maxColumns) break; + + let totalLen = 0; + let count = 0; + for (const row of data) { + if (row[header]) { + totalLen += String(row[header]).length; + count++; + } + } + const avgLen = count > 0 ? totalLen / count : 0; + + const isLongText = avgLen > 20; + const isBlacklisted = /desc|bio|detail|history|经历|描述|详情/i.test(header); + + if (!isLongText && !isBlacklisted) { + candidates.push(header); + } + } + + if (candidates.length === 0) { + return headers.slice(0, Math.min(headers.length, maxColumns)); + } + + return candidates; +} From 3d4b4eb7c41ab09d1dcf7e1082391def10c754be Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:02:51 +0800 Subject: [PATCH 24/56] Delete super-memory directory --- super-memory/bindings.js | 89 ------------- super-memory/index.html | 85 ------------ super-memory/lorebook-bridge.js | 228 -------------------------------- super-memory/manager.js | 203 ---------------------------- super-memory/smart-indexer.js | 77 ----------- 5 files changed, 682 deletions(-) delete mode 100644 super-memory/bindings.js delete mode 100644 super-memory/index.html delete mode 100644 super-memory/lorebook-bridge.js delete mode 100644 super-memory/manager.js delete mode 100644 super-memory/smart-indexer.js diff --git a/super-memory/bindings.js b/super-memory/bindings.js deleted file mode 100644 index 591de3f..0000000 --- a/super-memory/bindings.js +++ /dev/null @@ -1,89 +0,0 @@ -import { extensionName } from "../../utils/settings.js"; -import { extension_settings } from "/scripts/extensions.js"; -import { saveSettingsDebounced } from "/script.js"; -import { initializeSuperMemory } from "./manager.js"; - -export function bindSuperMemoryEvents() { - const panel = $('#amily2_super_memory_panel'); - if (panel.length === 0) return; - - panel.on('click', '.sm-nav-item', function() { - const tab = $(this).data('tab'); - - panel.find('.sm-nav-item').removeClass('active'); - $(this).addClass('active'); - - panel.find('.sm-tab-pane').removeClass('active'); - panel.find(`#sm-${tab}-tab`).addClass('active'); - }); - - panel.on('change', 'input[type="checkbox"]', function() { - if (!extension_settings[extensionName]) extension_settings[extensionName] = {}; - - const id = this.id; - let key = null; - - if (id === 'sm-system-enabled') key = 'super_memory_enabled'; - if (id === 'sm-bridge-enabled') key = 'superMemory_bridgeEnabled'; - - if (key) { - extension_settings[extensionName][key] = this.checked; - saveSettingsDebounced(); - console.log(`[Amily2-SuperMemory] Setting updated: ${key} = ${this.checked}`); - } - }); - - panel.on('change', 'input[type="number"], input[type="text"]', function() { - if (!extension_settings[extensionName]) extension_settings[extensionName] = {}; - - const id = this.id; - let key = null; - - if (id === 'sm-index-depth') key = 'superMemory_indexDepth'; - if (id === 'sm-detail-depth') key = 'superMemory_detailDepth'; - - if (key) { - let value = this.value; - if (this.type === 'number') value = parseInt(value, 10); - - extension_settings[extensionName][key] = value; - saveSettingsDebounced(); - console.log(`[Amily2-SuperMemory] Setting updated: ${key} = ${value}`); - } - }); - - loadSuperMemorySettings(); - - console.log('[Amily2-SuperMemory] Events bound successfully.'); -} - -function loadSuperMemorySettings() { - const settings = extension_settings[extensionName] || {}; - - $('#sm-system-enabled').prop('checked', settings.super_memory_enabled ?? false); - $('#sm-bridge-enabled').prop('checked', settings.superMemory_bridgeEnabled ?? false); - - $('#sm-index-depth').val(settings.superMemory_indexDepth ?? 0); - $('#sm-detail-depth').val(settings.superMemory_detailDepth ?? 2); -} - -window.sm_initializeSystem = async function() { - toastr.info('超级记忆系统正在初始化...'); - $('#sm-system-status').text('初始化中...').css('color', 'yellow'); - - try { - await initializeSuperMemory(); - toastr.success('超级记忆系统初始化完成。'); - } catch (error) { - console.error(error); - toastr.error('初始化失败,请检查控制台。'); - $('#sm-system-status').text('错误').css('color', 'red'); - } -}; - -window.sm_purgeMemory = function() { - if (confirm('您确定要清空所有超级记忆数据吗?')) { - toastr.warning('记忆已清空。'); - $('#sm-system-status').text('未初始化').css('color', '#ffc107'); - } -}; diff --git a/super-memory/index.html b/super-memory/index.html deleted file mode 100644 index dcb5240..0000000 --- a/super-memory/index.html +++ /dev/null @@ -1,85 +0,0 @@ -
-
- 灵台 · 记忆中枢 -
- -
-
- -
-
-

究极长期记忆 (Super Memory)

-

欢迎来到 Amily2 的核心记忆中枢。这里掌管着世界的记忆,连接着每一个角色、每一个物品与每一段传说。

-

通过“三级金字塔”注入策略,我们将实现极致的 Token 节省与无限的记忆深度。

-
- -
- - - -
- -
- -
-
- 状态监控 -
- - 未初始化 -
-
- - 0 条目 -
-
- - 0 条目 -
-
- - -
-
-
- - -
-
- 记忆策略配置 -
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
-
- 关联网络 (The Mesh) -

关联触发逻辑正在开发中...

-
-
-
-
diff --git a/super-memory/lorebook-bridge.js b/super-memory/lorebook-bridge.js deleted file mode 100644 index dfdcfcf..0000000 --- a/super-memory/lorebook-bridge.js +++ /dev/null @@ -1,228 +0,0 @@ -import { amilyHelper } from "../tavern-helper/main.js"; -import { extension_settings, getContext } from "/scripts/extensions.js"; -import { extensionName } from "../../utils/settings.js"; -import { this_chid, characters } from "/script.js"; - -function getMemoryBookName() { - let charName = "Global"; - const context = getContext(); - - if (this_chid !== undefined && characters[this_chid]) { - charName = characters[this_chid].name; - } else if (context.characterId !== undefined && characters[context.characterId]) { - charName = characters[context.characterId].name; - } - - const safeCharName = charName.replace(/[<>:"/\\|?*]/g, '_'); - return `Amily2_Memory_${safeCharName}`; -} - -export async function syncToLorebook(tableName, data, indexText, role, headers, rowStatuses, depth = 100) { - console.log(`[Amily2-Bridge] 开始同步表格: ${tableName} (Depth: ${depth})`); - - await ensureMemoryBook(); - - const bookName = getMemoryBookName(); - - let entries = await amilyHelper.getLorebookEntries(bookName); - if (!entries) entries = []; - - const entriesToUpdate = []; - const entriesToCreate = []; - - const processEntry = (comment, keys, content, type = 'selective', enabled = true) => { - const existingEntry = entries.find(e => e.comment === comment); - if (existingEntry) { - existingEntry.content = content; - existingEntry.key = keys; - existingEntry.order = depth; - - if (type === 'constant') { - existingEntry.constant = true; - } else { - existingEntry.constant = false; - } - if (existingEntry.enabled !== undefined) { - existingEntry.enabled = enabled; - } else { - existingEntry.disable = !enabled; - } - entriesToUpdate.push(existingEntry); - } else { - entriesToCreate.push({ - comment: comment, - keys: keys, - content: content, - type: type, - position: 1, - order: depth, - enabled: enabled - }); - } - }; - - if (role === 'database') { - const indexKey = [`Amily_Index_${tableName}`]; - const indexComment = `[Amily2] Index for ${tableName}`; - let indexContent = `【${tableName} 索引】\n${indexText.trim()}`; - - if (tableName.includes("大纲")) { - indexContent += `\n\n【Amily2-前瞻性预测指令】\n为了实现“提前一轮触发绿灯世界书”的高级记忆回流,请在生成本轮回复时,根据当前剧情走向,**大胆预测并自然提及**下一轮可能出现的索引编码。可自行增加一个标签并使用html注释掉该编码。这将激活系统的预加载机制,确保剧情发展的连贯性。\n`; - } - - processEntry(indexComment, indexKey, indexContent, 'constant'); - } - - data.forEach((row, index) => { - if (!row || row.length === 0) return; - - const primaryVal = row[0]; - - if (!primaryVal) return; - - const isPendingDeletion = rowStatuses && rowStatuses[index] === 'pending-deletion'; - const isEnabled = !isPendingDeletion; - - const triggerKeys = [primaryVal]; - const entryComment = `[Amily2] Detail: ${tableName} - ${primaryVal}`; - - let finalHeaders = headers; - if (!finalHeaders || finalHeaders.length < row.length) { - finalHeaders = []; - for(let i=0; i 0) { - console.log(`[Amily2-Bridge] 清理 ${entriesToDelete.length} 个废弃条目...`); - await amilyHelper.deleteLorebookEntries(bookName, entriesToDelete); - } - - if (entriesToUpdate.length > 0) { - console.log(`[Amily2-Bridge] 更新 ${entriesToUpdate.length} 个条目...`); - await amilyHelper.setLorebookEntries(bookName, entriesToUpdate); - } - - if (entriesToCreate.length > 0) { - console.log(`[Amily2-Bridge] 创建 ${entriesToCreate.length} 个新条目...`); - await amilyHelper.createLorebookEntries(bookName, entriesToCreate); - } - console.log(`[Amily2-Bridge] 同步完成: ${tableName}`); -} - -export async function ensureMemoryBook() { - const bookName = getMemoryBookName(); - const books = await amilyHelper.getLorebooks(); - - if (!books.includes(bookName)) { - console.log(`[Amily2-Bridge] 创建角色专用世界书: ${bookName}`); - await amilyHelper.createLorebook(bookName); - } - - const settings = extension_settings[extensionName] || {}; - const shouldBind = settings.superMemory_autoBind === true; - - if (shouldBind && bookName.startsWith("Amily2_Memory_") && bookName !== "Amily2_Memory_Global") { - console.log(`[Amily2-Bridge] 自动绑定世界书到当前角色...`); - await amilyHelper.bindLorebookToCharacter(bookName); - } else if (!shouldBind) { - console.log(`[Amily2-Bridge] 跳过自动绑定 (设置已禁用)。请手动在世界书管理中激活: ${bookName}`); - } -} - -function createEntryTemplate() { - return { - uid: Date.now() + Math.floor(Math.random() * 1000), - key: [], - keysecondary: [], - comment: "", - content: "", - constant: false, - selective: true, - order: 100, - position: 1, - enabled: true - }; -} - -export async function updateTransientHint(hint) { - console.log('[Amily2-Bridge] 更新瞬时记忆提示...'); - await ensureMemoryBook(); - const bookName = getMemoryBookName(); - - const comment = "[Amily2] Active Memory Hint"; - const content = hint ? `\n\n【重要记忆回响】\n${hint}\n\n` : ""; - const enabled = !!hint; - - let entries = await amilyHelper.getLorebookEntries(bookName); - if (!entries) entries = []; - - const existingEntry = entries.find(e => e.comment === comment); - - if (existingEntry) { - existingEntry.content = content; - existingEntry.enabled = enabled; - existingEntry.order = 0; - existingEntry.constant = true; - - await amilyHelper.setLorebookEntries(bookName, [existingEntry]); - } else if (hint) { - const newEntry = { - comment: comment, - keys: [], - content: content, - constant: true, - selective: false, - order: 0, - position: 0, - enabled: true - }; - await amilyHelper.createLorebookEntries(bookName, [newEntry]); - } - - console.log(`[Amily2-Bridge] 瞬时记忆提示已${enabled ? '启用' : '清除'}。`); -} diff --git a/super-memory/manager.js b/super-memory/manager.js deleted file mode 100644 index 38f633d..0000000 --- a/super-memory/manager.js +++ /dev/null @@ -1,203 +0,0 @@ -import { extension_settings, getContext } from "/scripts/extensions.js"; -import { extensionName } from "../../utils/settings.js"; -import { amilyHelper } from "../tavern-helper/main.js"; -import { generateIndex } from "./smart-indexer.js"; -import { syncToLorebook, ensureMemoryBook, updateTransientHint } from "./lorebook-bridge.js"; -import { getMemoryState, loadMemoryState, saveMemoryState } from "../table-system/manager.js"; -import { eventSource, event_types } from "/script.js"; - -let isInitialized = false; -let updateQueue = []; -let isProcessing = false; -let lastChatId = null; - -const METADATA_KEY = 'Amily2_Memory_Data'; - -export async function initializeSuperMemory() { - const settings = extension_settings[extensionName] || {}; - if (settings.super_memory_enabled === false) { - console.log('[Amily2-SuperMemory] 功能已禁用 (super_memory_enabled = false)。'); - if (window.$) $('#sm-system-status').text('已禁用').css('color', 'gray'); - return; - } - - if (isInitialized) return; - console.log('[Amily2-SuperMemory] 初始化核心管理器...'); - - if (!amilyHelper) { - console.error('[Amily2-SuperMemory] 致命错误:AmilyHelper 未就绪。'); - return; - } - - document.addEventListener('AMILY2_TABLE_UPDATED', handleTableUpdate); - - eventSource.on(event_types.CHAT_CHANGED, async () => { - const settings = extension_settings[extensionName] || {}; - if (settings.super_memory_enabled === false) return; - - console.log('[Amily2-SuperMemory] 检测到聊天切换,正在刷新记忆状态...'); - await checkWorldBookStatus(); - - await tryRestoreStateFromMetadata(); - - await forceSyncAll(); - }); - - await checkWorldBookStatus(); - - await tryRestoreStateFromMetadata(); - - await forceSyncAll(); - - isInitialized = true; - console.log('[Amily2-SuperMemory] 核心管理器初始化完成。'); - - if (window.$) { - $('#sm-system-status').text('运行中').css('color', '#4caf50'); - } -} - -async function checkWorldBookStatus() { - try { - await ensureMemoryBook(); - } catch (error) { - console.error('[Amily2-SuperMemory] 检查世界书状态失败:', error); - } -} - -function handleTableUpdate(event) { - const settings = extension_settings[extensionName] || {}; - if (settings.super_memory_enabled === false) return; - - const { tableName, data, role, hint, headers, rowStatuses } = event.detail; - console.log(`[Amily2-SuperMemory] 检测到表格更新: ${tableName} (Role: ${role})`); - - updateQueue.push({ tableName, data, role, hint, headers, rowStatuses }); - processQueue(); -} - -async function processQueue() { - if (isProcessing || updateQueue.length === 0) return; - isProcessing = true; - - try { - while (updateQueue.length > 0) { - const task = updateQueue.shift(); - await processUpdateTask(task); - } - - await saveStateToMetadata(); - - } catch (error) { - console.error('[Amily2-SuperMemory] 处理更新队列失败:', error); - } finally { - isProcessing = false; - } -} - -async function processUpdateTask(task) { - const { tableName, data, role, hint, headers, rowStatuses } = task; - - const activeData = data.filter((_, i) => !rowStatuses || rowStatuses[i] !== 'pending-deletion'); - const indexText = generateIndex(activeData, role, tableName); - - const allTables = getMemoryState(); - const tableIndex = allTables.findIndex(t => t.name === tableName); - const depth = 8001 + (tableIndex >= 0 ? tableIndex : 99); - - await syncToLorebook(tableName, data, indexText, role, headers, rowStatuses, depth); - - if (hint) { - console.log(`[Amily2-SuperMemory] 应用主动记忆提示: ${hint}`); - await updateTransientHint(hint); - } - - console.log(`[Amily2-SuperMemory] 任务完成: ${tableName}`); - - updateDashboardCounters(); -} - -async function saveStateToMetadata() { - const context = getContext(); - if (!context.chat || context.chat.length === 0) return; - - const lastMsgIndex = context.chat.length - 1; - const lastMsg = context.chat[lastMsgIndex]; - - const currentState = getMemoryState(); - - if (!lastMsg.metadata) lastMsg.metadata = {}; - - lastMsg.metadata[METADATA_KEY] = JSON.parse(JSON.stringify(currentState)); - - if (context.saveChat) { - await context.saveChat(); - } - - console.log(`[Amily2-SuperMemory] 状态已保存至消息 #${lastMsgIndex}`); -} - -export async function tryRestoreStateFromMetadata() { - const context = getContext(); - if (!context.chat || context.chat.length === 0) return; - - let foundState = null; - let foundIndex = -1; - - for (let i = context.chat.length - 1; i >= 0; i--) { - const msg = context.chat[i]; - if (msg.metadata && msg.metadata[METADATA_KEY]) { - foundState = msg.metadata[METADATA_KEY]; - foundIndex = i; - break; - } - } - - if (foundState) { - console.log(`[Amily2-SuperMemory] 发现历史状态 (Msg #${foundIndex}),正在恢复...`); - if (typeof loadMemoryState === 'function') { - loadMemoryState(foundState); - await forceSyncAll(); - } else { - console.warn('[Amily2-SuperMemory] table-system 缺少 loadMemoryState 方法,无法恢复状态。'); - } - } else { - console.log('[Amily2-SuperMemory] 未在聊天记录中发现历史状态,使用默认/当前状态。'); - } -} - -function updateDashboardCounters() { - const tables = getMemoryState(); - if (tables && window.$) { - $('#sm-index-count').text(`${tables.length} 个索引`); - const totalRows = tables.reduce((acc, t) => acc + (t.rows ? t.rows.length : 0), 0); - $('#sm-detail-count').text(`${totalRows} 个详情`); - } -} - -export async function forceSyncAll() { - console.log('[Amily2-SuperMemory] 正在执行全量同步...'); - const tables = getMemoryState(); - - if (!tables || tables.length === 0) { - console.warn('[Amily2-SuperMemory] 没有可同步的表格数据。'); - return; - } - - for (const table of tables) { - let role = 'database'; - if (table.name.includes('时空') || table.name.includes('世界钟')) role = 'anchor'; - if (table.name.includes('日志') || table.name.includes('Log')) role = 'log'; - - updateQueue.push({ - tableName: table.name, - data: table.rows, - headers: table.headers, - rowStatuses: table.rowStatuses || [], - role: role - }); - } - - await processQueue(); - console.log('[Amily2-SuperMemory] 全量同步完成。'); -} diff --git a/super-memory/smart-indexer.js b/super-memory/smart-indexer.js deleted file mode 100644 index 57cd6a7..0000000 --- a/super-memory/smart-indexer.js +++ /dev/null @@ -1,77 +0,0 @@ -export function generateIndex(data, role, tableName = "") { - if (!Array.isArray(data) || data.length === 0) { - return ""; - } - - const headers = Object.keys(data[0]); - if (headers.length === 0) return ""; - - const indexColumns = identifyIndexColumns(data, headers); - - let indexLines = []; - indexLines.push(`| ${indexColumns.join(' | ')} |`); - indexLines.push(`| ${indexColumns.map(() => '---').join(' | ')} |`); - - let processedData = [...data]; - - const firstColKey = headers[0]; - const firstColVal = data[0] ? data[0][firstColKey] : ''; - const isIndexCol = (firstColKey && (firstColKey.includes('索引') || firstColKey.includes('Index'))) || - (typeof firstColVal === 'string' && /^\s*M\d+/.test(firstColVal)) || - (tableName && (tableName.includes('总结') || tableName.includes('大纲'))); - - if (isIndexCol) { - processedData.sort((a, b) => { - const valA = String(a[firstColKey] || ''); - const valB = String(b[firstColKey] || ''); - return valA.localeCompare(valB, undefined, { numeric: true }); - }); - } - - for (const row of processedData) { - const lineParts = indexColumns.map(col => { - let val = row[col]; - if (val === undefined || val === null) return ""; - val = String(val).trim(); - if (val.length > 15) val = val.substring(0, 12) + "..."; - return val; - }); - indexLines.push(`| ${lineParts.join(' | ')} |`); - } - - return indexLines.join('\n'); -} - -function identifyIndexColumns(data, headers) { - if (headers.length <= 2) return headers; - - const candidates = []; - const maxColumns = 3; - - for (const header of headers) { - if (candidates.length >= maxColumns) break; - - let totalLen = 0; - let count = 0; - for (const row of data) { - if (row[header]) { - totalLen += String(row[header]).length; - count++; - } - } - const avgLen = count > 0 ? totalLen / count : 0; - - const isLongText = avgLen > 20; - const isBlacklisted = /desc|bio|detail|history|经历|描述|详情/i.test(header); - - if (!isLongText && !isBlacklisted) { - candidates.push(header); - } - } - - if (candidates.length === 0) { - return headers.slice(0, Math.min(headers.length, maxColumns)); - } - - return candidates; -} From 97f70bb7efb5c7a50af32b9d62ca2aa7b9fe7000 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:03:14 +0800 Subject: [PATCH 25/56] Update manager.js --- core/table-system/manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/table-system/manager.js b/core/table-system/manager.js index 71f84f9..8864a6e 100644 --- a/core/table-system/manager.js +++ b/core/table-system/manager.js @@ -1 +1 @@ -const _0x16a5d7=_0x1220;(function(_0x14696e,_0x27dc8a){const _0xc5a7e0=_0x1220,_0x37402b=_0x14696e();while(!![]){try{const _0x15ccb0=-parseInt(_0xc5a7e0(0x1a9))/0x1+parseInt(_0xc5a7e0(0x1a8))/0x2*(parseInt(_0xc5a7e0(0x286))/0x3)+parseInt(_0xc5a7e0(0x1fc))/0x4*(-parseInt(_0xc5a7e0(0x1ca))/0x5)+parseInt(_0xc5a7e0(0x288))/0x6*(-parseInt(_0xc5a7e0(0x1c1))/0x7)+parseInt(_0xc5a7e0(0x20a))/0x8*(-parseInt(_0xc5a7e0(0x275))/0x9)+-parseInt(_0xc5a7e0(0x198))/0xa*(parseInt(_0xc5a7e0(0x1b3))/0xb)+-parseInt(_0xc5a7e0(0x1f5))/0xc*(-parseInt(_0xc5a7e0(0x1c0))/0xd);if(_0x15ccb0===_0x27dc8a)break;else _0x37402b['push'](_0x37402b['shift']());}catch(_0x3834b5){_0x37402b['push'](_0x37402b['shift']());}}}(_0xbc99,0xe35a6));import{getContext,extension_settings}from'/scripts/extensions.js';import{saveChat,saveSettingsDebounced}from'/script.js';import{log}from'./logger.js';import{fillWithSecondaryApi}from'./secondary-filler.js';import{getChatPiece,saveChatDebounced}from'../../utils/utils.js';import{extensionName}from'../../utils/settings.js';import{DEFAULT_AI_RULE_TEMPLATE,DEFAULT_AI_FLOW_TEMPLATE}from'./settings.js';import{renderTables}from'../../ui/table-bindings.js';import{updateOrInsertTableInChat}from'../../ui/message-table-renderer.js';const TABLE_DATA_KEY=_0x16a5d7(0x244);let currentTablesState=null,highlightedCells=new Set(),updatedTables=new Set();export function addHighlight(_0xf4b9d9,_0x3ee86a,_0x29313e){const _0x1241b1=_0x16a5d7,_0x3e9a14=_0xf4b9d9+'-'+_0x3ee86a+'-'+_0x29313e;highlightedCells[_0x1241b1(0x268)](_0x3e9a14);}export function getHighlights(){return highlightedCells;}export function clearHighlights(){const _0x3100e4=_0x16a5d7;highlightedCells[_0x3100e4(0x1eb)]>0x0&&(highlightedCells[_0x3100e4(0x223)](),log('已清除所有单元格高亮标记。','info'));}export function getUpdatedTables(){return updatedTables;}export function clearUpdatedTables(){const _0x14f821=_0x16a5d7;updatedTables[_0x14f821(0x1eb)]>0x0&&(updatedTables[_0x14f821(0x223)](),log(_0x14f821(0x17f),_0x14f821(0x259)));}export function setMemoryState(_0x24135d){currentTablesState=_0x24135d;}export function getMemoryState(){return currentTablesState;}const defaultTemplate={'tables':[{'name':_0x16a5d7(0x188),'headers':['日期','时段','时间','地点',_0x16a5d7(0x1cb)],'note':_0x16a5d7(0x25a),'rule_add':_0x16a5d7(0x1b8),'rule_delete':'【触发条件】任何时候,如果此表格的行数超过一行,必须删除旧的行,只保留最新、最准确的一行。','rule_update':_0x16a5d7(0x196),'charLimitRules':{},'rowLimitRule':0x1,'rows':[]},{'name':_0x16a5d7(0x218),'headers':[_0x16a5d7(0x210),'外貌','身形','衣着','性格','身份','职业',_0x16a5d7(0x265),'爱好','住所',_0x16a5d7(0x24f)],'note':_0x16a5d7(0x195),'rule_add':_0x16a5d7(0x206),'rule_delete':_0x16a5d7(0x250),'rule_update':_0x16a5d7(0x1dc),'charLimitRules':{'10':0x1e},'rowLimitRule':0x0,'rows':[]},{'name':_0x16a5d7(0x1d9),'headers':[_0x16a5d7(0x1c3),'类型','详情','状态','执行者','地点',_0x16a5d7(0x18d),'结果'],'note':_0x16a5d7(0x1db),'rule_add':_0x16a5d7(0x248),'rule_delete':_0x16a5d7(0x28c),'rule_update':_0x16a5d7(0x20b),'charLimitRules':{},'rowLimitRule':0xa,'rows':[]},{'name':_0x16a5d7(0x291),'headers':[_0x16a5d7(0x1cc),'类型','详情','状态','拥有者',_0x16a5d7(0x24e)],'note':_0x16a5d7(0x1bb),'rule_add':'【触发条件】当一个物品被明确赋予了特殊意义(如被赠予、在关键事件中扮演重要角色)或展示出独特功能时,应为其创建条目。','rule_delete':'【触发条件】当一个物品被彻底摧毁、消耗完毕或永久失去其特殊意义时,可以删除。','rule_update':_0x16a5d7(0x278),'charLimitRules':{},'rowLimitRule':0x0,'rows':[]},{'name':_0x16a5d7(0x22f),'headers':[_0x16a5d7(0x289),'技能效果'],'note':_0x16a5d7(0x20d),'rule_add':_0x16a5d7(0x1d8),'rule_delete':'【触发条件】如果发现表格中存在两个描述完全相同的重复技能,应删除其中一个。如果记录了非的技能,应立即删除。','rule_update':_0x16a5d7(0x194),'charLimitRules':{},'rowLimitRule':0x0,'rows':[]},{'name':_0x16a5d7(0x19c),'headers':['类型',_0x16a5d7(0x23d)],'note':_0x16a5d7(0x1b2),'rule_add':_0x16a5d7(0x1c7),'rule_delete':_0x16a5d7(0x19f),'rule_update':'【触发条件】只能在明确表示要修改某条设定时,才能更新对应行的描述。','charLimitRules':{},'rowLimitRule':0x0,'rows':[]}]};function getDefaultTables(){const _0x4125c0=_0x16a5d7;log(_0x4125c0(0x276),_0x4125c0(0x259));const _0xa73b56=JSON[_0x4125c0(0x26f)](JSON[_0x4125c0(0x270)](defaultTemplate[_0x4125c0(0x23a)]));return _0xa73b56[_0x4125c0(0x243)](_0xd5ad96=>{const _0x5e7e8a=_0x4125c0;_0xd5ad96[_0x5e7e8a(0x1df)]={'columnIndex':-0x1,'limit':0x0},_0xd5ad96[_0x5e7e8a(0x203)]=0x0,_0xd5ad96['columnWidths']=[];}),_0xa73b56;}export function loadTables(_0x23a21d=-0x1){const _0x488c88=_0x16a5d7,_0x2b747e=getContext();if(_0x2b747e&&_0x2b747e['chat']&&_0x2b747e[_0x488c88(0x254)][_0x488c88(0x18e)]>0x0){const _0x204f7e=_0x23a21d===-0x1?_0x2b747e[_0x488c88(0x254)]['length']-0x1:_0x23a21d-0x1;for(let _0x7453cd=_0x204f7e;_0x7453cd>=0x0;_0x7453cd--){const _0x45c274=_0x2b747e[_0x488c88(0x254)][_0x7453cd];if(_0x45c274[_0x488c88(0x217)]&&_0x45c274['extra'][TABLE_DATA_KEY]){log(_0x488c88(0x17e)+_0x7453cd+_0x488c88(0x1d1),_0x488c88(0x259));let _0x1cd6f9=JSON[_0x488c88(0x26f)](JSON[_0x488c88(0x270)](_0x45c274['extra'][TABLE_DATA_KEY]));return _0x1cd6f9[_0x488c88(0x243)](_0x152d82=>{const _0x266360=_0x488c88;if(_0x152d82['note']===undefined)_0x152d82[_0x266360(0x1f1)]='无';if(_0x152d82['rule_add']===undefined)_0x152d82[_0x266360(0x242)]='允许';if(_0x152d82[_0x266360(0x23c)]===undefined)_0x152d82[_0x266360(0x23c)]='允许';if(_0x152d82[_0x266360(0x1e6)]===undefined)_0x152d82[_0x266360(0x1e6)]='允许';_0x152d82[_0x266360(0x1df)]&&!_0x152d82[_0x266360(0x1de)]&&(_0x152d82[_0x266360(0x1de)]={},_0x152d82['charLimitRule'][_0x266360(0x27b)]!==-0x1&&_0x152d82[_0x266360(0x1df)][_0x266360(0x272)]>0x0&&(_0x152d82['charLimitRules'][_0x152d82[_0x266360(0x1df)][_0x266360(0x27b)]]=_0x152d82[_0x266360(0x1df)][_0x266360(0x272)]));delete _0x152d82[_0x266360(0x1df)];if(_0x152d82[_0x266360(0x203)]===undefined)_0x152d82[_0x266360(0x203)]=0x0;if(_0x152d82[_0x266360(0x224)]===undefined)_0x152d82[_0x266360(0x224)]=[];!_0x152d82[_0x266360(0x22a)]&&(_0x152d82[_0x266360(0x22a)]=Array(_0x152d82['rows'][_0x266360(0x18e)])[_0x266360(0x249)]('normal'));}),currentTablesState=_0x1cd6f9,currentTablesState;}}}if(extension_settings[extensionName]?.[_0x488c88(0x216)]){log(_0x488c88(0x261),_0x488c88(0x259));try{const _0x248c1b=extension_settings[extensionName][_0x488c88(0x216)];return currentTablesState=JSON[_0x488c88(0x26f)](JSON['stringify'](_0x248c1b['tables'])),_0x248c1b[_0x488c88(0x200)]!==undefined&&saveBatchFillerRuleTemplate(_0x248c1b[_0x488c88(0x200)]),_0x248c1b[_0x488c88(0x285)]!==undefined&&saveBatchFillerFlowTemplate(_0x248c1b[_0x488c88(0x285)]),currentTablesState;}catch(_0x253883){log(_0x488c88(0x1c8)+_0x253883[_0x488c88(0x21d)],_0x488c88(0x18a));}}return log(_0x488c88(0x21f),_0x488c88(0x259)),currentTablesState=getDefaultTables(),currentTablesState;}export function saveStateToMessage(_0xdcdfa5,_0x11bf07){const _0x50e968=_0x16a5d7;if(!_0xdcdfa5||!_0x11bf07)return log('缺少状态或目标消息,无法保存。','error'),![];return!_0x11bf07['extra']&&(_0x11bf07['extra']={}),_0x11bf07['extra'][TABLE_DATA_KEY]=JSON[_0x50e968(0x26f)](JSON['stringify'](_0xdcdfa5)),log(_0x50e968(0x1ad)+_0x11bf07[_0x50e968(0x269)][_0x50e968(0x238)](0x0,0x14)+_0x50e968(0x193),_0x50e968(0x259)),!![];}export function saveTables(_0x45d2e9='未知操作'){const _0x20c43b=_0x16a5d7;return log(_0x20c43b(0x1f4)+_0x45d2e9+_0x20c43b(0x260),'info'),!![];}export function deleteColumn(_0xc1a54e,_0x7bfb2d){const _0x151946=_0x16a5d7,_0x4b575b=getMemoryState();if(!_0x4b575b[_0xc1a54e]||_0x7bfb2d<0x0||_0x7bfb2d>=_0x4b575b[_0xc1a54e][_0x151946(0x208)][_0x151946(0x18e)]){log(_0x151946(0x1a5)+_0xc1a54e+_0x151946(0x1a6)+_0x7bfb2d+_0x151946(0x1ea),'error');return;}_0x4b575b[_0xc1a54e][_0x151946(0x208)][_0x151946(0x186)](_0x7bfb2d,0x1),_0x4b575b[_0xc1a54e]['rows'][_0x151946(0x243)](_0xddead0=>{const _0xe0cca2=_0x151946;_0xddead0[_0xe0cca2(0x18e)]>_0x7bfb2d&&_0xddead0[_0xe0cca2(0x186)](_0x7bfb2d,0x1);}),_0x4b575b[_0xc1a54e][_0x151946(0x224)]&&_0x4b575b[_0xc1a54e]['columnWidths'][_0x151946(0x18e)]>_0x7bfb2d&&_0x4b575b[_0xc1a54e][_0x151946(0x224)]['splice'](_0x7bfb2d,0x1),log(_0x151946(0x293)+_0xc1a54e+_0x151946(0x1b0)+(_0x7bfb2d+0x1)+_0x151946(0x1e7),_0x151946(0x25d)),saveTables(_0x4b575b);}export function moveRow(_0xd1828d,_0x36be42,_0x1a59d6){const _0x6053d7=_0x16a5d7,_0x265dfd=getMemoryState(),_0x4fbb0f=_0x265dfd[_0xd1828d];if(!_0x4fbb0f||_0x36be42<0x0||_0x36be42>=_0x4fbb0f[_0x6053d7(0x221)][_0x6053d7(0x18e)])return;const _0x55a08c=_0x1a59d6==='up'?_0x36be42-0x1:_0x36be42+0x1;if(_0x55a08c<0x0||_0x55a08c>=_0x4fbb0f[_0x6053d7(0x221)]['length'])return;const [_0x3e0a54]=_0x4fbb0f[_0x6053d7(0x221)]['splice'](_0x36be42,0x1);_0x4fbb0f[_0x6053d7(0x221)][_0x6053d7(0x186)](_0x55a08c,0x0,_0x3e0a54);if(_0x4fbb0f['rowStatuses']&&_0x4fbb0f[_0x6053d7(0x22a)]['length']===_0x4fbb0f[_0x6053d7(0x221)]['length']+0x1){const [_0x4b0d27]=_0x4fbb0f[_0x6053d7(0x22a)]['splice'](_0x36be42,0x1);_0x4fbb0f['rowStatuses']['splice'](_0x55a08c,0x0,_0x4b0d27);}log(_0x6053d7(0x1a4)+_0xd1828d+_0x6053d7(0x1b0)+(_0x36be42+0x1)+_0x6053d7(0x232)+(_0x55a08c+0x1)+_0x6053d7(0x27a),_0x6053d7(0x25d)),saveTables(_0x265dfd);}export function insertRow(_0x40ecea,_0x12dc27,_0x4fc6a2=_0x16a5d7(0x1aa)){const _0x4e73b4=_0x16a5d7,_0x449c6a=getMemoryState(),_0x12aa3e=_0x449c6a[_0x40ecea];if(!_0x12aa3e){log('插入行失败:找不到索引为\x20'+_0x40ecea+'\x20的表格。',_0x4e73b4(0x18a));return;}let _0x493804;typeof _0x12dc27===_0x4e73b4(0x1d4)?_0x493804=_0x4fc6a2==='above'?_0x12dc27:_0x12dc27+0x1:_0x493804=_0x12aa3e[_0x4e73b4(0x221)][_0x4e73b4(0x18e)];if(_0x493804<0x0)_0x493804=0x0;if(_0x493804>_0x12aa3e[_0x4e73b4(0x221)][_0x4e73b4(0x18e)])_0x493804=_0x12aa3e[_0x4e73b4(0x221)][_0x4e73b4(0x18e)];const _0x334fa4=new Array(_0x12aa3e[_0x4e73b4(0x208)][_0x4e73b4(0x18e)])[_0x4e73b4(0x249)]('');if(typeof _0x12dc27===_0x4e73b4(0x1c5)&&_0x12dc27!==null)for(const _0xb566d5 in _0x12dc27){const _0x575ff4=parseInt(_0xb566d5,0xa);!isNaN(_0x575ff4)&&_0x575ff4<_0x334fa4[_0x4e73b4(0x18e)]&&(_0x334fa4[_0x575ff4]=_0x12dc27[_0xb566d5],addHighlight(_0x40ecea,_0x493804,_0x575ff4));}_0x12aa3e[_0x4e73b4(0x221)][_0x4e73b4(0x186)](_0x493804,0x0,_0x334fa4);if(!_0x12aa3e[_0x4e73b4(0x22a)])_0x12aa3e[_0x4e73b4(0x22a)]=Array(_0x12aa3e[_0x4e73b4(0x221)][_0x4e73b4(0x18e)])[_0x4e73b4(0x249)](_0x4e73b4(0x292));_0x12aa3e[_0x4e73b4(0x22a)][_0x4e73b4(0x186)](_0x493804,0x0,_0x4e73b4(0x292)),updatedTables[_0x4e73b4(0x268)](_0x40ecea),log(_0x4e73b4(0x18f)+_0x12aa3e[_0x4e73b4(0x205)]+_0x4e73b4(0x256)+_0x40ecea+')\x20的第\x20'+(_0x493804+0x1)+_0x4e73b4(0x1e9),_0x4e73b4(0x25d));const _0x2fd96c=getContext();if(_0x2fd96c['chat']&&_0x2fd96c[_0x4e73b4(0x254)]['length']>0x0){const _0x46474f=_0x2fd96c['chat'][_0x2fd96c[_0x4e73b4(0x254)][_0x4e73b4(0x18e)]-0x1];if(saveStateToMessage(_0x449c6a,_0x46474f)){saveChat();return;}}saveChatDebounced();}export function addRow(_0x545454){const _0xbbc637=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x545454])return;const _0x2db000=currentTablesState[_0x545454],_0x505250=_0x2db000[_0xbbc637(0x208)][_0xbbc637(0x18e)],_0xf432cd=Array(_0x505250)[_0xbbc637(0x249)]('');_0x2db000[_0xbbc637(0x221)][_0xbbc637(0x27f)](_0xf432cd);if(!_0x2db000[_0xbbc637(0x22a)])_0x2db000[_0xbbc637(0x22a)]=Array(_0x2db000[_0xbbc637(0x221)]['length'])[_0xbbc637(0x249)]('normal');_0x2db000[_0xbbc637(0x22a)][_0xbbc637(0x27f)]('normal'),updatedTables[_0xbbc637(0x268)](_0x545454);const _0x5087a8='表格\x20['+_0x2db000[_0xbbc637(0x205)]+_0xbbc637(0x207);log(_0x5087a8,_0xbbc637(0x259));const _0x1a7257=getContext();if(_0x1a7257['chat']&&_0x1a7257['chat']['length']>0x0){const _0x5005c1=_0x1a7257[_0xbbc637(0x254)][_0x1a7257[_0xbbc637(0x254)][_0xbbc637(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x5005c1)){saveChat();return;}}saveChatDebounced();}export function addColumn(_0x264213){const _0x4f0585=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x264213])return;const _0x55495f=currentTablesState[_0x264213],_0xc75acf='新列\x20'+(_0x55495f['headers'][_0x4f0585(0x18e)]+0x1);_0x55495f['headers']['push'](_0xc75acf),_0x55495f[_0x4f0585(0x221)][_0x4f0585(0x243)](_0x155783=>_0x155783['push'](''));if(!_0x55495f['columnWidths'])_0x55495f[_0x4f0585(0x224)]=[];_0x55495f['columnWidths'][_0x4f0585(0x27f)](null);const _0xb95d46='表格\x20['+_0x55495f[_0x4f0585(0x205)]+_0x4f0585(0x1c2);log(_0xb95d46,_0x4f0585(0x259));const _0x59749b=getContext();if(_0x59749b[_0x4f0585(0x254)]&&_0x59749b[_0x4f0585(0x254)][_0x4f0585(0x18e)]>0x0){const _0x17b06f=_0x59749b['chat'][_0x59749b[_0x4f0585(0x254)][_0x4f0585(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x17b06f)){saveChat();return;}}saveChatDebounced();}export function updateHeader(_0x29eacc,_0x1e21b9,_0x3ac7e5){const _0x2dfe37=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x29eacc]||currentTablesState[_0x29eacc][_0x2dfe37(0x208)][_0x1e21b9]===undefined)return;const _0x29b0cb=currentTablesState[_0x29eacc][_0x2dfe37(0x205)],_0xdfe04e=currentTablesState[_0x29eacc][_0x2dfe37(0x208)][_0x1e21b9];currentTablesState[_0x29eacc]['headers'][_0x1e21b9]=_0x3ac7e5;const _0x4097a7='表格\x20['+_0x29b0cb+']\x20的表头“'+_0xdfe04e+_0x2dfe37(0x271)+_0x3ac7e5+'”。';log(_0x4097a7,_0x2dfe37(0x259));const _0x36aa5a=getContext();if(_0x36aa5a[_0x2dfe37(0x254)]&&_0x36aa5a[_0x2dfe37(0x254)][_0x2dfe37(0x18e)]>0x0){const _0x151c21=_0x36aa5a[_0x2dfe37(0x254)][_0x36aa5a[_0x2dfe37(0x254)][_0x2dfe37(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x151c21)){saveChat();return;}}saveChatDebounced();}export async function deleteRow(_0x12bc4b,_0x1684b5){const _0x395ea4=_0x16a5d7,_0x2e67e9=currentTablesState?.[_0x12bc4b];if(!_0x2e67e9||!_0x2e67e9['rows'][_0x1684b5])return;!_0x2e67e9[_0x395ea4(0x22a)]&&(_0x2e67e9[_0x395ea4(0x22a)]=Array(_0x2e67e9[_0x395ea4(0x221)][_0x395ea4(0x18e)])[_0x395ea4(0x249)](_0x395ea4(0x292)));_0x2e67e9['rowStatuses'][_0x1684b5]=_0x395ea4(0x181),updatedTables[_0x395ea4(0x268)](_0x12bc4b);const _0xe965a3=_0x395ea4(0x253)+_0x2e67e9[_0x395ea4(0x205)]+_0x395ea4(0x1ae)+(_0x1684b5+0x1)+_0x395ea4(0x23e);log(_0xe965a3,_0x395ea4(0x259));const _0x547b46=getContext();if(_0x547b46['chat']?.[_0x395ea4(0x18e)]>0x0){const _0x8ef4b9=_0x547b46[_0x395ea4(0x254)][_0x547b46[_0x395ea4(0x254)][_0x395ea4(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x8ef4b9)){await saveChat(),renderTables();return;}}await saveChatDebounced(),renderTables();}export async function restoreRow(_0x227286,_0x2e9ac7){const _0x2818da=_0x16a5d7,_0x558518=currentTablesState?.[_0x227286];if(!_0x558518||!_0x558518[_0x2818da(0x221)][_0x2e9ac7]||!_0x558518[_0x2818da(0x22a)])return;_0x558518['rowStatuses'][_0x2e9ac7]=_0x2818da(0x292),updatedTables['add'](_0x227286);const _0x1a5db9='表格\x20['+_0x558518[_0x2818da(0x205)]+_0x2818da(0x1ae)+(_0x2e9ac7+0x1)+'\x20行已恢复。';log(_0x1a5db9,_0x2818da(0x259));const _0x1ff3e6=getContext();if(_0x1ff3e6['chat']?.[_0x2818da(0x18e)]>0x0){const _0x235b1a=_0x1ff3e6[_0x2818da(0x254)][_0x1ff3e6['chat'][_0x2818da(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x235b1a)){await saveChat(),renderTables();return;}}await saveChatDebounced(),renderTables();}export function commitPendingDeletions(){const _0x517c27=_0x16a5d7;if(!currentTablesState)return![];let _0x3cf108=0x0;currentTablesState[_0x517c27(0x243)]((_0x441ca9,_0x3b447f)=>{const _0x46cf1f=_0x517c27;if(!_0x441ca9['rowStatuses']||_0x441ca9[_0x46cf1f(0x22a)][_0x46cf1f(0x18e)]===0x0)return;let _0x6dcee3=![];for(let _0x19e727=_0x441ca9[_0x46cf1f(0x221)][_0x46cf1f(0x18e)]-0x1;_0x19e727>=0x0;_0x19e727--){_0x441ca9[_0x46cf1f(0x22a)][_0x19e727]===_0x46cf1f(0x181)&&(_0x441ca9['rows'][_0x46cf1f(0x186)](_0x19e727,0x1),_0x441ca9[_0x46cf1f(0x22a)]['splice'](_0x19e727,0x1),_0x3cf108++,_0x6dcee3=!![]);}_0x6dcee3&&updatedTables[_0x46cf1f(0x268)](_0x3b447f);});if(_0x3cf108>0x0)return log(_0x517c27(0x274)+_0x3cf108+_0x517c27(0x27a),'info'),!![];return![];}export function insertColumn(_0x345e2c,_0x29873e,_0x1be415){const _0x358106=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x345e2c])return;const _0x33f02a=currentTablesState[_0x345e2c],_0x1f0a09=_0x1be415==='left'?_0x29873e:_0x29873e+0x1,_0x15381e='新列';_0x33f02a[_0x358106(0x208)][_0x358106(0x186)](_0x1f0a09,0x0,_0x15381e),_0x33f02a['rows']['forEach'](_0x1179c9=>_0x1179c9[_0x358106(0x186)](_0x1f0a09,0x0,''));if(!_0x33f02a[_0x358106(0x224)])_0x33f02a[_0x358106(0x224)]=[];_0x33f02a[_0x358106(0x224)][_0x358106(0x186)](_0x1f0a09,0x0,null);const _0x59b114=_0x358106(0x253)+_0x33f02a[_0x358106(0x205)]+_0x358106(0x245)+(_0x29873e+0x1)+_0x358106(0x255)+(_0x1be415==='left'?'左侧':'右侧')+_0x358106(0x1be);log(_0x59b114,'info');const _0x485613=getContext();if(_0x485613['chat']&&_0x485613[_0x358106(0x254)]['length']>0x0){const _0x37ceb8=_0x485613[_0x358106(0x254)][_0x485613['chat'][_0x358106(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x37ceb8)){saveChat();return;}}saveChatDebounced();}export function moveColumn(_0x256453,_0x14f007,_0x2ccab){const _0x314f7e=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x256453])return;const _0x3bc12d=currentTablesState[_0x256453],_0x44359f=_0x3bc12d['headers'],_0x3d9a19=_0x3bc12d[_0x314f7e(0x221)],_0x5ede0f=_0x2ccab==='left'?_0x14f007-0x1:_0x14f007+0x1;if(_0x5ede0f<0x0||_0x5ede0f>=_0x44359f[_0x314f7e(0x18e)]){log(_0x314f7e(0x229)+_0x14f007+_0x314f7e(0x220),_0x314f7e(0x231));return;}const [_0x213f3c]=_0x44359f[_0x314f7e(0x186)](_0x14f007,0x1);_0x44359f[_0x314f7e(0x186)](_0x5ede0f,0x0,_0x213f3c),_0x3d9a19[_0x314f7e(0x243)](_0x3e683d=>{const _0x47509e=_0x314f7e,[_0x49b3a7]=_0x3e683d['splice'](_0x14f007,0x1);_0x3e683d[_0x47509e(0x186)](_0x5ede0f,0x0,_0x49b3a7);});if(_0x3bc12d['columnWidths']&&_0x3bc12d[_0x314f7e(0x224)]['length']>_0x14f007){const [_0x552753]=_0x3bc12d[_0x314f7e(0x224)][_0x314f7e(0x186)](_0x14f007,0x1);_0x3bc12d[_0x314f7e(0x224)][_0x314f7e(0x186)](_0x5ede0f,0x0,_0x552753);}const _0x1e33cd='表格\x20['+_0x3bc12d[_0x314f7e(0x205)]+_0x314f7e(0x1e3)+_0x213f3c+_0x314f7e(0x219)+(_0x2ccab===_0x314f7e(0x204)?'左':'右')+_0x314f7e(0x20c);log(_0x1e33cd,_0x314f7e(0x259));const _0x85f4b3=getContext();if(_0x85f4b3[_0x314f7e(0x254)]&&_0x85f4b3[_0x314f7e(0x254)][_0x314f7e(0x18e)]>0x0){const _0x19deaf=_0x85f4b3[_0x314f7e(0x254)][_0x85f4b3[_0x314f7e(0x254)][_0x314f7e(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x19deaf)){saveChat();return;}}saveChatDebounced();}export function deleteTable(_0x4154af){const _0x2a4347=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x4154af])return;const _0xe756b5=currentTablesState[_0x4154af][_0x2a4347(0x205)];currentTablesState[_0x2a4347(0x186)](_0x4154af,0x1);const _0x1faf34=_0x2a4347(0x253)+_0xe756b5+_0x2a4347(0x209);log(_0x1faf34,_0x2a4347(0x25d));const _0x4c37eb=getContext();if(_0x4c37eb[_0x2a4347(0x254)]&&_0x4c37eb[_0x2a4347(0x254)][_0x2a4347(0x18e)]>0x0){const _0x59e219=_0x4c37eb[_0x2a4347(0x254)][_0x4c37eb['chat'][_0x2a4347(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x59e219)){saveChat(),log(_0x2a4347(0x1a1),_0x2a4347(0x25d));return;}}log(_0x2a4347(0x237),_0x2a4347(0x18a)),saveChatDebounced();}export function addTable(_0x4ec3fa){const _0x17a67f=_0x16a5d7;if(!_0x4ec3fa||!_0x4ec3fa[_0x17a67f(0x213)]()){log(_0x17a67f(0x28e),'error'),toastr[_0x17a67f(0x18a)](_0x17a67f(0x18b),_0x17a67f(0x1b6));return;}!currentTablesState&&loadTables();if(currentTablesState['some'](_0x2c8839=>_0x2c8839['name']===_0x4ec3fa[_0x17a67f(0x213)]())){log(_0x17a67f(0x191)+_0x4ec3fa+'\x22\x20的表格已存在。','error'),toastr[_0x17a67f(0x18a)](_0x17a67f(0x228)+_0x4ec3fa+_0x17a67f(0x27e),'创建失败');return;}const _0x1c1844={'name':_0x4ec3fa[_0x17a67f(0x213)](),'headers':[_0x17a67f(0x257)],'rows':[],'rowStatuses':[],'columnWidths':[],'note':_0x17a67f(0x214),'rule_add':'允许','rule_delete':'允许','rule_update':'允许','charLimitRules':{},'rowLimitRule':0x0};currentTablesState['push'](_0x1c1844);const _0x462c50='已成功创建新表格:['+_0x4ec3fa['trim']()+']。';log(_0x462c50,_0x17a67f(0x25d));const _0x31272e=getContext();if(_0x31272e[_0x17a67f(0x254)]&&_0x31272e[_0x17a67f(0x254)][_0x17a67f(0x18e)]>0x0){const _0x218dbe=_0x31272e[_0x17a67f(0x254)][_0x31272e[_0x17a67f(0x254)]['length']-0x1];if(saveStateToMessage(currentTablesState,_0x218dbe)){saveChat(),log(_0x17a67f(0x1a2),_0x17a67f(0x25d));return;}}log(_0x17a67f(0x24d),_0x17a67f(0x18a)),saveChatDebounced();}export function renameTable(_0x35e313,_0x510f8e){const _0x34d42e=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x35e313]){log(_0x34d42e(0x1da),_0x34d42e(0x18a)),toastr[_0x34d42e(0x18a)](_0x34d42e(0x1bd),_0x34d42e(0x19a));return;}const _0x15f56d=_0x510f8e['trim']();if(!_0x15f56d){log(_0x34d42e(0x1e2),_0x34d42e(0x18a)),toastr[_0x34d42e(0x18a)](_0x34d42e(0x18b),_0x34d42e(0x19a));return;}if(currentTablesState[_0x34d42e(0x1c4)]((_0x40c517,_0x4b32ae)=>_0x4b32ae!==_0x35e313&&_0x40c517['name']===_0x15f56d)){log('重命名失败:名为\x20\x22'+_0x15f56d+_0x34d42e(0x27e),_0x34d42e(0x18a)),toastr[_0x34d42e(0x18a)](_0x34d42e(0x228)+_0x15f56d+'\x22\x20的表格已存在。',_0x34d42e(0x19a));return;}const _0x5d322f=currentTablesState[_0x35e313][_0x34d42e(0x205)];currentTablesState[_0x35e313][_0x34d42e(0x205)]=_0x15f56d,log(_0x34d42e(0x1e5)+_0x5d322f+_0x34d42e(0x1c6)+_0x15f56d+'\x22。',_0x34d42e(0x25d));const _0x17cbb6=getContext();if(_0x17cbb6[_0x34d42e(0x254)]&&_0x17cbb6[_0x34d42e(0x254)]['length']>0x0){const _0x5d618c=_0x17cbb6[_0x34d42e(0x254)][_0x17cbb6['chat'][_0x34d42e(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x5d618c)){saveChat();return;}}saveChatDebounced();}function _0x1220(_0x199c46,_0x403574){const _0xbc990c=_0xbc99();return _0x1220=function(_0x1220f1,_0x5bf74d){_0x1220f1=_0x1220f1-0x17d;let _0x1c1492=_0xbc990c[_0x1220f1];return _0x1c1492;},_0x1220(_0x199c46,_0x403574);}export function moveTable(_0x3850db,_0x39d402){const _0x7fddc3=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x3850db])return;const _0x458cbc=_0x39d402==='up'?_0x3850db-0x1:_0x3850db+0x1;if(_0x458cbc<0x0||_0x458cbc>=currentTablesState[_0x7fddc3(0x18e)]){log(_0x7fddc3(0x182)+_0x3850db+_0x7fddc3(0x220),_0x7fddc3(0x231));return;}const _0x948371=currentTablesState[_0x3850db];currentTablesState[_0x3850db]=currentTablesState[_0x458cbc],currentTablesState[_0x458cbc]=_0x948371;const _0x1b2bc2=_0x7fddc3(0x253)+_0x948371[_0x7fddc3(0x205)]+_0x7fddc3(0x1d7);log(_0x1b2bc2,_0x7fddc3(0x25d));const _0x598331=getContext();if(_0x598331[_0x7fddc3(0x254)]&&_0x598331[_0x7fddc3(0x254)][_0x7fddc3(0x18e)]>0x0){const _0x5d086c=_0x598331['chat'][_0x598331[_0x7fddc3(0x254)][_0x7fddc3(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x5d086c)){saveChat(),log(_0x7fddc3(0x212),_0x7fddc3(0x25d));return;}}log('无法找到可锚定的消息或保存失败,顺序调整可能不会被持久化!',_0x7fddc3(0x18a)),saveChatDebounced();}export function updateTableRules(_0x33a244,_0xc59eb9){const _0x7e69bf=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x33a244])return;const _0x38361b=currentTablesState[_0x33a244];_0x38361b['note']=_0xc59eb9[_0x7e69bf(0x1f1)],_0x38361b[_0x7e69bf(0x242)]=_0xc59eb9[_0x7e69bf(0x242)],_0x38361b[_0x7e69bf(0x23c)]=_0xc59eb9['rule_delete'],_0x38361b[_0x7e69bf(0x1e6)]=_0xc59eb9[_0x7e69bf(0x1e6)],_0x38361b['charLimitRules']=_0xc59eb9['charLimitRules'],_0x38361b[_0x7e69bf(0x203)]=_0xc59eb9[_0x7e69bf(0x203)],delete _0x38361b['charLimitRule'];const _0x279e7b='表格\x20['+_0x38361b[_0x7e69bf(0x205)]+_0x7e69bf(0x26e);log(_0x279e7b,_0x7e69bf(0x259));const _0x46c0fd=getContext();if(_0x46c0fd['chat']&&_0x46c0fd['chat'][_0x7e69bf(0x18e)]>0x0){const _0x5532a5=_0x46c0fd[_0x7e69bf(0x254)][_0x46c0fd['chat'][_0x7e69bf(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x5532a5)){saveChat();return;}}saveChatDebounced();}export function updateRow(_0x44d290,_0x751d3d,_0x204572){const _0x165cc4=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x44d290]){log(_0x165cc4(0x283)+_0x44d290+_0x165cc4(0x266),_0x165cc4(0x18a));return;}const _0xbb44c6=currentTablesState[_0x44d290];if(_0x751d3d>=_0xbb44c6[_0x165cc4(0x221)]['length']){log('AI指令意图更新不存在的行\x20(rowIndex:\x20'+_0x751d3d+_0x165cc4(0x1cd)+_0xbb44c6[_0x165cc4(0x205)]+_0x165cc4(0x180),_0x165cc4(0x231)),insertRow(_0x44d290,_0x204572);return;}const _0x20132a=_0xbb44c6['rows'][_0x751d3d];for(const _0x3bf0c8 in _0x204572){const _0x4c2eaf=parseInt(_0x3bf0c8,0xa);_0x4c2eaf<_0x20132a['length']&&(_0x20132a[_0x4c2eaf]=_0x204572[_0x4c2eaf],addHighlight(_0x44d290,_0x751d3d,_0x4c2eaf));}updatedTables[_0x165cc4(0x268)](_0x44d290);const _0x4d1014=_0x165cc4(0x1b5)+_0xbb44c6[_0x165cc4(0x205)]+_0x165cc4(0x1ae)+(_0x751d3d+0x1)+_0x165cc4(0x27a);log(_0x4d1014,_0x165cc4(0x259));const _0x1fc6d2=getContext();if(_0x1fc6d2[_0x165cc4(0x254)]&&_0x1fc6d2['chat']['length']>0x0){const _0x25f5f5=_0x1fc6d2['chat'][_0x1fc6d2['chat']['length']-0x1];if(saveStateToMessage(currentTablesState,_0x25f5f5)){saveChat();return;}}saveChatDebounced();}export function clearAllTables(){const _0x12e72e=_0x16a5d7;if(!currentTablesState){log(_0x12e72e(0x1f7),_0x12e72e(0x18a));return;}currentTablesState['forEach']((_0x27c34d,_0x31d9ab)=>{const _0x4c08bb=_0x12e72e;_0x27c34d[_0x4c08bb(0x221)][_0x4c08bb(0x18e)]>0x0&&updatedTables[_0x4c08bb(0x268)](_0x31d9ab),_0x27c34d['rows']=[],_0x27c34d[_0x4c08bb(0x22a)]=[];}),log(_0x12e72e(0x201),'warn');const _0x585a70=getContext();if(_0x585a70[_0x12e72e(0x254)]&&_0x585a70['chat']['length']>0x0){const _0x5666c1=_0x585a70[_0x12e72e(0x254)][_0x585a70[_0x12e72e(0x254)]['length']-0x1];if(saveStateToMessage(currentTablesState,_0x5666c1)){saveChat(),log(_0x12e72e(0x1d2),_0x12e72e(0x25d)),toastr['success']('所有表格的剧情内容已清空。',_0x12e72e(0x28b));return;}}log('无法找到可锚定的消息或保存失败,清空操作可能不会被持久化!',_0x12e72e(0x18a)),saveChatDebounced();}function _0xbc99(){const _0x454916=['global_table_preset','extra','角色栏','”已向','导入的表格数据格式不正确:\x20','导入预设失败:\x20','constructor','message','accept','未找到任何表格数据或全局预设,使用默认模板。','\x20已在边界。','rows','replace','clear','columnWidths','input','用户取消了导入操作。','执行AI指令:\x20deleteRow(tableIndex=','名为\x20\x22','无法移动列:索引\x20','rowStatuses','表格系统总开关已关闭,无法执行回退填表。','状态回退失败,已中止操作。','状态回退成功,准备重新填表...','聊天记录不足,无法执行回退操作。','技能栏','\x20条表格操作指令...','warn','\x20行移动到第\x20','执行AI指令时出错:\x20','【增加】:\x20','confirm','target','无法找到可锚定的消息或保存失败,删除操作可能不会被持久化!','substring',')列,字符超出规定(','tables','回退状态保存失败,操作中止。','rule_delete','具体描述','\x20行已标记为待删除。',')超出规定(','用户取消了全局预设导入操作。','createObjectURL','rule_add','forEach','amily2_tables_data',']\x20在第\x20','全局预设已设置!新聊天将默认使用此预设。','\x20条消息加载表格状态...','【触发条件】当以下情况发生时,应添加新行:\x0a1.\x20角色接下一个明确的、有目标的委托或命令。\x0a2.\x20角色们达成一个具体的、需要在未来执行的约定。\x0a3.\x20角色为自己设定一个长期的、关键性的目标。','fill','toString','当前没有设置全局预设。','map','无法找到可锚定的消息或保存失败,新表格可能不会被持久化!','重要原因','其他重要信息','【触发条件】当一个角色被确认永久性死亡(非假死或失踪),且其存在不再对后续剧情有直接影响时,可以删除该行。','UI已更新以显示回退后的状态。','全局预设已被清除。','表格\x20[','chat','\x20列的','\x20(索引\x20','新列\x201','createElement','info','【核心作用】此表格用于精确追踪故事发生的即时时空背景,确保时间与空间的连续性。它应该始终只包含一行,代表当前的“镜头”位置。\x0a【字段详解】\x0a-\x20日期:\x20格式为\x27YYYY-MM-DD\x27。若日期未知,请根据上下文合理推断或设定一个初始日期,如\x27大夏3年-9月-10日\x27。\x0a-\x20时段:\x20严格遵循规定(凌晨:0-5时;早晨:5-8时;上午:8-11时;中午:11-13时;下午:13-16时;傍晚:16-19时;晚上:19-24时)。\x0a-\x20时间:\x20格式为\x27HH:MM\x27。若时间未知,可根据时段估算,如\x2708:30\x27。\x0a-\x20地点:\x20描述当前场景发生的具体位置,应尽可能精确,例如\x27XX街的咖啡馆\x27而非\x27城里\x27。\x0a-\x20此地角色:\x20列出当前场景中所有在场且参与互动的主要角色,用\x27/\x27分隔。','Amily2-Table-Preset-v2.0-clean','无需清除,当前未设置任何全局预设。','success','isArray','Amily2-Table-Preset-v2.0-full','\x22\x20已更新内存状态。','未在聊天记录中找到表格,正在加载全局预设...','function',',\x20rowIndex=','split','与关系','\x20中操作。','已根据AI的指示成功更新表格!','add','mes','toISOString','用户取消了清除全局预设的操作。','操作已取消。','AI返回内容为空,无法更新表格。',']\x20的规则已更新。','parse','stringify','”已更新为“','limit','无法回退:聊天记录不足。','已提交并永久删除了\x20','7688151BshCHd','从预设模板生成默认表格...','【修改】:\x20','【触发条件】当物品的“状态”(如被损坏)、“拥有者”(如被转交或被盗)或“详情”(如发现了新功能)发生变化时,必须更新。',')字限制,请进行缩减。】','\x20行。','columnIndex','操作成功','未在AI返回内容中找到有效的\x20\x20指令块。','\x22\x20的表格已存在。','push','(该表当前内容为空)\x0a','.json','onchange','AI指令错误:尝试在不存在的表格索引\x20','aiRuleTemplate','batchFillerFlowTemplate','5577783bAwxqL','AI指令块为空,无需执行任何操作。','6726WwnFiA','技能名','\x0a---\x0a','操作完成','【触发条件】当任务列表超过10行时,优先删除最早的、已经“已完成”且与当前剧情关联度最低的任务。如果存在内容完全重复的任务,应删除。','正在执行回退并重新填表...','无法创建表格:名称不能为空。','injectionFlowTemplate','表格系统总开关已关闭,跳过回退填表。','物品栏','normal','成功删除了表格\x20','无法导出:当前表格状态为空。','在第\x20','已清除所有表格的更新标记。',']\x20末尾新增一行。','pending-deletion','无法移动表格:索引\x20','】已开始下载。','aiFlowTemplate','未能在上一楼找到可用的表格状态。','splice','slice','时空栏','【删除】:\x20','error','表格名称不能为空。','】已成功导出。','开始时间/结束时间','length','成功在表格\x20','导入成功','无法创建表格:名为\x20\x22','\x0a\x20\x20\x20\x20\x20\x20\x20\x20','...]','【触发条件】当一个已知技能的效果发生进化、变异或被添加了新的限制/效果时(例如,技能升级),必须更新其“技能效果”描述。','【核心作用】此表格是角色关系和状态的核心数据库,用于记录所有在故事中出现的重要角色的详细信息。\x0a【字段详解】\x0a-\x20角色名:\x20角色的唯一标识。\x0a-\x20外貌:\x20描述五官、发型、发色、肤色等面部特征。\x0a-\x20身形:\x20描述身高、体型、肌肉状况、特殊身体标记(如伤疤)等。\x0a-\x20衣着:\x20描述角色当前或标志性的穿着,包括服装、配饰等。\x0a-\x20性格:\x20概括角色的核心性格特质,使用1-3个关键词,如\x27勇敢/鲁莽/忠诚\x27。\x0a-\x20身份:\x20角色的社会背景或出身,如\x27贵族后裔\x27、\x27流浪者\x27。\x0a-\x20职业:\x20角色赖以谋生的工作或职责,如\x27佣兵\x27、\x27学者\x27。\x0a-\x20与关系:\x20描述该角色与主角之间的社会或情感关系,如\x27盟友\x27、\x27导师\x27、\x27敌人\x27。\x0a-\x20爱好:\x20角色的兴趣和消遣活动。\x0a-\x20住所:\x20角色的常住地。\x0a-\x20其他重要信息:\x20记录任何不属于以上类别但对角色至关重要的信息,如特殊能力、过去的经历等。','【触发条件】当以下任一情况发生时,必须更新此行:\x0a1.\x20时间发生显著跳跃(例如,\x27几小时后\x27、\x27第二天\x27)。\x0a2.\x20角色从一个地点移动到另一个地点。\x0a3.\x20场景中关键角色的出入导致在场人员发生变化。','join','110etKSUF','文件格式无效或缺少版本号/表格数据。','重命名失败','result','设定栏','\x20|\x20','填表完成','【触发条件】只能在明确表示要移除或废弃某条设定时,才能删除对应行。',',\x20data=','废黜表格后的状态已强制写入最新消息并立即保存。','新表格状态已强制写入最新消息并立即保存。','amily2_ai_template','成功将表格\x20','删除列失败:在表格\x20','\x20中找不到索引为\x20','table_system_enabled','2wZoDNV','56189VBXsAJ','below','removeChild','type','表格状态已准备写入消息\x20[',']\x20的第\x20','已成功将回退后的状态保存至最新消息。','\x20的第\x20','导入失败:','【核心作用】此表格记录了来自的、超越故事本身的“元指令”或世界观设定,拥有最高解释权。内容应被严格遵守,禁止AI自行修改。\x0a【字段详解】\x0a-\x20类型:\x20指令的分类,如\x27世界观设定\x27、\x27剧情走向要求\x27、\x27角色行为禁令\x27。\x0a-\x20具体描述:\x20完整、准确地记录提出的具体要求。','1261997gYOsGP','href','AI\x20指令更新了表格\x20[','创建失败','click','【触发条件】当故事开始,且此表格为空时,必须立即根据初始场景创建第一行。','Amily2-','warning','【核心作用】记录那些在故事中具有特殊功能、背景或情感价值的关键物品。普通物品不应记录。\x0a【字段详解】\x0a-\x20物品名:\x20物品的名称。\x0a-\x20类型:\x20物品的分类,如\x27武器\x27、\x27道具\x27、\x27信物\x27、\x27关键物品\x27。\x0a-\x20详情:\x20描述物品的外观、材质和已知功能。\x0a-\x20状态:\x20物品的当前状况,如\x27完好\x27、\x27破损\x27、\x27能量耗尽\x27。\x0a-\x20拥有者:\x20当前持有该物品的角色名。\x0a-\x20重要原因:\x20解释该物品为何重要,例如\x27是解开谜题的钥匙\x27或\x27是母亲的遗物\x27。','执行AI指令:\x20updateRow(tableIndex=','表格不存在。','插入了新列。','导入的预设中缺少指令模板字段,模板将不会被更新。','26zRKlja','7854MvRZib',']\x20新增了一列。','任务名','some','object','\x22\x20已重命名为\x20\x22','【触发条件】当通过括号、旁白或其他明确的“第四面墙”方式,提出关于故事背景、规则或未来走向的指令时,必须记录于此。','加载全局预设失败:\x20','filter','110JLfqsV','此地角色','物品名','),已智能转换为在表格\x20[','未能保存回退状态,操作中止。',')行,请结合剧情缩减至(','导入操作已取消。','\x20条消息中找到基准表格数据。','清空行数据后的状态已强制写入最新消息并立即保存。','正在尝试从第\x20','number','导入的预设已强制写入最新消息并立即保存。','body',']\x20的顺序已调整。','【触发条件】当在故事中首次成功施展或习得一个全新的、表格中未记录的技能时,必须添加。','任务栏','重命名失败:表格不存在。','【核心作用】追踪故事中的主要情节线、目标和挑战。只记录对剧情发展有重大影响的“任务”,忽略日常琐事。\x0a【字段详解】\x0a-\x20任务名:\x20任务的简洁概括,如\x27寻找失落的神器\x27。\x0a-\x20类型:\x20任务的分类,如\x27主线\x27、\x27支线\x27、\x27个人\x27、\x27约定\x27。\x0a-\x20详情:\x20对任务目标和背景的简要描述。\x0a-\x20状态:\x20任务的当前进展,如\x27未开始\x27、\x27进行中\x27、\x27已完成\x27、\x27已失败\x27、\x27已取消\x27。\x0a-\x20执行者:\x20负责完成此任务的角色名。\x0a-\x20地点:\x20任务关键环节发生的地点。\x0a-\x20开始时间/结束时间:\x20记录任务的起止时间,格式\x27YYYY-MM-DD\x27,若未结束则结束时间留空。\x0a-\x20结果:\x20任务完成或失败后的最终结果。','【触发条件】当角色的任何信息发生持久性或关键性变化时,必须更新对应单元格。例如:\x0a1.\x20外貌/身形/衣着发生永久性改变(如断肢、换上新装备)。\x0a2.\x20性格因重大事件而扭转。\x0a3.\x20身份或职业发生变更(如继承王位、被解雇)。\x0a4.\x20与的关系发生根本性转变(如从敌人变为盟友)。','download','charLimitRules','charLimitRule','Amily2-Table-Preset-v3.0-separated_templates','getPrototypeOf','重命名失败:名称不能为空。',']\x20的列“','【清除全局预设】\x0a\x0a您确定要清除已设置的全局预设吗?\x0a\x0a清除后,新聊天将恢复使用扩展内置的默认表格模板。','表格\x20\x22','rule_update','\x20列。','【警告】\x0a\x0a导入操作将完全覆盖您当前的AI指令模板和所有表格(包括结构和内容)。\x0a\x0a此操作不可逆,是否确定要继续?','\x20行位置插入了新行。','\x20的列。','size','全局预设已成功导入并保存到扩展设置中。','aiTemplate','file','batch_filler_rule_template','rowIndex','note','files','【当前(','UI操作\x20\x22','16167588Npnqht','设置成功','无法清空:当前表格状态为空。','回退并重新填表操作完成。','---','application/json','预设已成功导入并应用。','34988uZGMLK','batch_filler_flow_template','readAsText','所有AI指令已成功执行完毕。','batchFillerRuleTemplate','所有表格的行数据已在内存中清空。','every','rowLimitRule','left','name','【触发条件】当一个有名有姓的角色首次出现,并与或当前剧情发生有意义的互动时,必须为其创建新的一行。',']\x20新增了一行。','headers',']\x20已被成功废黜。','8qylUxQ','【触发条件】当任务的“状态”发生任何变化时,必须更新。例如,从\x27进行中\x27变为\x27已完成\x27。当任务的“详情”或“结果”有新的关键信息补充时,也应更新。','移动。','【核心作用】专门用于记录主角掌握的各种技能、魔法、被动能力或特殊专长。\x0a【字段详解】\x0a-\x20技能名:\x20技能的正式名称。\x0a-\x20技能效果:\x20清晰、简洁地描述该技能使用时产生的具体效果、消耗和限制条件。','重新填表失败:\x20','导出成功','角色名','\x20|\x0a','表格顺序调整后的状态已强制写入最新消息并立即保存。','trim','这是一个新创建的表格。','version'];_0xbc99=function(){return _0x454916;};return _0xbc99();}function checkTableRules(_0x50454f){const _0x47425f=_0x16a5d7;let _0x3ace0a=[];_0x50454f[_0x47425f(0x203)]&&_0x50454f['rowLimitRule']>0x0&&_0x50454f[_0x47425f(0x221)]['length']>_0x50454f[_0x47425f(0x203)]&&_0x3ace0a['push'](_0x47425f(0x1f3)+_0x50454f[_0x47425f(0x205)]+_0x47425f(0x23f)+_0x50454f[_0x47425f(0x203)]+_0x47425f(0x1cf)+_0x50454f['rowLimitRule']+')行以下,但切莫完全删除。】');const _0x185a44=_0x50454f[_0x47425f(0x1de)]||{};for(const _0x848444 in _0x185a44){const _0x462d64=parseInt(_0x848444,0xa),_0x4d41d4=_0x185a44[_0x462d64];if(_0x4d41d4>0x0&&_0x462d64>=0x0&&_0x462d64<_0x50454f['headers'][_0x47425f(0x18e)]){const _0x44be7e=_0x50454f['headers'][_0x462d64],_0x373c61=[];_0x50454f[_0x47425f(0x221)][_0x47425f(0x243)]((_0x2a6b2b,_0x26945b)=>{const _0x2896aa=_0x47425f;if(_0x50454f['rowStatuses']&&_0x50454f[_0x2896aa(0x22a)][_0x26945b]==='pending-deletion')return;const _0x443482=_0x2a6b2b[_0x462d64]||'';_0x443482[_0x2896aa(0x18e)]>_0x4d41d4&&_0x373c61[_0x2896aa(0x27f)](_0x26945b);});if(_0x373c61[_0x47425f(0x18e)]>0x0){const _0x248898=_0x373c61[_0x47425f(0x197)]('、');_0x3ace0a[_0x47425f(0x27f)]('【当前('+_0x50454f[_0x47425f(0x205)]+')第('+_0x248898+')行('+_0x44be7e+_0x47425f(0x239)+_0x4d41d4+_0x47425f(0x279));}}}return _0x3ace0a[_0x47425f(0x197)]('\x0a');}export function convertTablesToCsvString(){const _0x16d2d3=_0x16a5d7;!currentTablesState&&loadTables();if(!currentTablesState)return'';let _0x272a11='';return currentTablesState[_0x16d2d3(0x243)]((_0x746834,_0x3376d8)=>{const _0x38a1f3=_0x16d2d3;_0x272a11+='\x0a*\x20'+_0x3376d8+':'+_0x746834[_0x38a1f3(0x205)]+'\x0a',_0x272a11+='【说明】:\x0a'+(_0x746834[_0x38a1f3(0x1f1)]||'无')+'\x0a';const _0x131fb1=_0x746834[_0x38a1f3(0x205)][_0x38a1f3(0x222)](/\s/g,'')+'内容';_0x272a11+='<'+_0x131fb1+'>\x0a';const _0xeeb06a=[_0x38a1f3(0x1f0),..._0x746834[_0x38a1f3(0x208)][_0x38a1f3(0x24c)]((_0x2aa599,_0x3ea949)=>_0x3ea949+':'+_0x2aa599)];_0x272a11+='|\x20'+_0xeeb06a[_0x38a1f3(0x197)]('\x20|\x20')+_0x38a1f3(0x211),_0x272a11+='|'+_0xeeb06a[_0x38a1f3(0x24c)](()=>_0x38a1f3(0x1f9))[_0x38a1f3(0x197)]('|')+'|\x0a';const _0x37ff12=_0x746834[_0x38a1f3(0x221)][_0x38a1f3(0x1c9)]((_0x33fe55,_0xd3e5d6)=>!_0x746834[_0x38a1f3(0x22a)]||_0x746834[_0x38a1f3(0x22a)][_0xd3e5d6]!==_0x38a1f3(0x181));_0x37ff12[_0x38a1f3(0x18e)]===0x0?_0x272a11+=_0x38a1f3(0x280):_0x746834[_0x38a1f3(0x221)]['forEach']((_0x1e6869,_0x399fc4)=>{const _0x59d088=_0x38a1f3;if(_0x746834[_0x59d088(0x22a)]&&_0x746834[_0x59d088(0x22a)][_0x399fc4]===_0x59d088(0x181))return;if(Array['isArray'](_0x1e6869)){const _0x18eb2f=_0x1e6869['map'](_0x1955e8=>{const _0x7d9420=_0x59d088,_0x2cf2e3=_0x1955e8===null||_0x1955e8===undefined||_0x1955e8===''?'未知':String(_0x1955e8);return _0x2cf2e3[_0x7d9420(0x222)](/\|/g,'|');});_0x272a11+='|\x20'+_0x399fc4+'\x20|\x20'+_0x18eb2f[_0x59d088(0x197)](_0x59d088(0x19d))+_0x59d088(0x211);}});const _0x2de570=checkTableRules(_0x746834);_0x2de570&&(_0x272a11+=_0x2de570+'\x0a'),_0x272a11+='\x0a',_0x272a11+=_0x38a1f3(0x234)+(_0x746834[_0x38a1f3(0x242)]||'允许')+'\x0a',_0x272a11+=_0x38a1f3(0x189)+(_0x746834[_0x38a1f3(0x23c)]||'允许')+'\x0a',_0x272a11+=_0x38a1f3(0x277)+(_0x746834[_0x38a1f3(0x1e6)]||'允许')+'\x0a',_0x3376d8{const _0xcf040=_0x5971dd;_0x82afcd+='\x0a<'+_0x5e6d5d[_0xcf040(0x205)]+'>\x0a';const _0x4bd3c1='|\x20'+_0x5e6d5d['headers'][_0xcf040(0x197)](_0xcf040(0x19d))+'\x20|';_0x82afcd+=_0x4bd3c1+'\x0a';const _0x31757c='|'+_0x5e6d5d['headers'][_0xcf040(0x24c)](()=>_0xcf040(0x1f9))['join']('|')+'|';_0x82afcd+=_0x31757c+'\x0a';const _0x582e30=_0x5e6d5d[_0xcf040(0x221)][_0xcf040(0x1c9)]((_0x508bc2,_0x51f7fa)=>!_0x5e6d5d[_0xcf040(0x22a)]||_0x5e6d5d[_0xcf040(0x22a)][_0x51f7fa]!==_0xcf040(0x181));_0x582e30[_0xcf040(0x18e)]>0x0?_0x582e30[_0xcf040(0x243)](_0x4510a4=>{const _0x2cde8c=_0xcf040;if(Array[_0x2cde8c(0x25e)](_0x4510a4)){const _0x264dd6=_0x4510a4[_0x2cde8c(0x24c)](_0x2a98cd=>_0x2a98cd===null||_0x2a98cd===undefined||_0x2a98cd===''?'\x20':_0x2a98cd[_0x2cde8c(0x24a)]()),_0x4f40e3='|\x20'+_0x264dd6[_0x2cde8c(0x197)](_0x2cde8c(0x19d))+'\x20|';_0x82afcd+=_0x4f40e3+'\x0a';}}):_0x82afcd+=_0xcf040(0x280),_0x82afcd+='\x0a';}),_0x82afcd[_0x5971dd(0x213)]();}loadTables();export function getBatchFillerRuleTemplate(){const _0x3461c9=_0x16a5d7;return extension_settings[extensionName]?.[_0x3461c9(0x1ef)]??DEFAULT_AI_RULE_TEMPLATE;}export function saveBatchFillerRuleTemplate(_0x281979){extension_settings[extensionName]['batch_filler_rule_template']=_0x281979,saveSettingsDebounced();}export function getBatchFillerFlowTemplate(){const _0x208c95=_0x16a5d7;return extension_settings[extensionName]?.[_0x208c95(0x1fd)]??DEFAULT_AI_FLOW_TEMPLATE;}export function saveBatchFillerFlowTemplate(_0x16e0dd){const _0x9a9a96=_0x16a5d7;extension_settings[extensionName][_0x9a9a96(0x1fd)]=_0x16e0dd,saveSettingsDebounced();}export function getAiFlowTemplateForInjection(){const _0x330646=_0x16a5d7;return extension_settings[extensionName]?.[_0x330646(0x1a3)]??DEFAULT_AI_FLOW_TEMPLATE;}export async function updateTableFromText(_0x519f50){const _0x2dedc0=_0x16a5d7,_0x2828c8=extension_settings[extensionName];if(_0x2828c8[_0x2dedc0(0x1a7)]===![]){log('表格系统总开关已关闭,跳过\x20\x20标签处理。',_0x2dedc0(0x259));return;}if(!_0x519f50){log(_0x2dedc0(0x26d),_0x2dedc0(0x231));return;}const _0x22f75d=_0x519f50['match'](/([\s\S]*?)<\/Amily2Edit>/);if(!_0x22f75d||!_0x22f75d[0x1]){log(_0x2dedc0(0x27d),_0x2dedc0(0x231));return;}let _0x21d034=_0x22f75d[0x1][_0x2dedc0(0x222)](//g,'')[_0x2dedc0(0x213)]();if(!_0x21d034){log(_0x2dedc0(0x287),_0x2dedc0(0x259));return;}const _0x7102e0=_0x21d034[_0x2dedc0(0x264)]('\x0a')['filter'](_0x5a6571=>_0x5a6571[_0x2dedc0(0x213)]()!=='');log('准备执行从AI返回的\x20'+_0x7102e0[_0x2dedc0(0x18e)]+_0x2dedc0(0x230),_0x2dedc0(0x259));const _0x4d6a26={'insertRow':(_0x5e4e81,_0x463ff7)=>{const _0x39365a=_0x2dedc0;log('执行AI指令:\x20insertRow(tableIndex='+_0x5e4e81+_0x39365a(0x1a0)+JSON[_0x39365a(0x270)](_0x463ff7)+')',_0x39365a(0x259)),insertRow(_0x5e4e81,_0x463ff7);},'deleteRow':(_0x30dba3,_0xca2c30)=>{const _0x23aabe=_0x2dedc0;log(_0x23aabe(0x227)+_0x30dba3+_0x23aabe(0x263)+_0xca2c30+')',_0x23aabe(0x259)),deleteRow(_0x30dba3,_0xca2c30);},'updateRow':(_0x4a86bf,_0x31ccb2,_0x5742db)=>{const _0x5c5bb7=_0x2dedc0;log(_0x5c5bb7(0x1bc)+_0x4a86bf+_0x5c5bb7(0x263)+_0x31ccb2+_0x5c5bb7(0x1a0)+JSON[_0x5c5bb7(0x270)](_0x5742db)+')',_0x5c5bb7(0x259)),updateRow(_0x4a86bf,_0x31ccb2,_0x5742db);}};try{const _0x44c6fa=Object[_0x2dedc0(0x1e1)](async function(){})[_0x2dedc0(0x21c)],_0x55a36b=new _0x44c6fa('runner','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20insertRow,\x20deleteRow,\x20updateRow\x20}\x20=\x20runner;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+_0x21d034+_0x2dedc0(0x192));await _0x55a36b(_0x4d6a26),log(_0x2dedc0(0x1ff),_0x2dedc0(0x25d)),toastr[_0x2dedc0(0x25d)](_0x2dedc0(0x267),_0x2dedc0(0x19e)),document['dispatchEvent'](new CustomEvent('amily2-force-ui-reload'));}catch(_0x43a577){log('执行AI指令时发生错误:\x20'+_0x43a577[_0x2dedc0(0x21d)],'error'),toastr[_0x2dedc0(0x18a)](_0x2dedc0(0x233)+_0x43a577[_0x2dedc0(0x21d)],'执行失败');}}export function saveAiTemplate(_0x481054){extension_settings[extensionName]['amily2_ai_template']=_0x481054,saveSettingsDebounced();}export function getAiTemplate(){return getAiFlowTemplateForInjection();}function exportPresetBase(_0x52bcdd=![]){const _0x2a0be9=_0x16a5d7;if(!currentTablesState){log(_0x2a0be9(0x17d),_0x2a0be9(0x18a)),toastr[_0x2a0be9(0x18a)]('没有可导出的表格数据。');return;}let _0x5d3f24,_0x4e74af,_0x5baaea;_0x52bcdd?(_0x5d3f24=JSON[_0x2a0be9(0x26f)](JSON[_0x2a0be9(0x270)](currentTablesState)),_0x4e74af=_0x2a0be9(0x25f),_0x5baaea='完整备份'):(_0x5d3f24=currentTablesState['map'](_0x4cedbe=>({'name':_0x4cedbe['name'],'headers':_0x4cedbe[_0x2a0be9(0x208)],'columnWidths':_0x4cedbe[_0x2a0be9(0x224)]||[],'note':_0x4cedbe[_0x2a0be9(0x1f1)],'rule_add':_0x4cedbe[_0x2a0be9(0x242)],'rule_delete':_0x4cedbe[_0x2a0be9(0x23c)],'rule_update':_0x4cedbe[_0x2a0be9(0x1e6)],'charLimitRules':_0x4cedbe[_0x2a0be9(0x1de)]||{},'rowLimitRule':_0x4cedbe[_0x2a0be9(0x203)]||0x0,'rows':[],'rowStatuses':[]})),_0x4e74af=_0x2a0be9(0x25b),_0x5baaea='纯净预设');const _0x563b51={'version':_0x2a0be9(0x1e0),'batchFillerRuleTemplate':getBatchFillerRuleTemplate(),'batchFillerFlowTemplate':getBatchFillerFlowTemplate(),'tables':_0x5d3f24},_0x28ab56=new Blob([JSON[_0x2a0be9(0x270)](_0x563b51,null,0x2)],{'type':_0x2a0be9(0x1fa)}),_0x20c150=URL[_0x2a0be9(0x241)](_0x28ab56),_0x42a5ac=document[_0x2a0be9(0x258)]('a');_0x42a5ac[_0x2a0be9(0x1b4)]=_0x20c150,_0x42a5ac[_0x2a0be9(0x1dd)]=_0x2a0be9(0x1b9)+_0x5baaea+'-'+new Date()[_0x2a0be9(0x26a)]()[_0x2a0be9(0x187)](0x0,0xa)+_0x2a0be9(0x281),document[_0x2a0be9(0x1d6)]['appendChild'](_0x42a5ac),_0x42a5ac['click'](),document[_0x2a0be9(0x1d6)][_0x2a0be9(0x1ab)](_0x42a5ac),URL['revokeObjectURL'](_0x20c150),log('【'+_0x5baaea+_0x2a0be9(0x18c),_0x2a0be9(0x25d)),toastr[_0x2a0be9(0x25d)]('【'+_0x5baaea+_0x2a0be9(0x183),_0x2a0be9(0x20f));}export function exportPreset(){exportPresetBase(![]);}export function exportPresetFull(){exportPresetBase(!![]);}export function importPreset(_0x24b89e){const _0x582870=_0x16a5d7,_0x5a4edd=document[_0x582870(0x258)](_0x582870(0x225));_0x5a4edd['type']=_0x582870(0x1ee),_0x5a4edd[_0x582870(0x21e)]=_0x582870(0x281),_0x5a4edd[_0x582870(0x282)]=_0x490f0a=>{const _0x4ccf6a=_0x582870,_0x25bbeb=_0x490f0a[_0x4ccf6a(0x236)][_0x4ccf6a(0x1f2)][0x0];if(!_0x25bbeb)return;const _0x3cece2=new FileReader();_0x3cece2['onload']=_0x5a6916=>{const _0x11c4db=_0x4ccf6a;try{const _0x1ccda5=JSON[_0x11c4db(0x26f)](_0x5a6916[_0x11c4db(0x236)][_0x11c4db(0x19b)]);if(!_0x1ccda5[_0x11c4db(0x215)]||!Array[_0x11c4db(0x25e)](_0x1ccda5[_0x11c4db(0x23a)]))throw new Error(_0x11c4db(0x199));const _0x134202=window['confirm'](_0x11c4db(0x1e8));if(!_0x134202){log(_0x11c4db(0x226),_0x11c4db(0x259)),toastr['info'](_0x11c4db(0x1d0));return;}if(_0x1ccda5[_0x11c4db(0x215)]===_0x11c4db(0x1e0))saveBatchFillerRuleTemplate(_0x1ccda5['batchFillerRuleTemplate']||''),saveBatchFillerFlowTemplate(_0x1ccda5[_0x11c4db(0x285)]||''),saveAiTemplate(_0x1ccda5[_0x11c4db(0x28f)]||'');else{if(_0x1ccda5[_0x11c4db(0x284)]!==undefined&&_0x1ccda5[_0x11c4db(0x184)]!==undefined)saveBatchFillerRuleTemplate(_0x1ccda5[_0x11c4db(0x284)]||''),saveBatchFillerFlowTemplate(_0x1ccda5[_0x11c4db(0x184)]||''),saveAiTemplate(_0x1ccda5[_0x11c4db(0x184)]||'');else _0x1ccda5[_0x11c4db(0x1ed)]?(saveBatchFillerRuleTemplate(''),saveBatchFillerFlowTemplate(_0x1ccda5[_0x11c4db(0x1ed)]||''),saveAiTemplate(_0x1ccda5[_0x11c4db(0x1ed)]||'')):log(_0x11c4db(0x1bf),_0x11c4db(0x231));}const _0x435509=_0x1ccda5[_0x11c4db(0x23a)];_0x435509[_0x11c4db(0x243)](_0x2c2db0=>{const _0x4f44c9=_0x11c4db;if(_0x2c2db0['name']===undefined||_0x2c2db0[_0x4f44c9(0x208)]===undefined||_0x2c2db0[_0x4f44c9(0x221)]===undefined)throw new Error(_0x4f44c9(0x21a)+JSON[_0x4f44c9(0x270)](_0x2c2db0));if(_0x2c2db0['note']===undefined)_0x2c2db0[_0x4f44c9(0x1f1)]='无';if(_0x2c2db0[_0x4f44c9(0x242)]===undefined)_0x2c2db0[_0x4f44c9(0x242)]='允许';if(_0x2c2db0[_0x4f44c9(0x23c)]===undefined)_0x2c2db0[_0x4f44c9(0x23c)]='允许';if(_0x2c2db0[_0x4f44c9(0x1e6)]===undefined)_0x2c2db0[_0x4f44c9(0x1e6)]='允许';if(_0x2c2db0['charLimitRule']&&!_0x2c2db0[_0x4f44c9(0x1de)])_0x2c2db0[_0x4f44c9(0x1de)]={},_0x2c2db0['charLimitRule'][_0x4f44c9(0x27b)]!==-0x1&&_0x2c2db0['charLimitRule'][_0x4f44c9(0x272)]>0x0&&(_0x2c2db0[_0x4f44c9(0x1de)][_0x2c2db0[_0x4f44c9(0x1df)][_0x4f44c9(0x27b)]]=_0x2c2db0[_0x4f44c9(0x1df)][_0x4f44c9(0x272)]);else _0x2c2db0['charLimitRules']===undefined&&(_0x2c2db0[_0x4f44c9(0x1de)]={});delete _0x2c2db0['charLimitRule'],!_0x2c2db0[_0x4f44c9(0x22a)]&&(_0x2c2db0[_0x4f44c9(0x22a)]=Array(_0x2c2db0[_0x4f44c9(0x221)][_0x4f44c9(0x18e)])[_0x4f44c9(0x249)](_0x4f44c9(0x292))),_0x2c2db0[_0x4f44c9(0x203)]===undefined&&(_0x2c2db0[_0x4f44c9(0x203)]=0x0),_0x2c2db0[_0x4f44c9(0x224)]===undefined&&(_0x2c2db0['columnWidths']=[]);}),setMemoryState(_0x435509);const _0x4c5199=getContext();if(_0x4c5199[_0x11c4db(0x254)]&&_0x4c5199[_0x11c4db(0x254)][_0x11c4db(0x18e)]>0x0){const _0x4e8996=_0x4c5199[_0x11c4db(0x254)][_0x4c5199[_0x11c4db(0x254)][_0x11c4db(0x18e)]-0x1];saveStateToMessage(getMemoryState(),_0x4e8996)&&(saveChat(),log(_0x11c4db(0x1d5),_0x11c4db(0x25d)));}else saveChatDebounced();log(_0x11c4db(0x1fb),_0x11c4db(0x25d)),toastr[_0x11c4db(0x25d)]('预设已成功导入!',_0x11c4db(0x190)),typeof _0x24b89e===_0x11c4db(0x262)&&_0x24b89e();}catch(_0x1ed8e){log(_0x11c4db(0x21b)+_0x1ed8e['message'],_0x11c4db(0x18a)),toastr[_0x11c4db(0x18a)]('导入失败:'+_0x1ed8e['message'],'错误');}},_0x3cece2[_0x4ccf6a(0x1fe)](_0x25bbeb);},_0x5a4edd['click']();}export async function rollbackState(){const _0x470193=_0x16a5d7,_0x561437=getContext();if(!_0x561437||!_0x561437['chat']||_0x561437[_0x470193(0x254)][_0x470193(0x18e)]<0x2)return log(_0x470193(0x273),_0x470193(0x231)),toastr[_0x470193(0x1ba)](_0x470193(0x22e)),![];const _0x16daa2=_0x561437['chat'],_0x3555da=_0x16daa2[_0x470193(0x18e)]-0x1,_0x31f975=_0x16daa2[_0x3555da];log(_0x470193(0x1d3)+(_0x3555da-0x1)+_0x470193(0x247),_0x470193(0x259));const _0x3e5ac6=loadTables(_0x3555da);if(!_0x3e5ac6)return log('未能在上一楼找到可用的表格状态,无法回退。','error'),toastr[_0x470193(0x18a)](_0x470193(0x185)),![];setMemoryState(_0x3e5ac6);if(saveStateToMessage(_0x3e5ac6,_0x31f975))await saveChat(),log(_0x470193(0x1af),_0x470193(0x25d));else return log(_0x470193(0x23b),_0x470193(0x18a)),toastr['error'](_0x470193(0x1ce)),![];return renderTables(),updateOrInsertTableInChat(),log(_0x470193(0x251),_0x470193(0x259)),!![];}export async function rollbackAndRefill(){const _0x2033fa=_0x16a5d7,_0x47c80=extension_settings[extensionName];if(_0x47c80[_0x2033fa(0x1a7)]===![]){log(_0x2033fa(0x290),_0x2033fa(0x259)),toastr[_0x2033fa(0x259)](_0x2033fa(0x22b));return;}toastr[_0x2033fa(0x259)](_0x2033fa(0x28d));const _0x3de6f2=await rollbackState();if(!_0x3de6f2){toastr[_0x2033fa(0x18a)](_0x2033fa(0x22c));return;}toastr[_0x2033fa(0x25d)](_0x2033fa(0x22d));const _0x396739=getContext(),_0x24f132=_0x396739['chat'][_0x396739[_0x2033fa(0x254)][_0x2033fa(0x18e)]-0x1];try{await fillWithSecondaryApi(_0x24f132,!![]),log(_0x2033fa(0x1f8),_0x2033fa(0x25d));}catch(_0x378825){log('回退重填过程中发生错误:\x20'+_0x378825['message'],_0x2033fa(0x18a)),toastr[_0x2033fa(0x18a)](_0x2033fa(0x20e)+_0x378825[_0x2033fa(0x21d)]);}}export function updateColumnWidth(_0x107e7,_0xd5afbe,_0xce2b29){const _0x286709=_0x16a5d7;if(!currentTablesState||!currentTablesState[_0x107e7])return;const _0xfcb50c=currentTablesState[_0x107e7];!_0xfcb50c[_0x286709(0x224)]&&(_0xfcb50c[_0x286709(0x224)]=[]);while(_0xfcb50c['columnWidths'][_0x286709(0x18e)]<_0xfcb50c['headers'][_0x286709(0x18e)]){_0xfcb50c[_0x286709(0x224)][_0x286709(0x27f)](null);}_0xfcb50c[_0x286709(0x224)][_0xd5afbe]=_0xce2b29;const _0x5c9846=getContext();if(_0x5c9846[_0x286709(0x254)]&&_0x5c9846['chat'][_0x286709(0x18e)]>0x0){const _0x41c808=_0x5c9846[_0x286709(0x254)][_0x5c9846['chat'][_0x286709(0x18e)]-0x1];if(saveStateToMessage(currentTablesState,_0x41c808)){saveChat();return;}}saveChatDebounced();}export function isCurrentTablesEmpty(){const _0xb9931=_0x16a5d7,_0x55c880=getMemoryState();if(!_0x55c880||_0x55c880['length']===0x0)return!![];return _0x55c880[_0xb9931(0x202)](_0x7cc9c5=>!_0x7cc9c5[_0xb9931(0x221)]||_0x7cc9c5['rows']['length']===0x0);}export function clearGlobalPreset(){const _0x259147=_0x16a5d7;if(extension_settings[extensionName]&&extension_settings[extensionName][_0x259147(0x216)]){const _0x46262d=window[_0x259147(0x235)](_0x259147(0x1e4));_0x46262d?(delete extension_settings[extensionName][_0x259147(0x216)],saveSettingsDebounced(),log(_0x259147(0x252),'success'),toastr[_0x259147(0x25d)]('全局预设已清除,新聊天将使用默认模板。',_0x259147(0x27c))):(log(_0x259147(0x26b),_0x259147(0x259)),toastr[_0x259147(0x259)](_0x259147(0x26c)));}else log(_0x259147(0x25c),_0x259147(0x259)),toastr[_0x259147(0x259)](_0x259147(0x24b),'提示');}export function importGlobalPreset(_0x2da52c){const _0x409122=_0x16a5d7,_0x2f4810=document[_0x409122(0x258)]('input');_0x2f4810[_0x409122(0x1ac)]='file',_0x2f4810[_0x409122(0x21e)]='.json',_0x2f4810[_0x409122(0x282)]=_0x5da40d=>{const _0x48dcb7=_0x409122,_0x1abf1c=_0x5da40d[_0x48dcb7(0x236)][_0x48dcb7(0x1f2)][0x0];if(!_0x1abf1c)return;const _0x336ba7=new FileReader();_0x336ba7['onload']=_0x10326d=>{const _0x4bfadd=_0x48dcb7;try{const _0x3914d4=JSON[_0x4bfadd(0x26f)](_0x10326d['target'][_0x4bfadd(0x19b)]);if(!_0x3914d4['version']||!Array[_0x4bfadd(0x25e)](_0x3914d4[_0x4bfadd(0x23a)]))throw new Error(_0x4bfadd(0x199));const _0x1378b1=window[_0x4bfadd(0x235)]('【全局预设导入】\x0a\x0a这将把选定的预设设置为所有新聊天的默认表格。\x0a\x0a此操作将覆盖任何已存在的全局预设,是否确定?');if(!_0x1378b1){log(_0x4bfadd(0x240),'info'),toastr[_0x4bfadd(0x259)]('操作已取消。');return;}const _0x37e57f=_0x3914d4[_0x4bfadd(0x23a)][_0x4bfadd(0x24c)](_0x151a14=>({'name':_0x151a14[_0x4bfadd(0x205)],'headers':_0x151a14['headers'],'note':_0x151a14['note'],'rule_add':_0x151a14[_0x4bfadd(0x242)],'rule_delete':_0x151a14[_0x4bfadd(0x23c)],'rule_update':_0x151a14[_0x4bfadd(0x1e6)],'rows':[]}));!extension_settings[extensionName]&&(extension_settings[extensionName]={});extension_settings[extensionName]['global_table_preset']={'version':_0x3914d4[_0x4bfadd(0x215)],'tables':_0x37e57f,'batchFillerRuleTemplate':_0x3914d4[_0x4bfadd(0x200)],'batchFillerFlowTemplate':_0x3914d4[_0x4bfadd(0x285)]},saveSettingsDebounced();if(_0x3914d4[_0x4bfadd(0x215)]===_0x4bfadd(0x1e0))saveBatchFillerRuleTemplate(_0x3914d4[_0x4bfadd(0x200)]||''),saveBatchFillerFlowTemplate(_0x3914d4['batchFillerFlowTemplate']||''),saveAiTemplate(_0x3914d4[_0x4bfadd(0x28f)]||'');else{if(_0x3914d4[_0x4bfadd(0x284)]!==undefined&&_0x3914d4['aiFlowTemplate']!==undefined)saveBatchFillerRuleTemplate(_0x3914d4[_0x4bfadd(0x284)]||''),saveBatchFillerFlowTemplate(_0x3914d4['aiFlowTemplate']||''),saveAiTemplate(_0x3914d4['aiFlowTemplate']||'');else _0x3914d4['aiTemplate']&&(saveBatchFillerRuleTemplate(''),saveBatchFillerFlowTemplate(_0x3914d4['aiTemplate']||''),saveAiTemplate(_0x3914d4[_0x4bfadd(0x1ed)]||''));}log(_0x4bfadd(0x1ec),_0x4bfadd(0x25d)),toastr[_0x4bfadd(0x25d)](_0x4bfadd(0x246),_0x4bfadd(0x1f6)),typeof _0x2da52c==='function'&&_0x2da52c();}catch(_0x718264){log('导入全局预设失败:\x20'+_0x718264[_0x4bfadd(0x21d)],_0x4bfadd(0x18a)),toastr[_0x4bfadd(0x18a)](_0x4bfadd(0x1b1)+_0x718264[_0x4bfadd(0x21d)],'错误');}},_0x336ba7['readAsText'](_0x1abf1c);},_0x2f4810[_0x409122(0x1b7)]();} +const _0x23b7a8=_0x1fff;(function(_0x14d7f6,_0x480948){const _0x7b34e6=_0x1fff,_0x4a9127=_0x14d7f6();while(!![]){try{const _0x21d2f1=parseInt(_0x7b34e6(0x187))/0x1*(-parseInt(_0x7b34e6(0x28f))/0x2)+parseInt(_0x7b34e6(0x23b))/0x3*(parseInt(_0x7b34e6(0x18c))/0x4)+-parseInt(_0x7b34e6(0x1d9))/0x5+-parseInt(_0x7b34e6(0x266))/0x6+-parseInt(_0x7b34e6(0x17c))/0x7*(parseInt(_0x7b34e6(0x1a8))/0x8)+-parseInt(_0x7b34e6(0x1a2))/0x9*(parseInt(_0x7b34e6(0x18b))/0xa)+parseInt(_0x7b34e6(0x240))/0xb*(parseInt(_0x7b34e6(0x236))/0xc);if(_0x21d2f1===_0x480948)break;else _0x4a9127['push'](_0x4a9127['shift']());}catch(_0x5aa6b1){_0x4a9127['push'](_0x4a9127['shift']());}}}(_0x47f5,0xd1019));function _0x47f5(){const _0x3e2dc7=['【核心作用】记录那些在故事中具有特殊功能、背景或情感价值的关键物品。普通物品不应记录。\x0a【字段详解】\x0a-\x20物品名:\x20物品的名称。\x0a-\x20类型:\x20物品的分类,如\x27武器\x27、\x27道具\x27、\x27信物\x27、\x27关键物品\x27。\x0a-\x20详情:\x20描述物品的外观、材质和已知功能。\x0a-\x20状态:\x20物品的当前状况,如\x27完好\x27、\x27破损\x27、\x27能量耗尽\x27。\x0a-\x20拥有者:\x20当前持有该物品的角色名。\x0a-\x20重要原因:\x20解释该物品为何重要,例如\x27是解开谜题的钥匙\x27或\x27是母亲的遗物\x27。','【触发条件】当一个有名有姓的角色首次出现,并与或当前剧情发生有意义的互动时,必须为其创建新的一行。','rule_add','\x0a\x20\x20\x20\x20\x20\x20\x20\x20','用户取消了全局预设导入操作。','getPrototypeOf','废黜表格后的状态已强制写入最新消息并立即保存。','clear','limit',',\x20data=','aiFlowTemplate','成功删除了表格\x20','onload','新列\x20','【说明】:\x0a','mes','readAsText','【触发条件】任何时候,如果此表格的行数超过一行,必须删除旧的行,只保留最新、最准确的一行。','【核心作用】此表格用于精确追踪故事发生的即时时空背景,确保时间与空间的连续性。它应该始终只包含一行,代表当前的“镜头”位置。\x0a【字段详解】\x0a-\x20日期:\x20格式为\x27YYYY-MM-DD\x27。若日期未知,请根据上下文合理推断或设定一个初始日期,如\x27大夏3年-9月-10日\x27。\x0a-\x20时段:\x20严格遵循规定(凌晨:0-5时;早晨:5-8时;上午:8-11时;中午:11-13时;下午:13-16时;傍晚:16-19时;晚上:19-24时)。\x0a-\x20时间:\x20格式为\x27HH:MM\x27。若时间未知,可根据时段估算,如\x2708:30\x27。\x0a-\x20地点:\x20描述当前场景发生的具体位置,应尽可能精确,例如\x27XX街的咖啡馆\x27而非\x27城里\x27。\x0a-\x20此地角色:\x20列出当前场景中所有在场且参与互动的主要角色,用\x27/\x27分隔。',')列,字符超出规定(',']\x20的第\x20','【触发条件】当一个已知技能的效果发生进化、变异或被添加了新的限制/效果时(例如,技能升级),必须更新其“技能效果”描述。','导出成功','800755zfWkVa','【触发条件】当一个角色被确认永久性死亡(非假死或失踪),且其存在不再对后续剧情有直接影响时,可以删除该行。','body','【核心作用】追踪故事中的主要情节线、目标和挑战。只记录对剧情发展有重大影响的“任务”,忽略日常琐事。\x0a【字段详解】\x0a-\x20任务名:\x20任务的简洁概括,如\x27寻找失落的神器\x27。\x0a-\x20类型:\x20任务的分类,如\x27主线\x27、\x27支线\x27、\x27个人\x27、\x27约定\x27。\x0a-\x20详情:\x20对任务目标和背景的简要描述。\x0a-\x20状态:\x20任务的当前进展,如\x27未开始\x27、\x27进行中\x27、\x27已完成\x27、\x27已失败\x27、\x27已取消\x27。\x0a-\x20执行者:\x20负责完成此任务的角色名。\x0a-\x20地点:\x20任务关键环节发生的地点。\x0a-\x20开始时间/结束时间:\x20记录任务的起止时间,格式\x27YYYY-MM-DD\x27,若未结束则结束时间留空。\x0a-\x20结果:\x20任务完成或失败后的最终结果。','\x22\x20的表格已存在。','confirm',')字限制,请进行缩减。】','技能效果','type','headers','fill','batch_filler_rule_template','\x20|\x0a','无法移动列:索引\x20','\x20列。','number','未在聊天记录中找到表格,正在加载全局预设...','所有表格的行数据已在内存中清空。','未能在上一楼找到可用的表格状态。',']\x20的列“','createElement','表格不存在。','\x20中操作。','\x20的第\x20','),已智能转换为在表格\x20[','.json','【触发条件】只能在明确表示要移除或废弃某条设定时,才能删除对应行。','【警告】\x0a\x0a导入操作将完全覆盖您当前的AI指令模板和所有表格(包括结构和内容)。\x0a\x0a此操作不可逆,是否确定要继续?',']\x20的顺序已调整。','result','预设已成功导入并应用。','charLimitRules','任务名','warn','填表完成','【核心作用】此表格是角色关系和状态的核心数据库,用于记录所有在故事中出现的重要角色的详细信息。\x0a【字段详解】\x0a-\x20角色名:\x20角色的唯一标识。\x0a-\x20外貌:\x20描述五官、发型、发色、肤色等面部特征。\x0a-\x20身形:\x20描述身高、体型、肌肉状况、特殊身体标记(如伤疤)等。\x0a-\x20衣着:\x20描述角色当前或标志性的穿着,包括服装、配饰等。\x0a-\x20性格:\x20概括角色的核心性格特质,使用1-3个关键词,如\x27勇敢/鲁莽/忠诚\x27。\x0a-\x20身份:\x20角色的社会背景或出身,如\x27贵族后裔\x27、\x27流浪者\x27。\x0a-\x20职业:\x20角色赖以谋生的工作或职责,如\x27佣兵\x27、\x27学者\x27。\x0a-\x20与关系:\x20描述该角色与主角之间的社会或情感关系,如\x27盟友\x27、\x27导师\x27、\x27敌人\x27。\x0a-\x20爱好:\x20角色的兴趣和消遣活动。\x0a-\x20住所:\x20角色的常住地。\x0a-\x20其他重要信息:\x20记录任何不属于以上类别但对角色至关重要的信息,如特殊能力、过去的经历等。','\x0a*\x20','【触发条件】当任务列表超过10行时,优先删除最早的、已经“已完成”且与当前剧情关联度最低的任务。如果存在内容完全重复的任务,应删除。','新列\x201','【触发条件】当以下情况发生时,应添加新行:\x0a1.\x20角色接下一个明确的、有目标的委托或命令。\x0a2.\x20角色们达成一个具体的、需要在未来执行的约定。\x0a3.\x20角色为自己设定一个长期的、关键性的目标。','splice',']\x20的表头“','缺少状态或目标消息,无法保存。','正在执行回退并重新填表...','导入的表格数据格式不正确:\x20','aiTemplate','无法找到可锚定的消息或保存失败,新表格可能不会被持久化!','accept','删除列失败:在表格\x20','substring','【修改】:\x20','【核心作用】此表格记录了来自的、超越故事本身的“元指令”或世界观设定,拥有最高解释权。内容应被严格遵守,禁止AI自行修改。\x0a【字段详解】\x0a-\x20类型:\x20指令的分类,如\x27世界观设定\x27、\x27剧情走向要求\x27、\x27角色行为禁令\x27。\x0a-\x20具体描述:\x20完整、准确地记录提出的具体要求。','file','物品栏','全局预设已被清除。','AI返回内容为空,无法更新表格。','click','未能在上一楼找到可用的表格状态,无法回退。','Amily2-','执行AI指令:\x20deleteRow(tableIndex=','【触发条件】如果发现表格中存在两个描述完全相同的重复技能,应删除其中一个。如果记录了非的技能,应立即删除。','columnWidths','aiRuleTemplate','用户取消了清除全局预设的操作。','AMILY2_TABLE_UPDATED','已清除所有单元格高亮标记。','操作成功','无法移动表格:索引\x20','执行失败','function','当前没有设置全局预设。','removeChild',')\x20的第\x20','\x20的表格。','已成功将回退后的状态保存至最新消息。','预设已成功导入!',']\x20新增了一列。','【触发条件】当在故事中首次成功施展或习得一个全新的、表格中未记录的技能时,必须添加。','\x20条消息中找到基准表格数据。','未知操作','完整备份','设置成功','全局预设已设置!新聊天将默认使用此预设。','未能保存回退状态,操作中止。','正在尝试从第\x20','创建失败','导入的预设已强制写入最新消息并立即保存。','【当前(','normal','\x20行已标记为待删除。','pending-deletion','isArray','此地角色','6240372IxEIwD','世界钟','application/json','【删除】:\x20','error','14583stfxpE','这是一个新创建的表格。','执行AI指令:\x20insertRow(tableIndex=','anchor',',\x20rowIndex=','44Ikrkfq','some','table_system_enabled','成功在表格\x20','无法创建表格:名为\x20\x22','chat','”已更新为“','info','操作已取消。','表格\x20\x22','所有AI指令已成功执行完毕。','已提交并永久删除了\x20','\x20|\x20','导入成功','加载全局预设失败:\x20','injectionFlowTemplate','(该表当前内容为空)\x0a','amily2_tables_data','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20insertRow,\x20deleteRow,\x20updateRow\x20}\x20=\x20runner;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','角色名','batchFillerRuleTemplate','时空栏','rowStatuses','push','amily2_ai_template','物品名','extra','trim','UI已更新以显示回退后的状态。','rule_update',']\x20在第\x20','batchFillerFlowTemplate','dispatchEvent','input','所有表格的剧情内容已清空。','表格名称不能为空。','match',']\x20新增了一行。','3278004bVjZjE','join',']\x20已被成功废黜。','name','\x20条表格操作指令...','AI指令块为空,无需执行任何操作。','重要原因','【触发条件】当任务的“状态”发生任何变化时,必须更新。例如,从\x27进行中\x27变为\x27已完成\x27。当任务的“详情”或“结果”有新的关键信息补充时,也应更新。','表格系统总开关已关闭,跳过\x20\x20标签处理。','Amily2-Table-Preset-v2.0-full','message','设定栏','includes','其他重要信息','rows','---','无需清除,当前未设置任何全局预设。','回退状态保存失败,操作中止。','表格顺序调整后的状态已强制写入最新消息并立即保存。','与关系','Log','\x20行。','\x20行已恢复。','length','】已成功导出。','charLimitRule','log','”已向','version','无法回退:聊天记录不足。','parse','文件格式无效或缺少版本号/表格数据。','导入全局预设失败:\x20','...]','note','导入失败:','在第\x20','从预设模板生成默认表格...','\x20已在边界。','【全局预设导入】\x0a\x0a这将把选定的预设设置为所有新聊天的默认表格。\x0a\x0a此操作将覆盖任何已存在的全局预设,是否确定?',')超出规定(','2hyHCsS','成功将表格\x20','无法找到可锚定的消息或保存失败,删除操作可能不会被持久化!',')行以下,但切莫完全删除。】','1547URQdzV','rule_delete','【触发条件】当故事开始,且此表格为空时,必须立即根据初始场景创建第一行。','【清除全局预设】\x0a\x0a您确定要清除已设置的全局预设吗?\x0a\x0a清除后,新聊天将恢复使用扩展内置的默认表格模板。','forEach','add','download','\x20中找不到索引为\x20','tables','操作完成','开始时间/结束时间','161159pCxvWa','纯净预设','rowLimitRule','插入了新列。','24730HTmdwY','1384BzLcNX','【触发条件】当物品的“状态”(如被损坏)、“拥有者”(如被转交或被盗)或“详情”(如发现了新功能)发生变化时,必须更新。','\x20行移动到第\x20','Amily2-Table-Preset-v3.0-separated_templates','未找到任何表格数据或全局预设,使用默认模板。','every','\x22\x20已更新内存状态。','target','重命名失败:表格不存在。','表格\x20[','revokeObjectURL','全局预设已成功导入并保存到扩展设置中。','技能名','表格状态已准备写入消息\x20[','success','准备执行从AI返回的\x20','global_table_preset','files','onchange','UI操作\x20\x22','rowIndex','columnIndex','4644DvERCt','AI指令意图更新不存在的行\x20(rowIndex:\x20','重命名失败:名为\x20\x22','AI\x20指令更新了表格\x20[','AI指令错误:尝试在不存在的表格索引\x20','filter','27592cUexIw','【增加】:\x20',')第(','已根据AI的指示成功更新表格!','【核心作用】专门用于记录主角掌握的各种技能、魔法、被动能力或特殊专长。\x0a【字段详解】\x0a-\x20技能名:\x20技能的正式名称。\x0a-\x20技能效果:\x20清晰、简洁地描述该技能使用时产生的具体效果、消耗和限制条件。','\x20行位置插入了新行。','聊天记录不足,无法执行回退操作。','stringify','名为\x20\x22','size','角色栏','\x22\x20已重命名为\x20\x22','\x0a---\x0a','【触发条件】只能在明确表示要修改某条设定时,才能更新对应行的描述。','状态回退失败,已中止操作。','left','href','】已开始下载。','执行AI指令时出错:\x20','导入预设失败:\x20','\x20列的','重命名失败','[SuperMemory]\x20已从元数据恢复内存状态并刷新\x20UI。','map','已清除所有表格的更新标记。','replace'];_0x47f5=function(){return _0x3e2dc7;};return _0x47f5();}import{getContext,extension_settings}from'/scripts/extensions.js';import{saveChat,saveSettingsDebounced}from'/script.js';import{log}from'./logger.js';import{fillWithSecondaryApi}from'./secondary-filler.js';import{getChatPiece,saveChatDebounced}from'../../utils/utils.js';import{extensionName}from'../../utils/settings.js';import{DEFAULT_AI_RULE_TEMPLATE,DEFAULT_AI_FLOW_TEMPLATE}from'./settings.js';import{renderTables}from'../../ui/table-bindings.js';import{updateOrInsertTableInChat}from'../../ui/message-table-renderer.js';const TABLE_DATA_KEY=_0x23b7a8(0x251);let currentTablesState=null,highlightedCells=new Set(),updatedTables=new Set();function dispatchTableUpdate(_0x2cf4a4){const _0xabea40=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x2cf4a4])return;const _0x307141=currentTablesState[_0x2cf4a4];let _0x34c5a2='database';if(_0x307141[_0xabea40(0x269)][_0xabea40(0x272)]('时空')||_0x307141[_0xabea40(0x269)][_0xabea40(0x272)](_0xabea40(0x237)))_0x34c5a2=_0xabea40(0x23e);if(_0x307141[_0xabea40(0x269)][_0xabea40(0x272)]('日志')||_0x307141['name']['includes'](_0xabea40(0x27a)))_0x34c5a2=_0xabea40(0x280);const _0x120f84=new CustomEvent(_0xabea40(0x219),{'detail':{'tableName':_0x307141[_0xabea40(0x269)],'data':_0x307141[_0xabea40(0x274)],'headers':_0x307141['headers'],'rowStatuses':_0x307141['rowStatuses']||[],'role':_0x34c5a2}});document[_0xabea40(0x260)](_0x120f84),log('[SuperMemory]\x20Dispatched\x20update\x20event\x20for\x20'+_0x307141['name'],_0xabea40(0x247));}export function addHighlight(_0x399b0e,_0x5eb664,_0xbde0a6){const _0x763897=_0x23b7a8,_0x4154fb=_0x399b0e+'-'+_0x5eb664+'-'+_0xbde0a6;highlightedCells[_0x763897(0x181)](_0x4154fb);}export function getHighlights(){return highlightedCells;}export function clearHighlights(){const _0x96d147=_0x23b7a8;highlightedCells['size']>0x0&&(highlightedCells[_0x96d147(0x1c9)](),log(_0x96d147(0x21a),_0x96d147(0x247)));}export function getUpdatedTables(){return updatedTables;}export function clearUpdatedTables(){const _0x84235b=_0x23b7a8;updatedTables[_0x84235b(0x1b1)]>0x0&&(updatedTables[_0x84235b(0x1c9)](),log(_0x84235b(0x1c0),'info'));}export function setMemoryState(_0x267504){currentTablesState=_0x267504;}export function loadMemoryState(_0x1d3272){const _0x5613da=_0x23b7a8;if(!_0x1d3272)return;setMemoryState(_0x1d3272),renderTables(),updateOrInsertTableInChat(),log(_0x5613da(0x1be),'info');}export function saveMemoryState(){const _0x11598b=_0x23b7a8,_0x1e061a=getContext();if(_0x1e061a[_0x11598b(0x245)]&&_0x1e061a[_0x11598b(0x245)][_0x11598b(0x27d)]>0x0){const _0x2f101f=_0x1e061a[_0x11598b(0x245)][_0x1e061a[_0x11598b(0x245)][_0x11598b(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x2f101f))return!![];}return![];}export function getMemoryState(){return currentTablesState;}const defaultTemplate={'tables':[{'name':_0x23b7a8(0x255),'headers':['日期','时段','时间','地点',_0x23b7a8(0x235)],'note':_0x23b7a8(0x1d4),'rule_add':_0x23b7a8(0x17e),'rule_delete':_0x23b7a8(0x1d3),'rule_update':'【触发条件】当以下任一情况发生时,必须更新此行:\x0a1.\x20时间发生显著跳跃(例如,\x27几小时后\x27、\x27第二天\x27)。\x0a2.\x20角色从一个地点移动到另一个地点。\x0a3.\x20场景中关键角色的出入导致在场人员发生变化。','charLimitRules':{},'rowLimitRule':0x1,'rows':[]},{'name':_0x23b7a8(0x1b2),'headers':[_0x23b7a8(0x253),'外貌','身形','衣着','性格','身份','职业',_0x23b7a8(0x279),'爱好','住所',_0x23b7a8(0x273)],'note':_0x23b7a8(0x1fc),'rule_add':_0x23b7a8(0x1c3),'rule_delete':_0x23b7a8(0x1da),'rule_update':'【触发条件】当角色的任何信息发生持久性或关键性变化时,必须更新对应单元格。例如:\x0a1.\x20外貌/身形/衣着发生永久性改变(如断肢、换上新装备)。\x0a2.\x20性格因重大事件而扭转。\x0a3.\x20身份或职业发生变更(如继承王位、被解雇)。\x0a4.\x20与的关系发生根本性转变(如从敌人变为盟友)。','charLimitRules':{'10':0x1e},'rowLimitRule':0x0,'rows':[]},{'name':'任务栏','headers':[_0x23b7a8(0x1f9),'类型','详情','状态','执行者','地点',_0x23b7a8(0x186),'结果'],'note':_0x23b7a8(0x1dc),'rule_add':_0x23b7a8(0x200),'rule_delete':_0x23b7a8(0x1fe),'rule_update':_0x23b7a8(0x26d),'charLimitRules':{},'rowLimitRule':0xa,'rows':[]},{'name':_0x23b7a8(0x20e),'headers':[_0x23b7a8(0x259),'类型','详情','状态','拥有者',_0x23b7a8(0x26c)],'note':_0x23b7a8(0x1c2),'rule_add':'【触发条件】当一个物品被明确赋予了特殊意义(如被赠予、在关键事件中扮演重要角色)或展示出独特功能时,应为其创建条目。','rule_delete':'【触发条件】当一个物品被彻底摧毁、消耗完毕或永久失去其特殊意义时,可以删除。','rule_update':_0x23b7a8(0x18d),'charLimitRules':{},'rowLimitRule':0x0,'rows':[]},{'name':'技能栏','headers':[_0x23b7a8(0x198),_0x23b7a8(0x1e0)],'note':_0x23b7a8(0x1ac),'rule_add':_0x23b7a8(0x226),'rule_delete':_0x23b7a8(0x215),'rule_update':_0x23b7a8(0x1d7),'charLimitRules':{},'rowLimitRule':0x0,'rows':[]},{'name':_0x23b7a8(0x271),'headers':['类型','具体描述'],'note':_0x23b7a8(0x20c),'rule_add':'【触发条件】当通过括号、旁白或其他明确的“第四面墙”方式,提出关于故事背景、规则或未来走向的指令时,必须记录于此。','rule_delete':_0x23b7a8(0x1f3),'rule_update':_0x23b7a8(0x1b5),'charLimitRules':{},'rowLimitRule':0x0,'rows':[]}]};function getDefaultTables(){const _0x25d8de=_0x23b7a8;log(_0x25d8de(0x28b),_0x25d8de(0x247));const _0xd71791=JSON[_0x25d8de(0x284)](JSON[_0x25d8de(0x1af)](defaultTemplate['tables']));return _0xd71791[_0x25d8de(0x180)](_0x1c098b=>{const _0x4649ce=_0x25d8de;_0x1c098b[_0x4649ce(0x27f)]={'columnIndex':-0x1,'limit':0x0},_0x1c098b[_0x4649ce(0x189)]=0x0,_0x1c098b[_0x4649ce(0x216)]=[];}),_0xd71791;}export function loadTables(_0x2cc81d=-0x1){const _0xf1c1e7=_0x23b7a8,_0x2f3862=getContext();if(_0x2f3862&&_0x2f3862[_0xf1c1e7(0x245)]&&_0x2f3862['chat'][_0xf1c1e7(0x27d)]>0x0){const _0x354387=_0x2cc81d===-0x1?_0x2f3862[_0xf1c1e7(0x245)][_0xf1c1e7(0x27d)]-0x1:_0x2cc81d-0x1;for(let _0x29f7d8=_0x354387;_0x29f7d8>=0x0;_0x29f7d8--){const _0xda9f88=_0x2f3862[_0xf1c1e7(0x245)][_0x29f7d8];if(_0xda9f88[_0xf1c1e7(0x25a)]&&_0xda9f88['extra'][TABLE_DATA_KEY]){log(_0xf1c1e7(0x28a)+_0x29f7d8+_0xf1c1e7(0x227),_0xf1c1e7(0x247));let _0x2d29e5=JSON[_0xf1c1e7(0x284)](JSON[_0xf1c1e7(0x1af)](_0xda9f88[_0xf1c1e7(0x25a)][TABLE_DATA_KEY]));return _0x2d29e5[_0xf1c1e7(0x180)](_0x358278=>{const _0x4b0a4e=_0xf1c1e7;if(_0x358278[_0x4b0a4e(0x288)]===undefined)_0x358278[_0x4b0a4e(0x288)]='无';if(_0x358278['rule_add']===undefined)_0x358278[_0x4b0a4e(0x1c4)]='允许';if(_0x358278[_0x4b0a4e(0x17d)]===undefined)_0x358278[_0x4b0a4e(0x17d)]='允许';if(_0x358278[_0x4b0a4e(0x25d)]===undefined)_0x358278[_0x4b0a4e(0x25d)]='允许';_0x358278[_0x4b0a4e(0x27f)]&&!_0x358278[_0x4b0a4e(0x1f8)]&&(_0x358278[_0x4b0a4e(0x1f8)]={},_0x358278['charLimitRule'][_0x4b0a4e(0x1a1)]!==-0x1&&_0x358278[_0x4b0a4e(0x27f)][_0x4b0a4e(0x1ca)]>0x0&&(_0x358278[_0x4b0a4e(0x1f8)][_0x358278[_0x4b0a4e(0x27f)][_0x4b0a4e(0x1a1)]]=_0x358278['charLimitRule'][_0x4b0a4e(0x1ca)]));delete _0x358278[_0x4b0a4e(0x27f)];if(_0x358278['rowLimitRule']===undefined)_0x358278[_0x4b0a4e(0x189)]=0x0;if(_0x358278[_0x4b0a4e(0x216)]===undefined)_0x358278['columnWidths']=[];!_0x358278[_0x4b0a4e(0x256)]&&(_0x358278[_0x4b0a4e(0x256)]=Array(_0x358278[_0x4b0a4e(0x274)][_0x4b0a4e(0x27d)])[_0x4b0a4e(0x1e3)]('normal'));}),currentTablesState=_0x2d29e5,currentTablesState;}}}if(extension_settings[extensionName]?.['global_table_preset']){log(_0xf1c1e7(0x1e9),'info');try{const _0x503e7a=extension_settings[extensionName]['global_table_preset'];return currentTablesState=JSON[_0xf1c1e7(0x284)](JSON[_0xf1c1e7(0x1af)](_0x503e7a[_0xf1c1e7(0x184)])),_0x503e7a[_0xf1c1e7(0x254)]!==undefined&&saveBatchFillerRuleTemplate(_0x503e7a[_0xf1c1e7(0x254)]),_0x503e7a[_0xf1c1e7(0x25f)]!==undefined&&saveBatchFillerFlowTemplate(_0x503e7a[_0xf1c1e7(0x25f)]),currentTablesState;}catch(_0x5f0b88){log(_0xf1c1e7(0x24e)+_0x5f0b88[_0xf1c1e7(0x270)],_0xf1c1e7(0x23a));}}return log(_0xf1c1e7(0x190),_0xf1c1e7(0x247)),currentTablesState=getDefaultTables(),currentTablesState;}export function saveStateToMessage(_0x432764,_0x8f5406){const _0x17f3b2=_0x23b7a8;if(!_0x432764||!_0x8f5406)return log(_0x17f3b2(0x203),_0x17f3b2(0x23a)),![];return!_0x8f5406[_0x17f3b2(0x25a)]&&(_0x8f5406['extra']={}),_0x8f5406[_0x17f3b2(0x25a)][TABLE_DATA_KEY]=JSON[_0x17f3b2(0x284)](JSON['stringify'](_0x432764)),log(_0x17f3b2(0x199)+_0x8f5406[_0x17f3b2(0x1d1)][_0x17f3b2(0x20a)](0x0,0x14)+_0x17f3b2(0x287),'info'),!![];}export function saveTables(_0x283e8e=_0x23b7a8(0x228)){const _0x14675b=_0x23b7a8;return log(_0x14675b(0x19f)+_0x283e8e+_0x14675b(0x192),_0x14675b(0x247)),!![];}export function deleteColumn(_0x5b99cf,_0x28a284){const _0x274bb3=_0x23b7a8,_0x3f1a9d=getMemoryState();if(!_0x3f1a9d[_0x5b99cf]||_0x28a284<0x0||_0x28a284>=_0x3f1a9d[_0x5b99cf][_0x274bb3(0x1e2)][_0x274bb3(0x27d)]){log(_0x274bb3(0x209)+_0x5b99cf+_0x274bb3(0x183)+_0x28a284+'\x20的列。',_0x274bb3(0x23a));return;}_0x3f1a9d[_0x5b99cf][_0x274bb3(0x1e2)][_0x274bb3(0x201)](_0x28a284,0x1),_0x3f1a9d[_0x5b99cf][_0x274bb3(0x274)][_0x274bb3(0x180)](_0x180c76=>{const _0x5923ef=_0x274bb3;_0x180c76[_0x5923ef(0x27d)]>_0x28a284&&_0x180c76[_0x5923ef(0x201)](_0x28a284,0x1);}),_0x3f1a9d[_0x5b99cf][_0x274bb3(0x216)]&&_0x3f1a9d[_0x5b99cf][_0x274bb3(0x216)][_0x274bb3(0x27d)]>_0x28a284&&_0x3f1a9d[_0x5b99cf][_0x274bb3(0x216)]['splice'](_0x28a284,0x1),log(_0x274bb3(0x1cd)+_0x5b99cf+_0x274bb3(0x1f0)+(_0x28a284+0x1)+_0x274bb3(0x1e7),'success'),saveTables(_0x3f1a9d),dispatchTableUpdate(_0x5b99cf);}export function moveRow(_0x58e26d,_0xfc8847,_0xd132ad){const _0x552c31=_0x23b7a8,_0x4efed4=getMemoryState(),_0x16ace5=_0x4efed4[_0x58e26d];if(!_0x16ace5||_0xfc8847<0x0||_0xfc8847>=_0x16ace5['rows'][_0x552c31(0x27d)])return;const _0xdb1851=_0xd132ad==='up'?_0xfc8847-0x1:_0xfc8847+0x1;if(_0xdb1851<0x0||_0xdb1851>=_0x16ace5['rows'][_0x552c31(0x27d)])return;const [_0x44d5b0]=_0x16ace5[_0x552c31(0x274)][_0x552c31(0x201)](_0xfc8847,0x1);_0x16ace5[_0x552c31(0x274)][_0x552c31(0x201)](_0xdb1851,0x0,_0x44d5b0);if(_0x16ace5[_0x552c31(0x256)]&&_0x16ace5['rowStatuses']['length']===_0x16ace5[_0x552c31(0x274)][_0x552c31(0x27d)]+0x1){const [_0x10e939]=_0x16ace5[_0x552c31(0x256)]['splice'](_0xfc8847,0x1);_0x16ace5['rowStatuses'][_0x552c31(0x201)](_0xdb1851,0x0,_0x10e939);}log(_0x552c31(0x290)+_0x58e26d+_0x552c31(0x1f0)+(_0xfc8847+0x1)+_0x552c31(0x18e)+(_0xdb1851+0x1)+'\x20行。',_0x552c31(0x19a)),saveTables(_0x4efed4),dispatchTableUpdate(_0x58e26d);}export function insertRow(_0x403218,_0x5e751e,_0xdcf31d='below'){const _0xb24abe=_0x23b7a8,_0x3fcb58=getMemoryState(),_0x119a7f=_0x3fcb58[_0x403218];if(!_0x119a7f){log('插入行失败:找不到索引为\x20'+_0x403218+_0xb24abe(0x222),_0xb24abe(0x23a));return;}let _0x38733f;typeof _0x5e751e===_0xb24abe(0x1e8)?_0x38733f=_0xdcf31d==='above'?_0x5e751e:_0x5e751e+0x1:_0x38733f=_0x119a7f[_0xb24abe(0x274)][_0xb24abe(0x27d)];if(_0x38733f<0x0)_0x38733f=0x0;if(_0x38733f>_0x119a7f[_0xb24abe(0x274)][_0xb24abe(0x27d)])_0x38733f=_0x119a7f[_0xb24abe(0x274)]['length'];const _0x246ce2=new Array(_0x119a7f[_0xb24abe(0x1e2)][_0xb24abe(0x27d)])[_0xb24abe(0x1e3)]('');if(typeof _0x5e751e==='object'&&_0x5e751e!==null)for(const _0x1952be in _0x5e751e){const _0xaa1059=parseInt(_0x1952be,0xa);!isNaN(_0xaa1059)&&_0xaa1059<_0x246ce2[_0xb24abe(0x27d)]&&(_0x246ce2[_0xaa1059]=_0x5e751e[_0x1952be],addHighlight(_0x403218,_0x38733f,_0xaa1059));}_0x119a7f[_0xb24abe(0x274)][_0xb24abe(0x201)](_0x38733f,0x0,_0x246ce2);if(!_0x119a7f[_0xb24abe(0x256)])_0x119a7f[_0xb24abe(0x256)]=Array(_0x119a7f[_0xb24abe(0x274)]['length'])['fill'](_0xb24abe(0x231));_0x119a7f[_0xb24abe(0x256)][_0xb24abe(0x201)](_0x38733f,0x0,_0xb24abe(0x231)),updatedTables[_0xb24abe(0x181)](_0x403218),dispatchTableUpdate(_0x403218),log(_0xb24abe(0x243)+_0x119a7f[_0xb24abe(0x269)]+'\x20(索引\x20'+_0x403218+_0xb24abe(0x221)+(_0x38733f+0x1)+_0xb24abe(0x1ad),_0xb24abe(0x19a));const _0x56ab84=getContext();if(_0x56ab84[_0xb24abe(0x245)]&&_0x56ab84[_0xb24abe(0x245)][_0xb24abe(0x27d)]>0x0){const _0x951b90=_0x56ab84['chat'][_0x56ab84[_0xb24abe(0x245)][_0xb24abe(0x27d)]-0x1];if(saveStateToMessage(_0x3fcb58,_0x951b90)){saveChat();return;}}saveChatDebounced();}export function addRow(_0x442049){const _0x38ef35=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x442049])return;const _0x10bb0a=currentTablesState[_0x442049],_0x57486f=_0x10bb0a[_0x38ef35(0x1e2)][_0x38ef35(0x27d)],_0x3c1fd1=Array(_0x57486f)[_0x38ef35(0x1e3)]('');_0x10bb0a[_0x38ef35(0x274)][_0x38ef35(0x257)](_0x3c1fd1);if(!_0x10bb0a['rowStatuses'])_0x10bb0a[_0x38ef35(0x256)]=Array(_0x10bb0a[_0x38ef35(0x274)][_0x38ef35(0x27d)])[_0x38ef35(0x1e3)](_0x38ef35(0x231));_0x10bb0a[_0x38ef35(0x256)][_0x38ef35(0x257)](_0x38ef35(0x231)),updatedTables[_0x38ef35(0x181)](_0x442049),dispatchTableUpdate(_0x442049);const _0x4f0236=_0x38ef35(0x195)+_0x10bb0a[_0x38ef35(0x269)]+_0x38ef35(0x265);log(_0x4f0236,_0x38ef35(0x247));const _0x243274=getContext();if(_0x243274[_0x38ef35(0x245)]&&_0x243274[_0x38ef35(0x245)]['length']>0x0){const _0x3c403f=_0x243274[_0x38ef35(0x245)][_0x243274[_0x38ef35(0x245)][_0x38ef35(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x3c403f)){saveChat();return;}}saveChatDebounced();}export function addColumn(_0x5ee9ad){const _0x231dfb=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x5ee9ad])return;const _0x11b33c=currentTablesState[_0x5ee9ad],_0x56c6b8=_0x231dfb(0x1cf)+(_0x11b33c[_0x231dfb(0x1e2)][_0x231dfb(0x27d)]+0x1);_0x11b33c[_0x231dfb(0x1e2)][_0x231dfb(0x257)](_0x56c6b8),_0x11b33c[_0x231dfb(0x274)][_0x231dfb(0x180)](_0x5710c8=>_0x5710c8[_0x231dfb(0x257)](''));if(!_0x11b33c['columnWidths'])_0x11b33c[_0x231dfb(0x216)]=[];_0x11b33c[_0x231dfb(0x216)][_0x231dfb(0x257)](null);const _0x644959=_0x231dfb(0x195)+_0x11b33c['name']+_0x231dfb(0x225);log(_0x644959,'info');const _0x59e329=getContext();if(_0x59e329[_0x231dfb(0x245)]&&_0x59e329[_0x231dfb(0x245)][_0x231dfb(0x27d)]>0x0){const _0x16b2f5=_0x59e329['chat'][_0x59e329[_0x231dfb(0x245)][_0x231dfb(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x16b2f5)){saveChat();return;}}saveChatDebounced();}export function updateHeader(_0x232864,_0xd0035f,_0x1f8f99){const _0x4179bf=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x232864]||currentTablesState[_0x232864][_0x4179bf(0x1e2)][_0xd0035f]===undefined)return;const _0x3880ac=currentTablesState[_0x232864]['name'],_0x26c4b0=currentTablesState[_0x232864]['headers'][_0xd0035f];currentTablesState[_0x232864][_0x4179bf(0x1e2)][_0xd0035f]=_0x1f8f99;const _0xc6d1c5=_0x4179bf(0x195)+_0x3880ac+_0x4179bf(0x202)+_0x26c4b0+_0x4179bf(0x246)+_0x1f8f99+'”。';log(_0xc6d1c5,'info');const _0x24fbfe=getContext();if(_0x24fbfe[_0x4179bf(0x245)]&&_0x24fbfe[_0x4179bf(0x245)][_0x4179bf(0x27d)]>0x0){const _0x41b48c=_0x24fbfe['chat'][_0x24fbfe['chat'][_0x4179bf(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x41b48c)){saveChat();return;}}saveChatDebounced();}export async function deleteRow(_0x2e0592,_0x1a401d){const _0x333cc7=_0x23b7a8,_0x576837=currentTablesState?.[_0x2e0592];if(!_0x576837||!_0x576837[_0x333cc7(0x274)][_0x1a401d])return;!_0x576837['rowStatuses']&&(_0x576837[_0x333cc7(0x256)]=Array(_0x576837[_0x333cc7(0x274)]['length'])[_0x333cc7(0x1e3)](_0x333cc7(0x231)));_0x576837[_0x333cc7(0x256)][_0x1a401d]=_0x333cc7(0x233),updatedTables[_0x333cc7(0x181)](_0x2e0592);const _0x4b634d=_0x333cc7(0x195)+_0x576837['name']+_0x333cc7(0x1d6)+(_0x1a401d+0x1)+_0x333cc7(0x232);log(_0x4b634d,_0x333cc7(0x247));const _0x41dd6f=getContext();if(_0x41dd6f['chat']?.[_0x333cc7(0x27d)]>0x0){const _0x12573e=_0x41dd6f[_0x333cc7(0x245)][_0x41dd6f['chat'][_0x333cc7(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x12573e)){await saveChat(),renderTables(),dispatchTableUpdate(_0x2e0592);return;}}await saveChatDebounced(),renderTables(),dispatchTableUpdate(_0x2e0592);}export async function restoreRow(_0x4dc9de,_0x52bc61){const _0x2d48bb=_0x23b7a8,_0x47708c=currentTablesState?.[_0x4dc9de];if(!_0x47708c||!_0x47708c[_0x2d48bb(0x274)][_0x52bc61]||!_0x47708c[_0x2d48bb(0x256)])return;_0x47708c[_0x2d48bb(0x256)][_0x52bc61]=_0x2d48bb(0x231),updatedTables[_0x2d48bb(0x181)](_0x4dc9de);const _0x1efad0=_0x2d48bb(0x195)+_0x47708c[_0x2d48bb(0x269)]+_0x2d48bb(0x1d6)+(_0x52bc61+0x1)+_0x2d48bb(0x27c);log(_0x1efad0,_0x2d48bb(0x247));const _0x534e3c=getContext();if(_0x534e3c['chat']?.[_0x2d48bb(0x27d)]>0x0){const _0x346b8a=_0x534e3c[_0x2d48bb(0x245)][_0x534e3c[_0x2d48bb(0x245)][_0x2d48bb(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x346b8a)){await saveChat(),renderTables();return;}}await saveChatDebounced(),renderTables();}export function commitPendingDeletions(){const _0x170994=_0x23b7a8;if(!currentTablesState)return![];let _0x478a8b=0x0;currentTablesState[_0x170994(0x180)]((_0x47abeb,_0x3ed956)=>{const _0x3bc728=_0x170994;if(!_0x47abeb['rowStatuses']||_0x47abeb[_0x3bc728(0x256)][_0x3bc728(0x27d)]===0x0)return;let _0x15c07a=![];for(let _0x3026d0=_0x47abeb['rows'][_0x3bc728(0x27d)]-0x1;_0x3026d0>=0x0;_0x3026d0--){_0x47abeb['rowStatuses'][_0x3026d0]===_0x3bc728(0x233)&&(_0x47abeb['rows'][_0x3bc728(0x201)](_0x3026d0,0x1),_0x47abeb['rowStatuses']['splice'](_0x3026d0,0x1),_0x478a8b++,_0x15c07a=!![]);}_0x15c07a&&updatedTables['add'](_0x3ed956);});if(_0x478a8b>0x0)return log(_0x170994(0x24b)+_0x478a8b+_0x170994(0x27b),'info'),updatedTables[_0x170994(0x1b1)]>0x0&&updatedTables['forEach'](_0x144d3b=>{dispatchTableUpdate(_0x144d3b);}),!![];return![];}export function insertColumn(_0x56e4e1,_0x35b533,_0x3060ff){const _0x376d20=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x56e4e1])return;const _0x19ba6e=currentTablesState[_0x56e4e1],_0x310540=_0x3060ff==='left'?_0x35b533:_0x35b533+0x1,_0x361c68='新列';_0x19ba6e['headers'][_0x376d20(0x201)](_0x310540,0x0,_0x361c68),_0x19ba6e['rows'][_0x376d20(0x180)](_0x5d68c0=>_0x5d68c0['splice'](_0x310540,0x0,''));if(!_0x19ba6e['columnWidths'])_0x19ba6e[_0x376d20(0x216)]=[];_0x19ba6e[_0x376d20(0x216)][_0x376d20(0x201)](_0x310540,0x0,null);const _0x244fca=_0x376d20(0x195)+_0x19ba6e[_0x376d20(0x269)]+_0x376d20(0x25e)+(_0x35b533+0x1)+_0x376d20(0x1bc)+(_0x3060ff===_0x376d20(0x1b7)?'左侧':'右侧')+_0x376d20(0x18a);log(_0x244fca,_0x376d20(0x247));const _0x38ea4f=getContext();if(_0x38ea4f[_0x376d20(0x245)]&&_0x38ea4f['chat'][_0x376d20(0x27d)]>0x0){const _0x43db01=_0x38ea4f[_0x376d20(0x245)][_0x38ea4f[_0x376d20(0x245)][_0x376d20(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x43db01)){saveChat();return;}}saveChatDebounced();}export function moveColumn(_0x28f317,_0x6346d3,_0x4bf18b){const _0x7f223f=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x28f317])return;const _0xfb0eb0=currentTablesState[_0x28f317],_0xf6cd28=_0xfb0eb0[_0x7f223f(0x1e2)],_0x58f23c=_0xfb0eb0[_0x7f223f(0x274)],_0x46acc5=_0x4bf18b===_0x7f223f(0x1b7)?_0x6346d3-0x1:_0x6346d3+0x1;if(_0x46acc5<0x0||_0x46acc5>=_0xf6cd28['length']){log(_0x7f223f(0x1e6)+_0x6346d3+_0x7f223f(0x28c),_0x7f223f(0x1fa));return;}const [_0x4eedef]=_0xf6cd28[_0x7f223f(0x201)](_0x6346d3,0x1);_0xf6cd28[_0x7f223f(0x201)](_0x46acc5,0x0,_0x4eedef),_0x58f23c[_0x7f223f(0x180)](_0x5c44d0=>{const _0x208ecc=_0x7f223f,[_0x47272e]=_0x5c44d0[_0x208ecc(0x201)](_0x6346d3,0x1);_0x5c44d0[_0x208ecc(0x201)](_0x46acc5,0x0,_0x47272e);});if(_0xfb0eb0[_0x7f223f(0x216)]&&_0xfb0eb0['columnWidths'][_0x7f223f(0x27d)]>_0x6346d3){const [_0x2c12c8]=_0xfb0eb0[_0x7f223f(0x216)]['splice'](_0x6346d3,0x1);_0xfb0eb0['columnWidths'][_0x7f223f(0x201)](_0x46acc5,0x0,_0x2c12c8);}const _0x5d5cfb=_0x7f223f(0x195)+_0xfb0eb0[_0x7f223f(0x269)]+_0x7f223f(0x1ec)+_0x4eedef+_0x7f223f(0x281)+(_0x4bf18b===_0x7f223f(0x1b7)?'左':'右')+'移动。';log(_0x5d5cfb,'info');const _0x2fb51d=getContext();if(_0x2fb51d[_0x7f223f(0x245)]&&_0x2fb51d[_0x7f223f(0x245)][_0x7f223f(0x27d)]>0x0){const _0x1bd90b=_0x2fb51d[_0x7f223f(0x245)][_0x2fb51d[_0x7f223f(0x245)]['length']-0x1];if(saveStateToMessage(currentTablesState,_0x1bd90b)){saveChat();return;}}saveChatDebounced();}export function deleteTable(_0x489956){const _0x43ac56=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x489956])return;const _0x22b3dd=currentTablesState[_0x489956][_0x43ac56(0x269)];currentTablesState[_0x43ac56(0x201)](_0x489956,0x1);const _0x55b1dd=_0x43ac56(0x195)+_0x22b3dd+_0x43ac56(0x268);log(_0x55b1dd,_0x43ac56(0x19a));const _0x1f926d=getContext();if(_0x1f926d[_0x43ac56(0x245)]&&_0x1f926d[_0x43ac56(0x245)]['length']>0x0){const _0x421edc=_0x1f926d[_0x43ac56(0x245)][_0x1f926d['chat'][_0x43ac56(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x421edc)){saveChat(),log(_0x43ac56(0x1c8),_0x43ac56(0x19a));return;}}log(_0x43ac56(0x17a),_0x43ac56(0x23a)),saveChatDebounced();}export function addTable(_0x415991){const _0x3348f4=_0x23b7a8;if(!_0x415991||!_0x415991[_0x3348f4(0x25b)]()){log('无法创建表格:名称不能为空。',_0x3348f4(0x23a)),toastr[_0x3348f4(0x23a)](_0x3348f4(0x263),'创建失败');return;}!currentTablesState&&loadTables();if(currentTablesState['some'](_0x51a082=>_0x51a082[_0x3348f4(0x269)]===_0x415991[_0x3348f4(0x25b)]())){log(_0x3348f4(0x244)+_0x415991+_0x3348f4(0x1dd),_0x3348f4(0x23a)),toastr['error']('名为\x20\x22'+_0x415991+_0x3348f4(0x1dd),_0x3348f4(0x22e));return;}const _0x2e871e={'name':_0x415991[_0x3348f4(0x25b)](),'headers':[_0x3348f4(0x1ff)],'rows':[],'rowStatuses':[],'columnWidths':[],'note':_0x3348f4(0x23c),'rule_add':'允许','rule_delete':'允许','rule_update':'允许','charLimitRules':{},'rowLimitRule':0x0};currentTablesState['push'](_0x2e871e);const _0x26bc26='已成功创建新表格:['+_0x415991[_0x3348f4(0x25b)]()+']。';log(_0x26bc26,_0x3348f4(0x19a));const _0x5d989e=getContext();if(_0x5d989e[_0x3348f4(0x245)]&&_0x5d989e[_0x3348f4(0x245)][_0x3348f4(0x27d)]>0x0){const _0x2caa75=_0x5d989e[_0x3348f4(0x245)][_0x5d989e['chat'][_0x3348f4(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x2caa75)){saveChat(),log('新表格状态已强制写入最新消息并立即保存。','success');return;}}log(_0x3348f4(0x207),_0x3348f4(0x23a)),saveChatDebounced();}export function renameTable(_0x133370,_0x2a2279){const _0x3dc040=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x133370]){log(_0x3dc040(0x194),_0x3dc040(0x23a)),toastr[_0x3dc040(0x23a)](_0x3dc040(0x1ee),_0x3dc040(0x1bd));return;}const _0x1913f6=_0x2a2279[_0x3dc040(0x25b)]();if(!_0x1913f6){log('重命名失败:名称不能为空。',_0x3dc040(0x23a)),toastr[_0x3dc040(0x23a)](_0x3dc040(0x263),_0x3dc040(0x1bd));return;}if(currentTablesState[_0x3dc040(0x241)]((_0x4342d6,_0x7b3aad)=>_0x7b3aad!==_0x133370&&_0x4342d6[_0x3dc040(0x269)]===_0x1913f6)){log(_0x3dc040(0x1a4)+_0x1913f6+'\x22\x20的表格已存在。',_0x3dc040(0x23a)),toastr[_0x3dc040(0x23a)](_0x3dc040(0x1b0)+_0x1913f6+_0x3dc040(0x1dd),_0x3dc040(0x1bd));return;}const _0x4b87a7=currentTablesState[_0x133370]['name'];currentTablesState[_0x133370][_0x3dc040(0x269)]=_0x1913f6,log(_0x3dc040(0x249)+_0x4b87a7+_0x3dc040(0x1b3)+_0x1913f6+'\x22。',_0x3dc040(0x19a));const _0x374852=getContext();if(_0x374852['chat']&&_0x374852[_0x3dc040(0x245)][_0x3dc040(0x27d)]>0x0){const _0x3b0819=_0x374852[_0x3dc040(0x245)][_0x374852[_0x3dc040(0x245)][_0x3dc040(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x3b0819)){saveChat();return;}}saveChatDebounced();}export function moveTable(_0x48caea,_0x6df0cd){const _0x18f6af=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x48caea])return;const _0xf75af6=_0x6df0cd==='up'?_0x48caea-0x1:_0x48caea+0x1;if(_0xf75af6<0x0||_0xf75af6>=currentTablesState[_0x18f6af(0x27d)]){log(_0x18f6af(0x21c)+_0x48caea+_0x18f6af(0x28c),_0x18f6af(0x1fa));return;}const _0x20d381=currentTablesState[_0x48caea];currentTablesState[_0x48caea]=currentTablesState[_0xf75af6],currentTablesState[_0xf75af6]=_0x20d381;const _0x1ef318='表格\x20['+_0x20d381[_0x18f6af(0x269)]+_0x18f6af(0x1f5);log(_0x1ef318,_0x18f6af(0x19a));const _0x1b9e97=getContext();if(_0x1b9e97['chat']&&_0x1b9e97[_0x18f6af(0x245)][_0x18f6af(0x27d)]>0x0){const _0x31c566=_0x1b9e97[_0x18f6af(0x245)][_0x1b9e97['chat'][_0x18f6af(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x31c566)){saveChat(),log(_0x18f6af(0x278),_0x18f6af(0x19a));return;}}log('无法找到可锚定的消息或保存失败,顺序调整可能不会被持久化!',_0x18f6af(0x23a)),saveChatDebounced();}export function updateTableRules(_0x462de7,_0x3e238f){const _0x40bbad=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x462de7])return;const _0x3af02c=currentTablesState[_0x462de7];_0x3af02c['note']=_0x3e238f[_0x40bbad(0x288)],_0x3af02c[_0x40bbad(0x1c4)]=_0x3e238f['rule_add'],_0x3af02c[_0x40bbad(0x17d)]=_0x3e238f['rule_delete'],_0x3af02c[_0x40bbad(0x25d)]=_0x3e238f['rule_update'],_0x3af02c['charLimitRules']=_0x3e238f[_0x40bbad(0x1f8)],_0x3af02c[_0x40bbad(0x189)]=_0x3e238f[_0x40bbad(0x189)],delete _0x3af02c[_0x40bbad(0x27f)];const _0xa5434=_0x40bbad(0x195)+_0x3af02c['name']+']\x20的规则已更新。';log(_0xa5434,_0x40bbad(0x247));const _0x45fd84=getContext();if(_0x45fd84[_0x40bbad(0x245)]&&_0x45fd84[_0x40bbad(0x245)][_0x40bbad(0x27d)]>0x0){const _0x5d9240=_0x45fd84[_0x40bbad(0x245)][_0x45fd84[_0x40bbad(0x245)][_0x40bbad(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x5d9240)){saveChat();return;}}saveChatDebounced();}export function updateRow(_0x3b45ef,_0x49ba61,_0x333881){const _0x25da40=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x3b45ef]){log(_0x25da40(0x1a6)+_0x3b45ef+_0x25da40(0x1ef),_0x25da40(0x23a));return;}const _0x22760a=currentTablesState[_0x3b45ef];if(_0x49ba61>=_0x22760a['rows']['length']){log(_0x25da40(0x1a3)+_0x49ba61+_0x25da40(0x1f1)+_0x22760a['name']+']\x20末尾新增一行。',_0x25da40(0x1fa)),insertRow(_0x3b45ef,_0x333881);return;}const _0x3f96b2=_0x22760a[_0x25da40(0x274)][_0x49ba61];for(const _0x9a4da7 in _0x333881){const _0x3911f0=parseInt(_0x9a4da7,0xa);_0x3911f0<_0x3f96b2[_0x25da40(0x27d)]&&(_0x3f96b2[_0x3911f0]=_0x333881[_0x3911f0],addHighlight(_0x3b45ef,_0x49ba61,_0x3911f0));}updatedTables['add'](_0x3b45ef),dispatchTableUpdate(_0x3b45ef);const _0x2fe151=_0x25da40(0x1a5)+_0x22760a[_0x25da40(0x269)]+_0x25da40(0x1d6)+(_0x49ba61+0x1)+_0x25da40(0x27b);log(_0x2fe151,_0x25da40(0x247));const _0x3fb510=getContext();if(_0x3fb510['chat']&&_0x3fb510[_0x25da40(0x245)]['length']>0x0){const _0x3f6e56=_0x3fb510[_0x25da40(0x245)][_0x3fb510[_0x25da40(0x245)][_0x25da40(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x3f6e56)){saveChat();return;}}saveChatDebounced();}export function clearAllTables(){const _0x1a00dd=_0x23b7a8;if(!currentTablesState){log('无法清空:当前表格状态为空。',_0x1a00dd(0x23a));return;}currentTablesState[_0x1a00dd(0x180)]((_0x5d78e6,_0x298878)=>{const _0x298065=_0x1a00dd;_0x5d78e6[_0x298065(0x274)]['length']>0x0&&updatedTables[_0x298065(0x181)](_0x298878),_0x5d78e6[_0x298065(0x274)]=[],_0x5d78e6[_0x298065(0x256)]=[];}),log(_0x1a00dd(0x1ea),_0x1a00dd(0x1fa));const _0x862621=getContext();if(_0x862621[_0x1a00dd(0x245)]&&_0x862621[_0x1a00dd(0x245)][_0x1a00dd(0x27d)]>0x0){const _0x51aefd=_0x862621[_0x1a00dd(0x245)][_0x862621[_0x1a00dd(0x245)][_0x1a00dd(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x51aefd)){saveChat(),log('清空行数据后的状态已强制写入最新消息并立即保存。',_0x1a00dd(0x19a)),toastr[_0x1a00dd(0x19a)](_0x1a00dd(0x262),_0x1a00dd(0x185));return;}}log('无法找到可锚定的消息或保存失败,清空操作可能不会被持久化!',_0x1a00dd(0x23a)),saveChatDebounced();}function checkTableRules(_0x3a13ea){const _0x14125c=_0x23b7a8;let _0x6c56f3=[];_0x3a13ea[_0x14125c(0x189)]&&_0x3a13ea['rowLimitRule']>0x0&&_0x3a13ea[_0x14125c(0x274)]['length']>_0x3a13ea[_0x14125c(0x189)]&&_0x6c56f3['push'](_0x14125c(0x230)+_0x3a13ea[_0x14125c(0x269)]+_0x14125c(0x28e)+_0x3a13ea[_0x14125c(0x189)]+')行,请结合剧情缩减至('+_0x3a13ea[_0x14125c(0x189)]+_0x14125c(0x17b));const _0x2ac1e3=_0x3a13ea['charLimitRules']||{};for(const _0x2d2a40 in _0x2ac1e3){const _0x32c79a=parseInt(_0x2d2a40,0xa),_0x19c245=_0x2ac1e3[_0x32c79a];if(_0x19c245>0x0&&_0x32c79a>=0x0&&_0x32c79a<_0x3a13ea[_0x14125c(0x1e2)][_0x14125c(0x27d)]){const _0x3a20cc=_0x3a13ea[_0x14125c(0x1e2)][_0x32c79a],_0x4bfcc8=[];_0x3a13ea['rows'][_0x14125c(0x180)]((_0xdbf3ae,_0x4d61cb)=>{const _0x517aeb=_0x14125c;if(_0x3a13ea[_0x517aeb(0x256)]&&_0x3a13ea[_0x517aeb(0x256)][_0x4d61cb]===_0x517aeb(0x233))return;const _0x417dc3=_0xdbf3ae[_0x32c79a]||'';_0x417dc3[_0x517aeb(0x27d)]>_0x19c245&&_0x4bfcc8[_0x517aeb(0x257)](_0x4d61cb);});if(_0x4bfcc8[_0x14125c(0x27d)]>0x0){const _0x3163a0=_0x4bfcc8[_0x14125c(0x267)]('、');_0x6c56f3['push'](_0x14125c(0x230)+_0x3a13ea[_0x14125c(0x269)]+_0x14125c(0x1aa)+_0x3163a0+')行('+_0x3a20cc+_0x14125c(0x1d5)+_0x19c245+_0x14125c(0x1df));}}}return _0x6c56f3['join']('\x0a');}export function convertTablesToCsvString(){const _0x5108b3=_0x23b7a8;!currentTablesState&&loadTables();if(!currentTablesState)return'';let _0x305741='';return currentTablesState[_0x5108b3(0x180)]((_0x4bec60,_0x985a78)=>{const _0x400a53=_0x5108b3;_0x305741+=_0x400a53(0x1fd)+_0x985a78+':'+_0x4bec60[_0x400a53(0x269)]+'\x0a',_0x305741+=_0x400a53(0x1d0)+(_0x4bec60['note']||'无')+'\x0a';const _0x202ddf=_0x4bec60[_0x400a53(0x269)][_0x400a53(0x1c1)](/\s/g,'')+'内容';_0x305741+='<'+_0x202ddf+'>\x0a';const _0x1c3fcc=[_0x400a53(0x1a0),..._0x4bec60[_0x400a53(0x1e2)][_0x400a53(0x1bf)]((_0x16e6ca,_0x54c90e)=>_0x54c90e+':'+_0x16e6ca)];_0x305741+='|\x20'+_0x1c3fcc[_0x400a53(0x267)](_0x400a53(0x24c))+_0x400a53(0x1e5),_0x305741+='|'+_0x1c3fcc['map'](()=>'---')['join']('|')+'|\x0a';const _0x54717d=_0x4bec60[_0x400a53(0x274)]['filter']((_0x372530,_0x5bfeb3)=>!_0x4bec60[_0x400a53(0x256)]||_0x4bec60[_0x400a53(0x256)][_0x5bfeb3]!==_0x400a53(0x233));_0x54717d[_0x400a53(0x27d)]===0x0?_0x305741+='(该表当前内容为空)\x0a':_0x4bec60[_0x400a53(0x274)][_0x400a53(0x180)]((_0x49ba36,_0x43252b)=>{const _0x591a84=_0x400a53;if(_0x4bec60[_0x591a84(0x256)]&&_0x4bec60['rowStatuses'][_0x43252b]===_0x591a84(0x233))return;if(Array[_0x591a84(0x234)](_0x49ba36)){const _0x6d9941=_0x49ba36[_0x591a84(0x1bf)](_0x26d579=>{const _0x37954f=_0x591a84,_0x5d8705=_0x26d579===null||_0x26d579===undefined||_0x26d579===''?'未知':String(_0x26d579);return _0x5d8705[_0x37954f(0x1c1)](/\|/g,'|');});_0x305741+='|\x20'+_0x43252b+_0x591a84(0x24c)+_0x6d9941['join'](_0x591a84(0x24c))+'\x20|\x0a';}});const _0x23dbc4=checkTableRules(_0x4bec60);_0x23dbc4&&(_0x305741+=_0x23dbc4+'\x0a'),_0x305741+='\x0a',_0x305741+=_0x400a53(0x1a9)+(_0x4bec60[_0x400a53(0x1c4)]||'允许')+'\x0a',_0x305741+=_0x400a53(0x239)+(_0x4bec60['rule_delete']||'允许')+'\x0a',_0x305741+=_0x400a53(0x20b)+(_0x4bec60['rule_update']||'允许')+'\x0a',_0x985a78{const _0x1487aa=_0x143fb4;_0x21cd8f+='\x0a<'+_0x43c826[_0x1487aa(0x269)]+'>\x0a';const _0x2ff27a='|\x20'+_0x43c826['headers'][_0x1487aa(0x267)]('\x20|\x20')+'\x20|';_0x21cd8f+=_0x2ff27a+'\x0a';const _0xb358ce='|'+_0x43c826[_0x1487aa(0x1e2)]['map'](()=>_0x1487aa(0x275))[_0x1487aa(0x267)]('|')+'|';_0x21cd8f+=_0xb358ce+'\x0a';const _0x4685b7=_0x43c826[_0x1487aa(0x274)]['filter']((_0x240954,_0x5c6352)=>!_0x43c826[_0x1487aa(0x256)]||_0x43c826['rowStatuses'][_0x5c6352]!==_0x1487aa(0x233));_0x4685b7['length']>0x0?_0x4685b7[_0x1487aa(0x180)](_0x3d004d=>{const _0x47c4b7=_0x1487aa;if(Array['isArray'](_0x3d004d)){const _0xde102a=_0x3d004d[_0x47c4b7(0x1bf)](_0x3fa137=>_0x3fa137===null||_0x3fa137===undefined||_0x3fa137===''?'\x20':_0x3fa137['toString']()),_0x249774='|\x20'+_0xde102a['join'](_0x47c4b7(0x24c))+'\x20|';_0x21cd8f+=_0x249774+'\x0a';}}):_0x21cd8f+=_0x1487aa(0x250),_0x21cd8f+='\x0a';}),_0x21cd8f['trim']();}loadTables();export function getBatchFillerRuleTemplate(){const _0x1b4680=_0x23b7a8;return extension_settings[extensionName]?.[_0x1b4680(0x1e4)]??DEFAULT_AI_RULE_TEMPLATE;}export function saveBatchFillerRuleTemplate(_0x4e4f0b){const _0xc3309d=_0x23b7a8;extension_settings[extensionName][_0xc3309d(0x1e4)]=_0x4e4f0b,saveSettingsDebounced();}export function getBatchFillerFlowTemplate(){return extension_settings[extensionName]?.['batch_filler_flow_template']??DEFAULT_AI_FLOW_TEMPLATE;}export function saveBatchFillerFlowTemplate(_0x5dc083){extension_settings[extensionName]['batch_filler_flow_template']=_0x5dc083,saveSettingsDebounced();}export function getAiFlowTemplateForInjection(){return extension_settings[extensionName]?.['amily2_ai_template']??DEFAULT_AI_FLOW_TEMPLATE;}export async function updateTableFromText(_0x58673e){const _0x129c64=_0x23b7a8,_0x2ee324=extension_settings[extensionName];if(_0x2ee324[_0x129c64(0x242)]===![]){log(_0x129c64(0x26e),_0x129c64(0x247));return;}if(!_0x58673e){log(_0x129c64(0x210),_0x129c64(0x1fa));return;}const _0x38c61b=_0x58673e[_0x129c64(0x264)](/([\s\S]*?)<\/Amily2Edit>/);if(!_0x38c61b||!_0x38c61b[0x1]){log('未在AI返回内容中找到有效的\x20\x20指令块。',_0x129c64(0x1fa));return;}let _0x1c1175=_0x38c61b[0x1]['replace'](//g,'')[_0x129c64(0x25b)]();if(!_0x1c1175){log(_0x129c64(0x26b),_0x129c64(0x247));return;}const _0x2aaf26=_0x1c1175['split']('\x0a')[_0x129c64(0x1a7)](_0x463877=>_0x463877[_0x129c64(0x25b)]()!=='');log(_0x129c64(0x19b)+_0x2aaf26[_0x129c64(0x27d)]+_0x129c64(0x26a),_0x129c64(0x247));const _0x17d608={'insertRow':(_0x4b35d5,_0x555d0f)=>{const _0x352356=_0x129c64;log(_0x352356(0x23d)+_0x4b35d5+_0x352356(0x1cb)+JSON[_0x352356(0x1af)](_0x555d0f)+')',_0x352356(0x247)),insertRow(_0x4b35d5,_0x555d0f);},'deleteRow':(_0x255cb5,_0x4f0cd5)=>{const _0x40ab79=_0x129c64;log(_0x40ab79(0x214)+_0x255cb5+_0x40ab79(0x23f)+_0x4f0cd5+')','info'),deleteRow(_0x255cb5,_0x4f0cd5);},'updateRow':(_0x290c6a,_0x128b26,_0x38d810)=>{const _0x3cc94b=_0x129c64;log('执行AI指令:\x20updateRow(tableIndex='+_0x290c6a+_0x3cc94b(0x23f)+_0x128b26+',\x20data='+JSON[_0x3cc94b(0x1af)](_0x38d810)+')',_0x3cc94b(0x247)),updateRow(_0x290c6a,_0x128b26,_0x38d810);}};try{const _0x20c76c=Object[_0x129c64(0x1c7)](async function(){})['constructor'],_0x5bf675=new _0x20c76c('runner',_0x129c64(0x252)+_0x1c1175+_0x129c64(0x1c5));await _0x5bf675(_0x17d608),log(_0x129c64(0x24a),'success'),toastr[_0x129c64(0x19a)](_0x129c64(0x1ab),_0x129c64(0x1fb)),document[_0x129c64(0x260)](new CustomEvent('amily2-force-ui-reload'));}catch(_0xf4cd12){log('执行AI指令时发生错误:\x20'+_0xf4cd12[_0x129c64(0x270)],_0x129c64(0x23a)),toastr[_0x129c64(0x23a)](_0x129c64(0x1ba)+_0xf4cd12[_0x129c64(0x270)],_0x129c64(0x21d));}}export function saveAiTemplate(_0x183237){const _0x4ac927=_0x23b7a8;extension_settings[extensionName][_0x4ac927(0x258)]=_0x183237,saveSettingsDebounced();}export function getAiTemplate(){return getAiFlowTemplateForInjection();}function exportPresetBase(_0x60258=![]){const _0x27512a=_0x23b7a8;if(!currentTablesState){log('无法导出:当前表格状态为空。',_0x27512a(0x23a)),toastr[_0x27512a(0x23a)]('没有可导出的表格数据。');return;}let _0x29ded3,_0x429d19,_0x43d0f2;_0x60258?(_0x29ded3=JSON['parse'](JSON[_0x27512a(0x1af)](currentTablesState)),_0x429d19=_0x27512a(0x26f),_0x43d0f2=_0x27512a(0x229)):(_0x29ded3=currentTablesState[_0x27512a(0x1bf)](_0x50c7fc=>({'name':_0x50c7fc['name'],'headers':_0x50c7fc[_0x27512a(0x1e2)],'columnWidths':_0x50c7fc['columnWidths']||[],'note':_0x50c7fc['note'],'rule_add':_0x50c7fc[_0x27512a(0x1c4)],'rule_delete':_0x50c7fc[_0x27512a(0x17d)],'rule_update':_0x50c7fc[_0x27512a(0x25d)],'charLimitRules':_0x50c7fc[_0x27512a(0x1f8)]||{},'rowLimitRule':_0x50c7fc[_0x27512a(0x189)]||0x0,'rows':[],'rowStatuses':[]})),_0x429d19='Amily2-Table-Preset-v2.0-clean',_0x43d0f2=_0x27512a(0x188));const _0x390457={'version':_0x27512a(0x18f),'batchFillerRuleTemplate':getBatchFillerRuleTemplate(),'batchFillerFlowTemplate':getBatchFillerFlowTemplate(),'tables':_0x29ded3},_0x1c7d67=new Blob([JSON[_0x27512a(0x1af)](_0x390457,null,0x2)],{'type':_0x27512a(0x238)}),_0x222943=URL['createObjectURL'](_0x1c7d67),_0x2e9053=document[_0x27512a(0x1ed)]('a');_0x2e9053[_0x27512a(0x1b8)]=_0x222943,_0x2e9053[_0x27512a(0x182)]=_0x27512a(0x213)+_0x43d0f2+'-'+new Date()['toISOString']()['slice'](0x0,0xa)+_0x27512a(0x1f2),document[_0x27512a(0x1db)]['appendChild'](_0x2e9053),_0x2e9053['click'](),document[_0x27512a(0x1db)][_0x27512a(0x220)](_0x2e9053),URL[_0x27512a(0x196)](_0x222943),log('【'+_0x43d0f2+_0x27512a(0x27e),'success'),toastr[_0x27512a(0x19a)]('【'+_0x43d0f2+_0x27512a(0x1b9),_0x27512a(0x1d8));}export function exportPreset(){exportPresetBase(![]);}export function exportPresetFull(){exportPresetBase(!![]);}export function importPreset(_0x1db68f){const _0x1ee422=_0x23b7a8,_0x1bf0bf=document[_0x1ee422(0x1ed)](_0x1ee422(0x261));_0x1bf0bf['type']=_0x1ee422(0x20d),_0x1bf0bf[_0x1ee422(0x208)]=_0x1ee422(0x1f2),_0x1bf0bf[_0x1ee422(0x19e)]=_0x21013b=>{const _0x436c5d=_0x1ee422,_0x1c332a=_0x21013b[_0x436c5d(0x193)][_0x436c5d(0x19d)][0x0];if(!_0x1c332a)return;const _0x22d369=new FileReader();_0x22d369[_0x436c5d(0x1ce)]=_0x26e953=>{const _0x6ef55=_0x436c5d;try{const _0x4699f8=JSON[_0x6ef55(0x284)](_0x26e953[_0x6ef55(0x193)][_0x6ef55(0x1f6)]);if(!_0x4699f8[_0x6ef55(0x282)]||!Array[_0x6ef55(0x234)](_0x4699f8[_0x6ef55(0x184)]))throw new Error(_0x6ef55(0x285));const _0x34c983=window[_0x6ef55(0x1de)](_0x6ef55(0x1f4));if(!_0x34c983){log('用户取消了导入操作。',_0x6ef55(0x247)),toastr['info']('导入操作已取消。');return;}if(_0x4699f8[_0x6ef55(0x282)]===_0x6ef55(0x18f))saveBatchFillerRuleTemplate(_0x4699f8[_0x6ef55(0x254)]||''),saveBatchFillerFlowTemplate(_0x4699f8[_0x6ef55(0x25f)]||''),saveAiTemplate(_0x4699f8['injectionFlowTemplate']||'');else{if(_0x4699f8[_0x6ef55(0x217)]!==undefined&&_0x4699f8['aiFlowTemplate']!==undefined)saveBatchFillerRuleTemplate(_0x4699f8[_0x6ef55(0x217)]||''),saveBatchFillerFlowTemplate(_0x4699f8[_0x6ef55(0x1cc)]||''),saveAiTemplate(_0x4699f8[_0x6ef55(0x1cc)]||'');else _0x4699f8[_0x6ef55(0x206)]?(saveBatchFillerRuleTemplate(''),saveBatchFillerFlowTemplate(_0x4699f8[_0x6ef55(0x206)]||''),saveAiTemplate(_0x4699f8[_0x6ef55(0x206)]||'')):log('导入的预设中缺少指令模板字段,模板将不会被更新。',_0x6ef55(0x1fa));}const _0x4e40a2=_0x4699f8[_0x6ef55(0x184)];_0x4e40a2[_0x6ef55(0x180)](_0x1781ca=>{const _0x145c76=_0x6ef55;if(_0x1781ca[_0x145c76(0x269)]===undefined||_0x1781ca['headers']===undefined||_0x1781ca['rows']===undefined)throw new Error(_0x145c76(0x205)+JSON['stringify'](_0x1781ca));if(_0x1781ca[_0x145c76(0x288)]===undefined)_0x1781ca['note']='无';if(_0x1781ca[_0x145c76(0x1c4)]===undefined)_0x1781ca[_0x145c76(0x1c4)]='允许';if(_0x1781ca[_0x145c76(0x17d)]===undefined)_0x1781ca[_0x145c76(0x17d)]='允许';if(_0x1781ca[_0x145c76(0x25d)]===undefined)_0x1781ca['rule_update']='允许';if(_0x1781ca[_0x145c76(0x27f)]&&!_0x1781ca[_0x145c76(0x1f8)])_0x1781ca[_0x145c76(0x1f8)]={},_0x1781ca[_0x145c76(0x27f)]['columnIndex']!==-0x1&&_0x1781ca[_0x145c76(0x27f)][_0x145c76(0x1ca)]>0x0&&(_0x1781ca['charLimitRules'][_0x1781ca[_0x145c76(0x27f)][_0x145c76(0x1a1)]]=_0x1781ca[_0x145c76(0x27f)][_0x145c76(0x1ca)]);else _0x1781ca['charLimitRules']===undefined&&(_0x1781ca[_0x145c76(0x1f8)]={});delete _0x1781ca[_0x145c76(0x27f)],!_0x1781ca[_0x145c76(0x256)]&&(_0x1781ca[_0x145c76(0x256)]=Array(_0x1781ca['rows'][_0x145c76(0x27d)])[_0x145c76(0x1e3)]('normal')),_0x1781ca[_0x145c76(0x189)]===undefined&&(_0x1781ca[_0x145c76(0x189)]=0x0),_0x1781ca[_0x145c76(0x216)]===undefined&&(_0x1781ca[_0x145c76(0x216)]=[]);}),setMemoryState(_0x4e40a2);const _0x2bfe52=getContext();if(_0x2bfe52[_0x6ef55(0x245)]&&_0x2bfe52[_0x6ef55(0x245)][_0x6ef55(0x27d)]>0x0){const _0x32df04=_0x2bfe52[_0x6ef55(0x245)][_0x2bfe52[_0x6ef55(0x245)][_0x6ef55(0x27d)]-0x1];saveStateToMessage(getMemoryState(),_0x32df04)&&(saveChat(),log(_0x6ef55(0x22f),_0x6ef55(0x19a)));}else saveChatDebounced();log(_0x6ef55(0x1f7),_0x6ef55(0x19a)),toastr[_0x6ef55(0x19a)](_0x6ef55(0x224),_0x6ef55(0x24d)),typeof _0x1db68f===_0x6ef55(0x21e)&&_0x1db68f();}catch(_0x8f0aac){log(_0x6ef55(0x1bb)+_0x8f0aac[_0x6ef55(0x270)],_0x6ef55(0x23a)),toastr[_0x6ef55(0x23a)](_0x6ef55(0x289)+_0x8f0aac['message'],'错误');}},_0x22d369[_0x436c5d(0x1d2)](_0x1c332a);},_0x1bf0bf[_0x1ee422(0x211)]();}export async function rollbackState(){const _0x5dc201=_0x23b7a8,_0x20721f=getContext();if(!_0x20721f||!_0x20721f['chat']||_0x20721f['chat'][_0x5dc201(0x27d)]<0x2)return log(_0x5dc201(0x283),_0x5dc201(0x1fa)),toastr['warning'](_0x5dc201(0x1ae)),![];const _0x194779=_0x20721f[_0x5dc201(0x245)],_0x3e913a=_0x194779[_0x5dc201(0x27d)]-0x1,_0x1ae9de=_0x194779[_0x3e913a];log(_0x5dc201(0x22d)+(_0x3e913a-0x1)+'\x20条消息加载表格状态...',_0x5dc201(0x247));const _0x18a1ae=loadTables(_0x3e913a);if(!_0x18a1ae)return log(_0x5dc201(0x212),'error'),toastr['error'](_0x5dc201(0x1eb)),![];setMemoryState(_0x18a1ae);if(saveStateToMessage(_0x18a1ae,_0x1ae9de))await saveChat(),log(_0x5dc201(0x223),'success');else return log(_0x5dc201(0x277),_0x5dc201(0x23a)),toastr['error'](_0x5dc201(0x22c)),![];return renderTables(),updateOrInsertTableInChat(),log(_0x5dc201(0x25c),'info'),!![];}export async function rollbackAndRefill(){const _0x329b68=_0x23b7a8,_0x438e28=extension_settings[extensionName];if(_0x438e28[_0x329b68(0x242)]===![]){log('表格系统总开关已关闭,跳过回退填表。','info'),toastr[_0x329b68(0x247)]('表格系统总开关已关闭,无法执行回退填表。');return;}toastr[_0x329b68(0x247)](_0x329b68(0x204));const _0x464e3a=await rollbackState();if(!_0x464e3a){toastr[_0x329b68(0x23a)](_0x329b68(0x1b6));return;}toastr['success']('状态回退成功,准备重新填表...');const _0x3602d5=getContext(),_0x27ece3=_0x3602d5[_0x329b68(0x245)][_0x3602d5[_0x329b68(0x245)][_0x329b68(0x27d)]-0x1];try{await fillWithSecondaryApi(_0x27ece3,!![]),log('回退并重新填表操作完成。',_0x329b68(0x19a));}catch(_0x1eb2c5){log('回退重填过程中发生错误:\x20'+_0x1eb2c5[_0x329b68(0x270)],_0x329b68(0x23a)),toastr['error']('重新填表失败:\x20'+_0x1eb2c5[_0x329b68(0x270)]);}}function _0x1fff(_0x5107bf,_0x1fcc1a){const _0x47f574=_0x47f5();return _0x1fff=function(_0x1fff76,_0x450603){_0x1fff76=_0x1fff76-0x17a;let _0x1a942b=_0x47f574[_0x1fff76];return _0x1a942b;},_0x1fff(_0x5107bf,_0x1fcc1a);}export function updateColumnWidth(_0x267cb8,_0x3cf5e5,_0x4d1bab){const _0x537dbb=_0x23b7a8;if(!currentTablesState||!currentTablesState[_0x267cb8])return;const _0x3cae1a=currentTablesState[_0x267cb8];!_0x3cae1a[_0x537dbb(0x216)]&&(_0x3cae1a[_0x537dbb(0x216)]=[]);while(_0x3cae1a['columnWidths'][_0x537dbb(0x27d)]<_0x3cae1a[_0x537dbb(0x1e2)][_0x537dbb(0x27d)]){_0x3cae1a[_0x537dbb(0x216)][_0x537dbb(0x257)](null);}_0x3cae1a[_0x537dbb(0x216)][_0x3cf5e5]=_0x4d1bab;const _0x5565f6=getContext();if(_0x5565f6[_0x537dbb(0x245)]&&_0x5565f6['chat'][_0x537dbb(0x27d)]>0x0){const _0x234d2d=_0x5565f6['chat'][_0x5565f6[_0x537dbb(0x245)][_0x537dbb(0x27d)]-0x1];if(saveStateToMessage(currentTablesState,_0x234d2d)){saveChat();return;}}saveChatDebounced();}export function isCurrentTablesEmpty(){const _0x4dcf3f=_0x23b7a8,_0x16129e=getMemoryState();if(!_0x16129e||_0x16129e[_0x4dcf3f(0x27d)]===0x0)return!![];return _0x16129e[_0x4dcf3f(0x191)](_0x125d81=>!_0x125d81['rows']||_0x125d81[_0x4dcf3f(0x274)][_0x4dcf3f(0x27d)]===0x0);}export function clearGlobalPreset(){const _0x1df5ec=_0x23b7a8;if(extension_settings[extensionName]&&extension_settings[extensionName][_0x1df5ec(0x19c)]){const _0x354bd7=window['confirm'](_0x1df5ec(0x17f));_0x354bd7?(delete extension_settings[extensionName][_0x1df5ec(0x19c)],saveSettingsDebounced(),log(_0x1df5ec(0x20f),'success'),toastr[_0x1df5ec(0x19a)]('全局预设已清除,新聊天将使用默认模板。',_0x1df5ec(0x21b))):(log(_0x1df5ec(0x218),_0x1df5ec(0x247)),toastr['info']('操作已取消。'));}else log(_0x1df5ec(0x276),_0x1df5ec(0x247)),toastr[_0x1df5ec(0x247)](_0x1df5ec(0x21f),'提示');}export function importGlobalPreset(_0x3f35dd){const _0x5adf0c=_0x23b7a8,_0x474d67=document['createElement'](_0x5adf0c(0x261));_0x474d67[_0x5adf0c(0x1e1)]='file',_0x474d67[_0x5adf0c(0x208)]=_0x5adf0c(0x1f2),_0x474d67['onchange']=_0x402fec=>{const _0x53d87d=_0x5adf0c,_0xe684e7=_0x402fec[_0x53d87d(0x193)]['files'][0x0];if(!_0xe684e7)return;const _0x33c707=new FileReader();_0x33c707[_0x53d87d(0x1ce)]=_0x4e0125=>{const _0xd2d5d1=_0x53d87d;try{const _0x5018fa=JSON[_0xd2d5d1(0x284)](_0x4e0125['target'][_0xd2d5d1(0x1f6)]);if(!_0x5018fa[_0xd2d5d1(0x282)]||!Array['isArray'](_0x5018fa['tables']))throw new Error(_0xd2d5d1(0x285));const _0x4e6a29=window[_0xd2d5d1(0x1de)](_0xd2d5d1(0x28d));if(!_0x4e6a29){log(_0xd2d5d1(0x1c6),_0xd2d5d1(0x247)),toastr['info'](_0xd2d5d1(0x248));return;}const _0x3aca9e=_0x5018fa[_0xd2d5d1(0x184)][_0xd2d5d1(0x1bf)](_0x424c46=>({'name':_0x424c46[_0xd2d5d1(0x269)],'headers':_0x424c46['headers'],'note':_0x424c46[_0xd2d5d1(0x288)],'rule_add':_0x424c46[_0xd2d5d1(0x1c4)],'rule_delete':_0x424c46[_0xd2d5d1(0x17d)],'rule_update':_0x424c46[_0xd2d5d1(0x25d)],'rows':[]}));!extension_settings[extensionName]&&(extension_settings[extensionName]={});extension_settings[extensionName][_0xd2d5d1(0x19c)]={'version':_0x5018fa['version'],'tables':_0x3aca9e,'batchFillerRuleTemplate':_0x5018fa[_0xd2d5d1(0x254)],'batchFillerFlowTemplate':_0x5018fa[_0xd2d5d1(0x25f)]},saveSettingsDebounced();if(_0x5018fa['version']===_0xd2d5d1(0x18f))saveBatchFillerRuleTemplate(_0x5018fa[_0xd2d5d1(0x254)]||''),saveBatchFillerFlowTemplate(_0x5018fa[_0xd2d5d1(0x25f)]||''),saveAiTemplate(_0x5018fa[_0xd2d5d1(0x24f)]||'');else{if(_0x5018fa[_0xd2d5d1(0x217)]!==undefined&&_0x5018fa['aiFlowTemplate']!==undefined)saveBatchFillerRuleTemplate(_0x5018fa[_0xd2d5d1(0x217)]||''),saveBatchFillerFlowTemplate(_0x5018fa[_0xd2d5d1(0x1cc)]||''),saveAiTemplate(_0x5018fa[_0xd2d5d1(0x1cc)]||'');else _0x5018fa[_0xd2d5d1(0x206)]&&(saveBatchFillerRuleTemplate(''),saveBatchFillerFlowTemplate(_0x5018fa[_0xd2d5d1(0x206)]||''),saveAiTemplate(_0x5018fa[_0xd2d5d1(0x206)]||''));}log(_0xd2d5d1(0x197),_0xd2d5d1(0x19a)),toastr[_0xd2d5d1(0x19a)](_0xd2d5d1(0x22b),_0xd2d5d1(0x22a)),typeof _0x3f35dd===_0xd2d5d1(0x21e)&&_0x3f35dd();}catch(_0x25ecb2){log(_0xd2d5d1(0x286)+_0x25ecb2[_0xd2d5d1(0x270)],'error'),toastr[_0xd2d5d1(0x23a)](_0xd2d5d1(0x289)+_0x25ecb2['message'],'错误');}},_0x33c707[_0x53d87d(0x1d2)](_0xe684e7);},_0x474d67[_0x5adf0c(0x211)]();} From d2048089c144dbb3693e62291b65d753697e4f1a Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:03:46 +0800 Subject: [PATCH 26/56] Update settings.js --- core/table-system/settings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/core/table-system/settings.js b/core/table-system/settings.js index f707e44..79b3a29 100644 --- a/core/table-system/settings.js +++ b/core/table-system/settings.js @@ -147,4 +147,5 @@ export const tableSystemDefaultSettings = { batch_filler_flow_template: DEFAULT_AI_FLOW_TEMPLATE, filling_mode: 'main-api', + context_optimization_enabled: true, // 【V144.0】上下文优化(世界书合并)开关 }; From 81d9c572907860d77a6c053cd81f7789d3b34fef Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:04:26 +0800 Subject: [PATCH 27/56] Update injector.js --- core/table-system/injector.js | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/core/table-system/injector.js b/core/table-system/injector.js index 4808ce0..7d7af4e 100644 --- a/core/table-system/injector.js +++ b/core/table-system/injector.js @@ -90,15 +90,34 @@ export async function injectTableData(chat, contextSize, abort, type) { return; } - if (!settings.table_injection_enabled) { - setExtensionPrompt(INJECTION_KEY, '', 0, 0, false, 'SYSTEM'); - return; - } + try { - const injectionContent = generateTableContent(); + let injectionContent = generateTableContent(); - if (!injectionContent) { + const optimizationEnabled = settings.context_optimization_enabled !== false; // 默认为 true + + if (optimizationEnabled) { + // 宏 Amily2Flush 会检查缓冲区,如果有内容则输出合并后的表格,否则输出空字符串 + if (!injectionContent.includes('{{Amily2Flush}}')) { + // 确保有换行符分隔 + injectionContent += '\n{{Amily2Flush}}'; + } + } + + if (!settings.table_injection_enabled) { + if (optimizationEnabled) { + // 如果禁用了表格注入,但启用了上下文优化,则仅注入宏 + injectionContent = '{{Amily2Flush}}'; + } else { + // 如果都禁用了,则清空 Prompt + setExtensionPrompt(INJECTION_KEY, '', 0, 0, false, 'SYSTEM'); + return; + } + } + + if (!injectionContent || injectionContent.trim() === '') { + // 理论上不会走到这里,除非宏都没了 setExtensionPrompt(INJECTION_KEY, '', 0, 0, false, 'SYSTEM'); return; } From 6941f87c7d5258aa2ac48c306651c38979eb4daa Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:04:42 +0800 Subject: [PATCH 28/56] Update secondary-filler.js --- core/table-system/secondary-filler.js | 89 ++++++++++++++++++++------- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/core/table-system/secondary-filler.js b/core/table-system/secondary-filler.js index 16fba86..2a2fa89 100644 --- a/core/table-system/secondary-filler.js +++ b/core/table-system/secondary-filler.js @@ -96,9 +96,47 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) { } try { - let textToProcess = latestMessage.mes; + // --- 延迟填表逻辑 (V151.0) --- + const delay = parseInt(settings.secondary_filler_delay || 0, 10); + const chat = context.chat; + let targetMessage; + let targetIndex; + + if (delay > 0) { + // 如果有延迟,我们需要找到“延迟前”的那条消息 + // chat.length - 1 是当前最新消息的索引 + // 目标索引 = (chat.length - 1) - delay + targetIndex = (chat.length - 1) - delay; + + if (targetIndex < 0) { + console.log(`[Amily2-副API] 延迟模式(${delay}): 历史楼层不足,跳过填表。`); + return; + } + + targetMessage = chat[targetIndex]; + + // 检查目标消息是否是AI消息(通常填表针对AI回复) + // 如果目标消息是用户的消息,而我们只想填AI的表,这可能是一个问题。 + // 但如果用户设置了延迟,他们可能期望每隔几层填一次,或者只填AI层。 + // 现有的 `fillWithSecondaryApi` 是在 `CHAT_COMPLETION` 后调用的,此时最新消息通常是AI消息。 + // 如果延迟是奇数(例如1),目标消息可能是用户消息。 + // 假设延迟是偶数(例如2),目标消息是上一条AI消息。 + + // 为了安全起见,如果目标消息是用户消息,我们可能应该跳过?或者依然填表(记录用户消息的表)? + // 目前表系统通常绑定在AI回复上。 + // 如果 targetMessage.is_user,我们尝试往回找最近的一条AI消息? + // 不,这会乱套。严格按照楼层索引来。 + + console.log(`[Amily2-副API] 延迟模式生效: 当前总楼层 ${chat.length}, 延迟 ${delay}, 目标楼层索引 ${targetIndex}`); + } else { + // 无延迟,使用传入的最新消息 + targetMessage = latestMessage; + targetIndex = chat.length - 1; + } + + let textToProcess = targetMessage.mes; if (!textToProcess || !textToProcess.trim()) { - console.log("[Amily2-副API] 消息内容为空,跳过填表任务。"); + console.log("[Amily2-副API] 目标消息内容为空,跳过填表任务。"); return; } @@ -120,15 +158,15 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) { return; } - const context = getContext(); const userName = context.name1 || '用户'; const characterName = context.name2 || '角色'; - const chat = context.chat; - + // 寻找目标消息之前的最后一条用户消息 let lastUserMessage = null; let lastUserMessageIndex = -1; - for (let i = chat.length - 2; i >= 0; i--) { + + // 从 targetIndex - 1 开始往前找 + for (let i = targetIndex - 1; i >= 0; i--) { if (chat[i].is_user) { lastUserMessage = chat[i]; lastUserMessageIndex = i; @@ -136,8 +174,8 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) { } } - const currentInteractionContent = (lastUserMessage ? `${userName}(用户)最新消息:${lastUserMessage.mes}\n` : '') + - `${characterName}(AI)最新消息,[核心处理内容]:${textToProcess}`; + const currentInteractionContent = (lastUserMessage ? `${userName}(用户)消息:${lastUserMessage.mes}\n` : '') + + `${characterName}(AI)消息,[核心处理内容]:${textToProcess}`; let mixedOrder; try { @@ -185,7 +223,10 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) { const historyMessagesToGet = contextReadingLevel > 2 ? contextReadingLevel - 2 : 0; if (historyMessagesToGet > 0) { - const historyEndIndex = lastUserMessageIndex !== -1 ? lastUserMessageIndex : chat.length - 1; + // 这里的 historyEndIndex 应该是我们上面计算出的 lastUserMessageIndex + // 如果没找到用户消息,则使用 targetIndex - 1 + const historyEndIndex = lastUserMessageIndex !== -1 ? lastUserMessageIndex : Math.max(0, targetIndex - 1); + const historyContext = await getHistoryContext(historyMessagesToGet, historyEndIndex, tagsToExtract, exclusionRules); if (historyContext) { messages.push({ role: "system", content: historyContext }); @@ -205,12 +246,10 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) { } } - const fillingMode = settings.filling_mode || 'main-api'; - if (fillingMode === 'secondary-api') { - console.groupCollapsed(`[Amily2 分步填表] 即将发送至 API 的内容`); - console.dir(messages); - console.groupEnd(); - } + console.groupCollapsed(`[Amily2 分步填表] 即将发送至 API 的内容`); + console.log("发送给AI的提示词: ", JSON.stringify(messages, null, 2)); + console.dir(messages); + console.groupEnd(); let rawContent; if (settings.nccsEnabled) { @@ -230,14 +269,20 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) { updateTableFromText(rawContent); - const currentContext = getContext(); - if (currentContext.chat && currentContext.chat.length > 0) { - const lastMessage = currentContext.chat[currentContext.chat.length - 1]; - if (saveStateToMessage(getMemoryState(), lastMessage)) { - renderTables(); - updateOrInsertTableInChat(); - } + // 保存到目标消息 + if (saveStateToMessage(getMemoryState(), targetMessage)) { + // 如果目标消息不是最新消息,我们可能需要重新渲染整个聊天记录或者特定消息的表格? + // renderTables() 通常重新渲染所有可见表格 + renderTables(); + // updateOrInsertTableInChat 通常插入到DOM中 + // 我们可能需要传递 targetIndex 给 updateOrInsertTableInChat 吗? + // 目前 updateOrInsertTableInChat 似乎是查找 .mes_text 并插入。 + // 如果我们更新了历史消息的数据,我们需要确保 DOM 也更新。 + // 由于 SillyTavern 的消息渲染机制,如果消息已经在屏幕上,仅仅修改数据可能不会自动更新 DOM。 + // 但是 renderTables() 应该会处理这个。 + updateOrInsertTableInChat(); } + saveChat(); } catch (error) { From d269924531d4e53d07456ab4841f1116aa7f3939 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:05:39 +0800 Subject: [PATCH 29/56] Add files via upload --- core/super-memory/bindings.js | 89 +++++++++++ core/super-memory/index.html | 85 ++++++++++ core/super-memory/lorebook-bridge.js | 228 +++++++++++++++++++++++++++ core/super-memory/manager.js | 203 ++++++++++++++++++++++++ core/super-memory/smart-indexer.js | 77 +++++++++ 5 files changed, 682 insertions(+) create mode 100644 core/super-memory/bindings.js create mode 100644 core/super-memory/index.html create mode 100644 core/super-memory/lorebook-bridge.js create mode 100644 core/super-memory/manager.js create mode 100644 core/super-memory/smart-indexer.js diff --git a/core/super-memory/bindings.js b/core/super-memory/bindings.js new file mode 100644 index 0000000..591de3f --- /dev/null +++ b/core/super-memory/bindings.js @@ -0,0 +1,89 @@ +import { extensionName } from "../../utils/settings.js"; +import { extension_settings } from "/scripts/extensions.js"; +import { saveSettingsDebounced } from "/script.js"; +import { initializeSuperMemory } from "./manager.js"; + +export function bindSuperMemoryEvents() { + const panel = $('#amily2_super_memory_panel'); + if (panel.length === 0) return; + + panel.on('click', '.sm-nav-item', function() { + const tab = $(this).data('tab'); + + panel.find('.sm-nav-item').removeClass('active'); + $(this).addClass('active'); + + panel.find('.sm-tab-pane').removeClass('active'); + panel.find(`#sm-${tab}-tab`).addClass('active'); + }); + + panel.on('change', 'input[type="checkbox"]', function() { + if (!extension_settings[extensionName]) extension_settings[extensionName] = {}; + + const id = this.id; + let key = null; + + if (id === 'sm-system-enabled') key = 'super_memory_enabled'; + if (id === 'sm-bridge-enabled') key = 'superMemory_bridgeEnabled'; + + if (key) { + extension_settings[extensionName][key] = this.checked; + saveSettingsDebounced(); + console.log(`[Amily2-SuperMemory] Setting updated: ${key} = ${this.checked}`); + } + }); + + panel.on('change', 'input[type="number"], input[type="text"]', function() { + if (!extension_settings[extensionName]) extension_settings[extensionName] = {}; + + const id = this.id; + let key = null; + + if (id === 'sm-index-depth') key = 'superMemory_indexDepth'; + if (id === 'sm-detail-depth') key = 'superMemory_detailDepth'; + + if (key) { + let value = this.value; + if (this.type === 'number') value = parseInt(value, 10); + + extension_settings[extensionName][key] = value; + saveSettingsDebounced(); + console.log(`[Amily2-SuperMemory] Setting updated: ${key} = ${value}`); + } + }); + + loadSuperMemorySettings(); + + console.log('[Amily2-SuperMemory] Events bound successfully.'); +} + +function loadSuperMemorySettings() { + const settings = extension_settings[extensionName] || {}; + + $('#sm-system-enabled').prop('checked', settings.super_memory_enabled ?? false); + $('#sm-bridge-enabled').prop('checked', settings.superMemory_bridgeEnabled ?? false); + + $('#sm-index-depth').val(settings.superMemory_indexDepth ?? 0); + $('#sm-detail-depth').val(settings.superMemory_detailDepth ?? 2); +} + +window.sm_initializeSystem = async function() { + toastr.info('超级记忆系统正在初始化...'); + $('#sm-system-status').text('初始化中...').css('color', 'yellow'); + + try { + await initializeSuperMemory(); + toastr.success('超级记忆系统初始化完成。'); + } catch (error) { + console.error(error); + toastr.error('初始化失败,请检查控制台。'); + $('#sm-system-status').text('错误').css('color', 'red'); + } +}; + +window.sm_purgeMemory = function() { + if (confirm('您确定要清空所有超级记忆数据吗?')) { + toastr.warning('记忆已清空。'); + $('#sm-system-status').text('未初始化').css('color', '#ffc107'); + } +}; diff --git a/core/super-memory/index.html b/core/super-memory/index.html new file mode 100644 index 0000000..dcb5240 --- /dev/null +++ b/core/super-memory/index.html @@ -0,0 +1,85 @@ +
+
+ 灵台 · 记忆中枢 +
+ +
+
+ +
+
+

究极长期记忆 (Super Memory)

+

欢迎来到 Amily2 的核心记忆中枢。这里掌管着世界的记忆,连接着每一个角色、每一个物品与每一段传说。

+

通过“三级金字塔”注入策略,我们将实现极致的 Token 节省与无限的记忆深度。

+
+ +
+ + + +
+ +
+ +
+
+ 状态监控 +
+ + 未初始化 +
+
+ + 0 条目 +
+
+ + 0 条目 +
+
+ + +
+
+
+ + +
+
+ 记忆策略配置 +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ 关联网络 (The Mesh) +

关联触发逻辑正在开发中...

+
+
+
+
diff --git a/core/super-memory/lorebook-bridge.js b/core/super-memory/lorebook-bridge.js new file mode 100644 index 0000000..dfdcfcf --- /dev/null +++ b/core/super-memory/lorebook-bridge.js @@ -0,0 +1,228 @@ +import { amilyHelper } from "../tavern-helper/main.js"; +import { extension_settings, getContext } from "/scripts/extensions.js"; +import { extensionName } from "../../utils/settings.js"; +import { this_chid, characters } from "/script.js"; + +function getMemoryBookName() { + let charName = "Global"; + const context = getContext(); + + if (this_chid !== undefined && characters[this_chid]) { + charName = characters[this_chid].name; + } else if (context.characterId !== undefined && characters[context.characterId]) { + charName = characters[context.characterId].name; + } + + const safeCharName = charName.replace(/[<>:"/\\|?*]/g, '_'); + return `Amily2_Memory_${safeCharName}`; +} + +export async function syncToLorebook(tableName, data, indexText, role, headers, rowStatuses, depth = 100) { + console.log(`[Amily2-Bridge] 开始同步表格: ${tableName} (Depth: ${depth})`); + + await ensureMemoryBook(); + + const bookName = getMemoryBookName(); + + let entries = await amilyHelper.getLorebookEntries(bookName); + if (!entries) entries = []; + + const entriesToUpdate = []; + const entriesToCreate = []; + + const processEntry = (comment, keys, content, type = 'selective', enabled = true) => { + const existingEntry = entries.find(e => e.comment === comment); + if (existingEntry) { + existingEntry.content = content; + existingEntry.key = keys; + existingEntry.order = depth; + + if (type === 'constant') { + existingEntry.constant = true; + } else { + existingEntry.constant = false; + } + if (existingEntry.enabled !== undefined) { + existingEntry.enabled = enabled; + } else { + existingEntry.disable = !enabled; + } + entriesToUpdate.push(existingEntry); + } else { + entriesToCreate.push({ + comment: comment, + keys: keys, + content: content, + type: type, + position: 1, + order: depth, + enabled: enabled + }); + } + }; + + if (role === 'database') { + const indexKey = [`Amily_Index_${tableName}`]; + const indexComment = `[Amily2] Index for ${tableName}`; + let indexContent = `【${tableName} 索引】\n${indexText.trim()}`; + + if (tableName.includes("大纲")) { + indexContent += `\n\n【Amily2-前瞻性预测指令】\n为了实现“提前一轮触发绿灯世界书”的高级记忆回流,请在生成本轮回复时,根据当前剧情走向,**大胆预测并自然提及**下一轮可能出现的索引编码。可自行增加一个标签并使用html注释掉该编码。这将激活系统的预加载机制,确保剧情发展的连贯性。\n`; + } + + processEntry(indexComment, indexKey, indexContent, 'constant'); + } + + data.forEach((row, index) => { + if (!row || row.length === 0) return; + + const primaryVal = row[0]; + + if (!primaryVal) return; + + const isPendingDeletion = rowStatuses && rowStatuses[index] === 'pending-deletion'; + const isEnabled = !isPendingDeletion; + + const triggerKeys = [primaryVal]; + const entryComment = `[Amily2] Detail: ${tableName} - ${primaryVal}`; + + let finalHeaders = headers; + if (!finalHeaders || finalHeaders.length < row.length) { + finalHeaders = []; + for(let i=0; i 0) { + console.log(`[Amily2-Bridge] 清理 ${entriesToDelete.length} 个废弃条目...`); + await amilyHelper.deleteLorebookEntries(bookName, entriesToDelete); + } + + if (entriesToUpdate.length > 0) { + console.log(`[Amily2-Bridge] 更新 ${entriesToUpdate.length} 个条目...`); + await amilyHelper.setLorebookEntries(bookName, entriesToUpdate); + } + + if (entriesToCreate.length > 0) { + console.log(`[Amily2-Bridge] 创建 ${entriesToCreate.length} 个新条目...`); + await amilyHelper.createLorebookEntries(bookName, entriesToCreate); + } + console.log(`[Amily2-Bridge] 同步完成: ${tableName}`); +} + +export async function ensureMemoryBook() { + const bookName = getMemoryBookName(); + const books = await amilyHelper.getLorebooks(); + + if (!books.includes(bookName)) { + console.log(`[Amily2-Bridge] 创建角色专用世界书: ${bookName}`); + await amilyHelper.createLorebook(bookName); + } + + const settings = extension_settings[extensionName] || {}; + const shouldBind = settings.superMemory_autoBind === true; + + if (shouldBind && bookName.startsWith("Amily2_Memory_") && bookName !== "Amily2_Memory_Global") { + console.log(`[Amily2-Bridge] 自动绑定世界书到当前角色...`); + await amilyHelper.bindLorebookToCharacter(bookName); + } else if (!shouldBind) { + console.log(`[Amily2-Bridge] 跳过自动绑定 (设置已禁用)。请手动在世界书管理中激活: ${bookName}`); + } +} + +function createEntryTemplate() { + return { + uid: Date.now() + Math.floor(Math.random() * 1000), + key: [], + keysecondary: [], + comment: "", + content: "", + constant: false, + selective: true, + order: 100, + position: 1, + enabled: true + }; +} + +export async function updateTransientHint(hint) { + console.log('[Amily2-Bridge] 更新瞬时记忆提示...'); + await ensureMemoryBook(); + const bookName = getMemoryBookName(); + + const comment = "[Amily2] Active Memory Hint"; + const content = hint ? `\n\n【重要记忆回响】\n${hint}\n\n` : ""; + const enabled = !!hint; + + let entries = await amilyHelper.getLorebookEntries(bookName); + if (!entries) entries = []; + + const existingEntry = entries.find(e => e.comment === comment); + + if (existingEntry) { + existingEntry.content = content; + existingEntry.enabled = enabled; + existingEntry.order = 0; + existingEntry.constant = true; + + await amilyHelper.setLorebookEntries(bookName, [existingEntry]); + } else if (hint) { + const newEntry = { + comment: comment, + keys: [], + content: content, + constant: true, + selective: false, + order: 0, + position: 0, + enabled: true + }; + await amilyHelper.createLorebookEntries(bookName, [newEntry]); + } + + console.log(`[Amily2-Bridge] 瞬时记忆提示已${enabled ? '启用' : '清除'}。`); +} diff --git a/core/super-memory/manager.js b/core/super-memory/manager.js new file mode 100644 index 0000000..38f633d --- /dev/null +++ b/core/super-memory/manager.js @@ -0,0 +1,203 @@ +import { extension_settings, getContext } from "/scripts/extensions.js"; +import { extensionName } from "../../utils/settings.js"; +import { amilyHelper } from "../tavern-helper/main.js"; +import { generateIndex } from "./smart-indexer.js"; +import { syncToLorebook, ensureMemoryBook, updateTransientHint } from "./lorebook-bridge.js"; +import { getMemoryState, loadMemoryState, saveMemoryState } from "../table-system/manager.js"; +import { eventSource, event_types } from "/script.js"; + +let isInitialized = false; +let updateQueue = []; +let isProcessing = false; +let lastChatId = null; + +const METADATA_KEY = 'Amily2_Memory_Data'; + +export async function initializeSuperMemory() { + const settings = extension_settings[extensionName] || {}; + if (settings.super_memory_enabled === false) { + console.log('[Amily2-SuperMemory] 功能已禁用 (super_memory_enabled = false)。'); + if (window.$) $('#sm-system-status').text('已禁用').css('color', 'gray'); + return; + } + + if (isInitialized) return; + console.log('[Amily2-SuperMemory] 初始化核心管理器...'); + + if (!amilyHelper) { + console.error('[Amily2-SuperMemory] 致命错误:AmilyHelper 未就绪。'); + return; + } + + document.addEventListener('AMILY2_TABLE_UPDATED', handleTableUpdate); + + eventSource.on(event_types.CHAT_CHANGED, async () => { + const settings = extension_settings[extensionName] || {}; + if (settings.super_memory_enabled === false) return; + + console.log('[Amily2-SuperMemory] 检测到聊天切换,正在刷新记忆状态...'); + await checkWorldBookStatus(); + + await tryRestoreStateFromMetadata(); + + await forceSyncAll(); + }); + + await checkWorldBookStatus(); + + await tryRestoreStateFromMetadata(); + + await forceSyncAll(); + + isInitialized = true; + console.log('[Amily2-SuperMemory] 核心管理器初始化完成。'); + + if (window.$) { + $('#sm-system-status').text('运行中').css('color', '#4caf50'); + } +} + +async function checkWorldBookStatus() { + try { + await ensureMemoryBook(); + } catch (error) { + console.error('[Amily2-SuperMemory] 检查世界书状态失败:', error); + } +} + +function handleTableUpdate(event) { + const settings = extension_settings[extensionName] || {}; + if (settings.super_memory_enabled === false) return; + + const { tableName, data, role, hint, headers, rowStatuses } = event.detail; + console.log(`[Amily2-SuperMemory] 检测到表格更新: ${tableName} (Role: ${role})`); + + updateQueue.push({ tableName, data, role, hint, headers, rowStatuses }); + processQueue(); +} + +async function processQueue() { + if (isProcessing || updateQueue.length === 0) return; + isProcessing = true; + + try { + while (updateQueue.length > 0) { + const task = updateQueue.shift(); + await processUpdateTask(task); + } + + await saveStateToMetadata(); + + } catch (error) { + console.error('[Amily2-SuperMemory] 处理更新队列失败:', error); + } finally { + isProcessing = false; + } +} + +async function processUpdateTask(task) { + const { tableName, data, role, hint, headers, rowStatuses } = task; + + const activeData = data.filter((_, i) => !rowStatuses || rowStatuses[i] !== 'pending-deletion'); + const indexText = generateIndex(activeData, role, tableName); + + const allTables = getMemoryState(); + const tableIndex = allTables.findIndex(t => t.name === tableName); + const depth = 8001 + (tableIndex >= 0 ? tableIndex : 99); + + await syncToLorebook(tableName, data, indexText, role, headers, rowStatuses, depth); + + if (hint) { + console.log(`[Amily2-SuperMemory] 应用主动记忆提示: ${hint}`); + await updateTransientHint(hint); + } + + console.log(`[Amily2-SuperMemory] 任务完成: ${tableName}`); + + updateDashboardCounters(); +} + +async function saveStateToMetadata() { + const context = getContext(); + if (!context.chat || context.chat.length === 0) return; + + const lastMsgIndex = context.chat.length - 1; + const lastMsg = context.chat[lastMsgIndex]; + + const currentState = getMemoryState(); + + if (!lastMsg.metadata) lastMsg.metadata = {}; + + lastMsg.metadata[METADATA_KEY] = JSON.parse(JSON.stringify(currentState)); + + if (context.saveChat) { + await context.saveChat(); + } + + console.log(`[Amily2-SuperMemory] 状态已保存至消息 #${lastMsgIndex}`); +} + +export async function tryRestoreStateFromMetadata() { + const context = getContext(); + if (!context.chat || context.chat.length === 0) return; + + let foundState = null; + let foundIndex = -1; + + for (let i = context.chat.length - 1; i >= 0; i--) { + const msg = context.chat[i]; + if (msg.metadata && msg.metadata[METADATA_KEY]) { + foundState = msg.metadata[METADATA_KEY]; + foundIndex = i; + break; + } + } + + if (foundState) { + console.log(`[Amily2-SuperMemory] 发现历史状态 (Msg #${foundIndex}),正在恢复...`); + if (typeof loadMemoryState === 'function') { + loadMemoryState(foundState); + await forceSyncAll(); + } else { + console.warn('[Amily2-SuperMemory] table-system 缺少 loadMemoryState 方法,无法恢复状态。'); + } + } else { + console.log('[Amily2-SuperMemory] 未在聊天记录中发现历史状态,使用默认/当前状态。'); + } +} + +function updateDashboardCounters() { + const tables = getMemoryState(); + if (tables && window.$) { + $('#sm-index-count').text(`${tables.length} 个索引`); + const totalRows = tables.reduce((acc, t) => acc + (t.rows ? t.rows.length : 0), 0); + $('#sm-detail-count').text(`${totalRows} 个详情`); + } +} + +export async function forceSyncAll() { + console.log('[Amily2-SuperMemory] 正在执行全量同步...'); + const tables = getMemoryState(); + + if (!tables || tables.length === 0) { + console.warn('[Amily2-SuperMemory] 没有可同步的表格数据。'); + return; + } + + for (const table of tables) { + let role = 'database'; + if (table.name.includes('时空') || table.name.includes('世界钟')) role = 'anchor'; + if (table.name.includes('日志') || table.name.includes('Log')) role = 'log'; + + updateQueue.push({ + tableName: table.name, + data: table.rows, + headers: table.headers, + rowStatuses: table.rowStatuses || [], + role: role + }); + } + + await processQueue(); + console.log('[Amily2-SuperMemory] 全量同步完成。'); +} diff --git a/core/super-memory/smart-indexer.js b/core/super-memory/smart-indexer.js new file mode 100644 index 0000000..57cd6a7 --- /dev/null +++ b/core/super-memory/smart-indexer.js @@ -0,0 +1,77 @@ +export function generateIndex(data, role, tableName = "") { + if (!Array.isArray(data) || data.length === 0) { + return ""; + } + + const headers = Object.keys(data[0]); + if (headers.length === 0) return ""; + + const indexColumns = identifyIndexColumns(data, headers); + + let indexLines = []; + indexLines.push(`| ${indexColumns.join(' | ')} |`); + indexLines.push(`| ${indexColumns.map(() => '---').join(' | ')} |`); + + let processedData = [...data]; + + const firstColKey = headers[0]; + const firstColVal = data[0] ? data[0][firstColKey] : ''; + const isIndexCol = (firstColKey && (firstColKey.includes('索引') || firstColKey.includes('Index'))) || + (typeof firstColVal === 'string' && /^\s*M\d+/.test(firstColVal)) || + (tableName && (tableName.includes('总结') || tableName.includes('大纲'))); + + if (isIndexCol) { + processedData.sort((a, b) => { + const valA = String(a[firstColKey] || ''); + const valB = String(b[firstColKey] || ''); + return valA.localeCompare(valB, undefined, { numeric: true }); + }); + } + + for (const row of processedData) { + const lineParts = indexColumns.map(col => { + let val = row[col]; + if (val === undefined || val === null) return ""; + val = String(val).trim(); + if (val.length > 15) val = val.substring(0, 12) + "..."; + return val; + }); + indexLines.push(`| ${lineParts.join(' | ')} |`); + } + + return indexLines.join('\n'); +} + +function identifyIndexColumns(data, headers) { + if (headers.length <= 2) return headers; + + const candidates = []; + const maxColumns = 3; + + for (const header of headers) { + if (candidates.length >= maxColumns) break; + + let totalLen = 0; + let count = 0; + for (const row of data) { + if (row[header]) { + totalLen += String(row[header]).length; + count++; + } + } + const avgLen = count > 0 ? totalLen / count : 0; + + const isLongText = avgLen > 20; + const isBlacklisted = /desc|bio|detail|history|经历|描述|详情/i.test(header); + + if (!isLongText && !isBlacklisted) { + candidates.push(header); + } + } + + if (candidates.length === 0) { + return headers.slice(0, Math.min(headers.length, maxColumns)); + } + + return candidates; +} From b8aad886bca5a0e8f830018cc9df6ccb43913d4c Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:07:04 +0800 Subject: [PATCH 30/56] Add files via upload --- ui/bindings.js | 4640 +++++++++++++++++++++--------------------- ui/drawer.js | 490 ++--- ui/table-bindings.js | 2114 ++++++++++++++++++- 3 files changed, 4697 insertions(+), 2547 deletions(-) diff --git a/ui/bindings.js b/ui/bindings.js index 192c5a8..972cd82 100644 --- a/ui/bindings.js +++ b/ui/bindings.js @@ -1,2304 +1,2336 @@ -import { extension_settings, getContext } from "/scripts/extensions.js"; -import { characters, this_chid, getRequestHeaders, saveSettingsDebounced, eventSource, event_types } from "/script.js"; -import { defaultSettings, extensionName, saveSettings } from "../utils/settings.js"; -import { pluginAuthStatus, activatePluginAuthorization, getPasswordForDate } from "../utils/auth.js"; -import { fetchModels, testApiConnection } from "../core/api.js"; -import { getJqyhApiSettings, testJqyhApiConnection, fetchJqyhModels } from '../core/api/JqyhApi.js'; -import { safeLorebooks, safeCharLorebooks, safeLorebookEntries, isTavernHelperAvailable } from "../core/tavernhelper-compatibility.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; - - if(copyBtn) copyBtn.style.display = 'inline-block'; - - copyBtn.onclick = () => { - navigator.clipboard.writeText(todayCode).then(() => { - toastr.success('授权码已复制到剪贴板!'); - }, () => { - toastr.error('复制失败,请手动复制。'); - }); - }; - } -} - - -async function loadSillyTavernPresets() { - console.log('[Amily2号-UI] 正在加载SillyTavern预设列表'); - - const select = $('#amily2_preset_selector'); - const settings = extension_settings[extensionName] || {}; - const currentProfileId = settings.tavernProfile || settings.selectedPreset; - - select.empty().append(new Option('-- 请选择一个酒馆预设 --', '')); - - try { - const context = getContext(); - const tavernProfiles = context.extensionSettings?.connectionManager?.profiles || []; - - if (!tavernProfiles || tavernProfiles.length === 0) { - select.append($(''); - }); - - 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, select#amily2_preset_selector", function () { - if (!pluginAuthStatus.authorized) return; - const key = snakeToCamel(this.id.replace("amily2_", "")); - let valueToSave = this.value; - - if (this.id === 'amily2_preset_selector') { - updateAndSaveSetting('tavernProfile', valueToSave); - } else { - updateAndSaveSetting(key, valueToSave); - } - - if (this.id === 'amily2_model') { - 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); - - // 【V60.0】新增:颜色定制UI事件绑定 - const colorContainer = $("#amily2_drawer_content").length ? $("#amily2_drawer_content") : $("#amily2_chat_optimiser"); - if (colorContainer.length && !colorContainer.data("color-events-bound")) { - loadAndApplyCustomColors(colorContainer); - - colorContainer.on('input', '#amily2_bg_color, #amily2_button_color, #amily2_text_color', function() { - applyAndSaveColors(colorContainer); - }); - - // 新增:背景透明度滑块事件 - colorContainer.on('input', '#amily2_bg_opacity', function() { - const opacityValue = $(this).val(); - $('#amily2_bg_opacity_value').text(opacityValue); - document.documentElement.style.setProperty('--amily2-bg-opacity', opacityValue); - - if (!extension_settings[extensionName]) { - extension_settings[extensionName] = {}; - } - extension_settings[extensionName]['bgOpacity'] = opacityValue; - saveSettingsDebounced(); - }); - - colorContainer.on('click', '#amily2_restore_colors', function() { - const defaultColors = { - '--amily2-bg-color': '#1e1e1e', - '--amily2-button-color': '#4a4a4a', - '--amily2-text-color': '#ffffff' - }; - - colorContainer.find('#amily2_bg_color').val(defaultColors['--amily2-bg-color']); - colorContainer.find('#amily2_button_color').val(defaultColors['--amily2-button-color']); - colorContainer.find('#amily2_text_color').val(defaultColors['--amily2-text-color']); - - applyAndSaveColors(colorContainer); - - // 恢复默认透明度 - const defaultOpacity = 0.85; - $('#amily2_bg_opacity').val(defaultOpacity); - $('#amily2_bg_opacity_value').text(defaultOpacity); - document.documentElement.style.setProperty('--amily2-bg-opacity', defaultOpacity); - if (extension_settings[extensionName]) { - extension_settings[extensionName]['bgOpacity'] = defaultOpacity; - saveSettingsDebounced(); - } - - toastr.success('界面颜色与透明度已恢复为默认设置。'); - }); - - // 新增:自定义背景图事件绑定 - colorContainer.on('change', '#amily2_custom_bg_image', function(event) { - const file = event.target.files[0]; - if (file && file.type.startsWith('image/')) { - const reader = new FileReader(); - reader.onload = function(e) { - const imageDataUrl = e.target.result; - // 检查大小 - if (imageDataUrl.length > 5 * 1024 * 1024) { // 5MB 限制 - toastr.error('图片文件过大,请选择小于5MB的图片。'); - return; - } - document.documentElement.style.setProperty('--amily2-bg-image', `url("${imageDataUrl}")`); - - if (!extension_settings[extensionName]) { - extension_settings[extensionName] = {}; - } - extension_settings[extensionName]['customBgImage'] = imageDataUrl; - saveSettingsDebounced(); - toastr.success('自定义背景图已应用。'); - }; - reader.readAsDataURL(file); - } - }); - - colorContainer.on('click', '#amily2_restore_bg_image', function() { - document.documentElement.style.setProperty('--amily2-bg-image', `url("${DEFAULT_BG_IMAGE_URL}")`); - if (extension_settings[extensionName]) { - delete extension_settings[extensionName]['customBgImage']; - saveSettingsDebounced(); - } - $('#amily2_custom_bg_image').val(''); // 清空文件选择框 - toastr.success('背景图已恢复为默认。'); - }); - - colorContainer.data("color-events-bound", true); - } -} - -export function opt_saveAllSettings() { - const panel = $('#amily2_plot_optimization_panel'); - if (panel.length === 0) return; - - console.log(`[${extensionName}] 手动触发所有剧情优化设置的保存...`); - panel.find('input[type="checkbox"], input[type="radio"], input[type="text"], input[type="password"], textarea, select').trigger('change.amily2_opt'); - - panel.find('input[type="range"]').trigger('change.amily2_opt'); - - opt_saveEnabledEntries(); - - toastr.info('剧情优化设置已自动保存。'); -} - - -function opt_toCamelCase(str) { - return str.replace(/[-_]([a-z])/g, (g) => g[1].toUpperCase()); -} - -function opt_updateApiUrlVisibility(panel, apiMode) { - const customApiSettings = panel.find('#amily2_opt_custom_api_settings_block'); - const tavernProfileSettings = panel.find('#amily2_opt_tavern_api_profile_block'); - const apiUrlInput = panel.find('#amily2_opt_api_url'); - - customApiSettings.hide(); - tavernProfileSettings.hide(); - - if (apiMode === 'tavern') { - tavernProfileSettings.show(); - } else { - customApiSettings.show(); - if (apiMode === 'google') { - panel.find('#amily2_opt_api_url_block').hide(); - const googleUrl = 'https://generativelanguage.googleapis.com'; - if (apiUrlInput.val() !== googleUrl) { - apiUrlInput.val(googleUrl).attr('type', 'text').trigger('change'); - } - } else { - panel.find('#amily2_opt_api_url_block').show(); - } - } -} - -function opt_updateWorldbookSourceVisibility(panel, source) { - const manualSelectionWrapper = panel.find('#amily2_opt_worldbook_select_wrapper'); - if (source === 'manual') { - manualSelectionWrapper.show(); - const selectBox = manualSelectionWrapper.find('#amily2_opt_selected_worldbooks'); - selectBox.css({ - 'height': 'auto', - 'background-color': 'var(--bg1)', - 'appearance': 'none', - '-webkit-appearance': 'none' - }); - } else { - manualSelectionWrapper.hide(); - } -} - -async function opt_loadTavernApiProfiles(panel) { - const select = panel.find('#amily2_opt_tavern_api_profile_select'); - const apiSettings = opt_getMergedSettings(); - const currentProfileId = apiSettings.plotOpt_tavernProfile; - - const currentValue = select.val(); - select.empty().append(new Option('-- 请选择一个酒馆预设 --', '')); - - try { - const tavernProfiles = getContext().extensionSettings?.connectionManager?.profiles || []; - if (!tavernProfiles || tavernProfiles.length === 0) { - select.append($(''; - models.forEach(model => { - const option = document.createElement('option'); - option.value = model.id || model.name || model; - option.textContent = model.name || model.id || model; - modelSelect.appendChild(option); - }); - modelSelect.style.display = 'block'; - modelInput.style.display = 'none'; - - modelSelect.addEventListener('change', function() { - const selectedModel = this.value; - modelInput.value = selectedModel; - updateAndSaveSetting('jqyhModel', selectedModel); - console.log(`[Amily2-Jqyh] 已选择模型: ${selectedModel}`); - }); - - toastr.success(`成功获取 ${models.length} 个模型`, 'Jqyh 模型获取'); - } else { - toastr.warning('未获取到任何模型', 'Jqyh 模型获取'); - } - - } catch (error) { - console.error('[Amily2号-Jqyh] 获取模型列表失败:', error); - toastr.error(`获取模型失败: ${error.message}`, 'Jqyh 模型获取'); - } finally { - button.prop('disabled', false).html(originalHtml); - } - }); - } -} - -async function loadJqyhTavernPresets() { - const select = document.getElementById('amily2_jqyh_tavern_profile'); - if (!select) return; - - const currentValue = select.value; - select.innerHTML = ''; - - try { - const context = getContext(); - const tavernProfiles = context.extensionSettings?.connectionManager?.profiles || []; - - select.innerHTML = ''; - - if (tavernProfiles.length > 0) { - tavernProfiles.forEach(profile => { - if (profile.api && profile.preset) { - const option = document.createElement('option'); - option.value = profile.id; - option.textContent = profile.name || profile.id; - if (profile.id === currentValue) { - option.selected = true; - } - select.appendChild(option); - } - }); - } else { - select.innerHTML = ''; - } - } catch (error) { - console.error('[Amily2号-Jqyh] 加载SillyTavern预设失败:', error); - select.innerHTML = ''; - } -} - -$(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); -}); - - -const DEFAULT_BG_IMAGE_URL = "https://cdn.jsdelivr.net/gh/Wx-2025/ST-Amily2-images@main/img/Amily-2.png"; - -function applyAndSaveColors(container) { - const bgColor = container.find('#amily2_bg_color').val(); - const btnColor = container.find('#amily2_button_color').val(); - const textColor = container.find('#amily2_text_color').val(); - - const colors = { - '--amily2-bg-color': bgColor, - '--amily2-button-color': btnColor, - '--amily2-text-color': textColor - }; - - Object.entries(colors).forEach(([key, value]) => { - document.documentElement.style.setProperty(key, value, 'important'); - }); - - if (!extension_settings[extensionName]) { - extension_settings[extensionName] = {}; - } - extension_settings[extensionName]['customColors'] = colors; - saveSettingsDebounced(); -} - -function loadAndApplyCustomColors(container) { - const savedColors = extension_settings[extensionName]?.customColors; - if (savedColors) { - container.find('#amily2_bg_color').val(savedColors['--amily2-bg-color']); - container.find('#amily2_button_color').val(savedColors['--amily2-button-color']); - container.find('#amily2_text_color').val(savedColors['--amily2-text-color']); - applyAndSaveColors(container); - } - - const savedOpacity = extension_settings[extensionName]?.bgOpacity; - if (savedOpacity !== undefined) { - $('#amily2_bg_opacity').val(savedOpacity); - $('#amily2_bg_opacity_value').text(savedOpacity); - document.documentElement.style.setProperty('--amily2-bg-opacity', savedOpacity); - } - - const savedBgImage = extension_settings[extensionName]?.customBgImage; - const imageUrl = savedBgImage ? `url("${savedBgImage}")` : `url("${DEFAULT_BG_IMAGE_URL}")`; - document.documentElement.style.setProperty('--amily2-bg-image', imageUrl); -} +import { extension_settings, getContext } from "/scripts/extensions.js"; +import { characters, this_chid, getRequestHeaders, saveSettingsDebounced, eventSource, event_types } from "/script.js"; +import { defaultSettings, extensionName, saveSettings } from "../utils/settings.js"; +import { pluginAuthStatus, activatePluginAuthorization, getPasswordForDate } from "../utils/auth.js"; +import { fetchModels, testApiConnection } from "../core/api.js"; +import { getJqyhApiSettings, testJqyhApiConnection, fetchJqyhModels } from '../core/api/JqyhApi.js'; +import { safeLorebooks, safeCharLorebooks, safeLorebookEntries, isTavernHelperAvailable } from "../core/tavernhelper-compatibility.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; + + if(copyBtn) copyBtn.style.display = 'inline-block'; + + copyBtn.onclick = () => { + navigator.clipboard.writeText(todayCode).then(() => { + toastr.success('授权码已复制到剪贴板!'); + }, () => { + toastr.error('复制失败,请手动复制。'); + }); + }; + } +} + + +async function loadSillyTavernPresets() { + console.log('[Amily2号-UI] 正在加载SillyTavern预设列表'); + + const select = $('#amily2_preset_selector'); + const settings = extension_settings[extensionName] || {}; + const currentProfileId = settings.tavernProfile || settings.selectedPreset; + + select.empty().append(new Option('-- 请选择一个酒馆预设 --', '')); + + try { + const context = getContext(); + const tavernProfiles = context.extensionSettings?.connectionManager?.profiles || []; + + if (!tavernProfiles || tavernProfiles.length === 0) { + select.append($(''); + }); + + 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, select#amily2_preset_selector", function () { + if (!pluginAuthStatus.authorized) return; + const key = snakeToCamel(this.id.replace("amily2_", "")); + let valueToSave = this.value; + + if (this.id === 'amily2_preset_selector') { + updateAndSaveSetting('tavernProfile', valueToSave); + } else { + updateAndSaveSetting(key, valueToSave); + } + + if (this.id === 'amily2_model') { + 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); + + // 【V60.0】新增:颜色定制UI事件绑定 + const colorContainer = $("#amily2_drawer_content").length ? $("#amily2_drawer_content") : $("#amily2_chat_optimiser"); + if (colorContainer.length && !colorContainer.data("color-events-bound")) { + loadAndApplyCustomColors(colorContainer); + + colorContainer.on('input', '#amily2_bg_color, #amily2_button_color, #amily2_text_color', function() { + applyAndSaveColors(colorContainer); + }); + + // 新增:背景透明度滑块事件 + colorContainer.on('input', '#amily2_bg_opacity', function() { + const opacityValue = $(this).val(); + $('#amily2_bg_opacity_value').text(opacityValue); + document.documentElement.style.setProperty('--amily2-bg-opacity', opacityValue); + + if (!extension_settings[extensionName]) { + extension_settings[extensionName] = {}; + } + extension_settings[extensionName]['bgOpacity'] = opacityValue; + saveSettingsDebounced(); + }); + + colorContainer.on('click', '#amily2_restore_colors', function() { + const defaultColors = { + '--amily2-bg-color': '#1e1e1e', + '--amily2-button-color': '#4a4a4a', + '--amily2-text-color': '#ffffff' + }; + + colorContainer.find('#amily2_bg_color').val(defaultColors['--amily2-bg-color']); + colorContainer.find('#amily2_button_color').val(defaultColors['--amily2-button-color']); + colorContainer.find('#amily2_text_color').val(defaultColors['--amily2-text-color']); + + applyAndSaveColors(colorContainer); + + // 恢复默认透明度 + const defaultOpacity = 0.85; + $('#amily2_bg_opacity').val(defaultOpacity); + $('#amily2_bg_opacity_value').text(defaultOpacity); + document.documentElement.style.setProperty('--amily2-bg-opacity', defaultOpacity); + if (extension_settings[extensionName]) { + extension_settings[extensionName]['bgOpacity'] = defaultOpacity; + saveSettingsDebounced(); + } + + toastr.success('界面颜色与透明度已恢复为默认设置。'); + }); + + // 新增:自定义背景图事件绑定 + colorContainer.on('change', '#amily2_custom_bg_image', function(event) { + const file = event.target.files[0]; + if (file && file.type.startsWith('image/')) { + const reader = new FileReader(); + reader.onload = function(e) { + const imageDataUrl = e.target.result; + // 检查大小 + if (imageDataUrl.length > 5 * 1024 * 1024) { // 5MB 限制 + toastr.error('图片文件过大,请选择小于5MB的图片。'); + return; + } + document.documentElement.style.setProperty('--amily2-bg-image', `url("${imageDataUrl}")`); + + if (!extension_settings[extensionName]) { + extension_settings[extensionName] = {}; + } + extension_settings[extensionName]['customBgImage'] = imageDataUrl; + saveSettingsDebounced(); + toastr.success('自定义背景图已应用。'); + }; + reader.readAsDataURL(file); + } + }); + + colorContainer.on('click', '#amily2_restore_bg_image', function() { + document.documentElement.style.setProperty('--amily2-bg-image', `url("${DEFAULT_BG_IMAGE_URL}")`); + if (extension_settings[extensionName]) { + delete extension_settings[extensionName]['customBgImage']; + saveSettingsDebounced(); + } + $('#amily2_custom_bg_image').val(''); // 清空文件选择框 + toastr.success('背景图已恢复为默认。'); + }); + + colorContainer.data("color-events-bound", true); + } +} + +export function opt_saveAllSettings() { + const panel = $('#amily2_plot_optimization_panel'); + if (panel.length === 0) return; + + console.log(`[${extensionName}] 手动触发所有剧情优化设置的保存...`); + panel.find('input[type="checkbox"], input[type="radio"], input[type="text"], input[type="password"], textarea, select').trigger('change.amily2_opt'); + + panel.find('input[type="range"]').trigger('change.amily2_opt'); + + opt_saveEnabledEntries(); + + toastr.info('剧情优化设置已自动保存。'); +} + + +function opt_toCamelCase(str) { + return str.replace(/[-_]([a-z])/g, (g) => g[1].toUpperCase()); +} + +function opt_updateApiUrlVisibility(panel, apiMode) { + const customApiSettings = panel.find('#amily2_opt_custom_api_settings_block'); + const tavernProfileSettings = panel.find('#amily2_opt_tavern_api_profile_block'); + const apiUrlInput = panel.find('#amily2_opt_api_url'); + + customApiSettings.hide(); + tavernProfileSettings.hide(); + + if (apiMode === 'tavern') { + tavernProfileSettings.show(); + } else { + customApiSettings.show(); + if (apiMode === 'google') { + panel.find('#amily2_opt_api_url_block').hide(); + const googleUrl = 'https://generativelanguage.googleapis.com'; + if (apiUrlInput.val() !== googleUrl) { + apiUrlInput.val(googleUrl).attr('type', 'text').trigger('change'); + } + } else { + panel.find('#amily2_opt_api_url_block').show(); + } + } +} + +function opt_updateWorldbookSourceVisibility(panel, source) { + const manualSelectionWrapper = panel.find('#amily2_opt_worldbook_select_wrapper'); + if (source === 'manual') { + manualSelectionWrapper.show(); + const selectBox = manualSelectionWrapper.find('#amily2_opt_selected_worldbooks'); + selectBox.css({ + 'height': 'auto', + 'background-color': 'var(--bg1)', + 'appearance': 'none', + '-webkit-appearance': 'none' + }); + } else { + manualSelectionWrapper.hide(); + } +} + +async function opt_loadTavernApiProfiles(panel) { + const select = panel.find('#amily2_opt_tavern_api_profile_select'); + const apiSettings = opt_getMergedSettings(); + const currentProfileId = apiSettings.plotOpt_tavernProfile; + + const currentValue = select.val(); + select.empty().append(new Option('-- 请选择一个酒馆预设 --', '')); + + try { + const tavernProfiles = getContext().extensionSettings?.connectionManager?.profiles || []; + if (!tavernProfiles || tavernProfiles.length === 0) { + select.append($(''; + models.forEach(model => { + const option = document.createElement('option'); + option.value = model.id || model.name || model; + option.textContent = model.name || model.id || model; + modelSelect.appendChild(option); + }); + modelSelect.style.display = 'block'; + modelInput.style.display = 'none'; + + modelSelect.addEventListener('change', function() { + const selectedModel = this.value; + modelInput.value = selectedModel; + updateAndSaveSetting('jqyhModel', selectedModel); + console.log(`[Amily2-Jqyh] 已选择模型: ${selectedModel}`); + }); + + toastr.success(`成功获取 ${models.length} 个模型`, 'Jqyh 模型获取'); + } else { + toastr.warning('未获取到任何模型', 'Jqyh 模型获取'); + } + + } catch (error) { + console.error('[Amily2号-Jqyh] 获取模型列表失败:', error); + toastr.error(`获取模型失败: ${error.message}`, 'Jqyh 模型获取'); + } finally { + button.prop('disabled', false).html(originalHtml); + } + }); + } +} + +async function loadJqyhTavernPresets() { + const select = document.getElementById('amily2_jqyh_tavern_profile'); + if (!select) return; + + const currentValue = select.value; + select.innerHTML = ''; + + try { + const context = getContext(); + const tavernProfiles = context.extensionSettings?.connectionManager?.profiles || []; + + select.innerHTML = ''; + + if (tavernProfiles.length > 0) { + tavernProfiles.forEach(profile => { + if (profile.api && profile.preset) { + const option = document.createElement('option'); + option.value = profile.id; + option.textContent = profile.name || profile.id; + if (profile.id === currentValue) { + option.selected = true; + } + select.appendChild(option); + } + }); + } else { + select.innerHTML = ''; + } + } catch (error) { + console.error('[Amily2号-Jqyh] 加载SillyTavern预设失败:', error); + select.innerHTML = ''; + } +} + +$(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); +}); + + +const DEFAULT_BG_IMAGE_URL = "https://cdn.jsdelivr.net/gh/Wx-2025/ST-Amily2-images@main/img/Amily-2.png"; + +function applyAndSaveColors(container) { + const bgColor = container.find('#amily2_bg_color').val(); + const btnColor = container.find('#amily2_button_color').val(); + const textColor = container.find('#amily2_text_color').val(); + + const colors = { + '--amily2-bg-color': bgColor, + '--amily2-button-color': btnColor, + '--amily2-text-color': textColor + }; + + Object.entries(colors).forEach(([key, value]) => { + document.documentElement.style.setProperty(key, value, 'important'); + }); + + if (!extension_settings[extensionName]) { + extension_settings[extensionName] = {}; + } + extension_settings[extensionName]['customColors'] = colors; + saveSettingsDebounced(); +} + +function loadAndApplyCustomColors(container) { + const savedColors = extension_settings[extensionName]?.customColors; + if (savedColors) { + container.find('#amily2_bg_color').val(savedColors['--amily2-bg-color']); + container.find('#amily2_button_color').val(savedColors['--amily2-button-color']); + container.find('#amily2_text_color').val(savedColors['--amily2-text-color']); + applyAndSaveColors(container); + } + + const savedOpacity = extension_settings[extensionName]?.bgOpacity; + if (savedOpacity !== undefined) { + $('#amily2_bg_opacity').val(savedOpacity); + $('#amily2_bg_opacity_value').text(savedOpacity); + document.documentElement.style.setProperty('--amily2-bg-opacity', savedOpacity); + } + + const savedBgImage = extension_settings[extensionName]?.customBgImage; + const imageUrl = savedBgImage ? `url("${savedBgImage}")` : `url("${DEFAULT_BG_IMAGE_URL}")`; + document.documentElement.style.setProperty('--amily2-bg-image', imageUrl); +} diff --git a/ui/drawer.js b/ui/drawer.js index 163d344..9de1bf1 100644 --- a/ui/drawer.js +++ b/ui/drawer.js @@ -1,242 +1,248 @@ -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 { fetchModels } from "../core/api.js"; -import { bindHistoriographyEvents } from "./historiography-bindings.js"; -import { bindHanlinyuanEvents } from "./hanlinyuan-bindings.js"; -import { bindTableEvents } from './table-bindings.js'; -import { showContentModal } from "./page-window.js"; -import { initializeRendererBindings } from "../core/tavern-helper/renderer-bindings.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 fetchModels(); - 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); - - const memorisationFormsContent = await $.get(`${extensionFolderPath}/assets/Memorisation-forms.html`); - const memorisationFormsPanelHtml = ``; - mainContainer.append(memorisationFormsPanelHtml); - - const plotOptimizationContent = await $.get(`${extensionFolderPath}/assets/Amily2-optimization.html`); - const plotOptimizationPanelHtml = ``; - mainContainer.append(plotOptimizationPanelHtml); - - const cwbContent = await $.get(`${extensionFolderPath}/CharacterWorldBook/cwb_settings.html`); - const cwbPanelHtml = ``; - mainContainer.append(cwbPanelHtml); - - const worldEditorContent = await $.get(`${extensionFolderPath}/WorldEditor.html`); - const worldEditorPanelHtml = ``; - mainContainer.append(worldEditorPanelHtml); - - const glossaryContent = await $.get(`${extensionFolderPath}/assets/amily2-glossary.html`); - const glossaryPanelHtml = ``; - mainContainer.append(glossaryPanelHtml); - - const rendererContent = await $.get(`${extensionFolderPath}/core/tavern-helper/renderer.html`); - const rendererPanelHtml = ``; - mainContainer.append(rendererPanelHtml); - - // 在面板创建后,加载世界书编辑器脚本 - const worldEditorScriptId = 'world-editor-script'; - if (!document.getElementById(worldEditorScriptId)) { - const worldEditorScript = document.createElement("script"); - worldEditorScript.id = worldEditorScriptId; - worldEditorScript.type = "module"; // 必须作为模块加载 - worldEditorScript.src = `${extensionFolderPath}/WorldEditor/WorldEditor.js?v=${Date.now()}`; - document.head.appendChild(worldEditorScript); - } - } - - bindModalEvents(); - bindHistoriographyEvents(); - await loadSettings(); - bindHanlinyuanEvents(); - bindTableEvents(); - initializeRendererBindings(); - 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); - } - } -} - -function toggleDrawerFallback() { - const drawerIcon = $('#amily2_drawer_icon'); - const contentPanel = $('#amily2_drawer_content'); - if (drawerIcon.hasClass('openIcon') && !contentPanel.is(':visible')) { - drawerIcon.removeClass('openIcon').addClass('closedIcon'); - } - if (drawerIcon.hasClass('closedIcon')) { - $('.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'); - - 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; - - 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') { - $('#amily2_main_drawer .drawer-toggle').on('click', doNavbarIconClick); - console.log('[Amily2-兼容性] 检测到新版环境,已绑定官方点击事件。'); - } else { - throw new Error('doNavbarIconClick is not a function'); - } - } catch (error) { - $('#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); - } -} +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 { fetchModels } from "../core/api.js"; +import { bindHistoriographyEvents } from "./historiography-bindings.js"; +import { bindHanlinyuanEvents } from "./hanlinyuan-bindings.js"; +import { bindTableEvents } from './table-bindings.js'; +import { showContentModal } from "./page-window.js"; +import { initializeRendererBindings } from "../core/tavern-helper/renderer-bindings.js"; +import { bindSuperMemoryEvents } from "../core/super-memory/bindings.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 fetchModels(); + 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); + + const memorisationFormsContent = await $.get(`${extensionFolderPath}/assets/Memorisation-forms.html`); + const memorisationFormsPanelHtml = ``; + mainContainer.append(memorisationFormsPanelHtml); + + const plotOptimizationContent = await $.get(`${extensionFolderPath}/assets/Amily2-optimization.html`); + const plotOptimizationPanelHtml = ``; + mainContainer.append(plotOptimizationPanelHtml); + + const cwbContent = await $.get(`${extensionFolderPath}/CharacterWorldBook/cwb_settings.html`); + const cwbPanelHtml = ``; + mainContainer.append(cwbPanelHtml); + + const worldEditorContent = await $.get(`${extensionFolderPath}/WorldEditor.html`); + const worldEditorPanelHtml = ``; + mainContainer.append(worldEditorPanelHtml); + + const glossaryContent = await $.get(`${extensionFolderPath}/assets/amily2-glossary.html`); + const glossaryPanelHtml = ``; + mainContainer.append(glossaryPanelHtml); + + const rendererContent = await $.get(`${extensionFolderPath}/core/tavern-helper/renderer.html`); + const rendererPanelHtml = ``; + mainContainer.append(rendererPanelHtml); + + const superMemoryContent = await $.get(`${extensionFolderPath}/core/super-memory/index.html`); + const superMemoryPanelHtml = ``; + mainContainer.append(superMemoryPanelHtml); + + // 在面板创建后,加载世界书编辑器脚本 + const worldEditorScriptId = 'world-editor-script'; + if (!document.getElementById(worldEditorScriptId)) { + const worldEditorScript = document.createElement("script"); + worldEditorScript.id = worldEditorScriptId; + worldEditorScript.type = "module"; // 必须作为模块加载 + worldEditorScript.src = `${extensionFolderPath}/WorldEditor/WorldEditor.js?v=${Date.now()}`; + document.head.appendChild(worldEditorScript); + } + } + + bindModalEvents(); + bindHistoriographyEvents(); + await loadSettings(); + bindHanlinyuanEvents(); + bindTableEvents(); + initializeRendererBindings(); + bindSuperMemoryEvents(); + 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); + } + } +} + +function toggleDrawerFallback() { + const drawerIcon = $('#amily2_drawer_icon'); + const contentPanel = $('#amily2_drawer_content'); + if (drawerIcon.hasClass('openIcon') && !contentPanel.is(':visible')) { + drawerIcon.removeClass('openIcon').addClass('closedIcon'); + } + if (drawerIcon.hasClass('closedIcon')) { + $('.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'); + + 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; + + 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') { + $('#amily2_main_drawer .drawer-toggle').on('click', doNavbarIconClick); + console.log('[Amily2-兼容性] 检测到新版环境,已绑定官方点击事件。'); + } else { + throw new Error('doNavbarIconClick is not a function'); + } + } catch (error) { + $('#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/table-bindings.js b/ui/table-bindings.js index b417bdb..c3487ef 100644 --- a/ui/table-bindings.js +++ b/ui/table-bindings.js @@ -1 +1,2113 @@ -const _0xc6d991=_0x54ef;(function(_0x4bc794,_0x5ed8db){const _0x101fb1=_0x54ef,_0x540247=_0x4bc794();while(!![]){try{const _0x44326d=parseInt(_0x101fb1(0x282))/0x1*(parseInt(_0x101fb1(0x179))/0x2)+parseInt(_0x101fb1(0x175))/0x3+-parseInt(_0x101fb1(0x28a))/0x4*(parseInt(_0x101fb1(0x180))/0x5)+-parseInt(_0x101fb1(0x11a))/0x6*(-parseInt(_0x101fb1(0x27f))/0x7)+parseInt(_0x101fb1(0x172))/0x8+-parseInt(_0x101fb1(0x1ee))/0x9*(parseInt(_0x101fb1(0x25a))/0xa)+-parseInt(_0x101fb1(0x1bb))/0xb*(-parseInt(_0x101fb1(0x26f))/0xc);if(_0x44326d===_0x5ed8db)break;else _0x540247['push'](_0x540247['shift']());}catch(_0x4bde54){_0x540247['push'](_0x540247['shift']());}}}(_0x3643,0x735d3));import*as _0x93db26 from'../core/table-system/manager.js';import{log}from'../core/table-system/logger.js';import{extension_settings,getContext}from'/scripts/extensions.js';import{extensionName}from'../utils/settings.js';import{updateOrInsertTableInChat}from'./message-table-renderer.js';import{saveSettingsDebounced}from'/script.js';import{startBatchFilling}from'../core/table-system/batch-filler.js';import{showHtmlModal}from'./page-window.js';import{DEFAULT_AI_RULE_TEMPLATE,DEFAULT_AI_FLOW_TEMPLATE}from'../core/table-system/settings.js';import{world_names,loadWorldInfo}from'/scripts/world-info.js';import{safeCharLorebooks,safeLorebookEntries}from'../core/tavernhelper-compatibility.js';import{characters,this_chid,eventSource,event_types}from'/script.js';import{fetchNccsModels,testNccsApiConnection}from'../core/api/NccsApi.js';function _0x54ef(_0x1b1ef6,_0x17bc2d){const _0x3643fc=_0x3643();return _0x54ef=function(_0x54efb1,_0x12467d){_0x54efb1=_0x54efb1-0xf8;let _0x2f901e=_0x3643fc[_0x54efb1];return _0x2f901e;},_0x54ef(_0x1b1ef6,_0x17bc2d);}const isTouchDevice=()=>window[_0xc6d991(0x267)](_0xc6d991(0x277))[_0xc6d991(0x1f7)],getAllTablesContainer=()=>document[_0xc6d991(0x16c)]('all-tables-container');let isResizing=![];function toggleRowContextMenu(_0x1d18fd){const _0x3fe02f=_0xc6d991;_0x1d18fd[_0x3fe02f(0x2ee)](),_0x1d18fd['stopPropagation']();const _0x2102c4=_0x1d18fd[_0x3fe02f(0x195)][_0x3fe02f(0x104)](_0x3fe02f(0x19e));if(!_0x2102c4)return;const _0x1f2286=_0x2102c4['closest'](_0x3fe02f(0x27b));if(!_0x1f2286)return;const _0x45f4c5=_0x2102c4['classList'][_0x3fe02f(0xfe)](_0x3fe02f(0x20f));document[_0x3fe02f(0x212)](_0x3fe02f(0x1cd))[_0x3fe02f(0x14b)](_0x234114=>{const _0x52f6c0=_0x3fe02f;if(_0x234114!==_0x2102c4){_0x234114['classList']['remove']('amily2-menu-open'),_0x234114[_0x52f6c0(0x263)][_0x52f6c0(0x1ba)]='',_0x234114[_0x52f6c0(0x263)][_0x52f6c0(0x293)]='';const _0x31bf41=_0x234114['closest'](_0x52f6c0(0x27b));_0x31bf41&&(_0x31bf41[_0x52f6c0(0x263)][_0x52f6c0(0x2ad)]='auto',_0x31bf41[_0x52f6c0(0x263)]['zIndex']='',_0x31bf41[_0x52f6c0(0x263)][_0x52f6c0(0x293)]='');}}),_0x2102c4['classList'][_0x3fe02f(0x28f)](_0x3fe02f(0x20f));_0x2102c4[_0x3fe02f(0x14a)]['contains'](_0x3fe02f(0x20f))?(_0x1f2286[_0x3fe02f(0x263)][_0x3fe02f(0x2ad)]=_0x3fe02f(0x13b),_0x1f2286['style'][_0x3fe02f(0x293)]=_0x3fe02f(0x124),_0x1f2286['style'][_0x3fe02f(0x1ba)]='10',_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x293)]=_0x3fe02f(0x124),_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x1ba)]=_0x3fe02f(0x134)):(_0x1f2286[_0x3fe02f(0x263)][_0x3fe02f(0x2ad)]='auto',_0x1f2286['style']['position']='',_0x1f2286['style'][_0x3fe02f(0x1ba)]='',_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x293)]='',_0x2102c4[_0x3fe02f(0x263)][_0x3fe02f(0x1ba)]='');const _0x5c0bc4=_0x4cb60d=>{const _0xa3c1f4=_0x3fe02f;!_0x2102c4['contains'](_0x4cb60d[_0xa3c1f4(0x195)])&&(_0x2102c4[_0xa3c1f4(0x14a)][_0xa3c1f4(0x1e4)](_0xa3c1f4(0x20f)),_0x2102c4[_0xa3c1f4(0x263)][_0xa3c1f4(0x293)]='',_0x2102c4[_0xa3c1f4(0x263)][_0xa3c1f4(0x1ba)]='',_0x1f2286[_0xa3c1f4(0x263)]['overflowX']=_0xa3c1f4(0x10c),_0x1f2286[_0xa3c1f4(0x263)][_0xa3c1f4(0x293)]='',_0x1f2286[_0xa3c1f4(0x263)][_0xa3c1f4(0x1ba)]='',document[_0xa3c1f4(0x2a6)](_0xa3c1f4(0x29d),_0x5c0bc4,!![]));};_0x2102c4[_0x3fe02f(0x14a)]['contains'](_0x3fe02f(0x20f))&&setTimeout(()=>{const _0x34ba72=_0x3fe02f;document[_0x34ba72(0x242)](_0x34ba72(0x29d),_0x5c0bc4,!![]);},0x0);}function toggleColumnContextMenu(_0x3a9ec9){const _0x1933ac=_0xc6d991;if(isResizing||_0x3a9ec9['target'][_0x1933ac(0x14a)][_0x1933ac(0xfe)](_0x1933ac(0x1ef)))return;_0x3a9ec9[_0x1933ac(0x2ee)](),_0x3a9ec9[_0x1933ac(0x1eb)]();const _0x37cfb4=_0x3a9ec9[_0x1933ac(0x195)][_0x1933ac(0x104)]('th');if(!_0x37cfb4)return;const _0x1232b4=_0x37cfb4['closest'](_0x1933ac(0x27b));if(!_0x1232b4)return;const _0xd82936=_0x37cfb4['classList'][_0x1933ac(0xfe)](_0x1933ac(0x20f));document['querySelectorAll'](_0x1933ac(0x1e3))[_0x1933ac(0x14b)](_0x510511=>{const _0xdf6fbb=_0x1933ac;if(_0x510511!==_0x37cfb4){_0x510511[_0xdf6fbb(0x14a)][_0xdf6fbb(0x1e4)](_0xdf6fbb(0x20f));const _0x104136=_0x510511[_0xdf6fbb(0x104)](_0xdf6fbb(0x27b));_0x104136&&(_0x104136[_0xdf6fbb(0x263)]['overflowX']=_0xdf6fbb(0x10c),_0x104136['style'][_0xdf6fbb(0x1ba)]='',_0x104136[_0xdf6fbb(0x263)][_0xdf6fbb(0x293)]='');}}),_0x37cfb4[_0x1933ac(0x14a)][_0x1933ac(0x28f)](_0x1933ac(0x20f));_0x37cfb4[_0x1933ac(0x14a)]['contains']('amily2-menu-open')?(_0x1232b4[_0x1933ac(0x263)][_0x1933ac(0x2ad)]='visible',_0x1232b4[_0x1933ac(0x263)][_0x1933ac(0x293)]=_0x1933ac(0x124),_0x1232b4['style'][_0x1933ac(0x1ba)]='10'):(_0x1232b4['style'][_0x1933ac(0x2ad)]=_0x1933ac(0x10c),_0x1232b4['style'][_0x1933ac(0x293)]='',_0x1232b4[_0x1933ac(0x263)][_0x1933ac(0x1ba)]='');const _0x428644=_0x88011e=>{const _0x7bb1ef=_0x1933ac;!_0x37cfb4[_0x7bb1ef(0xfe)](_0x88011e[_0x7bb1ef(0x195)])&&(_0x37cfb4['classList']['remove'](_0x7bb1ef(0x20f)),_0x1232b4['style'][_0x7bb1ef(0x2ad)]=_0x7bb1ef(0x10c),_0x1232b4[_0x7bb1ef(0x263)][_0x7bb1ef(0x293)]='',_0x1232b4[_0x7bb1ef(0x263)][_0x7bb1ef(0x1ba)]='',document[_0x7bb1ef(0x2a6)](_0x7bb1ef(0x29d),_0x428644,!![]));};_0x37cfb4[_0x1933ac(0x14a)][_0x1933ac(0xfe)]('amily2-menu-open')&&setTimeout(()=>{document['addEventListener']('click',_0x428644,!![]);},0x0);}function toggleHeaderIndexContextMenu(_0x2a891b){const _0x150649=_0xc6d991;_0x2a891b[_0x150649(0x2ee)](),_0x2a891b['stopPropagation']();const _0x4941ea=_0x2a891b[_0x150649(0x195)][_0x150649(0x104)](_0x150649(0x249));if(!_0x4941ea)return;const _0x1600fe=_0x4941ea[_0x150649(0x17d)](_0x150649(0x14e));if(!_0x1600fe)return;const _0x5b08c6=_0x1600fe['classList'][_0x150649(0xfe)]('amily2-menu-active');document[_0x150649(0x212)](_0x150649(0x138))['forEach'](_0x44245f=>{const _0xa8928f=_0x150649;_0x44245f[_0xa8928f(0x14a)][_0xa8928f(0x1e4)](_0xa8928f(0x25b));});!_0x5b08c6&&_0x1600fe[_0x150649(0x14a)][_0x150649(0x197)]('amily2-menu-active');const _0xbde0ed=_0x1f1548=>{const _0x57cccf=_0x150649;!_0x1600fe['contains'](_0x1f1548[_0x57cccf(0x195)])&&(_0x1600fe[_0x57cccf(0x14a)][_0x57cccf(0x1e4)](_0x57cccf(0x25b)),document[_0x57cccf(0x2a6)]('click',_0xbde0ed,!![]));};setTimeout(()=>{const _0x577a66=_0x150649;_0x1600fe[_0x577a66(0x14a)][_0x577a66(0xfe)]('amily2-menu-active')&&document[_0x577a66(0x242)](_0x577a66(0x29d),_0xbde0ed,!![]);},0x0);}function showInputDialog({title:_0xb2cf72,label:_0x245cf7,currentValue:_0x165570,placeholder:_0x18239b,onSave:_0x239eca}){const _0x3ee6eb=_0xc6d991,_0x57b318=_0x3ee6eb(0x1cb)+_0xb2cf72+_0x3ee6eb(0x1de)+_0x245cf7+'\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{const _0xde6a1c=_0x3ee6eb;_0x2b155a[0x0][_0xde6a1c(0x10b)](),_0x2b155a['remove']();},_0x223b13=()=>{const _0xaad09f=_0x3ee6eb,_0x46af64=_0x3ad368['val']()[_0xaad09f(0xf9)]();if(_0x46af64&&_0x46af64!==_0x165570)_0x239eca(_0x46af64);else{if(!_0x46af64){toastr[_0xaad09f(0xfc)]('名称不能为空!'),_0x3ad368[_0xaad09f(0x2c1)]();return;}}_0x3358b5();};_0x2b155a['find'](_0x3ee6eb(0x15a))['on'](_0x3ee6eb(0x29d),_0x223b13),_0x2b155a[_0x3ee6eb(0x1e5)](_0x3ee6eb(0x1ab))['on']('click',_0x3358b5),_0x3ad368['on']('keypress',_0x119201=>{if(_0x119201['which']===0xd)_0x223b13();}),_0x3ad368['on'](_0x3ee6eb(0x16a),_0x2b67c5=>{const _0x92fc04=_0x3ee6eb;if(_0x2b67c5[_0x92fc04(0x1d7)]===0x1b)_0x3358b5();}),_0x2b155a[0x0]['showModal'](),_0x3ad368[_0x3ee6eb(0x2c1)]()[_0x3ee6eb(0x2f0)]();}function _0x3643(){const _0x5e9b2b=['\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\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\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\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\x20\x20\x20','colIndex','table-updated','.popup-button-cancel','moveRow','table_injection_enabled','amily2-import-preset-btn','add-table-placeholder','rowIndex','input','.delete-table-btn','获取角色世界书失败。

','\x22\x20title=\x22下移\x22>','table_exclusion_rules','独立提取规则已保存。','\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【删除】:\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-export-preset-btn','
:\x20不超过\x20','zIndex','737peYDXJ','\x0a\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\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\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','data','index-col','block','.radio-group','amily2-export-preset-full-btn','success','restore-row-btn','CHAT_CHANGED','sillytavern_preset','html','addRow','showModal','cellIndex','\x0a\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','parentElement','.amily2-menu-open','selected','rows','nccs-api-enabled',']\x20检测到角色/聊天切换,正在刷新表格系统UI和世界书设置...','label','restoreRow','add-above','delete-row-btn','向左移动','which','\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\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','connectionManager','未选择或绑定世界书。

','exportPreset','parentNode','th.amily2-menu-open','remove','find','normal','在右加列','nccsApiUrl','down','fa-undo','stopPropagation','table-injection-depth','contenteditable','171HaZvty','amily2-resizer','字数限制为0表示不设置规则。','input[name=\x22table-injection-role\x22]','amily2-clear-global-preset-btn','amily2-context-menu','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','moveColumn','stringify','matches','appendTo','amily2-context-menu\x20amily2-row-context-menu','.edit-rules-btn','0.5',']”\x20吗?此操作不可逆!','向上移动','rename','alignItems','.sinan-nav-item','opacity','loadTables','marginTop','选择预设','nccs-fetch-models','injection','input[name=\x22filling-mode\x22]','table-role-system','amily2-table-wrapper','blur','【最终警告】您确定要永久废黜表格\x20“[','move-up','start','touchend','amily2-menu-open','未知表格','headers','querySelectorAll',']\x20刷新世界书设置时出错:','.json','htmlFor','删除该列','insertBefore','.amily2_opt_settings_block','找不到聊天内表格相关的开关,绑定失败。','warn','input[type=\x22checkbox\x22]:checked','table_selected_entries','.table-rename-icon','createTHead','无标题条目','恢复该行','rule_add','table-injection-enabled','-tab','\x20获取模型','nccs-max-tokens-value','无法获取SillyTavern配置文件列表','\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提示:输入内容将用于更新项目。
\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\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取消\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\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','起始楼层不能大于结束楼层。','#add-exclusion-rule-btn','attr','value','reorganizeEventBound','right','then','end','display','deleteTable','marginBottom','[内存储司]\x20加载世界书条目失败:','filling_mode','span','[内存储司]\x20重新整理功能导入失败:','add-left','floor-end-input','table_worldbook_source','nccsApiKey','流程提示词已恢复为默认。','render_on_every_message','type','fa-arrow-right','40px','您确定要将规则提示词恢复为默认设置吗?','table_worldbook_char_limit_value','addEventListener','Nccs\x20API获取到\x20','entries','#new-rule-limit-input','请输入列名...','bookName','\x20创建第一行','th.index-col','getBatchFillerRuleTemplate','bottom','#sinan-','nccs-temperature-value','指令模板编辑器已成功绑定。','clearGlobalPreset','rollback-and-refill-btn','nccsEnabled','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20所选世界书中没有条目。

','新表格','none','offsetWidth','move-table-up-btn','updateRow','context-reading-value','(pointer:\x20coarse)','批量填表-流程提示词已保存。','。请切换聊天以应用更改。','table-injection-position','.amily2-table-wrapper','table-system-master-switch','您确定要删除\x20“','change','4218095YSHVDI','.settings-group','addHighlight','686754IKfXtA','[内存储司-工部]\x20缺少表格数据或容器,无法渲染。','file_name','点击添加第一行','moveTable','startsWith','delete-row','批量填表-规则提示词已恢复默认。','4lgIIUs','\x0aUID:\x20','规则提示词已保存。','Nccs\x20API连接测试成功!','move-row-up-btn','toggle','checkbox-item','未找到可用的SillyTavern配置文件','charLimitRule','position','nccs-api-model','col-index','updateTableRules','flex','val','聊天内表格显示已','rowStatuses','left','insertRow','click','reorganize-table-btn','clientX','scrollLeft','extensionSettings','length','deleteColumn','appendChild','move-right','removeEventListener','\x22\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\x20style=\x22padding:\x2010px;\x20border-radius:\x206px;\x20border:\x201px\x20solid\x20rgba(255,255,255,0.3);\x20background:\x20rgba(0,0,0,0.2);\x20color:\x20#fff;\x20font-size:\x201em;\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\x20\x20\x20placeholder=\x22','log','name','touchmove','touchstart','列名:','overflowX','表格注入设置已成功绑定。','table_worldbook_entry_list','pending-deletion-row','checkbox','add-below','nextSibling','table-independent-rules-enabled','.rule-end','Nccs\x20API连接测试出错:','delete','active','has','floor-start-input','pointer','\x20获取中...','col','table_tags_to_extract','\x22\x20title=\x22重命名\x22>\x20','世界书设置已成功绑定。','focus','addColumn','importGlobalPreset','.add-col-btn','character','option','body','children','main-api','聊天内表格显示设置及其依赖关系已成功绑定。','scrollTop','openai_test','#rule-delete','uid','\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\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','持续渲染最新消息功能已','includes','成功加载\x20','add-row-below-btn','\x22\x20placeholder=\x22例如:\x20content,game,time\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20仅提取指定XML标签的内容,例如填“content”,即提取...中的内容。
\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','insertCell','div[style*=\x22overflowX\x22]','createTBody','../core/table-system/batch-filler.js','comment','role','流程提示词已保存。','amily2-context-menu\x20amily2-header-menu','disabled','table_refresh_worldbooks','\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当表格总行数超过设定值时,将在表格底部显示警告。\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\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【说明】:\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测试连接','100%','previousElementSibling','additional','

加载条目中...

','amily2-table-','Nccs\x20API连接测试成功','Nccs\x20API事件绑定完成','nccs-api-key','preventDefault','世界书:\x20','select','isCurrentTablesEmpty','未知列\x20(','nccs-api-model-select','danger','trim','\x22>\x20','ai-flow-template-editor','warning','touches','contains','Nccs\x20API获取模型失败:','ai-flow-template-restore-btn','.sinan-tab-pane','您确定要将表格状态回退到上一楼,并使用最新消息重新填表吗?','#rule-add','closest','nccs-temperature','getMemoryState','优化中填表','楼层不能小于1。','innerHTML','.remove-rule-btn','close','auto','startFloorRangeFilling','menu_button\x20small_button','删除该行','columnWidths','fill-table-now-btn','justifyContent','pending-deletion','charLimitRules','#rule-row-limit-value','nccs-api-url','table_worldbook_select_wrapper','.control-block-with-switch','addTable','6WxNUuP','.move-table-up-btn','规则提示词已恢复为默认。','top','table_selected_worldbooks','\x22\x20title=\x22废黜此表\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20','context_reading_level','\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\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保存\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\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20','rowLimitRule','show-table-in-chat-toggle','relative','getTime','colgroup','.hly-scroll','--\x20选择要添加规则的列\x20--','内存状态为空,从聊天记录加载作为后备。','table_worldbook_enabled','\x0a\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\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内容长度限制\x20(0为禁用)\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\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','context-reading-slider-container','visible','textContent','.move-table-down-btn','updateColumnWidth','配置独立提取规则','add-row-above-btn','编辑列名','title','startCurrentFloorFilling','fa-arrow-up','book','table_worldbook_checkbox_list','在左加列','tableIndex','amily2-clear-all-tables-btn','classList','forEach','[内存储司]\x20获取角色世界书失败:','未获取到可用模型','.amily2-context-menu','createElement','”\x20列吗?','2px','\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【增加】:\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世界书设置已刷新','在下加行','parse','nccs-test-connection','#current-char-limit-rules','message','\x22\x20title=\x22上移\x22>','.popup-button-ok','已禁用','成功获取\x20','请输入一个有效的字数限制(大于等于0)。','\x22\x20placeholder=\x22起始标记\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{const _0x1a0eb7=_0x1d01ad;_0x93db26[_0x1a0eb7(0x193)](_0x45d69e,_0x172498,_0x51b6c5),renderTables(),toastr[_0x1a0eb7(0x1c3)]('列名已更新为\x20\x22'+_0x51b6c5+'\x22');}});}function showTableNameEditor(_0x38d15b,_0x2288f0){const _0x524fc0=_0xc6d991;showInputDialog({'title':_0x524fc0(0x2d0),'label':'表名:','currentValue':_0x2288f0,'placeholder':'请输入表名...','onSave':_0x5657be=>{const _0x48d431=_0x524fc0;_0x93db26[_0x48d431(0x181)](_0x38d15b,_0x5657be),renderTables(),toastr[_0x48d431(0x1c3)](_0x48d431(0x178)+_0x5657be+'\x22');}});}function positionContextMenu(_0x5cf053,_0x49230f){const _0x1918ea=_0xc6d991;_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x293)]='absolute',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x1ba)]='10000',_0x5cf053['style'][_0x1918ea(0x29b)]='0',_0x5cf053[_0x1918ea(0x263)]['right']=_0x1918ea(0x10c),_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x203)]='',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x232)]='',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x19a)]='',_0x5cf053[_0x1918ea(0x263)]['overflowY']='';const _0x32e35a=window['innerHeight'],_0xffec4e=_0x49230f['getBoundingClientRect'](),_0x2a5629=0xc8,_0x10b36d=_0x49230f[_0x1918ea(0x104)](_0x1918ea(0x127)),_0x4873ac=_0x10b36d?_0x10b36d[_0x1918ea(0x12d)]():{'top':0x0,'bottom':_0x32e35a},_0x3e88db=Math['min'](_0x32e35a,_0x4873ac['bottom'])-_0xffec4e[_0x1918ea(0x24b)],_0x19329a=_0xffec4e[_0x1918ea(0x11d)]-Math['max'](0x0,_0x4873ac['top']);_0x3e88db<_0x2a5629&&_0x19329a>_0x3e88db?(_0x5cf053[_0x1918ea(0x263)]['top']='auto',_0x5cf053['style']['bottom']=_0x1918ea(0x2e6),_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x232)]=_0x1918ea(0x151)):(_0x5cf053[_0x1918ea(0x263)]['top']=_0x1918ea(0x2e6),_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x24b)]='auto',_0x5cf053['style'][_0x1918ea(0x203)]=_0x1918ea(0x151));const _0x18d1a8=0xa0,_0x3ca7a7=_0x49230f['closest'](_0x1918ea(0x269)),_0x2d66c0=_0x3ca7a7?_0x3ca7a7['closest'](_0x1918ea(0x2d8)):null;if(_0x2d66c0){const _0x2b373e=_0x2d66c0[_0x1918ea(0x12d)](),_0x58106a=_0xffec4e['left']-_0x2b373e[_0x1918ea(0x29b)];_0x58106a+_0x18d1a8>_0x2b373e[_0x1918ea(0x198)]-0x14&&(_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x29b)]='auto',_0x5cf053[_0x1918ea(0x263)][_0x1918ea(0x22d)]='0');}}export function renderTables(){const _0x1d6dd1=_0xc6d991;let _0x3a4c57=_0x93db26[_0x1d6dd1(0x106)]();!_0x3a4c57&&(log(_0x1d6dd1(0x129),_0x1d6dd1(0x21a)),_0x3a4c57=_0x93db26[_0x1d6dd1(0x202)]());const _0x10836d=getAllTablesContainer();if(!_0x3a4c57||!_0x10836d){console[_0x1d6dd1(0x26a)](_0x1d6dd1(0x283));return;}const _0x42c3ce=_0x93db26['getHighlights'](),_0x323042=_0x93db26[_0x1d6dd1(0x170)](),_0x1de6b4=document[_0x1d6dd1(0x19d)](),_0x33c80d=document['getElementById'](_0x1d6dd1(0x1af));_0x33c80d&&_0x33c80d[_0x1d6dd1(0x1e4)](),_0x3a4c57['forEach']((_0x449a66,_0x559cb1)=>{const _0x473ea6=_0x1d6dd1,_0x1325fe=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x1325fe[_0x473ea6(0x263)][_0x473ea6(0x230)]='flex',_0x1325fe[_0x473ea6(0x263)][_0x473ea6(0x112)]='space-between',_0x1325fe[_0x473ea6(0x263)][_0x473ea6(0x1ff)]=_0x473ea6(0x165);const _0xbbdc6=document[_0x473ea6(0x14f)]('h3');_0x323042['has'](_0x559cb1)&&_0xbbdc6[_0x473ea6(0x14a)][_0x473ea6(0x197)](_0x473ea6(0x1aa));_0xbbdc6[_0x473ea6(0x109)]=_0x473ea6(0x194)+_0x559cb1+_0x473ea6(0x2bf)+_0x449a66[_0x473ea6(0x2a9)];const _0x119fcd=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x119fcd[_0x473ea6(0x188)]='table-controls';const _0x54b3e3=_0x559cb1>0x0?_0x473ea6(0x252)+_0x559cb1+_0x473ea6(0x159):'',_0xeba45f=_0x559cb1<_0x3a4c57[_0x473ea6(0x2a2)]-0x1?_0x473ea6(0x19c)+_0x559cb1+_0x473ea6(0x1b4):'';_0x119fcd[_0x473ea6(0x109)]=_0x473ea6(0x1f4)+_0x54b3e3+_0x473ea6(0x1f4)+_0xeba45f+_0x473ea6(0x183)+_0x559cb1+_0x473ea6(0x266)+_0x559cb1+_0x473ea6(0x11f),_0x1325fe[_0x473ea6(0x2a4)](_0xbbdc6),_0x1325fe['appendChild'](_0x119fcd),_0x1de6b4['appendChild'](_0x1325fe);const _0x326ee0=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x326ee0[_0x473ea6(0x188)]=_0x473ea6(0x209);const _0x1b2282=document[_0x473ea6(0x14f)]('table');_0x1b2282['id']=_0x473ea6(0x2ea)+_0x559cb1,_0x1b2282['dataset'][_0x473ea6(0x148)]=_0x559cb1;const _0x5a1ad5=document[_0x473ea6(0x14f)](_0x473ea6(0x126)),_0x4692a3=document['createElement']('col');_0x4692a3[_0x473ea6(0x263)][_0x473ea6(0x198)]=_0x473ea6(0x23f),_0x5a1ad5[_0x473ea6(0x2a4)](_0x4692a3);_0x449a66['headers']&&_0x449a66['headers'][_0x473ea6(0x14b)]((_0x529473,_0x306561)=>{const _0x1ebb30=_0x473ea6,_0x444246=document[_0x1ebb30(0x14f)]('col'),_0x2eee94=_0x449a66[_0x1ebb30(0x110)]&&_0x449a66[_0x1ebb30(0x110)][_0x306561]?_0x449a66[_0x1ebb30(0x110)][_0x306561]:0x5a;_0x444246['style']['width']=_0x2eee94+'px',_0x5a1ad5['appendChild'](_0x444246);});_0x1b2282[_0x473ea6(0x2a4)](_0x5a1ad5);let _0x2b62df=0x0;const _0x4fd198=_0x5a1ad5[_0x473ea6(0x212)](_0x473ea6(0x2bd));_0x4fd198[_0x473ea6(0x14b)](_0x1e35f0=>{const _0x4aa67e=_0x473ea6;_0x2b62df+=parseInt(_0x1e35f0['style'][_0x4aa67e(0x198)],0xa);}),_0x1b2282['style'][_0x473ea6(0x198)]=_0x2b62df+'px';const _0x4b27c5=_0x1b2282[_0x473ea6(0x21e)](),_0x594470=_0x4b27c5[_0x473ea6(0x29c)](),_0x11c62c=document[_0x473ea6(0x14f)]('th');_0x11c62c[_0x473ea6(0x188)]=_0x473ea6(0x1bf),_0x11c62c[_0x473ea6(0x13c)]='#',_0x11c62c[_0x473ea6(0x263)]['cursor']='pointer',_0x11c62c[_0x473ea6(0x142)]=_0x473ea6(0x285);if(!_0x449a66['rows']||_0x449a66['rows']['length']===0x0){const _0x156f63=document[_0x473ea6(0x14f)](_0x473ea6(0x16b));_0x156f63[_0x473ea6(0x188)]=_0x473ea6(0x2de),_0x156f63[_0x473ea6(0x263)][_0x473ea6(0x230)]=_0x473ea6(0x272);const _0x42e2e7=document['createElement'](_0x473ea6(0x26b));_0x42e2e7[_0x473ea6(0x109)]=_0x473ea6(0x248),_0x42e2e7[_0x473ea6(0x188)]=_0x473ea6(0x10e),_0x42e2e7['addEventListener'](_0x473ea6(0x29d),_0xe3e010=>{const _0x59520e=_0x473ea6;_0xe3e010[_0x59520e(0x1eb)](),_0x93db26[_0x59520e(0x1c8)](_0x559cb1),renderTables();}),_0x156f63[_0x473ea6(0x2a4)](_0x42e2e7),_0x11c62c[_0x473ea6(0x2a4)](_0x156f63),_0x11c62c[_0x473ea6(0x242)](_0x473ea6(0x29d),_0x2882da=>{const _0x1de127=_0x473ea6;_0x2882da[_0x1de127(0x2ee)](),_0x2882da['stopPropagation'](),console[_0x1de127(0x2a8)]('Header\x20#\x20clicked\x20for\x20table',_0x559cb1),_0x93db26[_0x1de127(0x1c8)](_0x559cb1),renderTables(),toastr['success'](_0x1de127(0x190));});}_0x594470[_0x473ea6(0x2a4)](_0x11c62c),_0x449a66[_0x473ea6(0x211)]['forEach']((_0x32cc2a,_0x1af9c4)=>{const _0x4ddb95=_0x473ea6,_0x3e1392=document['createElement']('th');_0x3e1392[_0x4ddb95(0x137)]['colIndex']=_0x1af9c4,_0x3e1392[_0x4ddb95(0x263)][_0x4ddb95(0x135)]=_0x4ddb95(0x2bb);const _0x5631d4=document[_0x4ddb95(0x14f)](_0x4ddb95(0x235));_0x5631d4[_0x4ddb95(0x188)]='amily2-header-text',_0x5631d4['textContent']=_0x32cc2a,_0x3e1392[_0x4ddb95(0x2a4)](_0x5631d4);const _0x42d337=document[_0x4ddb95(0x14f)](_0x4ddb95(0x16b));_0x42d337['className']=_0x4ddb95(0x1f3);const _0x461913=[{'label':_0x4ddb95(0x1d6),'action':_0x4ddb95(0x261),'icon':'fa-arrow-left'},{'label':'向右移动','action':_0x4ddb95(0x2a5),'icon':_0x4ddb95(0x23e)},{'label':_0x4ddb95(0x147),'action':'add-left','icon':'fa-plus-circle'},{'label':_0x4ddb95(0x1e7),'action':'add-right','icon':_0x4ddb95(0x191)},{'label':_0x4ddb95(0x141),'action':'rename','icon':_0x4ddb95(0x17e)},{'label':_0x4ddb95(0x216),'action':_0x4ddb95(0x2b7),'icon':_0x4ddb95(0x171),'isDanger':!![]}];_0x461913[_0x4ddb95(0x14b)](({label:_0x5f15cd,action:_0x1c1556,icon:_0x52025c,isDanger:_0x41012b})=>{const _0x5d5de7=_0x4ddb95,_0x12877c=document[_0x5d5de7(0x14f)](_0x5d5de7(0x26b));_0x12877c[_0x5d5de7(0x13c)]=_0x5f15cd,_0x12877c['className']=_0x5d5de7(0x10e);if(_0x41012b)_0x12877c[_0x5d5de7(0x14a)][_0x5d5de7(0x197)](_0x5d5de7(0xf8));_0x12877c['addEventListener']('click',_0x41bbe5=>{const _0x24ed34=_0x5d5de7;_0x41bbe5[_0x24ed34(0x1eb)]();switch(_0x1c1556){case _0x24ed34(0x261):_0x93db26[_0x24ed34(0x1f5)](_0x559cb1,_0x1af9c4,_0x24ed34(0x29b));break;case _0x24ed34(0x2a5):_0x93db26['moveColumn'](_0x559cb1,_0x1af9c4,'right');break;case _0x24ed34(0x237):_0x93db26[_0x24ed34(0x161)](_0x559cb1,_0x1af9c4,_0x24ed34(0x29b));break;case _0x24ed34(0x176):_0x93db26[_0x24ed34(0x161)](_0x559cb1,_0x1af9c4,_0x24ed34(0x22d));break;case _0x24ed34(0x1fe):showColumnNameEditor(_0x559cb1,_0x1af9c4,_0x32cc2a);break;case _0x24ed34(0x2b7):confirm(_0x24ed34(0x27d)+_0x32cc2a+_0x24ed34(0x150))&&_0x93db26[_0x24ed34(0x2a3)](_0x559cb1,_0x1af9c4);break;}renderTables();}),_0x42d337[_0x5d5de7(0x2a4)](_0x12877c);}),_0x3e1392['appendChild'](_0x42d337);const _0x4a84f9=document[_0x4ddb95(0x14f)](_0x4ddb95(0x16b));_0x4a84f9[_0x4ddb95(0x188)]=_0x4ddb95(0x1ef),_0x3e1392[_0x4ddb95(0x2a4)](_0x4a84f9);const _0x54f4ba=_0x1d3ce4=>{const _0x4add9f=_0x4ddb95;_0x1d3ce4['preventDefault'](),_0x1d3ce4[_0x4add9f(0x1eb)](),isResizing=!![];const _0x16e9cb=_0x1d3ce4[_0x4add9f(0x195)][_0x4add9f(0x104)](_0x4add9f(0x269)),_0x3a6dbe=_0x1d3ce4[_0x4add9f(0x195)][_0x4add9f(0x1cc)],_0x5c21a7=_0x16e9cb[_0x4add9f(0x17d)]('colgroup\x20>\x20col:nth-child('+(_0x3a6dbe[_0x4add9f(0x1ca)]+0x1)+')'),_0x15cb15=_0x1d3ce4[_0x4add9f(0x23d)][_0x4add9f(0x287)]('touch'),_0x42554b=_0x15cb15?_0x1d3ce4['touches'][0x0][_0x4add9f(0x29f)]:_0x1d3ce4[_0x4add9f(0x29f)],_0x46d3d5=_0x3a6dbe[_0x4add9f(0x273)],_0x46dbe4=_0x5e9261=>{const _0x92a4b8=_0x4add9f,_0x35ed17=_0x15cb15?_0x5e9261[_0x92a4b8(0xfd)][0x0][_0x92a4b8(0x29f)]:_0x5e9261[_0x92a4b8(0x29f)],_0x2d5cfd=_0x46d3d5+(_0x35ed17-_0x42554b);_0x2d5cfd>0x32&&(_0x5c21a7[_0x92a4b8(0x263)][_0x92a4b8(0x198)]=_0x2d5cfd+'px');},_0x57e243=()=>{const _0xce8d00=_0x4add9f;document[_0xce8d00(0x2a6)](_0xce8d00(0x262),_0x46dbe4),document[_0xce8d00(0x2a6)]('mouseup',_0x57e243),document[_0xce8d00(0x2a6)]('touchmove',_0x46dbe4),document[_0xce8d00(0x2a6)](_0xce8d00(0x20e),_0x57e243);const _0x1b1a9c=parseInt(_0x5c21a7[_0xce8d00(0x263)][_0xce8d00(0x198)],0xa);_0x93db26[_0xce8d00(0x13e)](_0x559cb1,_0x1af9c4,_0x1b1a9c),setTimeout(()=>{isResizing=![];},0x0);};_0x15cb15?(document[_0x4add9f(0x242)](_0x4add9f(0x2aa),_0x46dbe4,{'passive':![]}),document[_0x4add9f(0x242)](_0x4add9f(0x20e),_0x57e243)):(document[_0x4add9f(0x242)](_0x4add9f(0x262),_0x46dbe4),document[_0x4add9f(0x242)](_0x4add9f(0x26d),_0x57e243));};_0x4a84f9[_0x4ddb95(0x242)]('mousedown',_0x54f4ba),_0x4a84f9[_0x4ddb95(0x242)](_0x4ddb95(0x2ab),_0x54f4ba,{'passive':![]}),_0x594470[_0x4ddb95(0x2a4)](_0x3e1392);});const _0x379ad3=_0x1b2282[_0x473ea6(0x2d9)]();_0x449a66[_0x473ea6(0x1cf)]&&_0x449a66[_0x473ea6(0x1cf)]['length']>0x0&&_0x449a66[_0x473ea6(0x1cf)][_0x473ea6(0x14b)]((_0x3b00f2,_0x1dba6e)=>{const _0x2c9f75=_0x473ea6,_0x4fdae7=_0x379ad3['insertRow']();_0x4fdae7[_0x2c9f75(0x137)][_0x2c9f75(0x1b0)]=_0x1dba6e;const _0x42f054=_0x449a66[_0x2c9f75(0x29a)]?_0x449a66['rowStatuses'][_0x1dba6e]:_0x2c9f75(0x1e6);_0x42f054===_0x2c9f75(0x113)&&_0x4fdae7[_0x2c9f75(0x14a)]['add'](_0x2c9f75(0x2b0));const _0x3b6b53=_0x4fdae7[_0x2c9f75(0x2d7)]();_0x3b6b53[_0x2c9f75(0x188)]=_0x2c9f75(0x1bf);const _0x1ea219=document[_0x2c9f75(0x14f)]('span');_0x1ea219[_0x2c9f75(0x13c)]=_0x1dba6e+0x1,_0x3b6b53['appendChild'](_0x1ea219);const _0x1b6e0b=document[_0x2c9f75(0x14f)](_0x2c9f75(0x16b));_0x1b6e0b[_0x2c9f75(0x188)]=_0x2c9f75(0x1f9);let _0x56eb66;_0x42f054===_0x2c9f75(0x113)?_0x56eb66=[{'label':_0x2c9f75(0x220),'action':'restore-row','icon':_0x2c9f75(0x1ea),'isSuccess':!![],'btnClass':_0x2c9f75(0x1c4)}]:_0x56eb66=[{'label':_0x2c9f75(0x1fd),'action':_0x2c9f75(0x20c),'icon':_0x2c9f75(0x144),'btnClass':_0x2c9f75(0x28e)},{'label':'向下移动','action':_0x2c9f75(0x19f),'icon':_0x2c9f75(0x163),'btnClass':_0x2c9f75(0x15f)},{'label':_0x2c9f75(0x160),'action':_0x2c9f75(0x1d4),'icon':_0x2c9f75(0x191),'btnClass':_0x2c9f75(0x140)},{'label':_0x2c9f75(0x154),'action':_0x2c9f75(0x2b2),'icon':_0x2c9f75(0x191),'btnClass':_0x2c9f75(0x2d5)},{'label':_0x2c9f75(0x10f),'action':_0x2c9f75(0x288),'icon':_0x2c9f75(0x171),'isDanger':!![],'btnClass':_0x2c9f75(0x1d5)}],_0x56eb66[_0x2c9f75(0x14b)](({label:_0x566338,action:_0x2a83d3,icon:_0x2d09ea,isDanger:_0x3e7db2,isSuccess:_0x3173d6})=>{const _0x451b63=_0x2c9f75,_0x2bcc21=document[_0x451b63(0x14f)](_0x451b63(0x26b));_0x2bcc21[_0x451b63(0x109)]=_0x451b63(0x174)+_0x2d09ea+_0x451b63(0xfa)+_0x566338,_0x2bcc21[_0x451b63(0x188)]=_0x451b63(0x10e);if(_0x3e7db2)_0x2bcc21[_0x451b63(0x14a)][_0x451b63(0x197)](_0x451b63(0xf8));if(_0x3173d6)_0x2bcc21[_0x451b63(0x14a)][_0x451b63(0x197)](_0x451b63(0x1c3));_0x2bcc21[_0x451b63(0x242)](_0x451b63(0x29d),_0x6d5b1c=>{const _0x1b631e=_0x451b63;_0x6d5b1c[_0x1b631e(0x1eb)]();switch(_0x2a83d3){case _0x1b631e(0x20c):_0x93db26[_0x1b631e(0x1ac)](_0x559cb1,_0x1dba6e,'up');break;case'move-down':_0x93db26[_0x1b631e(0x1ac)](_0x559cb1,_0x1dba6e,'down');break;case _0x1b631e(0x1d4):_0x93db26[_0x1b631e(0x29c)](_0x559cb1,_0x1dba6e,'above');break;case'add-below':_0x93db26[_0x1b631e(0x29c)](_0x559cb1,_0x1dba6e,'below');break;case _0x1b631e(0x288):_0x93db26['deleteRow'](_0x559cb1,_0x1dba6e);break;case _0x1b631e(0x256):_0x93db26[_0x1b631e(0x1d3)](_0x559cb1,_0x1dba6e);break;}if(_0x2a83d3===_0x1b631e(0x288)||_0x2a83d3===_0x1b631e(0x256)){}else renderTables();}),_0x1b6e0b[_0x451b63(0x2a4)](_0x2bcc21);}),_0x3b6b53[_0x2c9f75(0x2a4)](_0x1b6e0b),_0x3b00f2[_0x2c9f75(0x14b)]((_0x659437,_0x4e032d)=>{const _0x45c61d=_0x2c9f75,_0x1ff8c8=_0x4fdae7[_0x45c61d(0x2d7)](),_0x3b175f=document[_0x45c61d(0x14f)](_0x45c61d(0x16b));_0x3b175f['className']='amily2-cell-content',_0x3b175f[_0x45c61d(0x13c)]=_0x659437,_0x1ff8c8[_0x45c61d(0x2a4)](_0x3b175f);_0x42f054!=='pending-deletion'&&!isTouchDevice()&&_0x1ff8c8[_0x45c61d(0x18d)](_0x45c61d(0x1ed),_0x45c61d(0x18a));_0x1ff8c8['dataset'][_0x45c61d(0x1a9)]=_0x4e032d,_0x1ff8c8[_0x45c61d(0x137)][_0x45c61d(0x1d2)]=_0x449a66[_0x45c61d(0x211)][_0x4e032d]||'';const _0x43ff1f=_0x559cb1+'-'+_0x1dba6e+'-'+_0x4e032d;_0x42c3ce[_0x45c61d(0x2b9)](_0x43ff1f)&&_0x1ff8c8[_0x45c61d(0x14a)][_0x45c61d(0x197)]('cell-highlight');});}),_0x326ee0['appendChild'](_0x1b2282),_0x1de6b4['appendChild'](_0x326ee0);}),_0x10836d['innerHTML']='',_0x10836d[_0x1d6dd1(0x2a4)](_0x1de6b4),_0x33c80d&&_0x10836d['appendChild'](_0x33c80d),updateOrInsertTableInChat();}function openTableRuleEditor(){const _0x998dce=_0xc6d991,_0x5cb741=extension_settings[extensionName],_0x3a0c44=_0x5cb741[_0x998dce(0x2be)]||'',_0x27e0ff=_0x5cb741[_0x998dce(0x1b5)]||[],_0x67ea8b=_0x27e0ff[_0x998dce(0x189)]((_0x1e6de2,_0x3dc8e7)=>_0x998dce(0x12b)+_0x3dc8e7+_0x998dce(0x1d8)+_0x1e6de2[_0x998dce(0x20d)]+_0x998dce(0x15e)+_0x1e6de2[_0x998dce(0x22f)]+'\x22\x20placeholder=\x22结束标记\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')[_0x998dce(0x17c)](''),_0x4e092f=_0x998dce(0x1bc)+_0x3a0c44+_0x998dce(0x2d6)+_0x67ea8b+'\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\x20\x20\x20\x20移除所有被起始和结束标记包裹的内容(例如\x20OOC\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',_0x1ae8ec=showHtmlModal(_0x998dce(0x13f),_0x4e092f,{'onOk':()=>{const _0x5af4a0=_0x998dce,_0x24de17=document[_0x5af4a0(0x16c)](_0x5af4a0(0x177))[_0x5af4a0(0x22b)];updateAndSaveTableSetting(_0x5af4a0(0x2be),_0x24de17);const _0x484396=[];document[_0x5af4a0(0x212)]('#exclusion-rules-list\x20.exclusion-rule-item')['forEach'](_0x24c399=>{const _0x38f351=_0x5af4a0,_0x4b26ec=_0x24c399[_0x38f351(0x17d)]('.rule-start')[_0x38f351(0x22b)][_0x38f351(0xf9)](),_0x489781=_0x24c399[_0x38f351(0x17d)](_0x38f351(0x2b5))[_0x38f351(0x22b)]['trim']();_0x4b26ec&&_0x489781&&_0x484396[_0x38f351(0x1a4)]({'start':_0x4b26ec,'end':_0x489781});}),updateAndSaveTableSetting('table_exclusion_rules',_0x484396),toastr[_0x5af4a0(0x1c3)](_0x5af4a0(0x1b6));},'onShow':_0x2c6b51=>{const _0x453313=_0x998dce,_0x88febe=_0x2c6b51[_0x453313(0x1e5)]('#exclusion-rules-list');_0x2c6b51['find'](_0x453313(0x229))['on'](_0x453313(0x29d),()=>{const _0x55beb0=_0x453313,_0x1cc9ac=_0x88febe[_0x55beb0(0x2c8)]()[_0x55beb0(0x2a2)],_0x4164d4='\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\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\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';_0x88febe['append'](_0x4164d4);}),_0x88febe['on'](_0x453313(0x29d),_0x453313(0x10a),function(){$(this)['closest']('.exclusion-rule-item')['remove']();});}});}function openRuleEditor(_0x2aaf19){const _0x2ac8b4=_0xc6d991,_0x5e47d6=_0x93db26[_0x2ac8b4(0x106)]();if(!_0x5e47d6||!_0x5e47d6[_0x2aaf19])return;const _0x45e1e7=_0x5e47d6[_0x2aaf19];_0x45e1e7[_0x2ac8b4(0x292)]&&!_0x45e1e7[_0x2ac8b4(0x114)]&&(_0x45e1e7[_0x2ac8b4(0x114)]={},_0x45e1e7[_0x2ac8b4(0x292)][_0x2ac8b4(0x19b)]!==-0x1&&(_0x45e1e7[_0x2ac8b4(0x114)][_0x45e1e7[_0x2ac8b4(0x292)][_0x2ac8b4(0x19b)]]=_0x45e1e7[_0x2ac8b4(0x292)][_0x2ac8b4(0x1dd)]));const _0x27f775=_0x45e1e7['charLimitRules']||{},_0xee4110=_0xf4e9cc=>{const _0x2d01c8=_0x2ac8b4;return Object[_0x2d01c8(0x244)](_0xf4e9cc)[_0x2d01c8(0x189)](([_0x1bcdac,_0x15f166])=>{const _0x4a5d82=_0x2d01c8,_0x1d943d=_0x45e1e7[_0x4a5d82(0x211)][_0x1bcdac]||_0x4a5d82(0x2f2)+_0x1bcdac+')';return'\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'+_0x1d943d+_0x4a5d82(0x1b9)+_0x15f166+_0x4a5d82(0x2e1)+_0x1bcdac+_0x4a5d82(0x2d1);})[_0x2d01c8(0x17c)]('');},_0xe4588e=_0x2fa96e=>{const _0x3b6f5e=_0x2ac8b4;return _0x45e1e7[_0x3b6f5e(0x211)][_0x3b6f5e(0x189)]((_0x561018,_0x4c9842)=>{const _0x47c39a=_0x3b6f5e;if(_0x2fa96e[_0x4c9842])return'';return _0x47c39a(0x2cf)+_0x4c9842+'\x22>'+_0x561018+'';})['join']('');},_0x3c8e72='\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编辑\x20“'+_0x45e1e7[_0x2ac8b4(0x2a9)]+_0x2ac8b4(0x139)+_0xee4110(_0x27f775)+_0x2ac8b4(0x1a8)+_0xe4588e(_0x27f775)+'\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\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\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\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\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\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\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\x0a\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(0为禁用)\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{_0x11c53[0x0]['close'](),_0x11c53['remove']();},_0x4ad40c=()=>{const _0x137c6d=_0x2ac8b4,_0x111e03=JSON[_0x137c6d(0x155)](_0x11c53[_0x137c6d(0x1e5)](_0x137c6d(0x157))[_0x137c6d(0x22a)](_0x137c6d(0x18f))||'{}');_0x11c53['find'](_0x137c6d(0x157))[_0x137c6d(0x1c7)](_0xee4110(_0x111e03)),_0x11c53[_0x137c6d(0x1e5)]('#new-rule-column-select')['html'](_0x137c6d(0x128)+_0xe4588e(_0x111e03));};_0x11c53['find'](_0x2ac8b4(0x157))['attr']('data-rules',JSON['stringify'](_0x27f775)),_0x11c53['on']('click','#add-char-limit-rule-btn',()=>{const _0x461a90=_0x2ac8b4,_0x5337d=parseInt(_0x11c53[_0x461a90(0x1e5)]('#new-rule-column-select')[_0x461a90(0x298)](),0xa),_0xd19ddb=parseInt(_0x11c53[_0x461a90(0x1e5)](_0x461a90(0x245))['val'](),0xa);if(_0x5337d===-0x1){toastr[_0x461a90(0xfc)]('请选择一个列。');return;}if(isNaN(_0xd19ddb)||_0xd19ddb<0x0){toastr[_0x461a90(0xfc)](_0x461a90(0x15d));return;}const _0x29e1d3=JSON[_0x461a90(0x155)](_0x11c53[_0x461a90(0x1e5)](_0x461a90(0x157))[_0x461a90(0x22a)](_0x461a90(0x18f))||'{}');_0xd19ddb>0x0?(_0x29e1d3[_0x5337d]=_0xd19ddb,_0x11c53[_0x461a90(0x1e5)](_0x461a90(0x157))['attr'](_0x461a90(0x18f),JSON[_0x461a90(0x1f6)](_0x29e1d3)),_0x4ad40c()):toastr['info'](_0x461a90(0x1f0));}),_0x11c53['on']('click',_0x2ac8b4(0x1dc),function(){const _0x30d1b0=_0x2ac8b4,_0x5433a7=$(this)[_0x30d1b0(0x1be)](_0x30d1b0(0x295)),_0x59ec31=JSON[_0x30d1b0(0x155)](_0x11c53[_0x30d1b0(0x1e5)](_0x30d1b0(0x157))[_0x30d1b0(0x22a)]('data-rules')||'{}');delete _0x59ec31[_0x5433a7],_0x11c53[_0x30d1b0(0x1e5)](_0x30d1b0(0x157))[_0x30d1b0(0x22a)]('data-rules',JSON['stringify'](_0x59ec31)),_0x4ad40c();}),_0x11c53[_0x2ac8b4(0x1e5)](_0x2ac8b4(0x15a))['on']('click',()=>{const _0x54a971=_0x2ac8b4,_0xbd88bc=JSON[_0x54a971(0x155)](_0x11c53[_0x54a971(0x1e5)]('#current-char-limit-rules')['attr'](_0x54a971(0x18f))||'{}'),_0xfc60a6=parseInt(_0x11c53[_0x54a971(0x1e5)](_0x54a971(0x115))[_0x54a971(0x298)](),0xa),_0x1b441c={'note':_0x11c53[_0x54a971(0x1e5)]('#rule-note')[_0x54a971(0x298)](),'rule_add':_0x11c53[_0x54a971(0x1e5)](_0x54a971(0x103))[_0x54a971(0x298)](),'rule_delete':_0x11c53['find'](_0x54a971(0x2cd))['val'](),'rule_update':_0x11c53[_0x54a971(0x1e5)]('#rule-update')[_0x54a971(0x298)](),'charLimitRules':_0xbd88bc,'rowLimitRule':_0xfc60a6};_0x93db26[_0x54a971(0x296)](_0x2aaf19,_0x1b441c),_0x5a61fe();}),_0x11c53['find']('.popup-button-cancel')['on'](_0x2ac8b4(0x29d),_0x5a61fe),_0x11c53[0x0][_0x2ac8b4(0x1c9)]();}function bindInjectionSettings(){const _0x18fad7=_0xc6d991,_0xd15c37=extension_settings[extensionName],_0x5987ee=document[_0x18fad7(0x16c)](_0x18fad7(0x27c)),_0x177c73=document[_0x18fad7(0x16c)](_0x18fad7(0x222)),_0x3f1f47=document['getElementById'](_0x18fad7(0x27a)),_0x4313b8=document['getElementById'](_0x18fad7(0x1ec)),_0x2cc9b0=document[_0x18fad7(0x212)](_0x18fad7(0x1f1));if(!_0x5987ee||!_0x177c73||!_0x3f1f47||!_0x4313b8||!_0x2cc9b0[_0x18fad7(0x2a2)])return;const _0x2f9a0c=()=>{const _0xa24c78=_0x18fad7,_0x4df20d=_0x3f1f47['value'],_0xa9cbfd=_0x5987ee['checked'],_0x34fd16=_0x4df20d==='1';_0x177c73[_0xa24c78(0x2df)]=!_0xa9cbfd,_0x3f1f47[_0xa24c78(0x2df)]=!_0xa9cbfd,_0x4313b8[_0xa24c78(0x2df)]=!_0xa9cbfd||!_0x34fd16,_0x2cc9b0[_0xa24c78(0x14b)](_0xb4213f=>_0xb4213f[_0xa24c78(0x2df)]=!_0xa9cbfd||!_0x34fd16);const _0x1d5be8=_0xa9cbfd?'1':_0xa24c78(0x1fb);_0x177c73['style'][_0xa24c78(0x201)]=_0x1d5be8;_0x177c73[_0xa24c78(0x104)](_0xa24c78(0x118))&&(_0x177c73[_0xa24c78(0x104)]('.control-block-with-switch')['style'][_0xa24c78(0x201)]=_0x1d5be8);_0x3f1f47[_0xa24c78(0x263)][_0xa24c78(0x201)]=_0x1d5be8;_0x3f1f47[_0xa24c78(0x2e7)]&&(_0x3f1f47['previousElementSibling']['style'][_0xa24c78(0x201)]=_0x1d5be8);const _0x54e34b=_0xa9cbfd&&_0x34fd16?'1':'0.5';_0x4313b8['style'][_0xa24c78(0x201)]=_0x54e34b;_0x4313b8[_0xa24c78(0x2e7)]&&(_0x4313b8[_0xa24c78(0x2e7)][_0xa24c78(0x263)]['opacity']=_0x54e34b);const _0x751634=_0xa9cbfd&&_0x34fd16?'1':_0xa24c78(0x1fb),_0x38538b=document['getElementById'](_0xa24c78(0x208))?.[_0xa24c78(0x104)](_0xa24c78(0x1c1));_0x38538b&&(_0x38538b[_0xa24c78(0x263)][_0xa24c78(0x201)]=_0x751634,_0x38538b['previousElementSibling']&&(_0x38538b[_0xa24c78(0x2e7)][_0xa24c78(0x263)][_0xa24c78(0x201)]=_0x751634));const _0x77843c=document[_0xa24c78(0x212)](_0xa24c78(0x207));_0x77843c['forEach'](_0x7a3edd=>{const _0x13098e=_0xa24c78;_0x7a3edd[_0x13098e(0x2df)]=!_0xa9cbfd;const _0x11e9bc=_0x7a3edd['closest'](_0x13098e(0x1d2));_0x11e9bc&&(_0x11e9bc[_0x13098e(0x263)][_0x13098e(0x201)]=_0xa9cbfd?'1':_0x13098e(0x1fb));});const _0x5ea175=document['getElementById']('fill-table-now-btn');_0x5ea175&&(_0x5ea175['disabled']=!_0xa9cbfd,_0x5ea175[_0xa24c78(0x263)][_0xa24c78(0x201)]=_0xa9cbfd?'1':_0xa24c78(0x1fb));};_0x5987ee[_0x18fad7(0x26c)]=_0xd15c37[_0x18fad7(0x254)]!==![],_0x177c73[_0x18fad7(0x26c)]=_0xd15c37[_0x18fad7(0x1ad)],_0x3f1f47['value']=_0xd15c37['injection'][_0x18fad7(0x293)],_0x4313b8[_0x18fad7(0x22b)]=_0xd15c37['injection']['depth'],_0x2cc9b0[_0x18fad7(0x14b)](_0x56e3c7=>{const _0x28c3ba=_0x18fad7;parseInt(_0x56e3c7['value'],0xa)===_0xd15c37[_0x28c3ba(0x206)][_0x28c3ba(0x2dc)]&&(_0x56e3c7['checked']=!![]);}),_0x2f9a0c();if(_0x5987ee[_0x18fad7(0x137)][_0x18fad7(0x167)])return;_0x5987ee[_0x18fad7(0x242)](_0x18fad7(0x27e),()=>{const _0x656671=_0x18fad7;_0xd15c37[_0x656671(0x254)]=_0x5987ee['checked'],saveSettingsDebounced(),_0x2f9a0c();const _0x109b2e=_0x5987ee[_0x656671(0x26c)]?_0x656671(0x26e):_0x656671(0x15b);toastr['info'](_0x656671(0x196)+_0x109b2e+'。'),log(_0x656671(0x196)+_0x109b2e+'。','info');}),_0x177c73[_0x18fad7(0x242)](_0x18fad7(0x27e),()=>{const _0xb59af=_0x18fad7;_0xd15c37['table_injection_enabled']=_0x177c73[_0xb59af(0x26c)],saveSettingsDebounced();}),_0x3f1f47[_0x18fad7(0x242)](_0x18fad7(0x27e),()=>{const _0x2af862=_0x18fad7;_0xd15c37[_0x2af862(0x206)][_0x2af862(0x293)]=parseInt(_0x3f1f47['value'],0xa),saveSettingsDebounced(),_0x2f9a0c();}),_0x4313b8['addEventListener'](_0x18fad7(0x1b1),()=>{const _0x41f763=_0x18fad7;_0xd15c37[_0x41f763(0x206)][_0x41f763(0x164)]=parseInt(_0x4313b8['value'],0xa),saveSettingsDebounced();}),_0x2cc9b0['forEach'](_0x1f12a4=>{_0x1f12a4['addEventListener']('change',()=>{const _0x87d006=_0x54ef;_0x1f12a4[_0x87d006(0x26c)]&&(_0xd15c37[_0x87d006(0x206)][_0x87d006(0x2dc)]=parseInt(_0x1f12a4[_0x87d006(0x22b)],0xa),saveSettingsDebounced());});}),_0x5987ee[_0x18fad7(0x137)][_0x18fad7(0x167)]=_0x18fad7(0x18a),log(_0x18fad7(0x2ae),_0x18fad7(0x1c3));}function updateAndSaveTableSetting(_0x2c1ccd,_0xd7edea){!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][_0x2c1ccd]=_0xd7edea,saveSettingsDebounced();}function bindWorldBookSettings(){const _0x52e59d=_0xc6d991,_0x23152c=extension_settings[extensionName];if(_0x23152c[_0x52e59d(0x12a)]===undefined)_0x23152c[_0x52e59d(0x12a)]=![];if(_0x23152c[_0x52e59d(0x17b)]===undefined)_0x23152c[_0x52e59d(0x17b)]=0x7530;if(_0x23152c[_0x52e59d(0x239)]===undefined)_0x23152c['table_worldbook_source']=_0x52e59d(0x2c5);if(_0x23152c[_0x52e59d(0x11e)]===undefined)_0x23152c[_0x52e59d(0x11e)]=[];if(_0x23152c[_0x52e59d(0x21c)]===undefined)_0x23152c['table_selected_entries']={};const _0xba1878=document[_0x52e59d(0x16c)](_0x52e59d(0x12a)),_0x19bf57=document['getElementById'](_0x52e59d(0x17b)),_0x55f9cc=document['getElementById'](_0x52e59d(0x241)),_0x2915ca=document['querySelectorAll']('input[name=\x22table_worldbook_source\x22]'),_0x3695e6=document[_0x52e59d(0x16c)](_0x52e59d(0x117)),_0x33478c=document[_0x52e59d(0x16c)](_0x52e59d(0x2e0)),_0x20030a=document[_0x52e59d(0x16c)](_0x52e59d(0x146)),_0x5f2fa4=document['getElementById'](_0x52e59d(0x2af));if(!_0xba1878||!_0x19bf57||!_0x55f9cc||!_0x2915ca[_0x52e59d(0x2a2)]||!_0x3695e6||!_0x33478c||!_0x20030a||!_0x5f2fa4){log('无法找到世界书设置的相关UI元素,绑定失败。',_0x52e59d(0x21a));return;}const _0x50ee26=()=>{const _0x5029f4=_0x52e59d,_0x1e287f={};_0x5f2fa4['querySelectorAll'](_0x5029f4(0x21b))[_0x5029f4(0x14b)](_0x21faf1=>{const _0x6dcf4c=_0x5029f4,_0x30d180=_0x21faf1[_0x6dcf4c(0x137)][_0x6dcf4c(0x145)],_0x22cbd5=_0x21faf1['dataset'][_0x6dcf4c(0x2ce)];!_0x1e287f[_0x30d180]&&(_0x1e287f[_0x30d180]=[]),_0x1e287f[_0x30d180][_0x6dcf4c(0x1a4)](_0x22cbd5);}),_0x23152c[_0x5029f4(0x21c)]=_0x1e287f,saveSettingsDebounced();},_0x477014=async()=>{const _0x1ba53e=_0x52e59d;_0x5f2fa4[_0x1ba53e(0x109)]=_0x1ba53e(0x2e9);const _0x5d720c=_0x23152c[_0x1ba53e(0x239)]||_0x1ba53e(0x2c5);let _0x1ec73e=[];if(_0x5d720c===_0x1ba53e(0x162))_0x1ec73e=_0x23152c[_0x1ba53e(0x11e)]||[];else{if(this_chid!==undefined&&this_chid>=0x0&&characters[this_chid])try{const _0x3209ce=await safeCharLorebooks({'type':_0x1ba53e(0x187)});if(_0x3209ce[_0x1ba53e(0x185)])_0x1ec73e[_0x1ba53e(0x1a4)](_0x3209ce[_0x1ba53e(0x185)]);if(_0x3209ce[_0x1ba53e(0x2e8)]?.[_0x1ba53e(0x2a2)])_0x1ec73e['push'](..._0x3209ce['additional']);}catch(_0x2ac5a1){console['error'](_0x1ba53e(0x14c),_0x2ac5a1),_0x5f2fa4['innerHTML']=_0x1ba53e(0x1b3);return;}else{_0x5f2fa4[_0x1ba53e(0x109)]='请先加载一个角色。

';return;}}if(_0x1ec73e[_0x1ba53e(0x2a2)]===0x0){_0x5f2fa4[_0x1ba53e(0x109)]=_0x1ba53e(0x1e0);return;}try{const _0x24fe40=[];for(const _0x4c840b of _0x1ec73e){const _0x38b686=await safeLorebookEntries(_0x4c840b);_0x38b686[_0x1ba53e(0x14b)](_0x21ffea=>_0x24fe40[_0x1ba53e(0x1a4)]({..._0x21ffea,'bookName':_0x4c840b}));}_0x5f2fa4[_0x1ba53e(0x109)]='';if(_0x24fe40[_0x1ba53e(0x2a2)]===0x0){_0x5f2fa4[_0x1ba53e(0x109)]=_0x1ba53e(0x270);return;}_0x24fe40[_0x1ba53e(0x14b)](_0x2e9e55=>{const _0x9fc761=_0x1ba53e,_0x278d8c=document[_0x9fc761(0x14f)](_0x9fc761(0x16b));_0x278d8c['className']='checkbox-item',_0x278d8c[_0x9fc761(0x142)]=_0x9fc761(0x2ef)+_0x2e9e55[_0x9fc761(0x247)]+_0x9fc761(0x28b)+_0x2e9e55[_0x9fc761(0x2ce)];const _0xd7b56f=document[_0x9fc761(0x14f)](_0x9fc761(0x1b1));_0xd7b56f[_0x9fc761(0x23d)]='checkbox',_0xd7b56f['id']='wb-entry-check-'+_0x2e9e55[_0x9fc761(0x247)]+'-'+_0x2e9e55[_0x9fc761(0x2ce)],_0xd7b56f['dataset']['book']=_0x2e9e55['bookName'],_0xd7b56f[_0x9fc761(0x137)][_0x9fc761(0x2ce)]=_0x2e9e55['uid'];const _0x5957b4=_0x23152c[_0x9fc761(0x21c)][_0x2e9e55[_0x9fc761(0x247)]]?.[_0x9fc761(0x2d3)](String(_0x2e9e55['uid']));_0xd7b56f[_0x9fc761(0x26c)]=!!_0x5957b4;const _0x469c52=document[_0x9fc761(0x14f)](_0x9fc761(0x1d2));_0x469c52[_0x9fc761(0x215)]=_0xd7b56f['id'],_0x469c52['textContent']=_0x2e9e55[_0x9fc761(0x2db)]||_0x9fc761(0x21f),_0x278d8c['appendChild'](_0xd7b56f),_0x278d8c['appendChild'](_0x469c52),_0x5f2fa4[_0x9fc761(0x2a4)](_0x278d8c);});}catch(_0x106095){console['error'](_0x1ba53e(0x233),_0x106095),_0x5f2fa4[_0x1ba53e(0x109)]='加载条目失败。

';}},_0x4344c3=()=>{const _0x229a11=_0x52e59d,_0x9a4c84=world_names['map'](_0x9a82b5=>({'name':_0x9a82b5['replace'](_0x229a11(0x214),''),'file_name':_0x9a82b5}));_0x20030a[_0x229a11(0x109)]='',_0x9a4c84&&_0x9a4c84[_0x229a11(0x2a2)]>0x0?_0x9a4c84[_0x229a11(0x14b)](_0x1c8f1b=>{const _0xdf1506=_0x229a11,_0x1c562b=document[_0xdf1506(0x14f)](_0xdf1506(0x16b));_0x1c562b[_0xdf1506(0x188)]=_0xdf1506(0x290),_0x1c562b['title']=_0x1c8f1b['name'];const _0x501dcc=document['createElement']('input');_0x501dcc[_0xdf1506(0x23d)]=_0xdf1506(0x2b1),_0x501dcc['id']='wb-check-'+_0x1c8f1b[_0xdf1506(0x284)],_0x501dcc['value']=_0x1c8f1b[_0xdf1506(0x284)],_0x501dcc[_0xdf1506(0x26c)]=_0x23152c[_0xdf1506(0x11e)][_0xdf1506(0x2d3)](_0x1c8f1b[_0xdf1506(0x284)]),_0x501dcc[_0xdf1506(0x242)](_0xdf1506(0x27e),()=>{const _0x4fc523=_0xdf1506;_0x501dcc['checked']?!_0x23152c[_0x4fc523(0x11e)][_0x4fc523(0x2d3)](_0x1c8f1b['file_name'])&&_0x23152c['table_selected_worldbooks'][_0x4fc523(0x1a4)](_0x1c8f1b[_0x4fc523(0x284)]):_0x23152c[_0x4fc523(0x11e)]=_0x23152c[_0x4fc523(0x11e)][_0x4fc523(0x264)](_0x3ee59a=>_0x3ee59a!==_0x1c8f1b[_0x4fc523(0x284)]),saveSettingsDebounced(),_0x477014();});const _0x24440d=document['createElement']('label');_0x24440d[_0xdf1506(0x215)]=_0xdf1506(0x173)+_0x1c8f1b['file_name'],_0x24440d[_0xdf1506(0x13c)]=_0x1c8f1b['name'],_0x1c562b[_0xdf1506(0x2a4)](_0x501dcc),_0x1c562b[_0xdf1506(0x2a4)](_0x24440d),_0x20030a[_0xdf1506(0x2a4)](_0x1c562b);}):_0x20030a['innerHTML']='没有找到世界书。

',_0x477014();},_0x1ad8ce=()=>{const _0x3826d3=_0x52e59d,_0xcd2991=_0x23152c['table_worldbook_source']==='manual';_0x3695e6[_0x3826d3(0x263)][_0x3826d3(0x230)]=_0xcd2991?_0x3826d3(0x1c0):'none',_0x477014(),_0xcd2991&&_0x4344c3();};_0xba1878[_0x52e59d(0x26c)]=_0x23152c[_0x52e59d(0x12a)],_0x19bf57[_0x52e59d(0x22b)]=_0x23152c[_0x52e59d(0x17b)],_0x55f9cc[_0x52e59d(0x13c)]=_0x23152c[_0x52e59d(0x17b)],_0x2915ca[_0x52e59d(0x14b)](_0x410ef9=>{const _0x344540=_0x52e59d;_0x410ef9[_0x344540(0x26c)]=_0x410ef9[_0x344540(0x22b)]===_0x23152c[_0x344540(0x239)];}),_0x1ad8ce();if(_0xba1878[_0x52e59d(0x137)][_0x52e59d(0x167)])return;_0xba1878['addEventListener'](_0x52e59d(0x27e),()=>{const _0x2f0cd8=_0x52e59d;_0x23152c[_0x2f0cd8(0x12a)]=_0xba1878[_0x2f0cd8(0x26c)],saveSettingsDebounced();}),_0x19bf57[_0x52e59d(0x242)](_0x52e59d(0x1b1),()=>{const _0x526cab=_0x52e59d;_0x55f9cc[_0x526cab(0x13c)]=_0x19bf57[_0x526cab(0x22b)];}),_0x19bf57[_0x52e59d(0x242)]('change',()=>{_0x23152c['table_worldbook_char_limit']=parseInt(_0x19bf57['value'],0xa),saveSettingsDebounced();}),_0x2915ca['forEach'](_0x4150fb=>{const _0x2b0113=_0x52e59d;_0x4150fb[_0x2b0113(0x242)](_0x2b0113(0x27e),()=>{const _0xea28cb=_0x2b0113;_0x4150fb[_0xea28cb(0x26c)]&&(_0x23152c[_0xea28cb(0x239)]=_0x4150fb[_0xea28cb(0x22b)],_0x1ad8ce(),saveSettingsDebounced());});}),_0x33478c['addEventListener'](_0x52e59d(0x29d),_0x4344c3),_0x5f2fa4[_0x52e59d(0x242)](_0x52e59d(0x27e),_0x5e6156=>{_0x5e6156['target']['type']==='checkbox'&&_0x50ee26();}),_0xba1878[_0x52e59d(0x137)][_0x52e59d(0x167)]=_0x52e59d(0x18a),log(_0x52e59d(0x2c0),_0x52e59d(0x1c3));}export function bindTableEvents(){const _0x33e88f=_0xc6d991,_0x240270=document[_0x33e88f(0x16c)]('amily2_memorisation_forms_panel');if(!_0x240270||_0x240270['dataset'][_0x33e88f(0x167)])return;log('开始为表格视图绑定交互事件...',_0x33e88f(0x255));const _0x289976=_0x240270[_0x33e88f(0x212)](_0x33e88f(0x207)),_0x436a60=document[_0x33e88f(0x16c)](_0x33e88f(0x13a)),_0x4c4f71=document['getElementById'](_0x33e88f(0x1a0)),_0x317dc7=document['getElementById'](_0x33e88f(0x276)),_0x267da2=document[_0x33e88f(0x16c)](_0x33e88f(0x1a7)),_0x331ce1=document['getElementById'](_0x33e88f(0x2b4)),_0x123c7a=document[_0x33e88f(0x16c)](_0x33e88f(0x268)),_0xaea382=()=>{const _0x1923ce=_0x33e88f,_0x3f66f4=extension_settings[extensionName]?.[_0x1923ce(0x234)]||_0x1923ce(0x2c9);_0x289976[_0x1923ce(0x14b)](_0xdf71d7=>{const _0x87303c=_0x1923ce;_0xdf71d7['checked']=_0xdf71d7[_0x87303c(0x22b)]===_0x3f66f4;});const _0x4d3d18=_0x3f66f4==='secondary-api';_0x436a60&&(_0x436a60[_0x1923ce(0x263)][_0x1923ce(0x230)]=_0x4d3d18?_0x1923ce(0x1c0):_0x1923ce(0x272)),_0x267da2&&(_0x267da2[_0x1923ce(0x263)]['display']=_0x1923ce(0x297)),_0x331ce1&&_0x123c7a&&(_0x123c7a[_0x1923ce(0x263)][_0x1923ce(0x230)]=_0x331ce1[_0x1923ce(0x26c)]?_0x1923ce(0x1c0):'none');};_0x289976[_0x33e88f(0x14b)](_0x3e2efb=>{const _0x5800d6=_0x33e88f;_0x3e2efb[_0x5800d6(0x242)]('change',function(){const _0x2dc09c=_0x5800d6,_0x11a9f6=this['value'];updateAndSaveTableSetting(_0x2dc09c(0x234),_0x11a9f6);let _0x3c50a7=_0x2dc09c(0x25d);if(_0x11a9f6==='secondary-api')_0x3c50a7=_0x2dc09c(0x131);if(_0x11a9f6==='optimized')_0x3c50a7=_0x2dc09c(0x107);toastr[_0x2dc09c(0x255)]('填表模式已切换为\x20'+_0x3c50a7+'。'),_0xaea382();});});if(_0x4c4f71&&_0x317dc7){const _0x2b4853=extension_settings[extensionName]?.[_0x33e88f(0x120)]||0x4;_0x4c4f71[_0x33e88f(0x22b)]=_0x2b4853,_0x317dc7[_0x33e88f(0x13c)]=_0x2b4853,_0x4c4f71[_0x33e88f(0x242)]('input',function(){const _0xd0d92c=_0x33e88f;_0x317dc7['textContent']=this[_0xd0d92c(0x22b)];}),_0x4c4f71[_0x33e88f(0x242)](_0x33e88f(0x27e),function(){const _0x5eb6f6=_0x33e88f;updateAndSaveTableSetting(_0x5eb6f6(0x120),parseInt(this[_0x5eb6f6(0x22b)],0xa)),toastr['info']('上下文读取级别已设置为\x20'+this[_0x5eb6f6(0x22b)]+'。');});}_0x331ce1&&(_0x331ce1[_0x33e88f(0x26c)]=extension_settings[extensionName]?.[_0x33e88f(0x166)]??![],_0x331ce1['addEventListener'](_0x33e88f(0x27e),()=>{const _0x4b17bd=_0x33e88f;updateAndSaveTableSetting(_0x4b17bd(0x166),_0x331ce1[_0x4b17bd(0x26c)]),_0xaea382();}));_0xaea382();_0x123c7a&&_0x123c7a['addEventListener']('click',openTableRuleEditor);const _0x9dcdd0=()=>{renderTables(),bindInjectionSettings(),bindTemplateEditors();};_0x9dcdd0(),bindWorldBookSettings(),bindBatchFillButton(),bindFloorFillButtons(),bindReorganizeButton(),bindNccsApiEvents(),bindChatTableDisplaySetting();const _0x4f5227=document['querySelector']('#amily2_memorisation_forms_panel\x20.sinan-navigation-deck');_0x4f5227&&_0x4f5227[_0x33e88f(0x242)]('click',_0x6af184=>{const _0x50d3ca=_0x33e88f,_0x502eab=_0x6af184['target'][_0x50d3ca(0x104)](_0x50d3ca(0x200));if(!_0x502eab)return;const _0x18bace=_0x502eab[_0x50d3ca(0x137)][_0x50d3ca(0x1a5)];if(!_0x18bace)return;const _0x2f5ec5=_0x502eab[_0x50d3ca(0x104)](_0x50d3ca(0x280));if(!_0x2f5ec5)return;_0x2f5ec5[_0x50d3ca(0x212)]('.sinan-nav-item')[_0x50d3ca(0x14b)](_0x51e7ad=>_0x51e7ad[_0x50d3ca(0x14a)][_0x50d3ca(0x1e4)]('active')),_0x502eab[_0x50d3ca(0x14a)][_0x50d3ca(0x197)](_0x50d3ca(0x2b8)),_0x2f5ec5[_0x50d3ca(0x212)](_0x50d3ca(0x101))[_0x50d3ca(0x14b)](_0x35462e=>_0x35462e[_0x50d3ca(0x14a)][_0x50d3ca(0x1e4)](_0x50d3ca(0x2b8)));const _0x316f73=_0x2f5ec5[_0x50d3ca(0x17d)](_0x50d3ca(0x24c)+_0x18bace+_0x50d3ca(0x223));_0x316f73&&_0x316f73[_0x50d3ca(0x14a)]['add']('active');});const _0x31b57b=document['getElementById'](_0x33e88f(0x1b8)),_0x11e6f8=document['getElementById'](_0x33e88f(0x1c2)),_0x40f171=document[_0x33e88f(0x16c)](_0x33e88f(0x1ae)),_0x1a26b2=document[_0x33e88f(0x16c)]('amily2-import-global-preset-btn'),_0xb1a86d=document[_0x33e88f(0x16c)](_0x33e88f(0x1f2));_0x31b57b&&_0x31b57b[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>_0x93db26[_0x33e88f(0x1e1)]());_0x11e6f8&&_0x11e6f8[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>_0x93db26['exportPresetFull']());_0x40f171&&_0x40f171[_0x33e88f(0x242)]('click',()=>_0x93db26['importPreset'](_0x9dcdd0));_0x1a26b2&&_0x1a26b2[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>{const _0x2e5545=_0x33e88f,_0x548949=_0x93db26[_0x2e5545(0x2f1)]();_0x93db26[_0x2e5545(0x2c3)](()=>{const _0x12b788=_0x2e5545;_0x548949&&(_0x93db26[_0x12b788(0x202)](),_0x9dcdd0());});});_0xb1a86d&&_0xb1a86d[_0x33e88f(0x242)]('click',()=>{const _0x450fae=_0x33e88f,_0x1c46e5=_0x93db26['isCurrentTablesEmpty']();_0x93db26[_0x450fae(0x24f)](),_0x1c46e5&&(_0x93db26['loadTables'](),_0x9dcdd0());});const _0x4ceab6=document[_0x33e88f(0x16c)](_0x33e88f(0x149));_0x4ceab6&&_0x4ceab6[_0x33e88f(0x242)]('click',()=>{const _0x4bd8e4=_0x33e88f;confirm(_0x4bd8e4(0x1a1))&&(_0x93db26['clearAllTables'](),_0x9dcdd0());});const _0x15dbea=document[_0x33e88f(0x16c)](_0x33e88f(0x1af));_0x15dbea&&_0x15dbea[_0x33e88f(0x242)](_0x33e88f(0x29d),()=>{const _0x3c225c=_0x33e88f,_0x3cf5b9=prompt(_0x3c225c(0x18c),_0x3c225c(0x271));_0x3cf5b9&&_0x3cf5b9['trim']()&&(_0x93db26[_0x3c225c(0x119)](_0x3cf5b9[_0x3c225c(0xf9)]()),_0x9dcdd0());});const _0x243933=getAllTablesContainer();if(_0x243933){_0x243933[_0x33e88f(0x242)](_0x33e88f(0x29d),_0x1d6983=>{const _0x4264f4=_0x33e88f,_0x2860e2=_0x1d6983[_0x4264f4(0x195)][_0x4264f4(0x104)]('th');if(_0x2860e2&&_0x2860e2['classList'][_0x4264f4(0xfe)](_0x4264f4(0x1bf))){toggleHeaderIndexContextMenu(_0x1d6983);return;}if(_0x2860e2&&!_0x2860e2['classList'][_0x4264f4(0xfe)]('index-col')){toggleColumnContextMenu(_0x1d6983);return;}const _0x48f211=_0x1d6983[_0x4264f4(0x195)][_0x4264f4(0x104)]('td.index-col');if(_0x48f211){toggleRowContextMenu(_0x1d6983);return;}const _0x18543b=_0x1d6983[_0x4264f4(0x195)][_0x4264f4(0x104)](_0x4264f4(0x21d));if(_0x18543b){const _0x5acb24=parseInt(_0x18543b['dataset'][_0x4264f4(0x148)],0xa),_0x295eba=_0x93db26[_0x4264f4(0x106)](),_0x71fba4=_0x295eba[_0x5acb24]?.[_0x4264f4(0x2a9)]||'';showTableNameEditor(_0x5acb24,_0x71fba4);return;}const _0x50e969=_0x1d6983['target'][_0x4264f4(0x104)](_0x4264f4(0x26b));if(!_0x50e969)return;const _0x64611f=parseInt(_0x50e969['dataset'][_0x4264f4(0x148)],0xa);if(_0x50e969[_0x4264f4(0x1f7)]('.add-row-btn'))_0x93db26[_0x4264f4(0x1c8)](_0x64611f),_0x9dcdd0();else{if(_0x50e969['matches'](_0x4264f4(0x2c4)))_0x93db26[_0x4264f4(0x2c2)](_0x64611f),_0x9dcdd0();else{if(_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x11b))||_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x13d))){const _0x8be378=_0x50e969[_0x4264f4(0x14a)][_0x4264f4(0xfe)](_0x4264f4(0x274))?'up':_0x4264f4(0x1e9);_0x93db26[_0x4264f4(0x286)](_0x64611f,_0x8be378),_0x9dcdd0();}else{if(_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x1fa)))openRuleEditor(_0x64611f);else{if(_0x50e969[_0x4264f4(0x1f7)](_0x4264f4(0x1b2))){const _0x19f31f=_0x93db26[_0x4264f4(0x106)](),_0x456a6b=_0x19f31f[_0x64611f]?.[_0x4264f4(0x2a9)]||_0x4264f4(0x210);confirm(_0x4264f4(0x20b)+_0x456a6b+_0x4264f4(0x1fc))&&(_0x93db26[_0x4264f4(0x231)](_0x64611f),_0x9dcdd0());}}}}}});if(isTouchDevice()){let _0x207870=0x0,_0x2b277e=null;_0x243933['addEventListener'](_0x33e88f(0x2ab),_0x1a65b2=>{const _0x2a4e72=_0x33e88f,_0x188b29=_0x1a65b2['target']['closest']('td');if(!_0x188b29||_0x188b29[_0x2a4e72(0x137)][_0x2a4e72(0x1a9)]===undefined)return;const _0x461fce=new Date()[_0x2a4e72(0x125)](),_0x228c2c=_0x461fce-_0x207870;_0x228c2c<0x12c&&_0x228c2c>0x0&&_0x2b277e===_0x188b29&&(_0x1a65b2[_0x2a4e72(0x2ee)](),_0x188b29[_0x2a4e72(0x16f)]('contenteditable')!==_0x2a4e72(0x18a)&&(_0x188b29['setAttribute'](_0x2a4e72(0x1ed),_0x2a4e72(0x18a)),setTimeout(()=>_0x188b29[_0x2a4e72(0x2c1)](),0x0))),_0x207870=_0x461fce,_0x2b277e=_0x188b29;});}_0x243933[_0x33e88f(0x242)]('blur',_0x5a98c8=>{const _0x75b436=_0x33e88f,_0x564912=_0x5a98c8[_0x75b436(0x195)];if(_0x564912['tagName']!=='TD'||_0x564912[_0x75b436(0x16f)](_0x75b436(0x1ed))!=='true')return;isTouchDevice()&&_0x564912['setAttribute'](_0x75b436(0x1ed),_0x75b436(0x1d9));const _0xdf4a60=_0x564912[_0x75b436(0x104)](_0x75b436(0x269));if(!_0xdf4a60)return;const _0x1f8e10=parseInt(_0xdf4a60[_0x75b436(0x137)][_0x75b436(0x148)],0xa),_0x32c526=parseInt(_0x564912['closest']('tr')[_0x75b436(0x137)][_0x75b436(0x1b0)],0xa),_0x5eec9d=parseInt(_0x564912[_0x75b436(0x137)][_0x75b436(0x1a9)],0xa),_0x5155a5=_0x564912['textContent'],_0x4125e9=_0xdf4a60[_0x75b436(0x104)](_0x75b436(0x27b)),_0x4a9d56=_0x4125e9?_0x4125e9['scrollLeft']:0x0,_0x39c2ba=_0x243933[_0x75b436(0x2cb)];_0x93db26[_0x75b436(0x281)](_0x1f8e10,_0x32c526,_0x5eec9d);const _0x3eefae={[_0x5eec9d]:_0x5155a5};_0x93db26[_0x75b436(0x275)](_0x1f8e10,_0x32c526,_0x3eefae),_0x9dcdd0();const _0x491795=document['getElementById'](_0x75b436(0x2ea)+_0x1f8e10)?.[_0x75b436(0x104)]('.amily2-table-wrapper');_0x491795&&(_0x491795[_0x75b436(0x2a0)]=_0x4a9d56),_0x243933[_0x75b436(0x2cb)]=_0x39c2ba;},!![]);}_0x240270[_0x33e88f(0x137)][_0x33e88f(0x167)]='true',log(_0x33e88f(0x186),_0x33e88f(0x1c3)),eventSource['on'](event_types[_0x33e88f(0x1c5)],()=>{const _0x418577=_0x33e88f;console[_0x418577(0x2a8)]('['+extensionName+_0x418577(0x1d1)),_0x9dcdd0(),setTimeout(()=>{const _0x43cd2d=_0x418577,_0x570a9b=extension_settings[extensionName];if(_0x570a9b&&_0x570a9b[_0x43cd2d(0x12a)])try{bindWorldBookSettings(),console['log']('['+extensionName+_0x43cd2d(0x153));}catch(_0x117cdf){console[_0x43cd2d(0x26a)]('['+extensionName+_0x43cd2d(0x213),_0x117cdf);}},0x64);});}function bindBatchFillButton(){const _0xc5a31f=_0xc6d991,_0xdd2db6=document[_0xc5a31f(0x16c)](_0xc5a31f(0x111));if(_0xdd2db6){if(_0xdd2db6['dataset'][_0xc5a31f(0x136)])return;_0xdd2db6['addEventListener'](_0xc5a31f(0x29d),_0x169af7=>{const _0x167f60=_0xc5a31f,_0x519d65=extension_settings[extensionName],_0x592df4=_0x519d65[_0x167f60(0x254)]!==![];if(!_0x592df4){_0x169af7[_0x167f60(0x2ee)](),toastr['warning'](_0x167f60(0x25f));return;}startBatchFilling();}),_0xdd2db6[_0xc5a31f(0x137)]['batchEventBound']='true',log('\x22立即填表\x22按钮已成功绑定。',_0xc5a31f(0x1c3));}}function bindReorganizeButton(){const _0x1f4261=_0xc6d991,_0xa730bf=document[_0x1f4261(0x16c)](_0x1f4261(0x29e));if(_0xa730bf){if(_0xa730bf[_0x1f4261(0x137)][_0x1f4261(0x22c)])return;_0xa730bf[_0x1f4261(0x242)](_0x1f4261(0x29d),async _0x24fcc9=>{const _0x132662=_0x1f4261,_0x2326f5=extension_settings[extensionName],_0x2a2759=_0x2326f5['table_system_enabled']!==![];if(!_0x2a2759){_0x24fcc9['preventDefault'](),toastr[_0x132662(0xfc)](_0x132662(0x25f));return;}try{const {reorganizeTableContent:_0x543599}=await import(_0x132662(0x18b));await _0x543599();}catch(_0x181609){console[_0x132662(0x26a)](_0x132662(0x236),_0x181609),toastr[_0x132662(0x26a)]('重新整理功能启动失败,请检查系统状态。');}}),_0xa730bf['dataset'][_0x1f4261(0x22c)]='true',log(_0x1f4261(0x133),_0x1f4261(0x1c3));}}function bindFloorFillButtons(){const _0x386d37=_0xc6d991,_0xdd22d9=document['getElementById'](_0x386d37(0x12e)),_0x377e68=document[_0x386d37(0x16c)]('fill-current-floor-btn'),_0x5dbecd=document[_0x386d37(0x16c)](_0x386d37(0x250));if(_0xdd22d9){if(_0xdd22d9[_0x386d37(0x137)][_0x386d37(0x192)])return;_0xdd22d9[_0x386d37(0x242)](_0x386d37(0x29d),_0x49c2f7=>{const _0xb5ace3=_0x386d37,_0xc861fc=extension_settings[extensionName],_0x3a99ff=_0xc861fc[_0xb5ace3(0x254)]!==![];if(!_0x3a99ff){_0x49c2f7[_0xb5ace3(0x2ee)](),toastr[_0xb5ace3(0xfc)](_0xb5ace3(0x25f));return;}const _0x44d317=document[_0xb5ace3(0x16c)](_0xb5ace3(0x2ba)),_0x16ed2e=document[_0xb5ace3(0x16c)](_0xb5ace3(0x238)),_0x14fff5=parseInt(_0x44d317[_0xb5ace3(0x22b)],0xa),_0x2c5408=parseInt(_0x16ed2e[_0xb5ace3(0x22b)],0xa);if(!_0x14fff5||!_0x2c5408){toastr[_0xb5ace3(0xfc)]('请输入有效的起始楼层和结束楼层。');return;}if(_0x14fff5>_0x2c5408){toastr[_0xb5ace3(0xfc)](_0xb5ace3(0x228));return;}if(_0x14fff5<0x1){toastr['warning'](_0xb5ace3(0x108));return;}import(_0xb5ace3(0x2da))[_0xb5ace3(0x22e)](_0x3c582c=>{const _0x1dc836=_0xb5ace3;_0x3c582c[_0x1dc836(0x10d)](_0x14fff5,_0x2c5408);});}),_0xdd22d9[_0x386d37(0x137)][_0x386d37(0x192)]=_0x386d37(0x18a),log('\x22选定楼层填表\x22按钮已成功绑定。','success');}if(_0x377e68){if(_0x377e68[_0x386d37(0x137)][_0x386d37(0x1a2)])return;_0x377e68[_0x386d37(0x242)]('click',_0x33e98d=>{const _0x2d5258=_0x386d37,_0x5c0587=extension_settings[extensionName],_0x2dcb91=_0x5c0587[_0x2d5258(0x254)]!==![];if(!_0x2dcb91){_0x33e98d[_0x2d5258(0x2ee)](),toastr[_0x2d5258(0xfc)](_0x2d5258(0x25f));return;}import('../core/table-system/batch-filler.js')[_0x2d5258(0x22e)](_0x540718=>{const _0x1614d5=_0x2d5258;_0x540718[_0x1614d5(0x143)]();});}),_0x377e68[_0x386d37(0x137)][_0x386d37(0x1a2)]=_0x386d37(0x18a),log('\x22填当前楼层\x22按钮已成功绑定。',_0x386d37(0x1c3));}if(_0x5dbecd){if(_0x5dbecd[_0x386d37(0x137)]['rollbackEventBound'])return;_0x5dbecd[_0x386d37(0x242)](_0x386d37(0x29d),async _0x5360de=>{const _0x2c921a=_0x386d37,_0x1478b2=extension_settings[extensionName],_0x1d9a9b=_0x1478b2[_0x2c921a(0x254)]!==![];if(!_0x1d9a9b){_0x5360de[_0x2c921a(0x2ee)](),toastr['warning'](_0x2c921a(0x25f));return;}if(confirm(_0x2c921a(0x102)))try{await _0x93db26[_0x2c921a(0x25c)]();}catch(_0x75eaf4){console[_0x2c921a(0x26a)]('[内存储司]\x20回退重填功能失败:',_0x75eaf4),toastr[_0x2c921a(0x26a)]('回退重填失败,请检查系统状态。');}}),_0x5dbecd['dataset'][_0x386d37(0x184)]=_0x386d37(0x18a),log('\x22回退重填\x22按钮已成功绑定。',_0x386d37(0x1c3));}}function bindTemplateEditors(){const _0x49e712=_0xc6d991,_0x28a1cf=document[_0x49e712(0x16c)](_0x49e712(0x132)),_0x26bf6d=document[_0x49e712(0x16c)](_0x49e712(0x182)),_0x4fba3e=document['getElementById'](_0x49e712(0x199)),_0x1d516c=document[_0x49e712(0x16c)](_0x49e712(0xfb)),_0x344db1=document[_0x49e712(0x16c)]('ai-flow-template-save-btn'),_0x40f7a4=document[_0x49e712(0x16c)](_0x49e712(0x100));if(!_0x28a1cf||!_0x1d516c||!_0x26bf6d||!_0x344db1){log('无法找到指令模板编辑器或其按钮,绑定失败。',_0x49e712(0x21a));return;}if(_0x26bf6d[_0x49e712(0x137)][_0x49e712(0x17f)])return;_0x28a1cf['value']=_0x93db26[_0x49e712(0x24a)](),_0x1d516c[_0x49e712(0x22b)]=_0x93db26[_0x49e712(0x1da)](),_0x26bf6d['addEventListener']('click',()=>{const _0x3d1492=_0x49e712;_0x93db26[_0x3d1492(0x12c)](_0x28a1cf[_0x3d1492(0x22b)]),toastr[_0x3d1492(0x1c3)](_0x3d1492(0x28c)),log(_0x3d1492(0x130),_0x3d1492(0x1c3));}),_0x344db1['addEventListener']('click',()=>{const _0x1ea69e=_0x49e712;_0x93db26['saveBatchFillerFlowTemplate'](_0x1d516c['value']),toastr[_0x1ea69e(0x1c3)](_0x1ea69e(0x2dd)),log(_0x1ea69e(0x278),_0x1ea69e(0x1c3));}),_0x4fba3e[_0x49e712(0x242)]('click',()=>{const _0x9dc726=_0x49e712;confirm(_0x9dc726(0x240))&&(_0x28a1cf['value']=DEFAULT_AI_RULE_TEMPLATE,_0x93db26[_0x9dc726(0x12c)](_0x28a1cf['value']),toastr[_0x9dc726(0x255)](_0x9dc726(0x11c)),log(_0x9dc726(0x289),'info'));}),_0x40f7a4[_0x49e712(0x242)](_0x49e712(0x29d),()=>{const _0x3353e4=_0x49e712;confirm(_0x3353e4(0x2e2))&&(_0x1d516c['value']=DEFAULT_AI_FLOW_TEMPLATE,_0x93db26[_0x3353e4(0x12f)](_0x1d516c[_0x3353e4(0x22b)]),toastr[_0x3353e4(0x255)](_0x3353e4(0x23b)),log(_0x3353e4(0x168),_0x3353e4(0x255)));}),_0x26bf6d['dataset'][_0x49e712(0x17f)]=_0x49e712(0x18a),_0x344db1['dataset'][_0x49e712(0x17f)]='true',log(_0x49e712(0x24e),_0x49e712(0x1c3));}function bindNccsApiEvents(){const _0x3b44ac=_0xc6d991,_0x542ef3=extension_settings[extensionName];if(_0x542ef3[_0x3b44ac(0x251)]===undefined)_0x542ef3[_0x3b44ac(0x251)]=![];if(_0x542ef3[_0x3b44ac(0x257)]===undefined)_0x542ef3[_0x3b44ac(0x257)]=_0x3b44ac(0x2cc);if(_0x542ef3[_0x3b44ac(0x1e8)]===undefined)_0x542ef3[_0x3b44ac(0x1e8)]='https://api.openai.com/v1';if(_0x542ef3[_0x3b44ac(0x23a)]===undefined)_0x542ef3[_0x3b44ac(0x23a)]='';if(_0x542ef3[_0x3b44ac(0x260)]===undefined)_0x542ef3[_0x3b44ac(0x260)]='';if(_0x542ef3[_0x3b44ac(0x1a6)]===undefined)_0x542ef3[_0x3b44ac(0x1a6)]=0x7d0;if(_0x542ef3[_0x3b44ac(0x1db)]===undefined)_0x542ef3['nccsTemperature']=0.7;if(_0x542ef3[_0x3b44ac(0x265)]===undefined)_0x542ef3[_0x3b44ac(0x265)]='';const _0x28f082=document[_0x3b44ac(0x16c)](_0x3b44ac(0x1d0)),_0x3656ec=document['getElementById'](_0x3b44ac(0x258)),_0x46bfc4=document[_0x3b44ac(0x16c)](_0x3b44ac(0x253)),_0x14fa9a=document[_0x3b44ac(0x16c)](_0x3b44ac(0x116)),_0x54b43b=document[_0x3b44ac(0x16c)](_0x3b44ac(0x2ed)),_0xae6bb5=document[_0x3b44ac(0x16c)](_0x3b44ac(0x294)),_0x3738fe=document['getElementById']('nccs-max-tokens'),_0x24a9f=document[_0x3b44ac(0x16c)](_0x3b44ac(0x225)),_0x3589f5=document[_0x3b44ac(0x16c)](_0x3b44ac(0x105)),_0x51c622=document['getElementById'](_0x3b44ac(0x24d)),_0x3a64de=document[_0x3b44ac(0x16c)]('nccs-sillytavern-preset'),_0x26bf33=document[_0x3b44ac(0x16c)](_0x3b44ac(0x156)),_0x22aefb=document[_0x3b44ac(0x16c)](_0x3b44ac(0x205));if(!_0x28f082||!_0x3656ec)return;_0x28f082[_0x3b44ac(0x26c)]=_0x542ef3[_0x3b44ac(0x251)];if(_0x46bfc4)_0x46bfc4['value']=_0x542ef3[_0x3b44ac(0x257)];if(_0x14fa9a)_0x14fa9a[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x1e8)];if(_0x54b43b)_0x54b43b['value']=_0x542ef3['nccsApiKey'];if(_0xae6bb5)_0xae6bb5[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x260)];if(_0x3738fe){_0x3738fe[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x1a6)];if(_0x24a9f)_0x24a9f[_0x3b44ac(0x13c)]=_0x542ef3[_0x3b44ac(0x1a6)];}if(_0x3589f5){_0x3589f5[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x1db)];if(_0x51c622)_0x51c622[_0x3b44ac(0x13c)]=_0x542ef3[_0x3b44ac(0x1db)];}if(_0x3a64de)_0x3a64de[_0x3b44ac(0x22b)]=_0x542ef3[_0x3b44ac(0x265)]||'';const _0x1b1bf4=()=>{const _0x33d211=_0x3b44ac;_0x3656ec[_0x33d211(0x263)]['display']=_0x28f082['checked']?'block':_0x33d211(0x272);};_0x1b1bf4();const _0x1f0b18=()=>{const _0x8bf01e=_0x3b44ac;if(!_0x46bfc4)return;const _0x461ccc=_0x46bfc4['value']===_0x8bf01e(0x1c6),_0x31467e=_0x46bfc4[_0x8bf01e(0x22b)]==='openai_test',_0x59b78c=_0x3a64de?.[_0x8bf01e(0x104)](_0x8bf01e(0x218));_0x59b78c&&(_0x59b78c[_0x8bf01e(0x263)]['display']=_0x461ccc?_0x8bf01e(0x1c0):'none');const _0x523f5f=[{'element':_0x14fa9a,'containerId':null},{'element':_0x54b43b,'containerId':null},{'element':_0xae6bb5,'containerId':null},{'element':_0x3738fe,'containerId':null},{'element':_0x3589f5,'containerId':null}];_0x523f5f[_0x8bf01e(0x14b)](({element:_0x317c39})=>{const _0x545ed2=_0x8bf01e;if(_0x317c39){const _0x4ffb86=_0x317c39[_0x545ed2(0x104)](_0x545ed2(0x218));_0x4ffb86&&(_0x4ffb86[_0x545ed2(0x263)]['display']=_0x461ccc?'none':_0x545ed2(0x1c0));}});const _0x76c898=_0x26bf33?.['closest'](_0x8bf01e(0x169));_0x76c898&&(_0x76c898[_0x8bf01e(0x263)][_0x8bf01e(0x230)]=_0x8bf01e(0x297));};_0x1f0b18(),_0x28f082['addEventListener'](_0x3b44ac(0x27e),()=>{const _0x56a412=_0x3b44ac;_0x542ef3[_0x56a412(0x251)]=_0x28f082['checked'],saveSettingsDebounced(),_0x1b1bf4(),log(_0x56a412(0x1a3)+(_0x28f082['checked']?_0x56a412(0x26e):'已禁用'),_0x56a412(0x255));});_0x46bfc4&&_0x46bfc4[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x40ef49=_0x3b44ac;_0x542ef3[_0x40ef49(0x257)]=_0x46bfc4[_0x40ef49(0x22b)],saveSettingsDebounced(),_0x1f0b18(),log(_0x40ef49(0x16d)+_0x46bfc4[_0x40ef49(0x22b)],_0x40ef49(0x255));});if(_0x14fa9a){const _0x27fe2e=()=>{const _0x3a457a=_0x3b44ac;_0x542ef3[_0x3a457a(0x1e8)]=_0x14fa9a[_0x3a457a(0x22b)],saveSettingsDebounced();};_0x14fa9a[_0x3b44ac(0x242)]('blur',_0x27fe2e);}if(_0x54b43b){const _0x2a7661=()=>{const _0x397162=_0x3b44ac;_0x542ef3[_0x397162(0x23a)]=_0x54b43b[_0x397162(0x22b)],saveSettingsDebounced();};_0x54b43b['addEventListener'](_0x3b44ac(0x20a),_0x2a7661);}if(_0xae6bb5){const _0x25105a=()=>{const _0x4efa5e=_0x3b44ac;_0x542ef3[_0x4efa5e(0x260)]=_0xae6bb5['value'],saveSettingsDebounced();};_0xae6bb5['addEventListener'](_0x3b44ac(0x20a),_0x25105a),_0xae6bb5[_0x3b44ac(0x242)](_0x3b44ac(0x1b1),_0x25105a);}_0x3738fe&&_0x24a9f&&(_0x3738fe[_0x3b44ac(0x242)](_0x3b44ac(0x1b1),()=>{const _0x1d9ad3=_0x3b44ac;_0x24a9f['textContent']=_0x3738fe[_0x1d9ad3(0x22b)];}),_0x3738fe[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x5677f4=_0x3b44ac;_0x542ef3[_0x5677f4(0x1a6)]=parseInt(_0x3738fe['value']),saveSettingsDebounced();}));_0x3589f5&&_0x51c622&&(_0x3589f5['addEventListener'](_0x3b44ac(0x1b1),()=>{const _0x3cbef4=_0x3b44ac;_0x51c622[_0x3cbef4(0x13c)]=_0x3589f5['value'];}),_0x3589f5[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x8e87e=_0x3b44ac;_0x542ef3[_0x8e87e(0x1db)]=parseFloat(_0x3589f5[_0x8e87e(0x22b)]),saveSettingsDebounced();}));_0x3a64de&&_0x3a64de[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x20bd63=_0x3b44ac;_0x542ef3[_0x20bd63(0x265)]=_0x3a64de['value'],saveSettingsDebounced();});_0x26bf33&&_0x26bf33['addEventListener'](_0x3b44ac(0x29d),async()=>{const _0x4ecfbb=_0x3b44ac;_0x26bf33['disabled']=!![],_0x26bf33[_0x4ecfbb(0x109)]='\x20测试中...';try{const _0x56f0bb=await testNccsApiConnection();_0x56f0bb?(toastr[_0x4ecfbb(0x1c3)](_0x4ecfbb(0x28d)),log(_0x4ecfbb(0x2eb),_0x4ecfbb(0x1c3))):(toastr[_0x4ecfbb(0x26a)]('Nccs\x20API连接测试失败,请检查配置'),log('Nccs\x20API连接测试失败',_0x4ecfbb(0x26a)));}catch(_0x24abc3){toastr[_0x4ecfbb(0x26a)](_0x4ecfbb(0x2b6)+_0x24abc3[_0x4ecfbb(0x158)]),log('Nccs\x20API连接测试出错:'+_0x24abc3['message'],_0x4ecfbb(0x26a));}finally{_0x26bf33['disabled']=![],_0x26bf33[_0x4ecfbb(0x109)]=_0x4ecfbb(0x2e5);}});_0x22aefb&&_0x22aefb[_0x3b44ac(0x242)](_0x3b44ac(0x29d),async()=>{const _0x16a1dc=_0x3b44ac;_0x22aefb[_0x16a1dc(0x2df)]=!![],_0x22aefb['innerHTML']=_0x16a1dc(0x2bc);_0x14fa9a&&(_0x542ef3[_0x16a1dc(0x1e8)]=_0x14fa9a[_0x16a1dc(0x22b)]);_0x54b43b&&(_0x542ef3['nccsApiKey']=_0x54b43b[_0x16a1dc(0x22b)]);saveSettingsDebounced();try{const _0x3782bd=await fetchNccsModels();if(_0x3782bd&&_0x3782bd[_0x16a1dc(0x2a2)]>0x0){let _0x5b8a5e=document['getElementById']('nccs-api-model-select');!_0x5b8a5e&&(_0x5b8a5e=document[_0x16a1dc(0x14f)](_0x16a1dc(0x2f0)),_0x5b8a5e['id']=_0x16a1dc(0x2f3),_0x5b8a5e['className']='text_pole',_0xae6bb5[_0x16a1dc(0x1e2)][_0x16a1dc(0x217)](_0x5b8a5e,_0xae6bb5[_0x16a1dc(0x2b3)])),_0x5b8a5e[_0x16a1dc(0x109)]='--\x20请选择模型\x20--',_0x3782bd[_0x16a1dc(0x14b)](_0x126236=>{const _0x3a313c=_0x16a1dc,_0x44fca6=document[_0x3a313c(0x14f)](_0x3a313c(0x2c6));_0x44fca6[_0x3a313c(0x22b)]=_0x126236['id']||_0x126236[_0x3a313c(0x2a9)],_0x44fca6['textContent']=_0x126236['name']||_0x126236['id'],(_0x126236['id']||_0x126236['name'])===_0x542ef3['nccsModel']&&(_0x44fca6[_0x3a313c(0x1ce)]=!![]),_0x5b8a5e['appendChild'](_0x44fca6);}),_0xae6bb5[_0x16a1dc(0x263)][_0x16a1dc(0x230)]='none',_0x5b8a5e['style']['display']=_0x16a1dc(0x1c0),_0x5b8a5e['addEventListener'](_0x16a1dc(0x27e),()=>{const _0x516ba7=_0x16a1dc,_0x53c576=_0x5b8a5e[_0x516ba7(0x22b)];_0x542ef3['nccsModel']=_0x53c576,_0xae6bb5['value']=_0x53c576,saveSettingsDebounced();}),toastr[_0x16a1dc(0x1c3)](_0x16a1dc(0x15c)+_0x3782bd[_0x16a1dc(0x2a2)]+_0x16a1dc(0x2e3)),log(_0x16a1dc(0x243)+_0x3782bd[_0x16a1dc(0x2a2)]+'\x20个模型','success');}else toastr[_0x16a1dc(0xfc)](_0x16a1dc(0x14d)),log(_0x16a1dc(0x16e),_0x16a1dc(0x21a));}catch(_0x16da3a){toastr['error']('获取模型失败:'+_0x16da3a['message']),log(_0x16a1dc(0xff)+_0x16da3a[_0x16a1dc(0x158)],_0x16a1dc(0x26a));}finally{_0x22aefb[_0x16a1dc(0x2df)]=![],_0x22aefb[_0x16a1dc(0x109)]=_0x16a1dc(0x224);}});const _0x54558b=async()=>{const _0x431ecc=_0x3b44ac;if(!_0x3a64de)return;try{const _0x258ada=getContext();if(!_0x258ada?.[_0x431ecc(0x2a1)]?.['connectionManager']?.[_0x431ecc(0x17a)])throw new Error(_0x431ecc(0x226));const _0x5f2cc0=_0x258ada[_0x431ecc(0x2a1)][_0x431ecc(0x1df)]['profiles'],_0x4a4438=_0x542ef3['nccsTavernProfile'];_0x3a64de[_0x431ecc(0x109)]='',_0x3a64de[_0x431ecc(0x2a4)](new Option(_0x431ecc(0x204),'',![],![])),_0x5f2cc0&&_0x5f2cc0[_0x431ecc(0x2a2)]>0x0?(_0x5f2cc0['forEach'](_0x5cb007=>{const _0xfb8f11=_0x431ecc,_0x26cd01=_0x5cb007['id']===_0x4a4438,_0x1d1668=new Option(_0x5cb007[_0xfb8f11(0x2a9)],_0x5cb007['id'],_0x26cd01,_0x26cd01);_0x3a64de['appendChild'](_0x1d1668);}),log(_0x431ecc(0x2d4)+_0x5f2cc0[_0x431ecc(0x2a2)]+'\x20个SillyTavern配置文件',_0x431ecc(0x1c3))):log(_0x431ecc(0x291),_0x431ecc(0x21a));}catch(_0x239406){log('加载SillyTavern预设失败:'+_0x239406['message'],'error');}};_0x46bfc4&&_0x3a64de&&(_0x46bfc4[_0x3b44ac(0x242)](_0x3b44ac(0x27e),()=>{const _0x3ed69c=_0x3b44ac;_0x46bfc4[_0x3ed69c(0x22b)]===_0x3ed69c(0x1c6)&&_0x54558b();}),_0x542ef3[_0x3b44ac(0x257)]==='sillytavern_preset'&&_0x54558b()),log(_0x3b44ac(0x2ec),'success');}function bindChatTableDisplaySetting(){const _0x36305d=_0xc6d991,_0x4060c7=extension_settings[extensionName],_0x37b6eb=document['getElementById'](_0x36305d(0x123)),_0x4adfcc=document[_0x36305d(0x16c)](_0x36305d(0x259));if(!_0x37b6eb||!_0x4adfcc){log(_0x36305d(0x219),'warn');return;}_0x37b6eb[_0x36305d(0x26c)]=_0x4060c7[_0x36305d(0x18e)]===!![],_0x4adfcc['checked']=_0x4060c7[_0x36305d(0x23c)]===!![];const _0x16f8d8=()=>{const _0x169c76=_0x36305d;_0x37b6eb[_0x169c76(0x26c)]?(_0x4adfcc[_0x169c76(0x2df)]=![],_0x4adfcc[_0x169c76(0x104)](_0x169c76(0x118))[_0x169c76(0x263)][_0x169c76(0x201)]='1'):(_0x4adfcc['disabled']=!![],_0x4adfcc['closest'](_0x169c76(0x118))[_0x169c76(0x263)][_0x169c76(0x201)]=_0x169c76(0x1fb));};_0x16f8d8(),_0x37b6eb[_0x36305d(0x242)](_0x36305d(0x27e),()=>{const _0xe241fe=_0x36305d;_0x4060c7[_0xe241fe(0x18e)]=_0x37b6eb[_0xe241fe(0x26c)],saveSettingsDebounced(),toastr[_0xe241fe(0x255)](_0xe241fe(0x299)+(_0x37b6eb[_0xe241fe(0x26c)]?'开启':'关闭')+'。'),_0x16f8d8();}),_0x4adfcc[_0x36305d(0x242)](_0x36305d(0x27e),()=>{const _0x30d3d9=_0x36305d;_0x4060c7[_0x30d3d9(0x23c)]=_0x4adfcc['checked'],saveSettingsDebounced(),toastr[_0x30d3d9(0x255)](_0x30d3d9(0x2d2)+(_0x4adfcc['checked']?'开启':'关闭')+_0x30d3d9(0x279));}),log(_0x36305d(0x2ca),'success');} +import * as TableManager from '../core/table-system/manager.js'; +import { log } from '../core/table-system/logger.js'; +import { extension_settings, getContext } from '/scripts/extensions.js'; +import { extensionName } from '../utils/settings.js'; +import { updateOrInsertTableInChat } from './message-table-renderer.js'; +import { saveSettingsDebounced } from '/script.js'; +import { startBatchFilling } from '../core/table-system/batch-filler.js'; +import { showHtmlModal } from './page-window.js'; +import { DEFAULT_AI_RULE_TEMPLATE, DEFAULT_AI_FLOW_TEMPLATE } from '../core/table-system/settings.js'; +import { world_names, loadWorldInfo } from '/scripts/world-info.js'; +import { safeCharLorebooks, safeLorebookEntries } from '../core/tavernhelper-compatibility.js'; +import { characters, this_chid, eventSource, event_types } from "/script.js"; +import { fetchNccsModels, testNccsApiConnection } from '../core/api/NccsApi.js'; + +const isTouchDevice = () => window.matchMedia('(pointer: coarse)').matches; +const getAllTablesContainer = () => document.getElementById('all-tables-container'); + +let isResizing = false; + + +function toggleRowContextMenu(event) { + event.preventDefault(); + event.stopPropagation(); + + const targetTd = event.target.closest('td.index-col'); + if (!targetTd) return; + + const tableWrapper = targetTd.closest('.amily2-table-wrapper'); + if (!tableWrapper) return; + + const isActive = targetTd.classList.contains('amily2-menu-open'); + document.querySelectorAll('.amily2-menu-open').forEach(openEl => { + if (openEl !== targetTd) { + openEl.classList.remove('amily2-menu-open'); + openEl.style.zIndex = ''; + openEl.style.position = ''; + const otherWrapper = openEl.closest('.amily2-table-wrapper'); + if (otherWrapper) { + otherWrapper.style.overflowX = 'auto'; + otherWrapper.style.zIndex = ''; + otherWrapper.style.position = ''; + } + } + }); + + targetTd.classList.toggle('amily2-menu-open'); + + if (targetTd.classList.contains('amily2-menu-open')) { + tableWrapper.style.overflowX = 'visible'; + tableWrapper.style.position = 'relative'; + tableWrapper.style.zIndex = '10'; + targetTd.style.position = 'relative'; + targetTd.style.zIndex = '100'; + } else { + tableWrapper.style.overflowX = 'auto'; + tableWrapper.style.position = ''; + tableWrapper.style.zIndex = ''; + targetTd.style.position = ''; + targetTd.style.zIndex = ''; + } + + const closeMenu = (e) => { + if (!targetTd.contains(e.target)) { + targetTd.classList.remove('amily2-menu-open'); + targetTd.style.position = ''; + targetTd.style.zIndex = ''; + tableWrapper.style.overflowX = 'auto'; + tableWrapper.style.position = ''; + tableWrapper.style.zIndex = ''; + document.removeEventListener('click', closeMenu, true); + } + }; + + if (targetTd.classList.contains('amily2-menu-open')) { + setTimeout(() => { + document.addEventListener('click', closeMenu, true); + }, 0); + } +} + + +function toggleColumnContextMenu(event) { + if (isResizing || event.target.classList.contains('amily2-resizer')) { + return; + } + event.preventDefault(); + event.stopPropagation(); + + const targetTh = event.target.closest('th'); + if (!targetTh) return; + + const tableWrapper = targetTh.closest('.amily2-table-wrapper'); + if (!tableWrapper) return; + + const isActive = targetTh.classList.contains('amily2-menu-open'); + + document.querySelectorAll('th.amily2-menu-open').forEach(openTh => { + if (openTh !== targetTh) { + openTh.classList.remove('amily2-menu-open'); + const otherWrapper = openTh.closest('.amily2-table-wrapper'); + if (otherWrapper) { + otherWrapper.style.overflowX = 'auto'; + otherWrapper.style.zIndex = ''; + otherWrapper.style.position = ''; + } + } + }); + + targetTh.classList.toggle('amily2-menu-open'); + + if (targetTh.classList.contains('amily2-menu-open')) { + tableWrapper.style.overflowX = 'visible'; + tableWrapper.style.position = 'relative'; + tableWrapper.style.zIndex = '10'; + } else { + tableWrapper.style.overflowX = 'auto'; + tableWrapper.style.position = ''; + tableWrapper.style.zIndex = ''; + } + + const closeMenu = (e) => { + if (!targetTh.contains(e.target)) { + targetTh.classList.remove('amily2-menu-open'); + tableWrapper.style.overflowX = 'auto'; + tableWrapper.style.position = ''; + tableWrapper.style.zIndex = ''; + document.removeEventListener('click', closeMenu, true); + } + }; + + // If the menu was opened, set up the listener to close it + if (targetTh.classList.contains('amily2-menu-open')) { + setTimeout(() => { + document.addEventListener('click', closeMenu, true); + }, 0); + } +} + + +function toggleHeaderIndexContextMenu(event) { + event.preventDefault(); + event.stopPropagation(); + + const targetTh = event.target.closest('th.index-col'); + if (!targetTh) return; + + const menu = targetTh.querySelector('.amily2-context-menu'); + if (!menu) return; + + const isActive = menu.classList.contains('amily2-menu-active'); + + document.querySelectorAll('.amily2-context-menu.amily2-menu-active').forEach(activeMenu => { + activeMenu.classList.remove('amily2-menu-active'); + }); + + if (!isActive) { + menu.classList.add('amily2-menu-active'); + } + + const closeMenu = (e) => { + if (!menu.contains(e.target)) { + menu.classList.remove('amily2-menu-active'); + document.removeEventListener('click', closeMenu, true); + } + }; + + setTimeout(() => { + if (menu.classList.contains('amily2-menu-active')) { + document.addEventListener('click', closeMenu, true); + } + }, 0); +} + + +function showInputDialog({ title, label, currentValue, placeholder, onSave }) { + const dialogHtml = ` + + + `; + + const dialogElement = $(dialogHtml).appendTo('body'); + const input = dialogElement.find('#generic-input'); + + const closeDialog = () => { + dialogElement[0].close(); + dialogElement.remove(); + }; + + const save = () => { + const newValue = input.val().trim(); + if (newValue && newValue !== currentValue) { + onSave(newValue); + } else if (!newValue) { + toastr.warning('名称不能为空!'); + input.focus(); + return; + } + closeDialog(); + }; + + dialogElement.find('.popup-button-ok').on('click', save); + dialogElement.find('.popup-button-cancel').on('click', closeDialog); + input.on('keypress', (e) => { if (e.which === 13) save(); }); + input.on('keydown', (e) => { if (e.which === 27) closeDialog(); }); + + dialogElement[0].showModal(); + input.focus().select(); +} + + +function showColumnNameEditor(tableIndex, colIndex, currentName) { + showInputDialog({ + title: '编辑列名', + label: '列名:', + currentValue: currentName, + placeholder: '请输入列名...', + onSave: (newName) => { + TableManager.updateHeader(tableIndex, colIndex, newName); + renderTables(); + toastr.success(`列名已更新为 "${newName}"`); + } + }); +} + + +function showTableNameEditor(tableIndex, currentName) { + showInputDialog({ + title: '编辑表名', + label: '表名:', + currentValue: currentName, + placeholder: '请输入表名...', + onSave: (newName) => { + TableManager.renameTable(tableIndex, newName); + renderTables(); + toastr.success(`表名已更新为 "${newName}"`); + } + }); +} + + +function positionContextMenu(menu, trigger) { + menu.style.position = 'absolute'; + menu.style.zIndex = '10000'; + menu.style.left = '0'; + menu.style.right = 'auto'; + menu.style.marginTop = ''; + menu.style.marginBottom = ''; + menu.style.maxHeight = ''; + menu.style.overflowY = ''; + + const viewportHeight = window.innerHeight; + const triggerRect = trigger.getBoundingClientRect(); + const menuHeight = 200; + const scrollContainer = trigger.closest('.hly-scroll'); + const containerRect = scrollContainer ? scrollContainer.getBoundingClientRect() : { top: 0, bottom: viewportHeight }; + + const spaceBelow = Math.min(viewportHeight, containerRect.bottom) - triggerRect.bottom; + const spaceAbove = triggerRect.top - Math.max(0, containerRect.top); + + if (spaceBelow < menuHeight && spaceAbove > spaceBelow) { + menu.style.top = 'auto'; + menu.style.bottom = '100%'; + menu.style.marginBottom = '2px'; + } else { + menu.style.top = '100%'; + menu.style.bottom = 'auto'; + menu.style.marginTop = '2px'; + } + + const menuWidth = 160; + const table = trigger.closest('table'); + const tableWrapper = table ? table.closest('div[style*="overflowX"]') : null; + + if (tableWrapper) { + const wrapperRect = tableWrapper.getBoundingClientRect(); + const triggerLeftInWrapper = triggerRect.left - wrapperRect.left; + + if (triggerLeftInWrapper + menuWidth > wrapperRect.width - 20) { + menu.style.left = 'auto'; + menu.style.right = '0'; + } + } +} + + +export function renderTables() { + let tables = TableManager.getMemoryState(); + if (!tables) { + log('内存状态为空,从聊天记录加载作为后备。', 'warn'); + tables = TableManager.loadTables(); + } + + const container = getAllTablesContainer(); + + if (!tables || !container) { + console.error('[内存储司-工部] 缺少表格数据或容器,无法渲染。'); + return; + } + + const highlights = TableManager.getHighlights(); + const updatedTables = TableManager.getUpdatedTables(); // 【V15.2 新增】获取被更新的表格 + const fragment = document.createDocumentFragment(); + + const placeholder = document.getElementById('add-table-placeholder'); + if (placeholder) { + placeholder.remove(); + } + + tables.forEach((tableData, tableIndex) => { + const header = document.createElement('div'); + header.style.display = 'flex'; + header.style.justifyContent = 'space-between'; + header.style.alignItems = 'center'; + const title = document.createElement('h3'); + if (updatedTables.has(tableIndex)) { + title.classList.add('table-updated'); // 【V15.2 新增】为更新的表格添加高亮 + } + title.innerHTML = ` ${tableData.name}`; + const controls = document.createElement('div'); + controls.className = 'table-controls'; + + const moveUpBtn = tableIndex > 0 ? `` : ''; + const moveDownBtn = tableIndex < tables.length - 1 ? `` : ''; + + controls.innerHTML = ` + ${moveUpBtn} + ${moveDownBtn} + + + `; + header.appendChild(title); + header.appendChild(controls); + fragment.appendChild(header); + + const tableWrapper = document.createElement('div'); + tableWrapper.className = 'amily2-table-wrapper'; + + const tableElement = document.createElement('table'); + tableElement.id = `amily2-table-${tableIndex}`; + tableElement.dataset.tableIndex = tableIndex; + + const colgroup = document.createElement('colgroup'); + const indexCol = document.createElement('col'); + indexCol.style.width = '40px'; + colgroup.appendChild(indexCol); + + if (tableData.headers) { + tableData.headers.forEach((_, colIndex) => { + const col = document.createElement('col'); + // Assign a default width of 120px if none is specified + const colWidth = (tableData.columnWidths && tableData.columnWidths[colIndex]) ? tableData.columnWidths[colIndex] : 90; + col.style.width = `${colWidth}px`; + colgroup.appendChild(col); + }); + } + tableElement.appendChild(colgroup); + + // Explicitly calculate and set the total table width to override CSS conflicts + let totalWidth = 0; + const cols = colgroup.querySelectorAll('col'); + cols.forEach(col => { + totalWidth += parseInt(col.style.width, 10); + }); + tableElement.style.width = `${totalWidth}px`; + + const thead = tableElement.createTHead(); + const headerRow = thead.insertRow(); + + const indexTh = document.createElement('th'); + indexTh.className = 'index-col'; + indexTh.textContent = '#'; + indexTh.style.cursor = 'pointer'; + indexTh.title = '点击添加第一行'; + + // 为表头的 # 号添加特殊的上下文菜单(仅在表格为空时显示) + if (!tableData.rows || tableData.rows.length === 0) { + const headerMenu = document.createElement('div'); + headerMenu.className = 'amily2-context-menu amily2-header-menu'; + headerMenu.style.display = 'none'; // 默认隐藏 + + const addRowButton = document.createElement('button'); + addRowButton.innerHTML = ' 创建第一行'; + addRowButton.className = 'menu_button small_button'; + addRowButton.addEventListener('click', (e) => { + e.stopPropagation(); + TableManager.addRow(tableIndex); + renderTables(); + }); + + headerMenu.appendChild(addRowButton); + indexTh.appendChild(headerMenu); + + // 为表头添加直接的点击事件监听器 + indexTh.addEventListener('click', (e) => { + e.preventDefault(); + e.stopPropagation(); + console.log('Header # clicked for table', tableIndex); + + // 直接执行添加行操作 + TableManager.addRow(tableIndex); + renderTables(); + toastr.success('已添加第一行'); + }); + } + + headerRow.appendChild(indexTh); + + tableData.headers.forEach((headerText, colIndex) => { + const th = document.createElement('th'); + th.dataset.colIndex = colIndex; + th.style.cursor = 'pointer'; + + const headerContent = document.createElement('span'); + headerContent.className = 'amily2-header-text'; + headerContent.textContent = headerText; + th.appendChild(headerContent); + + const menu = document.createElement('div'); + menu.className = 'amily2-context-menu'; + + const actions = [ + { label: '向左移动', action: 'move-left', icon: 'fa-arrow-left' }, + { label: '向右移动', action: 'move-right', icon: 'fa-arrow-right' }, + { label: '在左加列', action: 'add-left', icon: 'fa-plus-circle' }, + { label: '在右加列', action: 'add-right', icon: 'fa-plus-circle' }, + { label: '编辑列名', action: 'rename', icon: 'fa-pen' }, + { label: '删除该列', action: 'delete', icon: 'fa-trash-alt', isDanger: true } + ]; + + actions.forEach(({ label, action, icon, isDanger }) => { + const button = document.createElement('button'); + button.textContent = label; + button.className = 'menu_button small_button'; + if (isDanger) button.classList.add('danger'); + + button.addEventListener('click', (e) => { + e.stopPropagation(); + switch (action) { + case 'move-left': + TableManager.moveColumn(tableIndex, colIndex, 'left'); + break; + case 'move-right': + TableManager.moveColumn(tableIndex, colIndex, 'right'); + break; + case 'add-left': + TableManager.insertColumn(tableIndex, colIndex, 'left'); + break; + case 'add-right': + TableManager.insertColumn(tableIndex, colIndex, 'right'); + break; + case 'rename': + showColumnNameEditor(tableIndex, colIndex, headerText); + break; + case 'delete': + if (confirm(`您确定要删除 “${headerText}” 列吗?`)) { + TableManager.deleteColumn(tableIndex, colIndex); + } + break; + } + renderTables(); + }); + menu.appendChild(button); + }); + + th.appendChild(menu); + + const resizer = document.createElement('div'); + resizer.className = 'amily2-resizer'; + th.appendChild(resizer); + + const startResize = (startEvent) => { + startEvent.preventDefault(); + startEvent.stopPropagation(); + + isResizing = true; + + const table = startEvent.target.closest('table'); + const th = startEvent.target.parentElement; + const col = table.querySelector(`colgroup > col:nth-child(${th.cellIndex + 1})`); + + const isTouchEvent = startEvent.type.startsWith('touch'); + const startX = isTouchEvent ? startEvent.touches[0].clientX : startEvent.clientX; + const startWidth = th.offsetWidth; + + const onMove = (moveEvent) => { + const currentX = isTouchEvent ? moveEvent.touches[0].clientX : moveEvent.clientX; + const newWidth = startWidth + (currentX - startX); + if (newWidth > 50) { + col.style.width = `${newWidth}px`; + } + }; + + const onEnd = () => { + document.removeEventListener('mousemove', onMove); + document.removeEventListener('mouseup', onEnd); + document.removeEventListener('touchmove', onMove); + document.removeEventListener('touchend', onEnd); + + const finalWidth = parseInt(col.style.width, 10); + TableManager.updateColumnWidth(tableIndex, colIndex, finalWidth); + + setTimeout(() => { isResizing = false; }, 0); + }; + + if (isTouchEvent) { + document.addEventListener('touchmove', onMove, { passive: false }); + document.addEventListener('touchend', onEnd); + } else { + document.addEventListener('mousemove', onMove); + document.addEventListener('mouseup', onEnd); + } + }; + + resizer.addEventListener('mousedown', startResize); + resizer.addEventListener('touchstart', startResize, { passive: false }); + + headerRow.appendChild(th); + }); + + const tbody = tableElement.createTBody(); + if (tableData.rows && tableData.rows.length > 0) { + tableData.rows.forEach((rowData, rowIndex) => { + const row = tbody.insertRow(); + row.dataset.rowIndex = rowIndex; + + // 【延迟删除】根据行状态添加样式 + const rowStatus = tableData.rowStatuses ? tableData.rowStatuses[rowIndex] : 'normal'; + if (rowStatus === 'pending-deletion') { + row.classList.add('pending-deletion-row'); + } + + const indexCell = row.insertCell(); + indexCell.className = 'index-col'; + + const rowIndexSpan = document.createElement('span'); + rowIndexSpan.textContent = rowIndex + 1; + indexCell.appendChild(rowIndexSpan); + + const menu = document.createElement('div'); + menu.className = 'amily2-context-menu amily2-row-context-menu'; + + let actions; + + if (rowStatus === 'pending-deletion') { + actions = [ + { label: '恢复该行', action: 'restore-row', icon: 'fa-undo', isSuccess: true, btnClass: 'restore-row-btn' } + ]; + } else { + actions = [ + { label: '向上移动', action: 'move-up', icon: 'fa-arrow-up', btnClass: 'move-row-up-btn' }, + { label: '向下移动', action: 'move-down', icon: 'fa-arrow-down', btnClass: 'move-row-down-btn' }, + { label: '在上加行', action: 'add-above', icon: 'fa-plus-circle', btnClass: 'add-row-above-btn' }, + { label: '在下加行', action: 'add-below', icon: 'fa-plus-circle', btnClass: 'add-row-below-btn' }, + { label: '删除该行', action: 'delete-row', icon: 'fa-trash-alt', isDanger: true, btnClass: 'delete-row-btn' } + ]; + } + + actions.forEach(({ label, action, icon, isDanger, isSuccess }) => { + const button = document.createElement('button'); + button.innerHTML = ` ${label}`; + button.className = 'menu_button small_button'; + if (isDanger) button.classList.add('danger'); + if (isSuccess) button.classList.add('success'); // Use a success style for restore + + button.addEventListener('click', (e) => { + e.stopPropagation(); + + switch (action) { + case 'move-up': + TableManager.moveRow(tableIndex, rowIndex, 'up'); + break; + case 'move-down': + TableManager.moveRow(tableIndex, rowIndex, 'down'); + break; + case 'add-above': + TableManager.insertRow(tableIndex, rowIndex, 'above'); + break; + case 'add-below': + TableManager.insertRow(tableIndex, rowIndex, 'below'); + break; + case 'delete-row': + // 【延迟删除】不再需要确认,因为操作是可逆的 + TableManager.deleteRow(tableIndex, rowIndex); + break; + case 'restore-row': + TableManager.restoreRow(tableIndex, rowIndex); + break; + } + // For instant feedback, re-render is needed for delete/restore + if (action === 'delete-row' || action === 'restore-row') { + // The manager functions now handle their own re-rendering + } else { + renderTables(); + } + }); + menu.appendChild(button); + }); + indexCell.appendChild(menu); + + rowData.forEach((cellData, colIndex) => { + const cell = row.insertCell(); + + const cellContent = document.createElement('div'); + cellContent.className = 'amily2-cell-content'; + cellContent.textContent = cellData; + cell.appendChild(cellContent); + + // 【延迟删除】如果行正在待删除,则禁止编辑 + if (rowStatus !== 'pending-deletion' && !isTouchDevice()) { + cell.setAttribute('contenteditable', 'true'); + } + cell.dataset.colIndex = colIndex; + cell.dataset.label = tableData.headers[colIndex] || ''; + + const highlightKey = `${tableIndex}-${rowIndex}-${colIndex}`; + if (highlights.has(highlightKey)) { + cell.classList.add('cell-highlight'); + } + }); + }); + } + tableWrapper.appendChild(tableElement); + fragment.appendChild(tableWrapper); + }); + + container.innerHTML = ''; + container.appendChild(fragment); + + if (placeholder) { + container.appendChild(placeholder); + } + + // Also update the in-chat table whenever the main tables are re-rendered + updateOrInsertTableInChat(); +} + + +function openTableRuleEditor() { + const settings = extension_settings[extensionName]; + const tags = settings.table_tags_to_extract || ''; + const exclusionRules = settings.table_exclusion_rules || []; + + const rulesHtml = exclusionRules.map((rule, index) => ` +
+ + - + + +
+ `).join(''); + + const modalHtml = ` +
+
+ + + 仅提取指定XML标签的内容,例如填“content”,即提取...中的内容。 +
+
+ +
${rulesHtml}
+ + 移除所有被起始和结束标记包裹的内容(例如 OOC 部分)。 +
+
+ `; + + const dialog = showHtmlModal('配置独立提取规则', modalHtml, { + onOk: () => { + const newTags = document.getElementById('table-tags-input').value; + updateAndSaveTableSetting('table_tags_to_extract', newTags); + + const newExclusionRules = []; + document.querySelectorAll('#exclusion-rules-list .exclusion-rule-item').forEach(item => { + const start = item.querySelector('.rule-start').value.trim(); + const end = item.querySelector('.rule-end').value.trim(); + if (start && end) { + newExclusionRules.push({ start, end }); + } + }); + updateAndSaveTableSetting('table_exclusion_rules', newExclusionRules); + toastr.success('独立提取规则已保存。'); + }, + onShow: (dialogElement) => { + const rulesList = dialogElement.find('#exclusion-rules-list'); + + dialogElement.find('#add-exclusion-rule-btn').on('click', () => { + const newIndex = rulesList.children().length; + const newItemHtml = ` +
+ + - + + +
`; + rulesList.append(newItemHtml); + }); + + rulesList.on('click', '.remove-rule-btn', function() { + $(this).closest('.exclusion-rule-item').remove(); + }); + } + }); +} + +function openRuleEditor(tableIndex) { + const tables = TableManager.getMemoryState(); + if (!tables || !tables[tableIndex]) return; + const table = tables[tableIndex]; + + // 兼容旧数据结构 + if (table.charLimitRule && !table.charLimitRules) { + table.charLimitRules = {}; + if (table.charLimitRule.columnIndex !== -1) { + table.charLimitRules[table.charLimitRule.columnIndex] = table.charLimitRule.limit; + } + } + const charLimitRules = table.charLimitRules || {}; + + const renderCharLimitRules = (rules) => { + return Object.entries(rules).map(([colIndex, limit]) => { + const header = table.headers[colIndex] || `未知列 (${colIndex})`; + return ` +
+ ${header}: 不超过 ${limit} 字 + +
+ `; + }).join(''); + }; + + const getColumnOptions = (rules) => { + return table.headers.map((header, index) => { + // 如果该列已存在规则,则不应出现在下拉菜单中 + if (rules[index]) return ''; + return ``; + }).join(''); + }; + + const dialogHtml = ` + + + `; + + const dialogElement = $(dialogHtml).appendTo('body'); + + const closeDialog = () => { + dialogElement[0].close(); + dialogElement.remove(); + }; + + const refreshRuleUI = () => { + const currentRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); + dialogElement.find('#current-char-limit-rules').html(renderCharLimitRules(currentRules)); + dialogElement.find('#new-rule-column-select').html(`${getColumnOptions(currentRules)}`); + }; + + dialogElement.find('#current-char-limit-rules').attr('data-rules', JSON.stringify(charLimitRules)); + + dialogElement.on('click', '#add-char-limit-rule-btn', () => { + const selectedColumn = parseInt(dialogElement.find('#new-rule-column-select').val(), 10); + const limitValue = parseInt(dialogElement.find('#new-rule-limit-input').val(), 10); + + if (selectedColumn === -1) { + toastr.warning('请选择一个列。'); + return; + } + + // 允许输入0,但0意味着“无限制”,所以我们不添加规则。 + if (isNaN(limitValue) || limitValue < 0) { + toastr.warning('请输入一个有效的字数限制(大于等于0)。'); + return; + } + + const currentRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); + + if (limitValue > 0) { + // 只有当限制大于0时,才添加或更新规则 + currentRules[selectedColumn] = limitValue; + dialogElement.find('#current-char-limit-rules').attr('data-rules', JSON.stringify(currentRules)); + refreshRuleUI(); + } else { + // 如果用户输入0,则视为不设置规则 + toastr.info('字数限制为0表示不设置规则。'); + } + }); + + dialogElement.on('click', '.remove-char-limit-rule-btn', function() { + const colIndexToRemove = $(this).data('col-index'); + const currentRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); + delete currentRules[colIndexToRemove]; + dialogElement.find('#current-char-limit-rules').attr('data-rules', JSON.stringify(currentRules)); + refreshRuleUI(); + }); + + dialogElement.find('.popup-button-ok').on('click', () => { + const newCharLimitRules = JSON.parse(dialogElement.find('#current-char-limit-rules').attr('data-rules') || '{}'); + const rowLimitValue = parseInt(dialogElement.find('#rule-row-limit-value').val(), 10); + + const newRules = { + note: dialogElement.find('#rule-note').val(), + rule_add: dialogElement.find('#rule-add').val(), + rule_delete: dialogElement.find('#rule-delete').val(), + rule_update: dialogElement.find('#rule-update').val(), + charLimitRules: newCharLimitRules, + rowLimitRule: rowLimitValue, + }; + TableManager.updateTableRules(tableIndex, newRules); + closeDialog(); + }); + + dialogElement.find('.popup-button-cancel').on('click', closeDialog); + dialogElement[0].showModal(); +} + + +function bindInjectionSettings() { + const settings = extension_settings[extensionName]; + + const masterSwitchCheckbox = document.getElementById('table-system-master-switch'); + const enabledCheckbox = document.getElementById('table-injection-enabled'); + const optimizationCheckbox = document.getElementById('context-optimization-enabled'); // 【V144.0】 + const positionSelect = document.getElementById('table-injection-position'); + const depthInput = document.getElementById('table-injection-depth'); + const roleRadioGroup = document.querySelectorAll('input[name="table-injection-role"]'); + + if (!masterSwitchCheckbox || !enabledCheckbox || !positionSelect || !depthInput || !roleRadioGroup.length) { + return; + } + + const updateInjectionUI = () => { + const position = positionSelect.value; + const masterEnabled = masterSwitchCheckbox.checked; + + const isChatInjection = position === '1'; + + enabledCheckbox.disabled = !masterEnabled; + positionSelect.disabled = !masterEnabled; + depthInput.disabled = !masterEnabled || !isChatInjection; + roleRadioGroup.forEach(radio => radio.disabled = !masterEnabled || !isChatInjection); + + const enabledOpacity = masterEnabled ? '1' : '0.5'; + enabledCheckbox.style.opacity = enabledOpacity; + if (enabledCheckbox.closest('.control-block-with-switch')) { + enabledCheckbox.closest('.control-block-with-switch').style.opacity = enabledOpacity; + } + + positionSelect.style.opacity = enabledOpacity; + if (positionSelect.previousElementSibling) { + positionSelect.previousElementSibling.style.opacity = enabledOpacity; + } + + const depthOpacity = masterEnabled && isChatInjection ? '1' : '0.5'; + depthInput.style.opacity = depthOpacity; + if (depthInput.previousElementSibling) { + depthInput.previousElementSibling.style.opacity = depthOpacity; + } + + const roleOpacity = masterEnabled && isChatInjection ? '1' : '0.5'; + const roleGroupContainer = document.getElementById('table-role-system')?.closest('.radio-group'); + if (roleGroupContainer) { + roleGroupContainer.style.opacity = roleOpacity; + if (roleGroupContainer.previousElementSibling) { + roleGroupContainer.previousElementSibling.style.opacity = roleOpacity; + } + } + + const fillingModeRadios = document.querySelectorAll('input[name="filling-mode"]'); + fillingModeRadios.forEach(radio => { + radio.disabled = !masterEnabled; + const label = radio.closest('label'); + if (label) { + label.style.opacity = masterEnabled ? '1' : '0.5'; + } + }); + + const fillButton = document.getElementById('fill-table-now-btn'); + if (fillButton) { + fillButton.disabled = !masterEnabled; + fillButton.style.opacity = masterEnabled ? '1' : '0.5'; + } + }; + + masterSwitchCheckbox.checked = settings.table_system_enabled !== false; + enabledCheckbox.checked = settings.table_injection_enabled; + if (optimizationCheckbox) { // 【V144.0】 + optimizationCheckbox.checked = settings.context_optimization_enabled !== false; + } + positionSelect.value = settings.injection.position; + depthInput.value = settings.injection.depth; + roleRadioGroup.forEach(radio => { + if (parseInt(radio.value, 10) === settings.injection.role) { + radio.checked = true; + } + }); + + updateInjectionUI(); + + if (masterSwitchCheckbox.dataset.eventsBound) return; + + masterSwitchCheckbox.addEventListener('change', () => { + settings.table_system_enabled = masterSwitchCheckbox.checked; + saveSettingsDebounced(); + updateInjectionUI(); + + const statusText = masterSwitchCheckbox.checked ? '已启用' : '已禁用'; + toastr.info(`表格系统总开关${statusText}。`); + log(`表格系统总开关${statusText}。`, 'info'); + }); + + enabledCheckbox.addEventListener('change', () => { + settings.table_injection_enabled = enabledCheckbox.checked; + saveSettingsDebounced(); + }); + + // 【V144.0】 + if (optimizationCheckbox) { + optimizationCheckbox.addEventListener('change', () => { + settings.context_optimization_enabled = optimizationCheckbox.checked; + saveSettingsDebounced(); + toastr.info(`上下文优化(世界书合并)已${optimizationCheckbox.checked ? '启用' : '禁用'}。`); + }); + } + + positionSelect.addEventListener('change', () => { + settings.injection.position = parseInt(positionSelect.value, 10); + saveSettingsDebounced(); + + updateInjectionUI(); + }); + + depthInput.addEventListener('input', () => { + settings.injection.depth = parseInt(depthInput.value, 10); + saveSettingsDebounced(); + }); + + roleRadioGroup.forEach(radio => { + radio.addEventListener('change', () => { + if (radio.checked) { + settings.injection.role = parseInt(radio.value, 10); + saveSettingsDebounced(); + } + }); + }); + + masterSwitchCheckbox.dataset.eventsBound = 'true'; + log('表格注入设置已成功绑定。', 'success'); +} + + +function updateAndSaveTableSetting(key, value) { + if (!extension_settings[extensionName]) { + extension_settings[extensionName] = {}; + } + extension_settings[extensionName][key] = value; + saveSettingsDebounced(); +} + +function bindWorldBookSettings() { + const settings = extension_settings[extensionName]; + + if (settings.table_worldbook_enabled === undefined) settings.table_worldbook_enabled = false; + if (settings.table_worldbook_char_limit === undefined) settings.table_worldbook_char_limit = 30000; + if (settings.table_worldbook_source === undefined) settings.table_worldbook_source = 'character'; + if (settings.table_selected_worldbooks === undefined) settings.table_selected_worldbooks = []; + if (settings.table_selected_entries === undefined) settings.table_selected_entries = {}; + + const enabledCheckbox = document.getElementById('table_worldbook_enabled'); + const limitSlider = document.getElementById('table_worldbook_char_limit'); + const limitValueSpan = document.getElementById('table_worldbook_char_limit_value'); + const sourceRadios = document.querySelectorAll('input[name="table_worldbook_source"]'); + const manualSelectWrapper = document.getElementById('table_worldbook_select_wrapper'); + const refreshButton = document.getElementById('table_refresh_worldbooks'); + const bookListContainer = document.getElementById('table_worldbook_checkbox_list'); + const entryListContainer = document.getElementById('table_worldbook_entry_list'); + + if (!enabledCheckbox || !limitSlider || !limitValueSpan || !sourceRadios.length || !manualSelectWrapper || !refreshButton || !bookListContainer || !entryListContainer) { + log('无法找到世界书设置的相关UI元素,绑定失败。', 'warn'); + return; + } + + const saveSelectedEntries = () => { + const selected = {}; + entryListContainer.querySelectorAll('input[type="checkbox"]:checked').forEach(cb => { + const book = cb.dataset.book; + const uid = cb.dataset.uid; + if (!selected[book]) { + selected[book] = []; + } + selected[book].push(uid); + }); + settings.table_selected_entries = selected; + saveSettingsDebounced(); + }; + + const renderWorldBookEntries = async () => { + entryListContainer.innerHTML = '

加载条目中...

'; + const source = settings.table_worldbook_source || 'character'; + let bookNames = []; + + if (source === 'manual') { + bookNames = settings.table_selected_worldbooks || []; + } else { + if (this_chid !== undefined && this_chid >= 0 && characters[this_chid]) { + try { + const charLorebooks = await safeCharLorebooks({ type: 'all' }); + if (charLorebooks.primary) bookNames.push(charLorebooks.primary); + if (charLorebooks.additional?.length) bookNames.push(...charLorebooks.additional); + } catch (error) { + console.error(`[内存储司] 获取角色世界书失败:`, error); + entryListContainer.innerHTML = '

获取角色世界书失败。

'; + return; + } + } else { + entryListContainer.innerHTML = '

请先加载一个角色。

'; + return; + } + } + + if (bookNames.length === 0) { + entryListContainer.innerHTML = '

未选择或绑定世界书。

'; + return; + } + + try { + const allEntries = []; + for (const bookName of bookNames) { + const entries = await safeLorebookEntries(bookName); + entries.forEach(entry => allEntries.push({ ...entry, bookName })); + } + + entryListContainer.innerHTML = ''; + if (allEntries.length === 0) { + entryListContainer.innerHTML = '

所选世界书中没有条目。

'; + return; + } + + allEntries.forEach(entry => { + const div = document.createElement('div'); + div.className = 'checkbox-item'; + div.title = `世界书: ${entry.bookName}\nUID: ${entry.uid}`; + + const checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.id = `wb-entry-check-${entry.bookName}-${entry.uid}`; + checkbox.dataset.book = entry.bookName; + checkbox.dataset.uid = entry.uid; + + const isChecked = settings.table_selected_entries[entry.bookName]?.includes(String(entry.uid)); + checkbox.checked = !!isChecked; + + const label = document.createElement('label'); + label.htmlFor = checkbox.id; + label.textContent = entry.comment || '无标题条目'; + + div.appendChild(checkbox); + div.appendChild(label); + entryListContainer.appendChild(div); + }); + } catch (error) { + console.error(`[内存储司] 加载世界书条目失败:`, error); + entryListContainer.innerHTML = '

加载条目失败。

'; + } + }; + + const renderWorldBookList = () => { + const worldBooks = world_names.map(name => ({ name: name.replace('.json', ''), file_name: name })); + bookListContainer.innerHTML = ''; + if (worldBooks && worldBooks.length > 0) { + worldBooks.forEach(book => { + const div = document.createElement('div'); + div.className = 'checkbox-item'; + div.title = book.name; + + const checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.id = `wb-check-${book.file_name}`; + checkbox.value = book.file_name; + checkbox.checked = settings.table_selected_worldbooks.includes(book.file_name); + + checkbox.addEventListener('change', () => { + if (checkbox.checked) { + if (!settings.table_selected_worldbooks.includes(book.file_name)) { + settings.table_selected_worldbooks.push(book.file_name); + } + } else { + settings.table_selected_worldbooks = settings.table_selected_worldbooks.filter(name => name !== book.file_name); + } + saveSettingsDebounced(); + renderWorldBookEntries(); + }); + + const label = document.createElement('label'); + label.htmlFor = `wb-check-${book.file_name}`; + label.textContent = book.name; + + div.appendChild(checkbox); + div.appendChild(label); + bookListContainer.appendChild(div); + }); + } else { + bookListContainer.innerHTML = '

没有找到世界书。

'; + } + renderWorldBookEntries(); + }; + + const updateManualSelectVisibility = () => { + const isManual = settings.table_worldbook_source === 'manual'; + manualSelectWrapper.style.display = isManual ? 'block' : 'none'; + renderWorldBookEntries(); + if (isManual) { + renderWorldBookList(); + } + }; + + enabledCheckbox.checked = settings.table_worldbook_enabled; + limitSlider.value = settings.table_worldbook_char_limit; + limitValueSpan.textContent = settings.table_worldbook_char_limit; + sourceRadios.forEach(radio => { + radio.checked = radio.value === settings.table_worldbook_source; + }); + + updateManualSelectVisibility(); + + if (enabledCheckbox.dataset.eventsBound) return; + + enabledCheckbox.addEventListener('change', () => { + settings.table_worldbook_enabled = enabledCheckbox.checked; + saveSettingsDebounced(); + }); + + limitSlider.addEventListener('input', () => { limitValueSpan.textContent = limitSlider.value; }); + limitSlider.addEventListener('change', () => { + settings.table_worldbook_char_limit = parseInt(limitSlider.value, 10); + saveSettingsDebounced(); + }); + + sourceRadios.forEach(radio => { + radio.addEventListener('change', () => { + if (radio.checked) { + settings.table_worldbook_source = radio.value; + updateManualSelectVisibility(); + saveSettingsDebounced(); + } + }); + }); + + refreshButton.addEventListener('click', renderWorldBookList); + entryListContainer.addEventListener('change', (event) => { + if (event.target.type === 'checkbox') { + saveSelectedEntries(); + } + }); + + enabledCheckbox.dataset.eventsBound = 'true'; + log('世界书设置已成功绑定。', 'success'); +} + +export function bindTableEvents() { + const panel = document.getElementById('amily2_memorisation_forms_panel'); + if (!panel || panel.dataset.eventsBound) { + return; + } + log('开始为表格视图绑定交互事件...', 'info'); + + const fillingModeRadios = panel.querySelectorAll('input[name="filling-mode"]'); + const contextSliderContainer = document.getElementById('context-reading-slider-container'); + const contextSlider = document.getElementById('context-reading-slider'); + const contextValueSpan = document.getElementById('context-reading-value'); + + const delaySliderContainer = document.getElementById('secondary-filler-delay-container'); + const delaySlider = document.getElementById('secondary-filler-delay-slider'); + const delayValueSpan = document.getElementById('secondary-filler-delay-value'); + + const independentRulesContainer = document.getElementById('table-independent-rules-container'); + const independentRulesToggle = document.getElementById('table-independent-rules-enabled'); + const configureRulesBtn = document.getElementById('table-configure-rules-btn'); + + const updateFillingModeUI = () => { + const currentMode = extension_settings[extensionName]?.filling_mode || 'main-api'; + fillingModeRadios.forEach(radio => { + radio.checked = (radio.value === currentMode); + }); + + const isSecondaryMode = currentMode === 'secondary-api'; + + if (contextSliderContainer) { + contextSliderContainer.style.display = isSecondaryMode ? 'block' : 'none'; + } + + if (delaySliderContainer) { + delaySliderContainer.style.display = isSecondaryMode ? 'block' : 'none'; + } + + if (independentRulesContainer) { + independentRulesContainer.style.display = 'flex'; + } + + if (independentRulesToggle && configureRulesBtn) { + configureRulesBtn.style.display = independentRulesToggle.checked ? 'block' : 'none'; + } + }; + + fillingModeRadios.forEach(radio => { + radio.addEventListener('change', function() { + const selectedMode = this.value; + updateAndSaveTableSetting('filling_mode', selectedMode); + + let modeName = '原始填表'; + if (selectedMode === 'secondary-api') modeName = '分步填表'; + if (selectedMode === 'optimized') modeName = '优化中填表'; + + toastr.info(`填表模式已切换为 ${modeName}。`); + updateFillingModeUI(); // 更新UI以确保状态同步 + }); + }); + + if (contextSlider && contextValueSpan) { + const contextReadingValue = extension_settings[extensionName]?.context_reading_level || 4; + contextSlider.value = contextReadingValue; + contextValueSpan.textContent = contextReadingValue; + + contextSlider.addEventListener('input', function() { + contextValueSpan.textContent = this.value; + }); + + contextSlider.addEventListener('change', function() { + updateAndSaveTableSetting('context_reading_level', parseInt(this.value, 10)); + toastr.info(`上下文读取级别已设置为 ${this.value}。`); + }); + } + + if (delaySlider && delayValueSpan) { + const delayValue = extension_settings[extensionName]?.secondary_filler_delay || 0; + delaySlider.value = delayValue; + delayValueSpan.textContent = delayValue; + + delaySlider.addEventListener('input', function() { + delayValueSpan.textContent = this.value; + }); + + delaySlider.addEventListener('change', function() { + updateAndSaveTableSetting('secondary_filler_delay', parseInt(this.value, 10)); + toastr.info(`填表延迟已设置为 ${this.value} 楼层。`); + }); + } + + if (independentRulesToggle) { + independentRulesToggle.checked = extension_settings[extensionName]?.table_independent_rules_enabled ?? false; + independentRulesToggle.addEventListener('change', () => { + updateAndSaveTableSetting('table_independent_rules_enabled', independentRulesToggle.checked); + updateFillingModeUI(); + }); + } + + updateFillingModeUI(); + + if (configureRulesBtn) { + configureRulesBtn.addEventListener('click', openTableRuleEditor); + } + + const renderAll = () => { + renderTables(); + bindInjectionSettings(); + bindTemplateEditors(); + }; + + renderAll(); + bindWorldBookSettings(); + bindBatchFillButton(); // 【新增】绑定批量填表按钮 + bindFloorFillButtons(); // 【新增】绑定楼层填表按钮 + bindReorganizeButton(); // 【新增】绑定重新整理按钮 + bindNccsApiEvents(); // 【新增】绑定Nccs API系统事件 + bindChatTableDisplaySetting(); // 【新增】绑定聊天内表格显示开关 + + const navDeck = document.querySelector('#amily2_memorisation_forms_panel .sinan-navigation-deck'); + if (navDeck) { + navDeck.addEventListener('click', (event) => { + const target = event.target.closest('.sinan-nav-item'); + if (!target) return; + + const tabName = target.dataset.tab; + if (!tabName) return; + + const container = target.closest('.settings-group'); + if (!container) return; + + container.querySelectorAll('.sinan-nav-item').forEach(btn => btn.classList.remove('active')); + target.classList.add('active'); + container.querySelectorAll('.sinan-tab-pane').forEach(pane => pane.classList.remove('active')); + const activePane = container.querySelector(`#sinan-${tabName}-tab`); + if (activePane) { + activePane.classList.add('active'); + } + }); + } + + const exportBtn = document.getElementById('amily2-export-preset-btn'); + const exportFullBtn = document.getElementById('amily2-export-preset-full-btn'); + const importBtn = document.getElementById('amily2-import-preset-btn'); + const importGlobalBtn = document.getElementById('amily2-import-global-preset-btn'); + const clearGlobalBtn = document.getElementById('amily2-clear-global-preset-btn'); + + if (exportBtn) { + exportBtn.addEventListener('click', () => TableManager.exportPreset()); + } + if (exportFullBtn) { + exportFullBtn.addEventListener('click', () => TableManager.exportPresetFull()); + } + if (importBtn) { + importBtn.addEventListener('click', () => TableManager.importPreset(renderAll)); + } + if (importGlobalBtn) { + importGlobalBtn.addEventListener('click', () => { + + const isEmpty = TableManager.isCurrentTablesEmpty(); + TableManager.importGlobalPreset(() => { + if (isEmpty) { + TableManager.loadTables(); + renderAll(); + } + }); + }); + } + if (clearGlobalBtn) { + clearGlobalBtn.addEventListener('click', () => { + const isEmpty = TableManager.isCurrentTablesEmpty(); + TableManager.clearGlobalPreset(); + if (isEmpty) { + TableManager.loadTables(); + renderAll(); + } + }); + } + + const clearAllBtn = document.getElementById('amily2-clear-all-tables-btn'); + if (clearAllBtn) { + clearAllBtn.addEventListener('click', () => { + if (confirm('【确认】您确定要清空所有表格的剧情内容吗?此操作将保留表格结构,但会删除所有已填写的行。')) { + TableManager.clearAllTables(); + renderAll(); + } + }); + } + + + const addTablePlaceholder = document.getElementById('add-table-placeholder'); + if (addTablePlaceholder) { + addTablePlaceholder.addEventListener('click', () => { + const newName = prompt('请输入新表格的名称:', '新表格'); + if (newName && newName.trim()) { + TableManager.addTable(newName.trim()); + renderAll(); + } + }); + } + + + const allTablesContainer = getAllTablesContainer(); + if (allTablesContainer) { + allTablesContainer.addEventListener('click', (event) => { + const th = event.target.closest('th'); + if (th && th.classList.contains('index-col')) { + // 处理表头 # 号的点击(用于空表格添加首行) + toggleHeaderIndexContextMenu(event); + return; + } + if (th && !th.classList.contains('index-col')) { + toggleColumnContextMenu(event); + return; + } + + const td = event.target.closest('td.index-col'); + if (td) { + toggleRowContextMenu(event); + return; + } + + const renameIcon = event.target.closest('.table-rename-icon'); + if (renameIcon) { + const tableIndex = parseInt(renameIcon.dataset.tableIndex, 10); + const tables = TableManager.getMemoryState(); + const currentName = tables[tableIndex]?.name || ''; + showTableNameEditor(tableIndex, currentName); + return; + } + + const target = event.target.closest('button'); + if (!target) return; + + const tableIndex = parseInt(target.dataset.tableIndex, 10); + + if (target.matches('.add-row-btn')) { + TableManager.addRow(tableIndex); + renderAll(); + } else if (target.matches('.add-col-btn')) { + TableManager.addColumn(tableIndex); + renderAll(); + } else if (target.matches('.move-table-up-btn') || target.matches('.move-table-down-btn')) { + const direction = target.classList.contains('move-table-up-btn') ? 'up' : 'down'; + TableManager.moveTable(tableIndex, direction); + renderAll(); + } else if (target.matches('.edit-rules-btn')) { + openRuleEditor(tableIndex); + } else if (target.matches('.delete-table-btn')) { + const tables = TableManager.getMemoryState(); + const tableName = tables[tableIndex]?.name || '未知表格'; + if (confirm(`【最终警告】您确定要永久废黜表格 “[${tableName}]” 吗?此操作不可逆!`)) { + TableManager.deleteTable(tableIndex); + renderAll(); + } + } + }); + + if (isTouchDevice()) { + let lastTap = 0; + let lastTapTarget = null; + allTablesContainer.addEventListener('touchstart', (event) => { + const target = event.target.closest('td'); + if (!target || target.dataset.colIndex === undefined) return; + + const currentTime = new Date().getTime(); + const tapLength = currentTime - lastTap; + if (tapLength < 300 && tapLength > 0 && lastTapTarget === target) { + event.preventDefault(); + if (target.getAttribute('contenteditable') !== 'true') { + target.setAttribute('contenteditable', 'true'); + setTimeout(() => target.focus(), 0); + } + } + lastTap = currentTime; + lastTapTarget = target; + }); + } + + allTablesContainer.addEventListener('blur', (event) => { + const target = event.target; + if (target.tagName !== 'TD' || target.getAttribute('contenteditable') !== 'true') return; + + if (isTouchDevice()) { + target.setAttribute('contenteditable', 'false'); + } + + const tableElement = target.closest('table'); + if (!tableElement) return; + + const tableIndex = parseInt(tableElement.dataset.tableIndex, 10); + const rowIndex = parseInt(target.closest('tr').dataset.rowIndex, 10); + const colIndex = parseInt(target.dataset.colIndex, 10); + const newValue = target.textContent; + + // Correctly save scroll positions before re-rendering + const tableWrapper = tableElement.closest('.amily2-table-wrapper'); + const hScroll = tableWrapper ? tableWrapper.scrollLeft : 0; + const vScroll = allTablesContainer.scrollTop; + + TableManager.addHighlight(tableIndex, rowIndex, colIndex); + const dataToUpdate = { [colIndex]: newValue }; + TableManager.updateRow(tableIndex, rowIndex, dataToUpdate); + + renderAll(); + + // Correctly restore scroll positions after re-rendering + const newTableWrapper = document.getElementById(`amily2-table-${tableIndex}`)?.closest('.amily2-table-wrapper'); + if (newTableWrapper) { + newTableWrapper.scrollLeft = hScroll; + } + allTablesContainer.scrollTop = vScroll; + + }, true); + } + + panel.dataset.eventsBound = 'true'; + log('表格视图交互事件已成功绑定。', 'success'); + + eventSource.on(event_types.CHAT_CHANGED, () => { + console.log(`[${extensionName}] 检测到角色/聊天切换,正在刷新表格系统UI和世界书设置...`); + renderAll(); + + setTimeout(() => { + const settings = extension_settings[extensionName]; + if (settings && settings.table_worldbook_enabled) { + try { + bindWorldBookSettings(); + console.log(`[${extensionName}] 世界书设置已刷新`); + } catch (error) { + console.error(`[${extensionName}] 刷新世界书设置时出错:`, error); + } + } + }, 100); + }); +} + +function bindBatchFillButton() { + const fillButton = document.getElementById('fill-table-now-btn'); + if (fillButton) { + if (fillButton.dataset.batchEventBound) return; + + fillButton.addEventListener('click', (event) => { + const settings = extension_settings[extensionName]; + const tableSystemEnabled = settings.table_system_enabled !== false; + + if (!tableSystemEnabled) { + event.preventDefault(); + toastr.warning('表格系统总开关已关闭,请先启用总开关。'); + return; + } + + startBatchFilling(); + }); + + fillButton.dataset.batchEventBound = 'true'; + log('"立即填表"按钮已成功绑定。', 'success'); + } +} + +function bindReorganizeButton() { + const reorganizeBtn = document.getElementById('reorganize-table-btn'); + + if (reorganizeBtn) { + if (reorganizeBtn.dataset.reorganizeEventBound) return; + + reorganizeBtn.addEventListener('click', async (event) => { + const settings = extension_settings[extensionName]; + const tableSystemEnabled = settings.table_system_enabled !== false; + + if (!tableSystemEnabled) { + event.preventDefault(); + toastr.warning('表格系统总开关已关闭,请先启用总开关。'); + return; + } + + try { + const { reorganizeTableContent } = await import('../core/table-system/reorganizer.js'); + await reorganizeTableContent(); + } catch (error) { + console.error('[内存储司] 重新整理功能导入失败:', error); + toastr.error('重新整理功能启动失败,请检查系统状态。'); + } + }); + + reorganizeBtn.dataset.reorganizeEventBound = 'true'; + log('"重新整理"按钮已成功绑定。', 'success'); + } +} + + +function bindFloorFillButtons() { + const selectedFloorsBtn = document.getElementById('fill-selected-floors-btn'); + const currentFloorBtn = document.getElementById('fill-current-floor-btn'); + const rollbackBtn = document.getElementById('rollback-and-refill-btn'); + + if (selectedFloorsBtn) { + + if (selectedFloorsBtn.dataset.floorEventBound) return; + + selectedFloorsBtn.addEventListener('click', (event) => { + const settings = extension_settings[extensionName]; + const tableSystemEnabled = settings.table_system_enabled !== false; + + if (!tableSystemEnabled) { + event.preventDefault(); + toastr.warning('表格系统总开关已关闭,请先启用总开关。'); + return; + } + + const startFloorInput = document.getElementById('floor-start-input'); + const endFloorInput = document.getElementById('floor-end-input'); + + const startFloor = parseInt(startFloorInput.value, 10); + const endFloor = parseInt(endFloorInput.value, 10); + + if (!startFloor || !endFloor) { + toastr.warning('请输入有效的起始楼层和结束楼层。'); + return; + } + + if (startFloor > endFloor) { + toastr.warning('起始楼层不能大于结束楼层。'); + return; + } + + if (startFloor < 1) { + toastr.warning('楼层不能小于1。'); + return; + } + + import('../core/table-system/batch-filler.js').then(module => { + module.startFloorRangeFilling(startFloor, endFloor); + }); + }); + + selectedFloorsBtn.dataset.floorEventBound = 'true'; + log('"选定楼层填表"按钮已成功绑定。', 'success'); + } + + if (currentFloorBtn) { + if (currentFloorBtn.dataset.currentEventBound) return; + + currentFloorBtn.addEventListener('click', (event) => { + const settings = extension_settings[extensionName]; + const tableSystemEnabled = settings.table_system_enabled !== false; + + if (!tableSystemEnabled) { + event.preventDefault(); + toastr.warning('表格系统总开关已关闭,请先启用总开关。'); + return; + } + + import('../core/table-system/batch-filler.js').then(module => { + module.startCurrentFloorFilling(); + }); + }); + + currentFloorBtn.dataset.currentEventBound = 'true'; + log('"填当前楼层"按钮已成功绑定。', 'success'); + } + + if (rollbackBtn) { + if (rollbackBtn.dataset.rollbackEventBound) return; + + rollbackBtn.addEventListener('click', async (event) => { + const settings = extension_settings[extensionName]; + const tableSystemEnabled = settings.table_system_enabled !== false; + + if (!tableSystemEnabled) { + event.preventDefault(); + toastr.warning('表格系统总开关已关闭,请先启用总开关。'); + return; + } + + if (confirm('您确定要将表格状态回退到上一楼,并使用最新消息重新填表吗?')) { + try { + await TableManager.rollbackAndRefill(); + } catch (error) { + console.error('[内存储司] 回退重填功能失败:', error); + toastr.error('回退重填失败,请检查系统状态。'); + } + } + }); + + rollbackBtn.dataset.rollbackEventBound = 'true'; + log('"回退重填"按钮已成功绑定。', 'success'); + } +} + +function bindTemplateEditors() { + const ruleEditor = document.getElementById('ai-rule-template-editor'); + const ruleSaveBtn = document.getElementById('ai-rule-template-save-btn'); + const ruleRestoreBtn = document.getElementById('ai-rule-template-restore-btn'); + + const flowEditor = document.getElementById('ai-flow-template-editor'); + const flowSaveBtn = document.getElementById('ai-flow-template-save-btn'); + const flowRestoreBtn = document.getElementById('ai-flow-template-restore-btn'); + + if (!ruleEditor || !flowEditor || !ruleSaveBtn || !flowSaveBtn) { + log('无法找到指令模板编辑器或其按钮,绑定失败。', 'warn'); + return; + } + + if (ruleSaveBtn.dataset.templateEventsBound) { + return; + } + + ruleEditor.value = TableManager.getBatchFillerRuleTemplate(); + flowEditor.value = TableManager.getBatchFillerFlowTemplate(); + + ruleSaveBtn.addEventListener('click', () => { + TableManager.saveBatchFillerRuleTemplate(ruleEditor.value); + toastr.success('规则提示词已保存。'); + log('批量填表-规则提示词已保存。', 'success'); + }); + + flowSaveBtn.addEventListener('click', () => { + TableManager.saveBatchFillerFlowTemplate(flowEditor.value); + toastr.success('流程提示词已保存。'); + log('批量填表-流程提示词已保存。', 'success'); + }); + + ruleRestoreBtn.addEventListener('click', () => { + if (confirm('您确定要将规则提示词恢复为默认设置吗?')) { + ruleEditor.value = DEFAULT_AI_RULE_TEMPLATE; + TableManager.saveBatchFillerRuleTemplate(ruleEditor.value); + toastr.info('规则提示词已恢复为默认。'); + log('批量填表-规则提示词已恢复默认。', 'info'); + } + }); + + flowRestoreBtn.addEventListener('click', () => { + if (confirm('您确定要将流程提示词恢复为默认设置吗?')) { + flowEditor.value = DEFAULT_AI_FLOW_TEMPLATE; + TableManager.saveBatchFillerFlowTemplate(flowEditor.value); + toastr.info('流程提示词已恢复为默认。'); + log('批量填表-流程提示词已恢复默认。', 'info'); + } + }); + + ruleSaveBtn.dataset.templateEventsBound = 'true'; + flowSaveBtn.dataset.templateEventsBound = 'true'; + log('指令模板编辑器已成功绑定。', 'success'); +} + +function bindNccsApiEvents() { + const settings = extension_settings[extensionName]; + + if (settings.nccsEnabled === undefined) settings.nccsEnabled = false; + if (settings.nccsApiMode === undefined) settings.nccsApiMode = 'openai_test'; + if (settings.nccsApiUrl === undefined) settings.nccsApiUrl = 'https://api.openai.com/v1'; + if (settings.nccsApiKey === undefined) settings.nccsApiKey = ''; + if (settings.nccsModel === undefined) settings.nccsModel = ''; + if (settings.nccsMaxTokens === undefined) settings.nccsMaxTokens = 2000; + if (settings.nccsTemperature === undefined) settings.nccsTemperature = 0.7; + if (settings.nccsTavernProfile === undefined) settings.nccsTavernProfile = ''; + + const enabledToggle = document.getElementById('nccs-api-enabled'); + const configDiv = document.getElementById('nccs-api-config'); + const modeSelect = document.getElementById('nccs-api-mode'); + const urlInput = document.getElementById('nccs-api-url'); + const keyInput = document.getElementById('nccs-api-key'); + const modelInput = document.getElementById('nccs-api-model'); + const maxTokensSlider = document.getElementById('nccs-max-tokens'); + const maxTokensValue = document.getElementById('nccs-max-tokens-value'); + const temperatureSlider = document.getElementById('nccs-temperature'); + const temperatureValue = document.getElementById('nccs-temperature-value'); + const presetSelect = document.getElementById('nccs-sillytavern-preset'); + const testButton = document.getElementById('nccs-test-connection'); + const fetchModelsButton = document.getElementById('nccs-fetch-models'); + + if (!enabledToggle || !configDiv) return; + + enabledToggle.checked = settings.nccsEnabled; + if (modeSelect) modeSelect.value = settings.nccsApiMode; + if (urlInput) urlInput.value = settings.nccsApiUrl; + if (keyInput) keyInput.value = settings.nccsApiKey; + if (modelInput) modelInput.value = settings.nccsModel; + if (maxTokensSlider) { + maxTokensSlider.value = settings.nccsMaxTokens; + if (maxTokensValue) maxTokensValue.textContent = settings.nccsMaxTokens; + } + if (temperatureSlider) { + temperatureSlider.value = settings.nccsTemperature; + if (temperatureValue) temperatureValue.textContent = settings.nccsTemperature; + } + if (presetSelect) presetSelect.value = settings.nccsTavernProfile || ''; + + const updateConfigVisibility = () => { + configDiv.style.display = enabledToggle.checked ? 'block' : 'none'; + }; + updateConfigVisibility(); + + const updateModeBasedVisibility = () => { + if (!modeSelect) return; + const isSillyTavernMode = modeSelect.value === 'sillytavern_preset'; + const isOpenAIMode = modeSelect.value === 'openai_test'; + + const presetContainer = presetSelect?.closest('.amily2_opt_settings_block'); + if (presetContainer) { + presetContainer.style.display = isSillyTavernMode ? 'block' : 'none'; + } + + const fieldsToHideInPresetMode = [ + { element: urlInput, containerId: null }, + { element: keyInput, containerId: null }, + { element: modelInput, containerId: null }, + { element: maxTokensSlider, containerId: null }, + { element: temperatureSlider, containerId: null } + ]; + + fieldsToHideInPresetMode.forEach(({ element }) => { + if (element) { + const container = element.closest('.amily2_opt_settings_block'); + if (container) { + container.style.display = isSillyTavernMode ? 'none' : 'block'; + } + } + }); + + const buttonsContainer = testButton?.closest('.nccs-button-row'); + if (buttonsContainer) { + buttonsContainer.style.display = 'flex'; + } + }; + updateModeBasedVisibility(); + + enabledToggle.addEventListener('change', () => { + settings.nccsEnabled = enabledToggle.checked; + saveSettingsDebounced(); + updateConfigVisibility(); + log(`Nccs API ${enabledToggle.checked ? '已启用' : '已禁用'}`, 'info'); + }); + + if (modeSelect) { + modeSelect.addEventListener('change', () => { + settings.nccsApiMode = modeSelect.value; + saveSettingsDebounced(); + updateModeBasedVisibility(); + log(`Nccs API模式已切换为: ${modeSelect.value}`, 'info'); + }); + } + + if (urlInput) { + const saveUrl = () => { + settings.nccsApiUrl = urlInput.value; + saveSettingsDebounced(); + }; + + urlInput.addEventListener('blur', saveUrl); + } + + if (keyInput) { + const saveKey = () => { + settings.nccsApiKey = keyInput.value; + saveSettingsDebounced(); + }; + + keyInput.addEventListener('blur', saveKey); + } + + if (modelInput) { + const saveModel = () => { + settings.nccsModel = modelInput.value; + saveSettingsDebounced(); + }; + + modelInput.addEventListener('blur', saveModel); + modelInput.addEventListener('input', saveModel); + } + + if (maxTokensSlider && maxTokensValue) { + maxTokensSlider.addEventListener('input', () => { + maxTokensValue.textContent = maxTokensSlider.value; + }); + maxTokensSlider.addEventListener('change', () => { + settings.nccsMaxTokens = parseInt(maxTokensSlider.value); + saveSettingsDebounced(); + }); + } + + if (temperatureSlider && temperatureValue) { + temperatureSlider.addEventListener('input', () => { + temperatureValue.textContent = temperatureSlider.value; + }); + temperatureSlider.addEventListener('change', () => { + settings.nccsTemperature = parseFloat(temperatureSlider.value); + saveSettingsDebounced(); + }); + } + + if (presetSelect) { + presetSelect.addEventListener('change', () => { + settings.nccsTavernProfile = presetSelect.value; + saveSettingsDebounced(); + }); + } + + if (testButton) { + testButton.addEventListener('click', async () => { + testButton.disabled = true; + testButton.innerHTML = ' 测试中...'; + + try { + const success = await testNccsApiConnection(); + if (success) { + toastr.success('Nccs API连接测试成功!'); + log('Nccs API连接测试成功', 'success'); + } else { + toastr.error('Nccs API连接测试失败,请检查配置'); + log('Nccs API连接测试失败', 'error'); + } + } catch (error) { + toastr.error('Nccs API连接测试出错:' + error.message); + log('Nccs API连接测试出错:' + error.message, 'error'); + } finally { + testButton.disabled = false; + testButton.innerHTML = ' 测试连接'; + } + }); + } + + if (fetchModelsButton) { + fetchModelsButton.addEventListener('click', async () => { + fetchModelsButton.disabled = true; + fetchModelsButton.innerHTML = ' 获取中...'; + + if (urlInput) { + settings.nccsApiUrl = urlInput.value; + } + if (keyInput) { + settings.nccsApiKey = keyInput.value; + } + saveSettingsDebounced(); + + try { + const models = await fetchNccsModels(); + if (models && models.length > 0) { + let modelSelect = document.getElementById('nccs-api-model-select'); + if (!modelSelect) { + modelSelect = document.createElement('select'); + modelSelect.id = 'nccs-api-model-select'; + modelSelect.className = 'text_pole'; + modelInput.parentNode.insertBefore(modelSelect, modelInput.nextSibling); + } + + modelSelect.innerHTML = ''; + models.forEach(model => { + const option = document.createElement('option'); + option.value = model.id || model.name; + option.textContent = model.name || model.id; + if ((model.id || model.name) === settings.nccsModel) { + option.selected = true; + } + modelSelect.appendChild(option); + }); + + modelInput.style.display = 'none'; + modelSelect.style.display = 'block'; + + modelSelect.addEventListener('change', () => { + const selectedModel = modelSelect.value; + settings.nccsModel = selectedModel; + modelInput.value = selectedModel; + saveSettingsDebounced(); + }); + + toastr.success(`成功获取 ${models.length} 个模型`); + log(`Nccs API获取到 ${models.length} 个模型`, 'success'); + } else { + toastr.warning('未获取到可用模型'); + log('Nccs API未获取到可用模型', 'warn'); + } + } catch (error) { + toastr.error('获取模型失败:' + error.message); + log('Nccs API获取模型失败:' + error.message, 'error'); + } finally { + fetchModelsButton.disabled = false; + fetchModelsButton.innerHTML = ' 获取模型'; + } + }); + } + + const loadSillyTavernPresets = async () => { + if (!presetSelect) return; + try { + const context = getContext(); + if (!context?.extensionSettings?.connectionManager?.profiles) { + throw new Error('无法获取SillyTavern配置文件列表'); + } + + const profiles = context.extensionSettings.connectionManager.profiles; + + const currentProfileId = settings.nccsTavernProfile; + + presetSelect.innerHTML = ''; + presetSelect.appendChild(new Option('选择预设', '', false, false)); + + if (profiles && profiles.length > 0) { + profiles.forEach(profile => { + const isSelected = profile.id === currentProfileId; + const option = new Option(profile.name, profile.id, isSelected, isSelected); + presetSelect.appendChild(option); + }); + log(`成功加载 ${profiles.length} 个SillyTavern配置文件`, 'success'); + } else { + log('未找到可用的SillyTavern配置文件', 'warn'); + } + } catch (error) { + log('加载SillyTavern预设失败:' + error.message, 'error'); + } + }; + + if (modeSelect && presetSelect) { + modeSelect.addEventListener('change', () => { + if (modeSelect.value === 'sillytavern_preset') { + loadSillyTavernPresets(); + } + }); + + if (settings.nccsApiMode === 'sillytavern_preset') { + loadSillyTavernPresets(); + } + } + + log('Nccs API事件绑定完成', 'success'); +} + +function bindChatTableDisplaySetting() { + const settings = extension_settings[extensionName]; + const showInChatToggle = document.getElementById('show-table-in-chat-toggle'); + const continuousRenderToggle = document.getElementById('render-on-every-message-toggle'); + + if (!showInChatToggle || !continuousRenderToggle) { + log('找不到聊天内表格相关的开关,绑定失败。', 'warn'); + return; + } + + // Initialize states from settings + showInChatToggle.checked = settings.show_table_in_chat === true; + continuousRenderToggle.checked = settings.render_on_every_message === true; + + // Function to update the dependency + const updateContinuousRenderState = () => { + if (showInChatToggle.checked) { + continuousRenderToggle.disabled = false; + continuousRenderToggle.closest('.control-block-with-switch').style.opacity = '1'; + } else { + continuousRenderToggle.disabled = true; + continuousRenderToggle.closest('.control-block-with-switch').style.opacity = '0.5'; + } + }; + + // Initial state update + updateContinuousRenderState(); + + // Event listener for the main toggle + showInChatToggle.addEventListener('change', () => { + settings.show_table_in_chat = showInChatToggle.checked; + saveSettingsDebounced(); + toastr.info(`聊天内表格显示已${showInChatToggle.checked ? '开启' : '关闭'}。`); + updateContinuousRenderState(); + }); + + // Event listener for the continuous render toggle + continuousRenderToggle.addEventListener('change', () => { + settings.render_on_every_message = continuousRenderToggle.checked; + saveSettingsDebounced(); + toastr.info(`持续渲染最新消息功能已${continuousRenderToggle.checked ? '开启' : '关闭'}。请切换聊天以应用更改。`); + }); + + log('聊天内表格显示设置及其依赖关系已成功绑定。', 'success'); +} From 0fcc6baf5f1a431893121a1fb84d5134cf600562 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:07:45 +0800 Subject: [PATCH 31/56] Add files via upload --- core/tavern-helper/main.js | 68 +++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/core/tavern-helper/main.js b/core/tavern-helper/main.js index 56ff4b4..781cb10 100644 --- a/core/tavern-helper/main.js +++ b/core/tavern-helper/main.js @@ -31,7 +31,9 @@ import { name2, addOneMessage, messageFormatting, - substituteParamsExtended + substituteParamsExtended, + saveCharacterDebounced, + this_chid } from "/script.js"; import { getContext } from "/scripts/extensions.js"; import { executeSlashCommandsWithOptions } from '/scripts/slash-commands.js'; @@ -489,6 +491,34 @@ class AmilyHelper { } } + async deleteLorebookEntries(bookName, uids) { + try { + const bookData = await loadWorldInfo(bookName); + if (!bookData || !bookData.entries) { + return false; + } + + let deletedCount = 0; + for (const uid of uids) { + if (bookData.entries[uid]) { + delete bookData.entries[uid]; + deletedCount++; + } + } + + if (deletedCount > 0) { + await saveWorldInfo(bookName, bookData, true); + reloadEditor(bookName); + console.log(`[Amily助手] 已从世界书《${bookName}》删除 ${deletedCount} 个条目`); + return true; + } + return false; + } catch (error) { + console.error(`[Amily助手] 删除世界书《${bookName}》条目时出错:`, error); + return false; + } + } + async createLorebook(bookName) { try { if (world_names.includes(bookName)) { @@ -537,6 +567,42 @@ class AmilyHelper { getLastMessageId() { return chat.length - 1; } + + /** + * 将指定世界书绑定到当前角色 + * @param {string} bookName 世界书名称 + */ + async bindLorebookToCharacter(bookName) { + if (this_chid === undefined || !characters[this_chid]) { + console.warn('[Amily助手] 无法绑定世界书:未选中角色'); + return false; + } + + const char = characters[this_chid]; + if (!char.data) char.data = {}; + if (!char.data.extensions) char.data.extensions = {}; + + // 确保 world 字段是数组 + let worlds = char.data.extensions.world; + if (!Array.isArray(worlds)) { + worlds = worlds ? [worlds] : []; + } + + if (!worlds.includes(bookName)) { + worlds.push(bookName); + char.data.extensions.world = worlds; + console.log(`[Amily助手] 已将世界书《${bookName}》绑定到角色 ${char.name}`); + + if (typeof saveCharacterDebounced === 'function') { + saveCharacterDebounced(); + return true; + } else { + console.warn('[Amily助手] 无法保存角色数据:saveCharacterDebounced 不可用'); + return false; + } + } + return true; // 已经绑定 + } } export const amilyHelper = new AmilyHelper(); From 8115e19b8c4111dae06be0a1bde5160d11930bef Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:08:28 +0800 Subject: [PATCH 32/56] Update settings.js --- utils/settings.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/utils/settings.js b/utils/settings.js index a41f469..a5adf8b 100644 --- a/utils/settings.js +++ b/utils/settings.js @@ -19,6 +19,10 @@ export const defaultSettings = { contextMessages: 2, promptPresets: [], lastUsedPresetName: '', + super_memory_enabled: false, // 【V150.0】Amily2 Super Memory 总开关 (Default OFF) + superMemory_bridgeEnabled: false, // 【V150.0】世界书桥接 (Default OFF) + superMemory_autoBind: false, // 【V151.9】是否自动绑定到角色 (Default OFF) + secondary_filler_delay: 0, // 【V151.0】分步填表延迟 plotOpt_enabled: false, plotOpt_max_tokens: 20000, plotOpt_temperature: 0.7, From d8ac12b9a09d83adf4c09187fd0b593de806728e Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:10:06 +0800 Subject: [PATCH 33/56] Update cwb_settingsManager.js --- CharacterWorldBook/src/cwb_settingsManager.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CharacterWorldBook/src/cwb_settingsManager.js b/CharacterWorldBook/src/cwb_settingsManager.js index eb08e6f..4564d4c 100644 --- a/CharacterWorldBook/src/cwb_settingsManager.js +++ b/CharacterWorldBook/src/cwb_settingsManager.js @@ -23,7 +23,7 @@ function updateControlsLockState() { const settings = getSettings(); const isMasterEnabled = settings.cwb_master_enabled; - const $controlsToToggle = $panel.find('input, textarea, select, button').not('#cwb_master_enabled-checkbox, #amily2_back_to_main_from_cwb'); + const $controlsToToggle = $panel.find('input, textarea, select, button').not('#cwb_master_enabled-checkbox, #amily2_back_to_main_from_cwb, .sinan-nav-item'); if (isMasterEnabled) { $controlsToToggle.prop('disabled', false); @@ -536,10 +536,13 @@ export function loadSettings() { console.log('[CWB] Loading settings...'); const settings = getSettings(); + + // Initialize settings with defaults if not present if (!settings) { extension_settings[extensionName] = { ...cwbCompleteDefaultSettings }; console.log('[CWB] Initialized default settings'); } else { + // Ensure all default settings exist Object.keys(cwbCompleteDefaultSettings).forEach(key => { if (settings[key] === undefined || settings[key] === null) { settings[key] = cwbCompleteDefaultSettings[key]; @@ -548,6 +551,8 @@ export function loadSettings() { } const finalSettings = getSettings(); + + // Apply localStorage overrides const overrides = JSON.parse(localStorage.getItem(CWB_BOOLEAN_SETTINGS_OVERRIDE_KEY) || '{}'); if (overrides.cwb_master_enabled !== undefined) { finalSettings.cwb_master_enabled = overrides.cwb_master_enabled; From de4079e52f63373cc5d28d7cc5fb07829c8516e7 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:10:35 +0800 Subject: [PATCH 34/56] Update index.js --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index cec78d4..adc596d 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -function _0x3ce3(_0x1b6de7,_0x176954){const _0x278f43=_0x278f();return _0x3ce3=function(_0x3ce3e7,_0x2dbc99){_0x3ce3e7=_0x3ce3e7-0x84;let _0x1318b=_0x278f43[_0x3ce3e7];return _0x1318b;},_0x3ce3(_0x1b6de7,_0x176954);}const _0x169b9e=_0x3ce3;(function(_0x4c65d4,_0x2548ab){const _0x5cce67=_0x3ce3,_0x721dcc=_0x4c65d4();while(!![]){try{const _0x27c9a4=parseInt(_0x5cce67(0x196))/0x1*(-parseInt(_0x5cce67(0x98))/0x2)+-parseInt(_0x5cce67(0x138))/0x3+parseInt(_0x5cce67(0x13e))/0x4+parseInt(_0x5cce67(0x148))/0x5*(-parseInt(_0x5cce67(0x128))/0x6)+parseInt(_0x5cce67(0x100))/0x7*(-parseInt(_0x5cce67(0x157))/0x8)+parseInt(_0x5cce67(0x145))/0x9*(-parseInt(_0x5cce67(0x102))/0xa)+parseInt(_0x5cce67(0x152))/0xb;if(_0x27c9a4===_0x2548ab)break;else _0x721dcc['push'](_0x721dcc['shift']());}catch(_0x1910ad){_0x721dcc['push'](_0x721dcc['shift']());}}}(_0x278f,0x32564));import{createDrawer}from'./ui/drawer.js';import'./MiZheSi/index.js';import'./PresetSettings/index.js';import'./PreOptimizationViewer/index.js';import'./WorldEditor/WorldEditor.js';import{registerSlashCommands}from'./core/commands.js';import{onMessageReceived,handleTableUpdate}from'./core/events.js';import{processPlotOptimization}from'./core/summarizer.js';import{getContext}from'/scripts/extensions.js';import{characters,this_chid}from'/script.js';import{injectTableData,generateTableContent}from'./core/table-system/injector.js';import{initialize as _0x4ccd67}from'./core/rag-processor.js';import{loadTables,clearHighlights,rollbackAndRefill,rollbackState,commitPendingDeletions,saveStateToMessage,getMemoryState,clearUpdatedTables}from'./core/table-system/manager.js';import{fillWithSecondaryApi}from'./core/table-system/secondary-filler.js';import{renderTables}from'./ui/table-bindings.js';import{log}from'./core/table-system/logger.js';import{eventSource,event_types,saveSettingsDebounced}from'/script.js';import{checkForUpdates,fetchMessageBoardContent}from'./core/api.js';import{setUpdateInfo,applyUpdateIndicator}from'./ui/state.js';import{pluginVersion,extensionName,defaultSettings}from'./utils/settings.js';import{tableSystemDefaultSettings}from'./core/table-system/settings.js';import{extension_settings}from'/scripts/extensions.js';import{manageLorebookEntriesForChat}from'./core/lore.js';import{initializeCharacterWorldBook}from'./CharacterWorldBook/cwb_index.js';import{cwbDefaultSettings}from'./CharacterWorldBook/src/cwb_config.js';import{bindGlossaryEvents}from'./glossary/GT_bindings.js';import'./core/amily2-updater.js';import{updateOrInsertTableInChat,startContinuousRendering,stopContinuousRendering}from'./ui/message-table-renderer.js';import{initializeRenderer}from'./core/tavern-helper/renderer.js';import{initializeApiListener,registerApiHandler,amilyHelper,initializeAmilyHelper}from'./core/tavern-helper/main.js';const STYLE_SETTINGS_KEY='amily2_custom_styles',STYLE_ROOT_SELECTOR='#amily2_memorisation_forms_panel';let styleRoot=null;function getStyleRoot(){const _0x537b3f=_0x3ce3;return!styleRoot&&(styleRoot=document[_0x537b3f(0x12c)](STYLE_ROOT_SELECTOR)),styleRoot;}function applyStyles(_0x2624cc){const _0x188771=_0x3ce3,_0x4fa8cd=getStyleRoot();if(!_0x4fa8cd||!_0x2624cc)return;delete _0x2624cc[_0x188771(0xa5)];for(const [_0x4c58d7,_0x498020]of Object[_0x188771(0x13d)](_0x2624cc)){_0x4c58d7[_0x188771(0x119)](_0x188771(0x182))&&_0x4fa8cd[_0x188771(0x133)][_0x188771(0x14f)](_0x4c58d7,_0x498020);}}function loadAndApplyStyles(){const _0x157edd=_0x3ce3,_0x453e35=extension_settings[extensionName]?.[STYLE_SETTINGS_KEY];_0x453e35&&typeof _0x453e35===_0x157edd(0xaf)&&Object[_0x157edd(0x132)](_0x453e35)[_0x157edd(0x97)]>0x0&&applyStyles(_0x453e35);}function saveStyles(_0x304214){!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][STYLE_SETTINGS_KEY]=_0x304214,saveSettingsDebounced();}function resetToDefaultStyles(){const _0x15b795=_0x3ce3,_0xa5574b=getStyleRoot();if(!_0xa5574b)return;const _0x2eb7e6=extension_settings[extensionName]?.[STYLE_SETTINGS_KEY];if(_0x2eb7e6&&typeof _0x2eb7e6===_0x15b795(0xaf))for(const _0x5cd040 of Object[_0x15b795(0x132)](_0x2eb7e6)){_0x5cd040['startsWith'](_0x15b795(0x182))&&_0xa5574b['style'][_0x15b795(0x8d)](_0x5cd040);}saveStyles(null),toastr[_0x15b795(0x18d)](_0x15b795(0xd2));}function getDefaultCssVars(){const _0x169c17=_0x3ce3;return{'--am2-font-size-base':'14px','--am2-gap-main':_0x169c17(0x9b),'--am2-padding-main':_0x169c17(0x147),'--am2-container-bg':_0x169c17(0xfd),'--am2-container-border':_0x169c17(0x199),'--am2-container-border-radius':_0x169c17(0x13a),'--am2-container-padding':'10px','--am2-container-shadow':_0x169c17(0x191),'--am2-title-font-size':_0x169c17(0x165),'--am2-title-font-weight':_0x169c17(0x188),'--am2-title-text-shadow':'0\x200\x205px\x20rgba(200,\x20200,\x20255,\x200.3)','--am2-title-gradient-start':_0x169c17(0x88),'--am2-title-gradient-end':_0x169c17(0x87),'--am2-title-icon-color':_0x169c17(0x122),'--am2-title-icon-margin':_0x169c17(0x9b),'--am2-table-bg':'rgba(0,0,0,0.2)','--am2-table-border':_0x169c17(0xc1),'--am2-table-cell-padding':_0x169c17(0x168),'--am2-table-cell-font-size':_0x169c17(0x137),'--am2-header-bg':_0x169c17(0x130),'--am2-header-color':_0x169c17(0xa6),'--am2-header-editable-bg':'rgba(172,\x20216,\x20255,\x200.1)','--am2-header-editable-focus-bg':_0x169c17(0x121),'--am2-header-editable-focus-outline':_0x169c17(0xfa),'--am2-cell-editable-bg':_0x169c17(0xeb),'--am2-cell-editable-focus-bg':_0x169c17(0x84),'--am2-cell-editable-focus-outline':'1px\x20solid\x20#ffc107','--am2-index-col-bg':_0x169c17(0x178),'--am2-index-col-color':_0x169c17(0x181),'--am2-index-col-width':_0x169c17(0xcf),'--am2-index-col-padding':_0x169c17(0xb8),'--am2-controls-gap':_0x169c17(0xda),'--am2-controls-margin-bottom':_0x169c17(0x9b),'--am2-cell-highlight-bg':'rgba(144,\x20238,\x20144,\x200.3)'};}function exportStyles(){const _0x4e1013=_0x3ce3,_0x4b8b39=getStyleRoot();if(!_0x4b8b39){toastr['error'](_0x4e1013(0x115));return;}const _0x684c8b=getComputedStyle(_0x4b8b39),_0x81d609={},_0x33587d=getDefaultCssVars();for(const _0x12c9e1 of Object[_0x4e1013(0x132)](_0x33587d)){_0x81d609[_0x12c9e1]=_0x684c8b[_0x4e1013(0x198)](_0x12c9e1)[_0x4e1013(0xbc)]();}const _0x330012=new Blob([JSON[_0x4e1013(0xad)](_0x81d609,null,0x2)],{'type':'application/json'}),_0xaee03=URL[_0x4e1013(0xe8)](_0x330012),_0x38842b=document[_0x4e1013(0x11f)]('a');_0x38842b[_0x4e1013(0x139)]=_0xaee03,_0x38842b[_0x4e1013(0xe2)]=_0x4e1013(0x127)+new Date()[_0x4e1013(0xc3)]()[_0x4e1013(0x16d)](0x0,0xa)+_0x4e1013(0xf3),document[_0x4e1013(0x151)][_0x4e1013(0xdf)](_0x38842b),_0x38842b['click'](),document['body'][_0x4e1013(0xed)](_0x38842b),URL[_0x4e1013(0x8f)](_0xaee03),toastr['success'](_0x4e1013(0xfc),_0x4e1013(0x17f));}function _0x278f(){const _0x481bfa=['version','swipe_id','count','title','剧情优化已完成并注入。','[Amily2-翰林院]\x20RAG处理器初始化失败:','无法导出样式:找不到根元素。','plotOpt_contextLimit','[Amily2-剧情优化]\x20Plot\x20optimization\x20returned\x20no\x20result.\x20Sending\x20original\x20message.','stylesheet','startsWith','[Amily2号-皇家制衣局]\x20已为世界编辑器披上华服:\x20WorldEditor.css','isArray','hanlinyuanRagProcessor','readAsText','online_count','createElement','[Amily2-剧情优化]\x20Skipping\x20due\x20to\x20conditions:','rgba(172,\x20216,\x20255,\x200.25)','#9e8aff','#sys-settings-button','files','[Amily2号-版本系统]\x20版本检测器未找到,可能加载失败','【Amily2号-情报部】捷报!发现新版本:\x20','Amily2-Theme-','1898538fssKbb','onchange','[Amily2号-皇家制衣局]\x20已为角色世界书披上华服:\x20cwb_style.css','getCharLorebooks','querySelector','#send_but','【监察系统】未配置填表模式,跳过填表。','buttonClick','rgba(255,\x20255,\x20255,\x200.1)','amily2Updater','keys','style','[Amily2号-开国大典]\x20步骤四:部署帝国哨兵网络...','Connecting...
','secondary-api','0.95em','640314KycLEF','href','12px','onclose','click','entries','1482028fMxBdR','source','content','【监察系统】分步/优化模式,回退后强制二次填表最新消息。','preOptimizationTextUpdated','index','buttonId','45coowHL','triggerSlash','8px\x205px','5RQNXCQ','AMILY2_MACRO_REPLACED','swipes','message_id','plotOpt_enabled','[Amily2号-开国大典]\x20步骤七:初始化版本显示系统...','[Amily2-核心引擎]\x20执行内置RAG注入。','setProperty','switchSwipe','body','13221472LLiUXG','text','getChatMessages','undefined','historiography.css','1448cesqlM','[Amily2-在线统计]\x20连接断开,尝试重连...','contentToAppend','无效的JSON格式。','tavernProfile','deleteChatMessages','display','【监察系统】主填表模式,回退后强制刷新消息ID:\x20','[Amily2号-开国大典]\x20步骤五:初始化RAG处理器...','now','[Amily2号-帝国枢密院]\x20SillyTavern宫殿主体已确认,开国大典正式开始!','!!!【开国大典失败】在执行系列法令时发生严重错误:','ST-Amily2-Chat-Optimisation','onerror','1.1em','one','剧情优化','6px\x208px','getLastMessageId','IMPERSONATE_READY','jqyhEnabled','messages','slice','[Amily2号-开国大典]\x20步骤三:开始召唤府邸...','trigger','dispatchEvent','[Amily2-内存储司]\x20表格注入失败:','。情报已转交内务府。','amily2-glossary.css','getLorebooks','[Amily2-剧情优化]\x20Generation\x20after\x20commands\x20triggered','chat','[Amily2号-开国大典]\x20步骤一:为宫殿披上华服...','rgba(0,\x200,\x200,\x200.3)\x20!important','【Amily2号-情报部】一切安好,帝国已是最新版本。情报已转交内务府备案。','\x20超时。','characters','race','amily2-host','none','导出成功','剧情优化处理失败。','#aaa\x20!important','--am2-','setChatMessage','[Amily2-主窗口]\x20未知的动作类型:\x20','CHAT_CHANGED','getElementById','Amily2插件错误:\x20','bold','includes','【监察系统】滑动后最新消息是用户,跳过填表。','','setChatMessages','success','[Amily2号-开国大典]\x20术语表事件已成功绑定。','isCancelled','\x20人在线','inset\x200\x200\x2015px\x20rgba(0,0,0,0.2)','filling_mode','chat_updated','\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正在进行剧情优化...\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
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','【凤凰阁】内联主题系统已通过延迟加载成功初始化并绑定事件。','2KOElVF','ids','getPropertyValue','1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.2)','iframe交互','contains','scripts/extensions/third-party/','amily2-reset-theme-btn','max','rgba(255,\x20255,\x20172,\x200.25)','\x20被删除,开始精确回滚UI状态。','toastr','#dfdff0','#c0bde4','result','userCharacter','[Amily2号-皇家制衣局]\x20已为帝国披上华服:\x20','[Amily2-核心引擎]\x20无法注册表格宏,可能是\x20SillyTavern\x20版本不兼容。','removeProperty','type','revokeObjectURL','【监察系统】检测到“朝代更迭”(CHAT_CHANGED),开始重修史书并刷新宫殿...','!!!【术语表事件绑定失败】:','#amily2_message_board','remove','is_user','【监察系统】检测到消息滑动,但聊天记录不足,已跳过状态回退。','【Amily2号-内务府】已成功获取并展示来自陛下的最新圣谕。','length','253726kecFuh','render_on_every_message','link','10px','amily2_glossary_panel','avatar','data','amily2HanlinyuanInjector','prepend','未知错误','[Amily2号-开国大典]\x20步骤3.6:侦测到术语表停泊位,开始绑定事件...','log','【Amily2号-内务府】获取留言板失败:','_comment','#e0e0e0','info','rel','[Amily2号-开国大典]\x20步骤二:皇家仪仗队就位...','已切换至开场白\x20','#amily2-online-count','[Amily2-核心引擎]\x20注册表格宏时发生错误:','stringify','style.css','object','操作取消','split','bookName','command','createLorebookEntries','主题已成功导入并应用!','optimized','warn','10px\x205px\x20!important','onmessage','amily2-export-theme-btn','hanlinyuan.css','trim','[Amily2-在线统计]\x20连接错误:','val','regenerate','world-editor-style','1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.25)','show','toISOString','text/css','MESSAGE_RECEIVED','options','table.css','warning','#amily2-cancel-optimization-btn','input','!!!【术语表事件绑定失败】:\x20等待面板\x20#amily2_glossary_panel\x20超时。','onload','amily2-iframe','/CharacterWorldBook/cwb_style.css?v=','40px','[Amily2-主窗口]\x20收到来自iframe的动作:\x20','clear','已恢复默认界面样式。','[Amily2-主窗口]\x20已发送消息:\x20','stack','[Amily2-全局卫队]\x20捕获到严重错误:','?v=','[Amily2-剧情优化]\x20处理发送前事件时出错:','amily2-style-','按钮\x20\x22','5px','addEventListener','#send_textarea','message','#amily2_message_content','appendChild','MESSAGE_DELETED','createLorebook','download','error','parse','[Amily2号-开国大典]\x20角色世界书已成功构建并融入帝国。','剧情优化任务已中止...','head','createObjectURL','optimization.css','rearrangeChat','rgba(255,\x20255,\x20172,\x200.1)','/assets/','removeChild','MESSAGE_SWIPED','avatars','Optimization\x20cancelled\x20by\x20user','target','map','.json','【凤凰阁】内联主题系统初始化失败:\x20','[Amily2-翰林院]\x20RAG注入失败:','【Amily2号】帝国已就绪,现派遣外交官,为陛下探查外界新情报...','/characters/','[Amily2号-帝国枢密院]\x20开始执行开国大典...','stopPropagation','1px\x20solid\x20#79b8ff','isXiaobaixEnabled','主题文件已开始下载。','rgba(0,0,0,0.1)','[Amily2号-开国大典]\x20步骤3.5:侦测到角色世界书停泊位,开始构建...','[Amily2-核心引擎]\x20开始执行统一注入\x20(聊天长度:','14119ZjBDUb','createChatMessages','435230HmpxwA','严重错误','html','getLorebookEntries','function','wss://amilyservice.amily49.cc','apiUrl','registerMacro','[Amily2-翰林院]\x20RAG处理器已成功初始化','\x22\x20被点击','sendMessage','【监察系统】滑动后填表完成,UI\x20已刷新。','导入失败:'];_0x278f=function(){return _0x481bfa;};return _0x278f();}function importStyles(){const _0x2df74b=_0x3ce3,_0x104b19=document['createElement']('input');_0x104b19[_0x2df74b(0x8e)]='file',_0x104b19['accept']=_0x2df74b(0xf3),_0x104b19['style'][_0x2df74b(0x15d)]=_0x2df74b(0x17e);const _0x512c44=()=>{const _0x371668=_0x2df74b;document[_0x371668(0x151)][_0x371668(0x19b)](_0x104b19)&&document[_0x371668(0x151)][_0x371668(0xed)](_0x104b19);};_0x104b19[_0x2df74b(0x129)]=_0x8a8039=>{const _0x1550e8=_0x2df74b,_0x317ac6=_0x8a8039[_0x1550e8(0xf1)][_0x1550e8(0x124)][0x0];if(!_0x317ac6){_0x512c44();return;}const _0xe4c495=new FileReader();_0xe4c495[_0x1550e8(0xcc)]=_0x45f968=>{const _0x34b31b=_0x1550e8;try{const _0x76f1f8=JSON[_0x34b31b(0xe4)](_0x45f968[_0x34b31b(0xf1)][_0x34b31b(0x89)]);if(typeof _0x76f1f8!=='object'||Array[_0x34b31b(0x11b)](_0x76f1f8))throw new Error(_0x34b31b(0x15a));applyStyles(_0x76f1f8),saveStyles(_0x76f1f8),toastr[_0x34b31b(0x18d)](_0x34b31b(0xb5));}catch(_0x53ebe5){toastr['error'](_0x34b31b(0x10e)+_0x53ebe5[_0x34b31b(0xdd)],'错误');}finally{_0x512c44();}},_0xe4c495[_0x1550e8(0x11d)](_0x317ac6);},document[_0x2df74b(0x151)][_0x2df74b(0xdf)](_0x104b19),_0x104b19[_0x2df74b(0x13c)]();}function compareVersions(_0x10255e,_0x57f06f){const _0x524710=_0x3ce3,_0x10a7d2=_0x10255e['split']('.')[_0x524710(0xf2)](Number),_0x22fc16=_0x57f06f['split']('.')['map'](Number),_0x1a9328=Math[_0x524710(0x19e)](_0x10a7d2[_0x524710(0x97)],_0x22fc16[_0x524710(0x97)]);for(let _0x1499b0=0x0;_0x1499b0<_0x1a9328;_0x1499b0++){const _0x100e90=_0x10a7d2[_0x1499b0]||0x0,_0x575e77=_0x22fc16[_0x1499b0]||0x0;if(_0x100e90>_0x575e77)return!![];if(_0x100e90<_0x575e77)return![];}return![];}async function handleUpdateCheck(){const _0x5c9d18=_0x3ce3;console[_0x5c9d18(0xa3)](_0x5c9d18(0xf6));const _0x5ad03e=await checkForUpdates();if(_0x5ad03e&&_0x5ad03e[_0x5c9d18(0x10f)]){const _0x1a9ab8=compareVersions(_0x5ad03e[_0x5c9d18(0x10f)],pluginVersion);_0x1a9ab8?console[_0x5c9d18(0xa3)](_0x5c9d18(0x126)+_0x5ad03e['version']+_0x5c9d18(0x172)):console[_0x5c9d18(0xa3)](_0x5c9d18(0x179)),setUpdateInfo(_0x1a9ab8,_0x5ad03e),applyUpdateIndicator();}}async function handleMessageBoard(){const _0x544d47=async()=>{const _0x1a405e=_0x3ce3;try{const _0x69090f=await fetchMessageBoardContent();if(_0x69090f&&_0x69090f['message']){const _0x528b7a=$(_0x1a405e(0x92)),_0x25843c=$(_0x1a405e(0xde));_0x25843c[_0x1a405e(0x104)](_0x69090f['message']),_0x528b7a[_0x1a405e(0xc2)](),console[_0x1a405e(0xa3)](_0x1a405e(0x96));}}catch(_0x1f0846){console[_0x1a405e(0xe3)](_0x1a405e(0xa4),_0x1f0846);}};await _0x544d47(),setInterval(_0x544d47,0xea60);}function loadPluginStyles(){const _0x26e600=_0x3ce3,_0x3b44ec=_0xf57d3f=>{const _0x226c4c=_0x3ce3,_0x245262=_0x226c4c(0xd8)+_0xf57d3f[_0x226c4c(0xb1)]('.')[0x0];if(document[_0x226c4c(0x186)](_0x245262))return;const _0xeba667=_0x226c4c(0x19c)+extensionName+_0x226c4c(0xec)+_0xf57d3f+_0x226c4c(0xd6)+Date[_0x226c4c(0x160)](),_0x3b5b89=document[_0x226c4c(0x11f)](_0x226c4c(0x9a));_0x3b5b89['id']=_0x245262,_0x3b5b89['rel']='stylesheet',_0x3b5b89[_0x226c4c(0x8e)]=_0x226c4c(0xc4),_0x3b5b89['href']=_0xeba667,document[_0x226c4c(0xe7)][_0x226c4c(0xdf)](_0x3b5b89),console[_0x226c4c(0xa3)](_0x226c4c(0x8b)+_0xf57d3f);};_0x3b44ec(_0x26e600(0xae)),_0x3b44ec(_0x26e600(0x156)),_0x3b44ec(_0x26e600(0xbb)),_0x3b44ec(_0x26e600(0x173)),_0x3b44ec(_0x26e600(0xc7)),_0x3b44ec(_0x26e600(0xe9)),_0x3b44ec('renderer.css'),_0x3b44ec('iframe-renderer.css');const _0x5202f8='cwb-feature-style';if(!document[_0x26e600(0x186)](_0x5202f8)){const _0x12073c=document[_0x26e600(0x11f)](_0x26e600(0x9a));_0x12073c['id']=_0x5202f8,_0x12073c[_0x26e600(0xa8)]=_0x26e600(0x118),_0x12073c['type']=_0x26e600(0xc4),_0x12073c[_0x26e600(0x139)]=_0x26e600(0x19c)+extensionName+_0x26e600(0xce)+Date['now'](),document[_0x26e600(0xe7)][_0x26e600(0xdf)](_0x12073c),console[_0x26e600(0xa3)](_0x26e600(0x12a));}const _0x5e4941=_0x26e600(0xc0);if(!document['getElementById'](_0x5e4941)){const _0x2bcc46=document[_0x26e600(0x11f)]('link');_0x2bcc46['id']=_0x5e4941,_0x2bcc46['rel']=_0x26e600(0x118),_0x2bcc46[_0x26e600(0x8e)]='text/css',_0x2bcc46['href']=_0x26e600(0x19c)+extensionName+'/WorldEditor/WorldEditor.css?v='+Date[_0x26e600(0x160)](),document[_0x26e600(0xe7)][_0x26e600(0xdf)](_0x2bcc46),console['log'](_0x26e600(0x11a));}}window[_0x169b9e(0xdb)](_0x169b9e(0xdd),function(_0x36bec6){const _0x186dd9=_0x169b9e;if(_0x36bec6[_0x186dd9(0x9e)]&&_0x36bec6[_0x186dd9(0x9e)][_0x186dd9(0x8e)]==='getAvatars'){if(window[_0x186dd9(0xfb)])return;const _0x3f38d3=_0x186dd9(0xf7)+(getContext()[_0x186dd9(0x8a)]?.[_0x186dd9(0x9d)]??''),_0x22341b=_0x186dd9(0xf7)+(getContext()[_0x186dd9(0x17b)][this_chid]?.['avatar']??'');_0x36bec6[_0x186dd9(0x13f)]['postMessage']({'source':_0x186dd9(0x17d),'type':_0x186dd9(0xef),'urls':{'user':_0x3f38d3,'char':_0x22341b}},'*');return;}if(_0x36bec6['data']&&_0x36bec6[_0x186dd9(0x9e)][_0x186dd9(0x13f)]===_0x186dd9(0xcd)){const {action:_0x59fc9c,detail:_0x22b182}=_0x36bec6[_0x186dd9(0x9e)];console[_0x186dd9(0xa3)](_0x186dd9(0xd0)+_0x59fc9c,_0x22b182);switch(_0x59fc9c){case _0x186dd9(0x10c):_0x22b182&&_0x22b182[_0x186dd9(0xdd)]&&($(_0x186dd9(0xdc))[_0x186dd9(0xbe)](_0x22b182['message'])[_0x186dd9(0x16f)](_0x186dd9(0xca)),$(_0x186dd9(0x12d))[_0x186dd9(0x16f)](_0x186dd9(0x13c)),console[_0x186dd9(0xa3)](_0x186dd9(0xd3)+_0x22b182[_0x186dd9(0xdd)]));break;case'showToast':if(_0x22b182&&_0x22b182[_0x186dd9(0xdd)]&&window[_0x186dd9(0x86)]){const _0x5dfca5=_0x22b182['type']||_0x186dd9(0xa7);typeof window[_0x186dd9(0x86)][_0x5dfca5]===_0x186dd9(0x106)&&window[_0x186dd9(0x86)][_0x5dfca5](_0x22b182['message'],_0x22b182[_0x186dd9(0x112)]||'通知');}break;case _0x186dd9(0x12f):console[_0x186dd9(0xa3)]('[Amily2-主窗口]\x20按钮被点击:',_0x22b182);window['toastr']&&window[_0x186dd9(0x86)][_0x186dd9(0xa7)](_0x186dd9(0xd9)+(_0x22b182[_0x186dd9(0x144)]||'未知')+_0x186dd9(0x10b),_0x186dd9(0x19a));break;default:console[_0x186dd9(0xb7)](_0x186dd9(0x184)+_0x59fc9c);}}}),window['addEventListener'](_0x169b9e(0xe3),_0x5c79ad=>{const _0x1f3537=_0x169b9e,_0x26638a=_0x5c79ad['error']?.[_0x1f3537(0xd4)]||'';_0x26638a[_0x1f3537(0x189)](_0x1f3537(0x163))&&(console[_0x1f3537(0xe3)](_0x1f3537(0xd5),_0x5c79ad[_0x1f3537(0xe3)]),toastr[_0x1f3537(0xe3)](_0x1f3537(0x187)+(_0x5c79ad[_0x1f3537(0xe3)]?.['message']||_0x1f3537(0xa1)),_0x1f3537(0x103),{'timeOut':0x2710}));}),jQuery(async()=>{const _0x112550=_0x169b9e;console['log'](_0x112550(0xf8)),initializeApiListener(),registerApiHandler(_0x112550(0x154),async _0x49f8a3=>{const _0x3a36f7=_0x112550;return amilyHelper[_0x3a36f7(0x154)](_0x49f8a3['range'],_0x49f8a3[_0x3a36f7(0xc6)]);}),registerApiHandler(_0x112550(0x18c),async _0x8d9f59=>{const _0xb5b44e=_0x112550;return await amilyHelper[_0xb5b44e(0x18c)](_0x8d9f59['messages'],_0x8d9f59[_0xb5b44e(0xc6)]);}),registerApiHandler(_0x112550(0x183),async _0x58feb8=>{const _0x2573cf=_0x112550,_0x14992a=_0x58feb8['field_values']||_0x58feb8[_0x2573cf(0x140)],_0x5e5820=_0x58feb8[_0x2573cf(0x14b)]!==undefined?_0x58feb8[_0x2573cf(0x14b)]:_0x58feb8[_0x2573cf(0x143)],_0x3fb4ef=_0x58feb8[_0x2573cf(0xc6)]||{};return console['log']('[Amily2-API]\x20setChatMessage\x20收到参数:',{'field_values':_0x14992a,'message_id':_0x5e5820,'options':_0x3fb4ef,'raw_data':_0x58feb8}),await amilyHelper[_0x2573cf(0x183)](_0x14992a,_0x5e5820,_0x3fb4ef);}),registerApiHandler(_0x112550(0x101),async _0x4d4cdf=>{const _0xb2868c=_0x112550;return await amilyHelper[_0xb2868c(0x101)](_0x4d4cdf[_0xb2868c(0x16c)],_0x4d4cdf['options']);}),registerApiHandler(_0x112550(0x15c),async _0x8cc21e=>{const _0x263fba=_0x112550;return await amilyHelper['deleteChatMessages'](_0x8cc21e[_0x263fba(0x197)],_0x8cc21e['options']);}),registerApiHandler(_0x112550(0x174),async _0x59a202=>{return await amilyHelper['getLorebooks']();}),registerApiHandler(_0x112550(0x12b),async _0x595987=>{const _0x5993f0=_0x112550;return await amilyHelper['getCharLorebooks'](_0x595987[_0x5993f0(0xc6)]);}),registerApiHandler(_0x112550(0x105),async _0x5cd1ac=>{const _0x39b449=_0x112550;return await amilyHelper[_0x39b449(0x105)](_0x5cd1ac['bookName']);}),registerApiHandler('setLorebookEntries',async _0x2bd175=>{const _0x2cc4c0=_0x112550;return await amilyHelper['setLorebookEntries'](_0x2bd175['bookName'],_0x2bd175[_0x2cc4c0(0x13d)]);}),registerApiHandler(_0x112550(0xb4),async _0x214b92=>{const _0x17658b=_0x112550;return await amilyHelper[_0x17658b(0xb4)](_0x214b92[_0x17658b(0xb2)],_0x214b92[_0x17658b(0x13d)]);}),registerApiHandler('createLorebook',async _0x3adde=>{const _0x3e8940=_0x112550;return await amilyHelper[_0x3e8940(0xe1)](_0x3adde[_0x3e8940(0xb2)]);}),registerApiHandler(_0x112550(0x146),async _0x4e4180=>{const _0x3fe483=_0x112550;return await amilyHelper[_0x3fe483(0x146)](_0x4e4180[_0x3fe483(0xb3)]);}),registerApiHandler(_0x112550(0x169),async _0x2a8f3b=>{const _0x220096=_0x112550;return amilyHelper[_0x220096(0x169)]();}),registerApiHandler('toastr',async _0x184d3f=>{const _0x2ad3ab=_0x112550;return window[_0x2ad3ab(0x86)]&&typeof window[_0x2ad3ab(0x86)][_0x184d3f[_0x2ad3ab(0x8e)]]===_0x2ad3ab(0x106)&&window[_0x2ad3ab(0x86)][_0x184d3f[_0x2ad3ab(0x8e)]](_0x184d3f[_0x2ad3ab(0xdd)],_0x184d3f[_0x2ad3ab(0x112)]),!![];}),registerApiHandler(_0x112550(0x150),async _0xdc634=>{const _0x58c5a5=_0x112550,{messageIndex:_0x5abb04,swipeIndex:_0x945f02}=_0xdc634,_0x9b82b4=await amilyHelper[_0x58c5a5(0x154)](_0x5abb04,{'include_swipes':!![]});if(_0x9b82b4&&_0x9b82b4['length']>0x0&&_0x9b82b4[0x0][_0x58c5a5(0x14a)]){const _0x105fa8=_0x9b82b4[0x0][_0x58c5a5(0x14a)][_0x945f02];if(_0x105fa8!==undefined){await amilyHelper[_0x58c5a5(0x18c)]([{'message_id':_0x5abb04,'message':_0x105fa8}],{'refresh':'affected'});const _0xa6b3ae=getContext();return _0xa6b3ae[_0x58c5a5(0x176)][_0x5abb04]&&(_0xa6b3ae[_0x58c5a5(0x176)][_0x5abb04][_0x58c5a5(0x110)]=_0x945f02),{'success':!![],'message':_0x58c5a5(0xaa)+_0x945f02};}}throw new Error('无法切换到开场白\x20'+_0x945f02);}),initializeAmilyHelper(),console[_0x112550(0xa3)](_0x112550(0xf8));!extension_settings[extensionName]&&(extension_settings[extensionName]={});const _0x2b2528={...defaultSettings,...tableSystemDefaultSettings,...cwbDefaultSettings,'render_on_every_message':![],'amily_render_enabled':![]};for(const _0x278f26 in _0x2b2528){extension_settings[extensionName][_0x278f26]===undefined&&(extension_settings[extensionName][_0x278f26]=_0x2b2528[_0x278f26]);}console['log']('[Amily2号-帝国枢密院]\x20帝国基本法已确认,档案室已与国库对接完毕。');let _0x39ace3=0x0;const _0x1eb1b3=0x64,_0x346f23=0x64,_0xc81b8e=_0x112550(0x123),_0x3ad4b3=setInterval(async()=>{const _0x26c102=_0x112550;if($(_0xc81b8e)[_0x26c102(0x97)]>0x0){clearInterval(_0x3ad4b3),console[_0x26c102(0xa3)](_0x26c102(0x161));try{console[_0x26c102(0xa3)](_0x26c102(0x177)),loadPluginStyles(),console[_0x26c102(0xa3)](_0x26c102(0xa9)),await registerSlashCommands(),console[_0x26c102(0xa3)](_0x26c102(0x16e)),createDrawer();function _0x2996fb(){let _0x39e16a=0x0;const _0x416727=0x32,_0x27be83=0x64,_0x54355f=setInterval(()=>{const _0x1e2982=_0x3ce3,_0x330cf9=document['getElementById'](_0x1e2982(0x9c));if(_0x330cf9){clearInterval(_0x54355f);try{console['log'](_0x1e2982(0xa2)),bindGlossaryEvents(),console[_0x1e2982(0xa3)](_0x1e2982(0x18e));}catch(_0x543023){console[_0x1e2982(0xe3)](_0x1e2982(0x91),_0x543023);}}else _0x39e16a++,_0x39e16a>=_0x416727&&(clearInterval(_0x54355f),console[_0x1e2982(0xe3)](_0x1e2982(0xcb)));},_0x27be83);}_0x2996fb();function _0x28dcff(){let _0x41b309=0x0;const _0x391c7a=0x32,_0x110bff=0x64,_0x1a0ccd=setInterval(async()=>{const _0x1ab22f=_0x3ce3,_0x11b0eb=$('#amily2_character_world_book_panel');if(_0x11b0eb[_0x1ab22f(0x97)]>0x0){clearInterval(_0x1a0ccd);try{console['log'](_0x1ab22f(0xfe)),await initializeCharacterWorldBook(_0x11b0eb),console[_0x1ab22f(0xa3)](_0x1ab22f(0xe5));}catch(_0x332238){console[_0x1ab22f(0xe3)]('!!!【角色世界书构建失败】:',_0x332238);}}else _0x41b309++,_0x41b309>=_0x391c7a&&(clearInterval(_0x1a0ccd),console[_0x1ab22f(0xe3)]('!!!【角色世界书构建失败】:\x20等待面板\x20#amily2_character_world_book_panel\x20超时。'));},_0x110bff);}_0x28dcff(),console['log']('[Amily2号-开国大典]\x20步骤3.8:注册表格占位符宏...');try{const _0x5998ba=getContext();_0x5998ba&&typeof _0x5998ba['registerMacro']===_0x26c102(0x106)?(_0x5998ba[_0x26c102(0x109)]('Amily2EditContent',()=>{const _0x3ca309=_0x26c102,_0x28910f=generateTableContent();return _0x28910f&&(window[_0x3ca309(0x149)]=!![]),_0x28910f;}),console[_0x26c102(0xa3)]('[Amily2-核心引擎]\x20已成功注册表格占位符宏:\x20{{Amily2EditContent}}')):console[_0x26c102(0xb7)](_0x26c102(0x8c));}catch(_0x3bc957){console[_0x26c102(0xe3)](_0x26c102(0xac),_0x3bc957);}console[_0x26c102(0xa3)](_0x26c102(0x134));let _0x23dfe4=![];async function _0x20d422(_0x5db41f,_0x142c94,_0x4a163b){const _0x37cf46=_0x26c102;clearUpdatedTables(),console[_0x37cf46(0xa3)](_0x37cf46(0x175),{'type':_0x5db41f,'params':_0x142c94,'dryRun':_0x4a163b,'isProcessing':_0x23dfe4});if(_0x5db41f===_0x37cf46(0xbf)||_0x23dfe4||_0x4a163b){console[_0x37cf46(0xa3)](_0x37cf46(0x120),{'type':_0x5db41f,'isProcessing':_0x23dfe4,'dryRun':_0x4a163b});return;}const _0x5824f8=extension_settings[extensionName];if(_0x5824f8?.[_0x37cf46(0x14c)]===![])return;const _0x415e3a=_0x5824f8?.[_0x37cf46(0x16b)]===!![],_0x79a5a9=!!_0x5824f8?.[_0x37cf46(0x108)]||!!_0x5824f8?.[_0x37cf46(0x15b)];if(!_0x415e3a&&!_0x79a5a9){console[_0x37cf46(0xa3)]('[Amily2-剧情优化]\x20优化已启用,但Jqyh\x20API已禁用且主页API未配置。');return;}_0x23dfe4=!![];let _0xdb246b=null;const _0x494812={'isCancelled':![]};try{const _0x380ba4=$(_0x37cf46(0xdc))[_0x37cf46(0xbe)]();if(!_0x380ba4)return _0x23dfe4=![],![];const _0x331064=_0x37cf46(0x194);let _0x374331;const _0x22b6b0=new Promise((_0x2cbc99,_0x147500)=>{_0x374331=_0x147500;});_0xdb246b=toastr['info'](_0x331064,_0x37cf46(0x167),{'timeOut':0x0,'extendedTimeOut':0x0,'tapToDismiss':![],'onclick':null,'escapeHtml':![],'onShown':function(){const _0x4619d7=_0x37cf46;$(_0x4619d7(0xc9))[_0x4619d7(0x166)]('click',function(_0x5e5961){const _0x2d8046=_0x4619d7;_0x5e5961[_0x2d8046(0xf9)](),_0xdb246b&&(_0xdb246b[_0x2d8046(0x93)](),_0xdb246b=null),_0x494812[_0x2d8046(0x18f)]=!![],_0x374331(new Error(_0x2d8046(0xf0)));});}});const _0x1232b5=getContext(),_0x5afa66=_0x5824f8[_0x37cf46(0x116)]||0xa;let _0x171444=[];_0x5afa66>0x0&&(_0x171444=_0x1232b5[_0x37cf46(0x176)][_0x37cf46(0x16d)](-_0x5afa66));const _0xf99809=processPlotOptimization({'mes':_0x380ba4},_0x171444,_0x494812),_0x1762ac=await Promise[_0x37cf46(0x17c)]([_0xf99809,_0x22b6b0]);if(_0x1762ac&&_0x1762ac[_0x37cf46(0x159)]){const _0x48a8c3=$(_0x37cf46(0xdc))[_0x37cf46(0xbe)](),_0x4617ea=_0x48a8c3+'\x0a'+_0x1762ac[_0x37cf46(0x159)];$(_0x37cf46(0xdc))[_0x37cf46(0xbe)](_0x4617ea)[_0x37cf46(0x16f)]('input'),toastr[_0x37cf46(0x18d)](_0x37cf46(0x113),'操作成功');}else console[_0x37cf46(0xa3)](_0x37cf46(0x117));return![];}catch(_0x22d340){return _0x22d340[_0x37cf46(0xdd)]===_0x37cf46(0xf0)?(console[_0x37cf46(0xa3)]('[Amily2-剧情优化]\x20优化流程已被用户中止。发送原始消息。'),toastr[_0x37cf46(0xc8)](_0x37cf46(0xe6),_0x37cf46(0xb0),{'timeOut':0x7d0})):(console[_0x37cf46(0xe3)](_0x37cf46(0xd7),_0x22d340),toastr[_0x37cf46(0xe3)](_0x37cf46(0x180),'错误')),![];}finally{_0x23dfe4=![],_0xdb246b&&(toastr[_0x37cf46(0xd1)](_0xdb246b),_0xdb246b=null);}}!window['amily2EventsRegistered']&&(eventSource['on'](event_types['GENERATION_AFTER_COMMANDS'],_0x20d422),eventSource['on'](event_types[_0x26c102(0xc5)],onMessageReceived),eventSource['on'](event_types[_0x26c102(0x16a)],onMessageReceived),eventSource['on'](event_types[_0x26c102(0xc5)],_0x1c6aa0=>handleTableUpdate(_0x1c6aa0)),eventSource['on'](event_types[_0x26c102(0xee)],async _0x55a42f=>{const _0x144e0c=_0x26c102,_0x4a9482=getContext();if(_0x4a9482[_0x144e0c(0x176)][_0x144e0c(0x97)]<0x2){log(_0x144e0c(0x95),_0x144e0c(0xa7));return;}log('【监察系统】检测到消息滑动\x20(SWIPED),开始执行状态回退...',_0x144e0c(0xb7)),rollbackState();const _0x236854=_0x4a9482[_0x144e0c(0x176)][_0x55a42f]||_0x4a9482[_0x144e0c(0x176)][_0x4a9482['chat'][_0x144e0c(0x97)]-0x1];if(_0x236854[_0x144e0c(0x94)]){log(_0x144e0c(0x18a),_0x144e0c(0xa7)),renderTables();return;}const _0x5bf6b5=extension_settings[extensionName],_0x3d5d19=_0x5bf6b5[_0x144e0c(0x192)]||'main-api';if(_0x3d5d19==='main-api')log(_0x144e0c(0x15e)+_0x55a42f+'。','info'),await handleTableUpdate(_0x55a42f,!![]);else _0x3d5d19===_0x144e0c(0x136)||_0x3d5d19===_0x144e0c(0xb6)?(log(_0x144e0c(0x141),_0x144e0c(0xa7)),await fillWithSecondaryApi(_0x236854,!![])):log(_0x144e0c(0x12e),_0x144e0c(0xa7));renderTables(),log(_0x144e0c(0x10d),_0x144e0c(0x18d));}),eventSource['on'](event_types['MESSAGE_EDITED'],_0x5811c1=>{handleTableUpdate(_0x5811c1),updateOrInsertTableInChat();}),eventSource['on'](event_types[_0x26c102(0x185)],()=>{const _0x1dd81d=_0x26c102;window['lastPreOptimizationResult']=null,document[_0x1dd81d(0x170)](new CustomEvent(_0x1dd81d(0x142))),manageLorebookEntriesForChat(),setTimeout(()=>{const _0x2e69e4=_0x1dd81d;log(_0x2e69e4(0x90),_0x2e69e4(0xa7)),clearHighlights(),clearUpdatedTables(),loadTables(),renderTables(),extension_settings[extensionName][_0x2e69e4(0x99)]?startContinuousRendering():stopContinuousRendering();},0x64);}),eventSource['on'](event_types[_0x26c102(0xe0)],(_0x144d53,_0x541447)=>{const _0x456c36=_0x26c102;log('【监察系统】检测到消息\x20'+_0x541447+_0x456c36(0x85),_0x456c36(0xb7)),clearHighlights(),loadTables(_0x541447),renderTables();}),eventSource['on'](event_types[_0x26c102(0xc5)],updateOrInsertTableInChat),eventSource['on'](event_types[_0x26c102(0x193)],updateOrInsertTableInChat),window['amily2EventsRegistered']=!![]);console[_0x26c102(0xa3)](_0x26c102(0x15f));try{_0x4ccd67(),console[_0x26c102(0xa3)](_0x26c102(0x10a));}catch(_0x3045bd){console['error'](_0x26c102(0x114),_0x3045bd);}console['log']('[Amily2号-开国大典]\x20步骤六:智能冲突检测与注入策略...');async function _0x239d89(..._0xc51884){const _0x5c66bc=_0x26c102;console['log'](_0x5c66bc(0xff),_0xc51884[0x0]?.[_0x5c66bc(0x97)]||0x0,')');try{await injectTableData(..._0xc51884);}catch(_0x370236){console[_0x5c66bc(0xe3)](_0x5c66bc(0x171),_0x370236);}if(window[_0x5c66bc(0x11c)]&&typeof window[_0x5c66bc(0x11c)][_0x5c66bc(0xea)]===_0x5c66bc(0x106))try{console[_0x5c66bc(0xa3)](_0x5c66bc(0x14e)),await window[_0x5c66bc(0x11c)]['rearrangeChat'](..._0xc51884);}catch(_0x1013cd){console['error'](_0x5c66bc(0xf5),_0x1013cd);}}console[_0x26c102(0xa3)]('[Amily2-策略]\x20采用“完全主导”策略,覆盖\x20`vectors_rearrangeChat`。'),window['vectors_rearrangeChat']=_0x239d89,window[_0x26c102(0x9f)]&&(window['amily2HanlinyuanInjector']=null),console[_0x26c102(0xa3)]('【Amily2号】帝国秩序已完美建立。Amily2号的府邸已恭候陛下的莅临。'),console['log'](_0x26c102(0x14d)),typeof window[_0x26c102(0x131)]!==_0x26c102(0x155)?setTimeout(()=>{const _0x1fcc7a=_0x26c102;console['log']('[Amily2号-版本系统]\x20正在启动版本检测器...'),window[_0x1fcc7a(0x131)]['initialize']();},0x7d0):console[_0x26c102(0xb7)](_0x26c102(0x125)),handleUpdateCheck(),handleMessageBoard(),initializeOnlineTracker(),initializeRenderer(),extension_settings[extensionName]['render_on_every_message']&&startContinuousRendering(),setTimeout(()=>{const _0x3043bd=_0x26c102;try{loadAndApplyStyles();const _0x4a29cc=document['getElementById']('amily2-import-theme-btn'),_0x4a0e77=document[_0x3043bd(0x186)](_0x3043bd(0xba)),_0x32554f=document[_0x3043bd(0x186)](_0x3043bd(0x19d));if(_0x4a29cc)_0x4a29cc[_0x3043bd(0xdb)](_0x3043bd(0x13c),importStyles);if(_0x4a0e77)_0x4a0e77[_0x3043bd(0xdb)](_0x3043bd(0x13c),exportStyles);if(_0x32554f)_0x32554f[_0x3043bd(0xdb)](_0x3043bd(0x13c),resetToDefaultStyles);log(_0x3043bd(0x195),_0x3043bd(0x18d));}catch(_0x4dd785){log(_0x3043bd(0xf4)+_0x4dd785,_0x3043bd(0xe3));}},0x1f4);}catch(_0x1fca21){console[_0x26c102(0xe3)](_0x26c102(0x162),_0x1fca21);}}else _0x39ace3++,_0x39ace3>=_0x1eb1b3&&(clearInterval(_0x3ad4b3),console[_0x26c102(0xe3)]('[Amily2号]\x20部署失败:等待\x20'+_0xc81b8e+_0x26c102(0x17a)));},_0x346f23);});function initializeOnlineTracker(){const _0x28762e=_0x169b9e,_0x573a3b=_0x28762e(0x107);let _0x304890,_0x5b746c;function _0x1b2149(){const _0x25361d=_0x28762e,_0x17ed2f=$('#amily2_drawer_content');if(_0x17ed2f['length']===0x0||!_0x17ed2f[_0x25361d(0x9e)]('initialized')){setTimeout(_0x1b2149,0x3e8);return;}if($('#amily2-online-tracker')['length']>0x0)return;const _0x4d0fb8=$(_0x25361d(0x18b));_0x4d0fb8[_0x25361d(0x104)](_0x25361d(0x135)),_0x17ed2f[_0x25361d(0xa0)](_0x4d0fb8),_0x64bafa();}function _0x64bafa(){const _0x164a45=_0x28762e;try{_0x304890=new WebSocket(_0x573a3b),_0x304890['onopen']=()=>{const _0x482c62=_0x3ce3;console[_0x482c62(0xa3)]('[Amily2-在线统计]\x20已连接到服务器'),_0x5b746c&&(clearInterval(_0x5b746c),_0x5b746c=null);},_0x304890[_0x164a45(0xb9)]=_0x3de188=>{const _0x2ab6e9=_0x164a45;try{const _0x24188=JSON[_0x2ab6e9(0xe4)](_0x3de188[_0x2ab6e9(0x9e)]);_0x24188[_0x2ab6e9(0x8e)]===_0x2ab6e9(0x11e)&&$('#amily2-online-count')[_0x2ab6e9(0x153)](_0x24188[_0x2ab6e9(0x111)]+_0x2ab6e9(0x190));}catch(_0x104abb){console['error']('[Amily2-在线统计]\x20解析消息失败:',_0x104abb);}},_0x304890[_0x164a45(0x13b)]=()=>{const _0x5dba0e=_0x164a45;console[_0x5dba0e(0xa3)](_0x5dba0e(0x158)),$(_0x5dba0e(0xab))[_0x5dba0e(0x153)]('离线'),!_0x5b746c&&(_0x5b746c=setInterval(_0x64bafa,0x1388));},_0x304890[_0x164a45(0x164)]=_0x34de60=>{const _0x4dbc13=_0x164a45;console[_0x4dbc13(0xb7)](_0x4dbc13(0xbd),_0x34de60),_0x304890['close']();};}catch(_0x374491){console[_0x164a45(0xe3)]('[Amily2-在线统计]\x20初始化失败:',_0x374491);}}_0x1b2149();} +const _0x2b2b58=_0x10c0;(function(_0x193e06,_0x2b5b9b){const _0x115971=_0x10c0,_0x4d3d6b=_0x193e06();while(!![]){try{const _0x5383c7=parseInt(_0x115971(0x119))/0x1*(parseInt(_0x115971(0x159))/0x2)+parseInt(_0x115971(0x1d5))/0x3*(parseInt(_0x115971(0x134))/0x4)+parseInt(_0x115971(0x14b))/0x5+parseInt(_0x115971(0x147))/0x6+parseInt(_0x115971(0x186))/0x7*(parseInt(_0x115971(0x131))/0x8)+-parseInt(_0x115971(0x20e))/0x9+-parseInt(_0x115971(0x216))/0xa;if(_0x5383c7===_0x2b5b9b)break;else _0x4d3d6b['push'](_0x4d3d6b['shift']());}catch(_0x192083){_0x4d3d6b['push'](_0x4d3d6b['shift']());}}}(_0x25ca,0x18e5c));import{createDrawer}from'./ui/drawer.js';import'./PresetSettings/index.js';import'./PreOptimizationViewer/index.js';import'./WorldEditor/WorldEditor.js';import{registerSlashCommands}from'./core/commands.js';import{onMessageReceived,handleTableUpdate}from'./core/events.js';function _0x10c0(_0x2ad06c,_0x5d2480){const _0x25ca75=_0x25ca();return _0x10c0=function(_0x10c0c5,_0xb14043){_0x10c0c5=_0x10c0c5-0x115;let _0x2cd82d=_0x25ca75[_0x10c0c5];return _0x2cd82d;},_0x10c0(_0x2ad06c,_0x5d2480);}import{processPlotOptimization}from'./core/summarizer.js';import{getContext}from'/scripts/extensions.js';import{characters,this_chid}from'/script.js';function _0x25ca(){const _0xa000f8=['contentToAppend','iframe交互','主题文件已开始下载。','vectors_rearrangeChat','14913cBNKDQ','amily2HanlinyuanInjector','appendChild','5px','remove','ST-Amily2-Chat-Optimisation','affected','[Amily2号-帝国枢密院]\x20开始执行开国大典...','【监察系统】检测到消息滑动\x20(SWIPED),开始执行状态回退...','amily2-iframe','GENERATION_STARTED','onchange','MESSAGE_DELETED','entries','[Amily2号]\x20部署失败:等待\x20','【Amily2号-情报部】捷报!发现新版本:\x20','tavernProfile','【监察系统】检测到消息滑动,但聊天记录不足,已跳过状态回退。','rgba(172,\x20216,\x20255,\x200.25)','bold','8px\x205px','style','avatar','按钮\x20\x22','24xtSaQH','isArray','【监察系统】分步/优化模式,回退后强制二次填表最新消息。','216268ZnuhmA','info','clear','[Amily2-翰林院]\x20RAG处理器已成功初始化','inset\x200\x200\x2015px\x20rgba(0,0,0,0.2)','[Amily2-核心引擎]\x20开始执行统一注入\x20(聊天长度:','readAsText','[Amily2号-帝国枢密院]\x20SillyTavern宫殿主体已确认,开国大典正式开始!','download','amily2-import-theme-btn','无法导出样式:找不到根元素。','#e0e0e0','object','onopen','','[Amily2-剧情优化]\x20优化流程已被用户中止。发送原始消息。','[Amily2-翰林院]\x20RAG注入失败:','max','[Amily2号-开国大典]\x20步骤3.6:侦测到术语表停泊位,开始绑定事件...','674244yANhLy','addEventListener','chat_updated','剧情优化已完成并注入。','449890pdqljA','[Amily2-主窗口]\x20按钮被点击:','triggerSlash','chat','accept','#dfdff0','querySelector','[Amily2号-开国大典]\x20密折司加载失败:','createObjectURL','split','dispatchEvent','./MiZheSi/index.js','regenerate','已切换至开场白\x20','18XybbaD','\x20人在线','iframe-renderer.css','parse','【Amily2号-情报部】一切安好,帝国已是最新版本。情报已转交内务府备案。','rel','--am2-','#send_but','10px','log','createLorebookEntries','message_id','options','renderer.css','deleteChatMessages','style.css','MESSAGE_RECEIVED','plotOpt_contextLimit','setChatMessages','已恢复默认界面样式。','getElementById','cwb-feature-style','/CharacterWorldBook/cwb_style.css?v=','rgba(255,\x20255,\x20172,\x200.1)','getChatMessages','plotOpt_enabled','showToast','removeProperty','[Amily2号-开国大典]\x20步骤3.5:侦测到角色世界书停泊位,开始构建...','count','1.1em','amily2EventsRegistered','contains','[Amily2号-开国大典]\x20步骤七:初始化版本显示系统...','Amily2-Theme-','Connecting...','click','link','0.95em','MESSAGE_EDITED','keys','onclose','characters','操作成功','[Amily2-在线统计]\x20初始化失败:','323197haWsGx','trigger','warn','【Amily2号】帝国已就绪,现派遣外交官,为陛下探查外界新情报...','?v=','/characters/','#amily2-cancel-optimization-btn','message','【监察系统】检测到消息\x20','swipe_id','super-memory.css','IMPERSONATE_READY','/assets/','map','amily2-export-theme-btn','!!!【术语表事件绑定失败】:\x20等待面板\x20#amily2_glossary_panel\x20超时。','head','12px','ids','[Amily2-API]\x20setChatMessage\x20收到参数:','[Amily2号-开国大典]\x20步骤3.8:注册表格占位符宏...','index','amily2-reset-theme-btn','[Amily2号-开国大典]\x20术语表事件已成功绑定。','!!!【术语表事件绑定失败】:','【监察系统】未配置填表模式,跳过填表。','warning','createElement','!!!【开国大典失败】在执行系列法令时发生严重错误:','#sys-settings-button','filling_mode','\x20被删除,开始精确回滚UI状态。','source','[Amily2-主窗口]\x20未知的动作类型:\x20','rgba(0,0,0,0.1)','jqyhEnabled','#amily2_drawer_content','error','secondary-api','[Amily2-全局卫队]\x20捕获到严重错误:','html','[Amily2-在线统计]\x20连接错误:','length','input','主题已成功导入并应用!','val','AMILY2_MACRO_REPLACED','[Amily2号-开国大典]\x20密折司模块已就位。','[Amily2号-皇家制衣局]\x20已为世界编辑器披上华服:\x20WorldEditor.css','剧情优化处理失败。','hanlinyuanRagProcessor','【监察系统】滑动后填表完成,UI\x20已刷新。','14px','[Amily2号-皇家制衣局]\x20已为帝国披上华服:\x20','!!!【角色世界书构建失败】:\x20等待面板\x20#amily2_character_world_book_panel\x20超时。','[Amily2-主窗口]\x20已发送消息:\x20','#amily2-online-count','1px\x20solid\x20#79b8ff','[Amily2号-开国大典]\x20角色世界书已成功构建并融入帝国。','[Amily2-策略]\x20采用“完全主导”策略,覆盖\x20`vectors_rearrangeChat`。','getPropertyValue','body','main-api','text','!!!【角色世界书构建失败】:','isCancelled','Optimization\x20cancelled\x20by\x20user','postMessage','#aaa\x20!important','none','getLorebooks','#send_textarea','Amily2EditContent','setChatMessage','[Amily2-在线统计]\x20连接断开,尝试重连...','buttonClick','swipes','avatars','#amily2_message_board','6UeIqzO','amily2-style-','success','sendMessage','。情报已转交内务府。','function','剧情优化','getLastMessageId','removeChild','【监察系统】主填表模式,回退后强制刷新消息ID:\x20','#9e8aff','undefined','registerMacro','historiography.css','[Amily2-剧情优化]\x20优化已启用,但Jqyh\x20API已禁用且主页API未配置。','【Amily2号-内务府】获取留言板失败:','CHAT_CHANGED','amily2Updater','1px\x20solid\x20#ffc107','[Amily2-内存储司]\x20表格注入失败:','getCharLorebooks','prepend','toastr','rearrangeChat','title','includes','href','messages','render_on_every_message','操作取消','text/css','Amily2插件错误:\x20','严重错误','files','target','optimized','version','world-editor-style','revokeObjectURL','setLorebookEntries','data','[Amily2号-开国大典]\x20步骤三:开始召唤府邸...','apiUrl','10px\x205px\x20!important','【监察系统】检测到“朝代更迭”(CHAT_CHANGED),开始重修史书并刷新宫殿...','preOptimizationTextUpdated','6px\x208px','[Amily2号-开国大典]\x20步骤一:为宫殿披上华服...','table.css','rgba(255,\x20255,\x20172,\x200.25)','[Amily2号-开国大典]\x20步骤四:部署帝国哨兵网络...','isXiaobaixEnabled','display','setProperty','slice','buttonId','1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.2)','1206675hoOsoM','show','【Amily2号】帝国秩序已完美建立。Amily2号的府邸已恭候陛下的莅临。','bookName','startsWith','lastPreOptimizationResult','rgba(255,\x20255,\x20255,\x200.1)','[Amily2-核心引擎]\x20无法注册表格宏,可能是\x20SillyTavern\x20版本不兼容。','3471610Tbqeur','[Amily2-核心引擎]\x20已成功注册表格占位符宏:\x20{{Amily2EditContent}}','onmessage','getLorebookEntries','race','stylesheet','[Amily2号-版本系统]\x20版本检测器未找到,可能加载失败','/WorldEditor/WorldEditor.css?v=','scripts/extensions/third-party/','[Amily2-在线统计]\x20解析消息失败:','onload','[Amily2号-开国大典]\x20步骤二:皇家仪仗队就位...','\x22\x20被点击','rgba(0,0,0,0.2)','.json','[Amily2号-开国大典]\x20步骤五:初始化RAG处理器...','toISOString','now','【Amily2号-内务府】已成功获取并展示来自陛下的最新圣谕。','type','amily2-host','rgba(144,\x20238,\x20144,\x200.3)','trim','[Amily2-翰林院]\x20RAG处理器初始化失败:'];_0x25ca=function(){return _0xa000f8;};return _0x25ca();}import{injectTableData,generateTableContent}from'./core/table-system/injector.js';import{initialize as _0xdbe26c}from'./core/rag-processor.js';import{loadTables,clearHighlights,rollbackAndRefill,rollbackState,commitPendingDeletions,saveStateToMessage,getMemoryState,clearUpdatedTables}from'./core/table-system/manager.js';import{fillWithSecondaryApi}from'./core/table-system/secondary-filler.js';import{renderTables}from'./ui/table-bindings.js';import{log}from'./core/table-system/logger.js';import{eventSource,event_types,saveSettingsDebounced}from'/script.js';import{checkForUpdates,fetchMessageBoardContent}from'./core/api.js';import{setUpdateInfo,applyUpdateIndicator}from'./ui/state.js';import{pluginVersion,extensionName,defaultSettings}from'./utils/settings.js';import{tableSystemDefaultSettings}from'./core/table-system/settings.js';import{extension_settings}from'/scripts/extensions.js';import{manageLorebookEntriesForChat}from'./core/lore.js';import{initializeCharacterWorldBook}from'./CharacterWorldBook/cwb_index.js';import{cwbDefaultSettings}from'./CharacterWorldBook/src/cwb_config.js';import{bindGlossaryEvents}from'./glossary/GT_bindings.js';import'./core/amily2-updater.js';import{updateOrInsertTableInChat,startContinuousRendering,stopContinuousRendering}from'./ui/message-table-renderer.js';import{initializeRenderer}from'./core/tavern-helper/renderer.js';import{initializeApiListener,registerApiHandler,amilyHelper,initializeAmilyHelper}from'./core/tavern-helper/main.js';import{registerContextOptimizerMacros,resetContextBuffer}from'./core/context-optimizer.js';import{initializeSuperMemory}from'./core/super-memory/manager.js';const STYLE_SETTINGS_KEY='amily2_custom_styles',STYLE_ROOT_SELECTOR='#amily2_memorisation_forms_panel';let styleRoot=null;function getStyleRoot(){const _0x161d33=_0x10c0;return!styleRoot&&(styleRoot=document[_0x161d33(0x151)](STYLE_ROOT_SELECTOR)),styleRoot;}function applyStyles(_0x29b14a){const _0x16f861=_0x10c0,_0x44fb8c=getStyleRoot();if(!_0x44fb8c||!_0x29b14a)return;delete _0x29b14a['_comment'];for(const [_0x10d4e6,_0x3d7f9b]of Object[_0x16f861(0x126)](_0x29b14a)){_0x10d4e6[_0x16f861(0x212)](_0x16f861(0x15f))&&_0x44fb8c[_0x16f861(0x12e)][_0x16f861(0x20a)](_0x10d4e6,_0x3d7f9b);}}function loadAndApplyStyles(){const _0x1bd983=_0x10c0,_0x5a7a5e=extension_settings[extensionName]?.[STYLE_SETTINGS_KEY];_0x5a7a5e&&typeof _0x5a7a5e===_0x1bd983(0x140)&&Object[_0x1bd983(0x181)](_0x5a7a5e)[_0x1bd983(0x1b0)]>0x0&&applyStyles(_0x5a7a5e);}function saveStyles(_0x3d8c59){!extension_settings[extensionName]&&(extension_settings[extensionName]={}),extension_settings[extensionName][STYLE_SETTINGS_KEY]=_0x3d8c59,saveSettingsDebounced();}function resetToDefaultStyles(){const _0x6571b3=_0x10c0,_0x261699=getStyleRoot();if(!_0x261699)return;const _0x475a48=extension_settings[extensionName]?.[STYLE_SETTINGS_KEY];if(_0x475a48&&typeof _0x475a48===_0x6571b3(0x140))for(const _0xe8f5b1 of Object[_0x6571b3(0x181)](_0x475a48)){_0xe8f5b1[_0x6571b3(0x212)](_0x6571b3(0x15f))&&_0x261699['style'][_0x6571b3(0x174)](_0xe8f5b1);}saveStyles(null),toastr[_0x6571b3(0x1d7)](_0x6571b3(0x16c));}function getDefaultCssVars(){const _0x2f905a=_0x10c0;return{'--am2-font-size-base':_0x2f905a(0x1ba),'--am2-gap-main':_0x2f905a(0x161),'--am2-padding-main':_0x2f905a(0x12d),'--am2-container-bg':_0x2f905a(0x1a8),'--am2-container-border':_0x2f905a(0x20d),'--am2-container-border-radius':_0x2f905a(0x197),'--am2-container-padding':'10px','--am2-container-shadow':_0x2f905a(0x138),'--am2-title-font-size':_0x2f905a(0x177),'--am2-title-font-weight':_0x2f905a(0x12c),'--am2-title-text-shadow':'0\x200\x205px\x20rgba(200,\x20200,\x20255,\x200.3)','--am2-title-gradient-start':'#c0bde4','--am2-title-gradient-end':_0x2f905a(0x150),'--am2-title-icon-color':_0x2f905a(0x1df),'--am2-title-icon-margin':_0x2f905a(0x161),'--am2-table-bg':_0x2f905a(0x223),'--am2-table-border':'1px\x20solid\x20rgba(255,\x20255,\x20255,\x200.25)','--am2-table-cell-padding':_0x2f905a(0x203),'--am2-table-cell-font-size':_0x2f905a(0x17f),'--am2-header-bg':_0x2f905a(0x214),'--am2-header-color':_0x2f905a(0x13f),'--am2-header-editable-bg':'rgba(172,\x20216,\x20255,\x200.1)','--am2-header-editable-focus-bg':_0x2f905a(0x12b),'--am2-header-editable-focus-outline':_0x2f905a(0x1bf),'--am2-cell-editable-bg':_0x2f905a(0x170),'--am2-cell-editable-focus-bg':_0x2f905a(0x206),'--am2-cell-editable-focus-outline':_0x2f905a(0x1e7),'--am2-index-col-bg':'rgba(0,\x200,\x200,\x200.3)\x20!important','--am2-index-col-color':_0x2f905a(0x1ca),'--am2-index-col-width':'40px','--am2-index-col-padding':_0x2f905a(0x200),'--am2-controls-gap':_0x2f905a(0x11c),'--am2-controls-margin-bottom':_0x2f905a(0x161),'--am2-cell-highlight-bg':_0x2f905a(0x22b)};}function exportStyles(){const _0x5a1d63=_0x10c0,_0xc449cf=getStyleRoot();if(!_0xc449cf){toastr['error'](_0x5a1d63(0x13e));return;}const _0x1b2c29=getComputedStyle(_0xc449cf),_0x56121f={},_0x5212e1=getDefaultCssVars();for(const _0x40b176 of Object[_0x5a1d63(0x181)](_0x5212e1)){_0x56121f[_0x40b176]=_0x1b2c29[_0x5a1d63(0x1c2)](_0x40b176)[_0x5a1d63(0x22c)]();}const _0x403575=new Blob([JSON['stringify'](_0x56121f,null,0x2)],{'type':'application/json'}),_0x2592eb=URL[_0x5a1d63(0x153)](_0x403575),_0x255536=document[_0x5a1d63(0x1a1)]('a');_0x255536[_0x5a1d63(0x1ef)]=_0x2592eb,_0x255536[_0x5a1d63(0x13c)]=_0x5a1d63(0x17b)+new Date()[_0x5a1d63(0x226)]()['slice'](0x0,0xa)+_0x5a1d63(0x224),document[_0x5a1d63(0x1c3)]['appendChild'](_0x255536),_0x255536['click'](),document['body'][_0x5a1d63(0x1dd)](_0x255536),URL[_0x5a1d63(0x1fb)](_0x2592eb),toastr[_0x5a1d63(0x1d7)](_0x5a1d63(0x117),'导出成功');}function importStyles(){const _0x2cc2ad=_0x10c0,_0x1f7e2f=document[_0x2cc2ad(0x1a1)]('input');_0x1f7e2f[_0x2cc2ad(0x229)]='file',_0x1f7e2f[_0x2cc2ad(0x14f)]=_0x2cc2ad(0x224),_0x1f7e2f[_0x2cc2ad(0x12e)][_0x2cc2ad(0x209)]=_0x2cc2ad(0x1cb);const _0x538e21=()=>{const _0x324b96=_0x2cc2ad;document['body'][_0x324b96(0x179)](_0x1f7e2f)&&document[_0x324b96(0x1c3)][_0x324b96(0x1dd)](_0x1f7e2f);};_0x1f7e2f[_0x2cc2ad(0x124)]=_0xe719b7=>{const _0x49ae04=_0x2cc2ad,_0x42edb2=_0xe719b7[_0x49ae04(0x1f7)][_0x49ae04(0x1f6)][0x0];if(!_0x42edb2){_0x538e21();return;}const _0x4ecf1b=new FileReader();_0x4ecf1b[_0x49ae04(0x220)]=_0x3ab6a1=>{const _0x2be2af=_0x49ae04;try{const _0x2cd763=JSON[_0x2be2af(0x15c)](_0x3ab6a1[_0x2be2af(0x1f7)]['result']);if(typeof _0x2cd763!=='object'||Array[_0x2be2af(0x132)](_0x2cd763))throw new Error('无效的JSON格式。');applyStyles(_0x2cd763),saveStyles(_0x2cd763),toastr['success'](_0x2be2af(0x1b2));}catch(_0x1ed4b7){toastr[_0x2be2af(0x1ab)]('导入失败:'+_0x1ed4b7[_0x2be2af(0x18d)],'错误');}finally{_0x538e21();}},_0x4ecf1b[_0x49ae04(0x13a)](_0x42edb2);},document[_0x2cc2ad(0x1c3)][_0x2cc2ad(0x11b)](_0x1f7e2f),_0x1f7e2f['click']();}function compareVersions(_0x4c04ef,_0x3057b6){const _0x63673=_0x10c0,_0x5e6695=_0x4c04ef[_0x63673(0x154)]('.')[_0x63673(0x193)](Number),_0x468644=_0x3057b6['split']('.')[_0x63673(0x193)](Number),_0x375449=Math[_0x63673(0x145)](_0x5e6695[_0x63673(0x1b0)],_0x468644[_0x63673(0x1b0)]);for(let _0x226dd9=0x0;_0x226dd9<_0x375449;_0x226dd9++){const _0x2c8a1c=_0x5e6695[_0x226dd9]||0x0,_0x59b694=_0x468644[_0x226dd9]||0x0;if(_0x2c8a1c>_0x59b694)return!![];if(_0x2c8a1c<_0x59b694)return![];}return![];}async function handleUpdateCheck(){const _0x4e9355=_0x10c0;console[_0x4e9355(0x162)](_0x4e9355(0x189));const _0x768457=await checkForUpdates();if(_0x768457&&_0x768457[_0x4e9355(0x1f9)]){const _0x262dd3=compareVersions(_0x768457[_0x4e9355(0x1f9)],pluginVersion);_0x262dd3?console[_0x4e9355(0x162)](_0x4e9355(0x128)+_0x768457[_0x4e9355(0x1f9)]+_0x4e9355(0x1d9)):console[_0x4e9355(0x162)](_0x4e9355(0x15d)),setUpdateInfo(_0x262dd3,_0x768457),applyUpdateIndicator();}}async function handleMessageBoard(){const _0x3d8175=async()=>{const _0x1ae517=_0x10c0;try{const _0x4673f2=await fetchMessageBoardContent();if(_0x4673f2&&_0x4673f2['message']){const _0x142e16=$(_0x1ae517(0x1d4)),_0x2a79a1=$('#amily2_message_content');_0x2a79a1[_0x1ae517(0x1ae)](_0x4673f2['message']),_0x142e16[_0x1ae517(0x20f)](),console[_0x1ae517(0x162)](_0x1ae517(0x228));}}catch(_0x14b277){console[_0x1ae517(0x1ab)](_0x1ae517(0x1e4),_0x14b277);}};await _0x3d8175(),setInterval(_0x3d8175,0x493e0);}function loadPluginStyles(){const _0x118e20=_0x10c0,_0x340ad8=_0x4159e0=>{const _0x54e786=_0x10c0,_0x4665b8=_0x54e786(0x1d6)+_0x4159e0[_0x54e786(0x154)]('.')[0x0];if(document[_0x54e786(0x16d)](_0x4665b8))return;const _0x1c0f51=_0x54e786(0x21e)+extensionName+_0x54e786(0x192)+_0x4159e0+_0x54e786(0x18a)+Date[_0x54e786(0x227)](),_0x53bdc8=document[_0x54e786(0x1a1)](_0x54e786(0x17e));_0x53bdc8['id']=_0x4665b8,_0x53bdc8[_0x54e786(0x15e)]=_0x54e786(0x21b),_0x53bdc8['type']=_0x54e786(0x1f3),_0x53bdc8[_0x54e786(0x1ef)]=_0x1c0f51,document['head']['appendChild'](_0x53bdc8),console['log'](_0x54e786(0x1bb)+_0x4159e0);};_0x340ad8(_0x118e20(0x168)),_0x340ad8(_0x118e20(0x1e2)),_0x340ad8('hanlinyuan.css'),_0x340ad8('amily2-glossary.css'),_0x340ad8(_0x118e20(0x205)),_0x340ad8('optimization.css'),_0x340ad8(_0x118e20(0x166)),_0x340ad8(_0x118e20(0x15b)),_0x340ad8(_0x118e20(0x190));const _0x38dc12=_0x118e20(0x16e);if(!document['getElementById'](_0x38dc12)){const _0x403ded=document[_0x118e20(0x1a1)](_0x118e20(0x17e));_0x403ded['id']=_0x38dc12,_0x403ded[_0x118e20(0x15e)]='stylesheet',_0x403ded[_0x118e20(0x229)]=_0x118e20(0x1f3),_0x403ded['href']=_0x118e20(0x21e)+extensionName+_0x118e20(0x16f)+Date[_0x118e20(0x227)](),document[_0x118e20(0x196)][_0x118e20(0x11b)](_0x403ded),console['log']('[Amily2号-皇家制衣局]\x20已为角色世界书披上华服:\x20cwb_style.css');}const _0x8f09cf=_0x118e20(0x1fa);if(!document[_0x118e20(0x16d)](_0x8f09cf)){const _0x7bac4c=document[_0x118e20(0x1a1)]('link');_0x7bac4c['id']=_0x8f09cf,_0x7bac4c[_0x118e20(0x15e)]='stylesheet',_0x7bac4c['type']='text/css',_0x7bac4c[_0x118e20(0x1ef)]=_0x118e20(0x21e)+extensionName+_0x118e20(0x21d)+Date[_0x118e20(0x227)](),document['head'][_0x118e20(0x11b)](_0x7bac4c),console[_0x118e20(0x162)](_0x118e20(0x1b6));}}window[_0x2b2b58(0x148)](_0x2b2b58(0x18d),function(_0x2da08f){const _0x3a3c0c=_0x2b2b58;if(_0x2da08f[_0x3a3c0c(0x1fd)]&&_0x2da08f[_0x3a3c0c(0x1fd)][_0x3a3c0c(0x229)]==='getAvatars'){if(window[_0x3a3c0c(0x208)])return;const _0x236e7f=_0x3a3c0c(0x18b)+(getContext()['userCharacter']?.[_0x3a3c0c(0x12f)]??''),_0x468621='/characters/'+(getContext()[_0x3a3c0c(0x183)][this_chid]?.[_0x3a3c0c(0x12f)]??'');_0x2da08f[_0x3a3c0c(0x1a6)][_0x3a3c0c(0x1c9)]({'source':_0x3a3c0c(0x22a),'type':_0x3a3c0c(0x1d3),'urls':{'user':_0x236e7f,'char':_0x468621}},'*');return;}if(_0x2da08f['data']&&_0x2da08f[_0x3a3c0c(0x1fd)][_0x3a3c0c(0x1a6)]===_0x3a3c0c(0x122)){const {action:_0x2f0d7d,detail:_0x79d763}=_0x2da08f['data'];console[_0x3a3c0c(0x162)]('[Amily2-主窗口]\x20收到来自iframe的动作:\x20'+_0x2f0d7d,_0x79d763);switch(_0x2f0d7d){case _0x3a3c0c(0x1d8):_0x79d763&&_0x79d763['message']&&($(_0x3a3c0c(0x1cd))[_0x3a3c0c(0x1b3)](_0x79d763[_0x3a3c0c(0x18d)])[_0x3a3c0c(0x187)](_0x3a3c0c(0x1b1)),$(_0x3a3c0c(0x160))[_0x3a3c0c(0x187)]('click'),console[_0x3a3c0c(0x162)](_0x3a3c0c(0x1bd)+_0x79d763[_0x3a3c0c(0x18d)]));break;case _0x3a3c0c(0x173):if(_0x79d763&&_0x79d763[_0x3a3c0c(0x18d)]&&window[_0x3a3c0c(0x1eb)]){const _0x4aa862=_0x79d763['type']||'info';typeof window[_0x3a3c0c(0x1eb)][_0x4aa862]==='function'&&window[_0x3a3c0c(0x1eb)][_0x4aa862](_0x79d763[_0x3a3c0c(0x18d)],_0x79d763[_0x3a3c0c(0x1ed)]||'通知');}break;case _0x3a3c0c(0x1d1):console[_0x3a3c0c(0x162)](_0x3a3c0c(0x14c),_0x79d763);window[_0x3a3c0c(0x1eb)]&&window['toastr']['info'](_0x3a3c0c(0x130)+(_0x79d763[_0x3a3c0c(0x20c)]||'未知')+_0x3a3c0c(0x222),_0x3a3c0c(0x116));break;default:console[_0x3a3c0c(0x188)](_0x3a3c0c(0x1a7)+_0x2f0d7d);}}}),window[_0x2b2b58(0x148)]('error',_0x44fa1c=>{const _0x19d96c=_0x2b2b58,_0x2abd57=_0x44fa1c[_0x19d96c(0x1ab)]?.['stack']||'';_0x2abd57[_0x19d96c(0x1ee)](_0x19d96c(0x11e))&&(console[_0x19d96c(0x1ab)](_0x19d96c(0x1ad),_0x44fa1c[_0x19d96c(0x1ab)]),toastr[_0x19d96c(0x1ab)](_0x19d96c(0x1f4)+(_0x44fa1c[_0x19d96c(0x1ab)]?.['message']||'未知错误'),_0x19d96c(0x1f5),{'timeOut':0x2710}));}),jQuery(async()=>{const _0x6c486a=_0x2b2b58;console[_0x6c486a(0x162)](_0x6c486a(0x120));try{console[_0x6c486a(0x162)]('[Amily2号-开国大典]\x20步骤0:优先注册上下文优化器...'),registerContextOptimizerMacros();}catch(_0x4dca6e){console[_0x6c486a(0x1ab)]('[Amily2号-开国大典]\x20上下文优化器注册失败:',_0x4dca6e);}try{await import(_0x6c486a(0x156)),console[_0x6c486a(0x162)](_0x6c486a(0x1b5));}catch(_0x4eb298){console[_0x6c486a(0x1ab)](_0x6c486a(0x152),_0x4eb298);}initializeApiListener(),registerApiHandler(_0x6c486a(0x171),async _0x134441=>{const _0x39e804=_0x6c486a;return amilyHelper['getChatMessages'](_0x134441['range'],_0x134441[_0x39e804(0x165)]);}),registerApiHandler(_0x6c486a(0x16b),async _0x3b6edb=>{const _0x4feb21=_0x6c486a;return await amilyHelper[_0x4feb21(0x16b)](_0x3b6edb[_0x4feb21(0x1f0)],_0x3b6edb[_0x4feb21(0x165)]);}),registerApiHandler(_0x6c486a(0x1cf),async _0x183cba=>{const _0x5eb2c5=_0x6c486a,_0x393ed1=_0x183cba['field_values']||_0x183cba['content'],_0x4daad8=_0x183cba[_0x5eb2c5(0x164)]!==undefined?_0x183cba[_0x5eb2c5(0x164)]:_0x183cba[_0x5eb2c5(0x19b)],_0xa9cfeb=_0x183cba[_0x5eb2c5(0x165)]||{};return console[_0x5eb2c5(0x162)](_0x5eb2c5(0x199),{'field_values':_0x393ed1,'message_id':_0x4daad8,'options':_0xa9cfeb,'raw_data':_0x183cba}),await amilyHelper[_0x5eb2c5(0x1cf)](_0x393ed1,_0x4daad8,_0xa9cfeb);}),registerApiHandler('createChatMessages',async _0x476221=>{const _0x4fd296=_0x6c486a;return await amilyHelper['createChatMessages'](_0x476221['messages'],_0x476221[_0x4fd296(0x165)]);}),registerApiHandler(_0x6c486a(0x167),async _0x1b6363=>{const _0x525d1f=_0x6c486a;return await amilyHelper['deleteChatMessages'](_0x1b6363[_0x525d1f(0x198)],_0x1b6363['options']);}),registerApiHandler('getLorebooks',async _0x1961bf=>{const _0x404743=_0x6c486a;return await amilyHelper[_0x404743(0x1cc)]();}),registerApiHandler(_0x6c486a(0x1e9),async _0x14e04b=>{const _0x366415=_0x6c486a;return await amilyHelper[_0x366415(0x1e9)](_0x14e04b[_0x366415(0x165)]);}),registerApiHandler(_0x6c486a(0x219),async _0x2de7dd=>{const _0x30880f=_0x6c486a;return await amilyHelper['getLorebookEntries'](_0x2de7dd[_0x30880f(0x211)]);}),registerApiHandler(_0x6c486a(0x1fc),async _0x5ef030=>{const _0x5ea82b=_0x6c486a;return await amilyHelper[_0x5ea82b(0x1fc)](_0x5ef030[_0x5ea82b(0x211)],_0x5ef030[_0x5ea82b(0x126)]);}),registerApiHandler(_0x6c486a(0x163),async _0x4d5967=>{const _0x30123d=_0x6c486a;return await amilyHelper['createLorebookEntries'](_0x4d5967[_0x30123d(0x211)],_0x4d5967[_0x30123d(0x126)]);}),registerApiHandler('createLorebook',async _0x2e2952=>{const _0x15809d=_0x6c486a;return await amilyHelper['createLorebook'](_0x2e2952[_0x15809d(0x211)]);}),registerApiHandler('triggerSlash',async _0x24ecda=>{const _0x3a5801=_0x6c486a;return await amilyHelper[_0x3a5801(0x14d)](_0x24ecda['command']);}),registerApiHandler(_0x6c486a(0x1dc),async _0x7393b8=>{const _0x3b0f0b=_0x6c486a;return amilyHelper[_0x3b0f0b(0x1dc)]();}),registerApiHandler(_0x6c486a(0x1eb),async _0xaf763f=>{const _0x13cf16=_0x6c486a;return window['toastr']&&typeof window[_0x13cf16(0x1eb)][_0xaf763f[_0x13cf16(0x229)]]===_0x13cf16(0x1da)&&window[_0x13cf16(0x1eb)][_0xaf763f['type']](_0xaf763f['message'],_0xaf763f[_0x13cf16(0x1ed)]),!![];}),registerApiHandler('switchSwipe',async _0x438f11=>{const _0x5d9253=_0x6c486a,{messageIndex:_0x37f819,swipeIndex:_0x1afce9}=_0x438f11,_0x118ee9=await amilyHelper[_0x5d9253(0x171)](_0x37f819,{'include_swipes':!![]});if(_0x118ee9&&_0x118ee9[_0x5d9253(0x1b0)]>0x0&&_0x118ee9[0x0]['swipes']){const _0x3436b7=_0x118ee9[0x0][_0x5d9253(0x1d2)][_0x1afce9];if(_0x3436b7!==undefined){await amilyHelper['setChatMessages']([{'message_id':_0x37f819,'message':_0x3436b7}],{'refresh':_0x5d9253(0x11f)});const _0x9cb1dc=getContext();return _0x9cb1dc['chat'][_0x37f819]&&(_0x9cb1dc[_0x5d9253(0x14e)][_0x37f819][_0x5d9253(0x18f)]=_0x1afce9),{'success':!![],'message':_0x5d9253(0x158)+_0x1afce9};}}throw new Error('无法切换到开场白\x20'+_0x1afce9);}),initializeAmilyHelper(),console['log'](_0x6c486a(0x120));!extension_settings[extensionName]&&(extension_settings[extensionName]={});const _0x21861d={...defaultSettings,...tableSystemDefaultSettings,...cwbDefaultSettings,'render_on_every_message':![],'amily_render_enabled':![]};for(const _0x51f7fa in _0x21861d){extension_settings[extensionName][_0x51f7fa]===undefined&&(extension_settings[extensionName][_0x51f7fa]=_0x21861d[_0x51f7fa]);}console[_0x6c486a(0x162)]('[Amily2号-帝国枢密院]\x20帝国基本法已确认,档案室已与国库对接完毕。');let _0x1654cf=0x0;const _0x247b11=0x64,_0x19de4b=0x64,_0x731071=_0x6c486a(0x1a3),_0x1c7d77=setInterval(async()=>{const _0xa2603f=_0x6c486a;if($(_0x731071)[_0xa2603f(0x1b0)]>0x0){clearInterval(_0x1c7d77),console[_0xa2603f(0x162)](_0xa2603f(0x13b));try{console[_0xa2603f(0x162)](_0xa2603f(0x204)),loadPluginStyles(),console[_0xa2603f(0x162)](_0xa2603f(0x221)),await registerSlashCommands(),console[_0xa2603f(0x162)](_0xa2603f(0x1fe)),createDrawer();function _0x55e622(){let _0x2dc99b=0x0;const _0x1f507f=0x32,_0x15b67c=0x64,_0x4d1c9a=setInterval(()=>{const _0x1f8eff=_0x10c0,_0x2bd7a3=document[_0x1f8eff(0x16d)]('amily2_glossary_panel');if(_0x2bd7a3){clearInterval(_0x4d1c9a);try{console[_0x1f8eff(0x162)](_0x1f8eff(0x146)),bindGlossaryEvents(),console[_0x1f8eff(0x162)](_0x1f8eff(0x19d));}catch(_0x172d01){console[_0x1f8eff(0x1ab)](_0x1f8eff(0x19e),_0x172d01);}}else _0x2dc99b++,_0x2dc99b>=_0x1f507f&&(clearInterval(_0x4d1c9a),console['error'](_0x1f8eff(0x195)));},_0x15b67c);}_0x55e622();function _0x1ae041(){let _0x5a277a=0x0;const _0x3fc25f=0x32,_0x15ca3f=0x64,_0x55f9b9=setInterval(async()=>{const _0x38fe9a=_0x10c0,_0x46b6ee=$('#amily2_character_world_book_panel');if(_0x46b6ee[_0x38fe9a(0x1b0)]>0x0){clearInterval(_0x55f9b9);try{console[_0x38fe9a(0x162)](_0x38fe9a(0x175)),await initializeCharacterWorldBook(_0x46b6ee),console[_0x38fe9a(0x162)](_0x38fe9a(0x1c0));}catch(_0x55a71c){console[_0x38fe9a(0x1ab)](_0x38fe9a(0x1c6),_0x55a71c);}}else _0x5a277a++,_0x5a277a>=_0x3fc25f&&(clearInterval(_0x55f9b9),console[_0x38fe9a(0x1ab)](_0x38fe9a(0x1bc)));},_0x15ca3f);}_0x1ae041(),console[_0xa2603f(0x162)](_0xa2603f(0x19a));try{eventSource['on'](event_types[_0xa2603f(0x123)],()=>{resetContextBuffer();});const _0xf7705c=getContext();_0xf7705c&&typeof _0xf7705c[_0xa2603f(0x1e1)]===_0xa2603f(0x1da)?(_0xf7705c['registerMacro'](_0xa2603f(0x1ce),()=>{const _0x3b0563=_0xa2603f,_0x8e10e7=generateTableContent();return _0x8e10e7&&(window[_0x3b0563(0x1b4)]=!![]),_0x8e10e7;}),console[_0xa2603f(0x162)](_0xa2603f(0x217))):console[_0xa2603f(0x188)](_0xa2603f(0x215));}catch(_0x437968){console['error']('[Amily2-核心引擎]\x20注册表格宏时发生错误:',_0x437968);}console['log'](_0xa2603f(0x207));let _0x451570=![];async function _0xad1ddc(_0x148e3a,_0x3b7045,_0x143d49){const _0x13534f=_0xa2603f;clearUpdatedTables(),console['log']('[Amily2-剧情优化]\x20Generation\x20after\x20commands\x20triggered',{'type':_0x148e3a,'params':_0x3b7045,'dryRun':_0x143d49,'isProcessing':_0x451570});if(_0x148e3a===_0x13534f(0x157)||_0x451570||_0x143d49){console['log']('[Amily2-剧情优化]\x20Skipping\x20due\x20to\x20conditions:',{'type':_0x148e3a,'isProcessing':_0x451570,'dryRun':_0x143d49});return;}const _0x5506af=extension_settings[extensionName];if(_0x5506af?.[_0x13534f(0x172)]===![])return;const _0x199c40=_0x5506af?.[_0x13534f(0x1a9)]===!![],_0x4d68ba=!!_0x5506af?.[_0x13534f(0x1ff)]||!!_0x5506af?.[_0x13534f(0x129)];if(!_0x199c40&&!_0x4d68ba){console['log'](_0x13534f(0x1e3));return;}_0x451570=!![];let _0x29915e=null;const _0xfa3a45={'isCancelled':![]};try{const _0x4c2f=$(_0x13534f(0x1cd))[_0x13534f(0x1b3)]();if(!_0x4c2f)return _0x451570=![],![];const _0x1c3166='\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正在进行剧情优化...\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
\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20';let _0x191521;const _0x41ec12=new Promise((_0x4f91ed,_0x3fa0ae)=>{_0x191521=_0x3fa0ae;});_0x29915e=toastr[_0x13534f(0x135)](_0x1c3166,_0x13534f(0x1db),{'timeOut':0x0,'extendedTimeOut':0x0,'tapToDismiss':![],'onclick':null,'escapeHtml':![],'onShown':function(){const _0x3af548=_0x13534f;$(_0x3af548(0x18c))['one']('click',function(_0x4a35e9){const _0x345e60=_0x3af548;_0x4a35e9['stopPropagation'](),_0x29915e&&(_0x29915e[_0x345e60(0x11d)](),_0x29915e=null),_0xfa3a45[_0x345e60(0x1c7)]=!![],_0x191521(new Error(_0x345e60(0x1c8)));});}});const _0x52f09a=getContext(),_0x478d20=_0x5506af[_0x13534f(0x16a)]||0xa;let _0xced176=[];_0x478d20>0x0&&(_0xced176=_0x52f09a[_0x13534f(0x14e)][_0x13534f(0x20b)](-_0x478d20));const _0x45f1ca=processPlotOptimization({'mes':_0x4c2f},_0xced176,_0xfa3a45),_0xe73b25=await Promise[_0x13534f(0x21a)]([_0x45f1ca,_0x41ec12]);if(_0xe73b25&&_0xe73b25[_0x13534f(0x115)]){const _0x59c33b=$(_0x13534f(0x1cd))[_0x13534f(0x1b3)](),_0xe8d1a2=_0x59c33b+'\x0a'+_0xe73b25['contentToAppend'];$(_0x13534f(0x1cd))[_0x13534f(0x1b3)](_0xe8d1a2)['trigger'](_0x13534f(0x1b1)),toastr[_0x13534f(0x1d7)](_0x13534f(0x14a),_0x13534f(0x184));}else console[_0x13534f(0x162)]('[Amily2-剧情优化]\x20Plot\x20optimization\x20returned\x20no\x20result.\x20Sending\x20original\x20message.');return![];}catch(_0x58c0b2){return _0x58c0b2[_0x13534f(0x18d)]===_0x13534f(0x1c8)?(console['log'](_0x13534f(0x143)),toastr[_0x13534f(0x1a0)]('剧情优化任务已中止...',_0x13534f(0x1f2),{'timeOut':0x7d0})):(console[_0x13534f(0x1ab)]('[Amily2-剧情优化]\x20处理发送前事件时出错:',_0x58c0b2),toastr['error'](_0x13534f(0x1b7),'错误')),![];}finally{_0x451570=![],_0x29915e&&(toastr[_0x13534f(0x136)](_0x29915e),_0x29915e=null);}}!window[_0xa2603f(0x178)]&&(eventSource['on'](event_types['GENERATION_AFTER_COMMANDS'],_0xad1ddc),eventSource['on'](event_types[_0xa2603f(0x169)],onMessageReceived),eventSource['on'](event_types[_0xa2603f(0x191)],onMessageReceived),eventSource['on'](event_types['MESSAGE_RECEIVED'],_0x230a0d=>handleTableUpdate(_0x230a0d)),eventSource['on'](event_types['MESSAGE_SWIPED'],async _0x1b08eb=>{const _0x3e6034=_0xa2603f,_0x1cce71=getContext();if(_0x1cce71[_0x3e6034(0x14e)][_0x3e6034(0x1b0)]<0x2){log(_0x3e6034(0x12a),_0x3e6034(0x135));return;}log(_0x3e6034(0x121),_0x3e6034(0x188)),rollbackState();const _0x3bd473=_0x1cce71[_0x3e6034(0x14e)][_0x1b08eb]||_0x1cce71[_0x3e6034(0x14e)][_0x1cce71[_0x3e6034(0x14e)][_0x3e6034(0x1b0)]-0x1];if(_0x3bd473['is_user']){log('【监察系统】滑动后最新消息是用户,跳过填表。','info'),renderTables();return;}const _0x5437dc=extension_settings[extensionName],_0x165da9=_0x5437dc[_0x3e6034(0x1a4)]||_0x3e6034(0x1c4);if(_0x165da9===_0x3e6034(0x1c4))log(_0x3e6034(0x1de)+_0x1b08eb+'。',_0x3e6034(0x135)),await handleTableUpdate(_0x1b08eb,!![]);else _0x165da9===_0x3e6034(0x1ac)||_0x165da9===_0x3e6034(0x1f8)?(log(_0x3e6034(0x133),_0x3e6034(0x135)),await fillWithSecondaryApi(_0x3bd473,!![])):log(_0x3e6034(0x19f),_0x3e6034(0x135));renderTables(),log(_0x3e6034(0x1b9),_0x3e6034(0x1d7));}),eventSource['on'](event_types[_0xa2603f(0x180)],_0x18d83d=>{handleTableUpdate(_0x18d83d),updateOrInsertTableInChat();}),eventSource['on'](event_types[_0xa2603f(0x1e5)],()=>{const _0x30ee36=_0xa2603f;window[_0x30ee36(0x213)]=null,document[_0x30ee36(0x155)](new CustomEvent(_0x30ee36(0x202))),manageLorebookEntriesForChat(),setTimeout(()=>{const _0x2ec400=_0x30ee36;log(_0x2ec400(0x201),'info'),clearHighlights(),clearUpdatedTables(),loadTables(),renderTables(),extension_settings[extensionName][_0x2ec400(0x1f1)]?startContinuousRendering():stopContinuousRendering();},0x64);}),eventSource['on'](event_types[_0xa2603f(0x125)],(_0x5dfd87,_0x173981)=>{const _0x18cff8=_0xa2603f;log(_0x18cff8(0x18e)+_0x173981+_0x18cff8(0x1a5),'warn'),clearHighlights(),loadTables(_0x173981),renderTables();}),eventSource['on'](event_types['MESSAGE_RECEIVED'],updateOrInsertTableInChat),eventSource['on'](event_types[_0xa2603f(0x149)],updateOrInsertTableInChat),window['amily2EventsRegistered']=!![]);console[_0xa2603f(0x162)](_0xa2603f(0x225));try{_0xdbe26c(),console[_0xa2603f(0x162)](_0xa2603f(0x137));}catch(_0x4be765){console['error'](_0xa2603f(0x22d),_0x4be765);}console['log']('[Amily2号-开国大典]\x20步骤六:智能冲突检测与注入策略...');async function _0x4d2f3e(..._0x20d9bc){const _0x4c1c53=_0xa2603f;console[_0x4c1c53(0x162)](_0x4c1c53(0x139),_0x20d9bc[0x0]?.[_0x4c1c53(0x1b0)]||0x0,')');try{await injectTableData(..._0x20d9bc);}catch(_0xf917d7){console[_0x4c1c53(0x1ab)](_0x4c1c53(0x1e8),_0xf917d7);}if(window[_0x4c1c53(0x1b8)]&&typeof window['hanlinyuanRagProcessor'][_0x4c1c53(0x1ec)]===_0x4c1c53(0x1da))try{console['log']('[Amily2-核心引擎]\x20执行内置RAG注入。'),await window[_0x4c1c53(0x1b8)]['rearrangeChat'](..._0x20d9bc);}catch(_0x46a084){console[_0x4c1c53(0x1ab)](_0x4c1c53(0x144),_0x46a084);}}console[_0xa2603f(0x162)](_0xa2603f(0x1c1)),window[_0xa2603f(0x118)]=_0x4d2f3e,window[_0xa2603f(0x11a)]&&(window[_0xa2603f(0x11a)]=null),console[_0xa2603f(0x162)](_0xa2603f(0x210)),console[_0xa2603f(0x162)](_0xa2603f(0x17a)),typeof window['amily2Updater']!==_0xa2603f(0x1e0)?setTimeout(()=>{const _0x315126=_0xa2603f;console[_0x315126(0x162)]('[Amily2号-版本系统]\x20正在启动版本检测器...'),window[_0x315126(0x1e6)]['initialize']();},0x7d0):console['warn'](_0xa2603f(0x21c)),handleUpdateCheck(),handleMessageBoard(),initializeOnlineTracker(),setTimeout(()=>{initializeSuperMemory();},0xbb8),initializeRenderer(),extension_settings[extensionName][_0xa2603f(0x1f1)]&&startContinuousRendering(),setTimeout(()=>{const _0x2360f3=_0xa2603f;try{loadAndApplyStyles();const _0x1f209b=document[_0x2360f3(0x16d)](_0x2360f3(0x13d)),_0xecb29b=document[_0x2360f3(0x16d)](_0x2360f3(0x194)),_0x50eb52=document[_0x2360f3(0x16d)](_0x2360f3(0x19c));if(_0x1f209b)_0x1f209b['addEventListener'](_0x2360f3(0x17d),importStyles);if(_0xecb29b)_0xecb29b[_0x2360f3(0x148)](_0x2360f3(0x17d),exportStyles);if(_0x50eb52)_0x50eb52[_0x2360f3(0x148)](_0x2360f3(0x17d),resetToDefaultStyles);log('【凤凰阁】内联主题系统已通过延迟加载成功初始化并绑定事件。',_0x2360f3(0x1d7));}catch(_0x24ccd1){log('【凤凰阁】内联主题系统初始化失败:\x20'+_0x24ccd1,'error');}},0x1f4);}catch(_0x941797){console['error'](_0xa2603f(0x1a2),_0x941797);}}else _0x1654cf++,_0x1654cf>=_0x247b11&&(clearInterval(_0x1c7d77),console[_0xa2603f(0x1ab)](_0xa2603f(0x127)+_0x731071+'\x20超时。'));},_0x19de4b);});function initializeOnlineTracker(){const _0x1c8cc6='wss://amilyservice.amily49.cc';let _0x110c19,_0x348fc3;function _0x5bc827(){const _0x529a66=_0x10c0,_0x453723=$(_0x529a66(0x1aa));if(_0x453723['length']===0x0||!_0x453723['data']('initialized')){setTimeout(_0x5bc827,0x3e8);return;}if($('#amily2-online-tracker')[_0x529a66(0x1b0)]>0x0)return;const _0x1f13c0=$(_0x529a66(0x142));_0x1f13c0[_0x529a66(0x1ae)](_0x529a66(0x17c)),_0x453723[_0x529a66(0x1ea)](_0x1f13c0),_0x25eb79();}function _0x25eb79(){const _0x271548=_0x10c0;try{_0x110c19=new WebSocket(_0x1c8cc6),_0x110c19[_0x271548(0x141)]=()=>{const _0x4e0d57=_0x271548;console[_0x4e0d57(0x162)]('[Amily2-在线统计]\x20已连接到服务器'),_0x348fc3&&(clearInterval(_0x348fc3),_0x348fc3=null);},_0x110c19[_0x271548(0x218)]=_0x24ed37=>{const _0x8f8cf4=_0x271548;try{const _0x4aa984=JSON['parse'](_0x24ed37['data']);_0x4aa984['type']==='online_count'&&$('#amily2-online-count')[_0x8f8cf4(0x1c5)](_0x4aa984[_0x8f8cf4(0x176)]+_0x8f8cf4(0x15a));}catch(_0x22f9eb){console[_0x8f8cf4(0x1ab)](_0x8f8cf4(0x21f),_0x22f9eb);}},_0x110c19[_0x271548(0x182)]=()=>{const _0x42772a=_0x271548;console[_0x42772a(0x162)](_0x42772a(0x1d0)),$(_0x42772a(0x1be))['text']('离线'),!_0x348fc3&&(_0x348fc3=setInterval(_0x25eb79,0x1388));},_0x110c19['onerror']=_0x1bcc72=>{const _0x4f0e9e=_0x271548;console[_0x4f0e9e(0x188)](_0x4f0e9e(0x1af),_0x1bcc72),_0x110c19['close']();};}catch(_0xfb9572){console[_0x271548(0x1ab)](_0x271548(0x185),_0xfb9572);}}_0x5bc827();} From 0d3b62a7d3fc88638da1c3ec08af997bfd926fa9 Mon Sep 17 00:00:00 2001 From: Wx-2025 <351320169@qq.com> Date: Sun, 30 Nov 2025 23:11:16 +0800 Subject: [PATCH 35/56] Update Memorisation-forms.html --- assets/Memorisation-forms.html | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/assets/Memorisation-forms.html b/assets/Memorisation-forms.html index 08fdb49..952bda6 100644 --- a/assets/Memorisation-forms.html +++ b/assets/Memorisation-forms.html @@ -15,7 +15,7 @@ flex: 1; display: flex; flex-direction: column; - min-width: 0; + min-width: 0; /* Prevents flex items from overflowing */ } .scrollable-container { @@ -152,6 +152,7 @@