2025-12-21 01:47:38 +08:00
|
|
|
|
import { extension_settings, getContext } from "../../../../extensions.js";
|
|
|
|
|
|
import { saveSettingsDebounced, setExtensionPrompt, extension_prompt_types } from "../../../../../script.js";
|
|
|
|
|
|
import { EXT_ID, extensionFolderPath } from "../core/constants.js";
|
|
|
|
|
|
import { createModuleEvents, event_types } from "../core/event-manager.js";
|
|
|
|
|
|
|
|
|
|
|
|
const SCRIPT_MODULE_NAME = "xiaobaix-script";
|
|
|
|
|
|
const events = createModuleEvents('scriptAssistant');
|
|
|
|
|
|
|
|
|
|
|
|
function initScriptAssistant() {
|
|
|
|
|
|
if (!extension_settings[EXT_ID].scriptAssistant) {
|
|
|
|
|
|
extension_settings[EXT_ID].scriptAssistant = { enabled: false };
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (window['registerModuleCleanup']) {
|
|
|
|
|
|
window['registerModuleCleanup']('scriptAssistant', cleanup);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$('#xiaobaix_script_assistant').on('change', function() {
|
|
|
|
|
|
let globalEnabled = true;
|
|
|
|
|
|
try { if ('isXiaobaixEnabled' in window) globalEnabled = Boolean(window['isXiaobaixEnabled']); } catch {}
|
|
|
|
|
|
if (!globalEnabled) return;
|
|
|
|
|
|
|
|
|
|
|
|
const enabled = $(this).prop('checked');
|
|
|
|
|
|
extension_settings[EXT_ID].scriptAssistant.enabled = enabled;
|
|
|
|
|
|
saveSettingsDebounced();
|
|
|
|
|
|
|
|
|
|
|
|
if (enabled) {
|
|
|
|
|
|
if (typeof window['injectScriptDocs'] === 'function') window['injectScriptDocs']();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
if (typeof window['removeScriptDocs'] === 'function') window['removeScriptDocs']();
|
|
|
|
|
|
cleanup();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
$('#xiaobaix_script_assistant').prop('checked', extension_settings[EXT_ID].scriptAssistant.enabled);
|
|
|
|
|
|
|
|
|
|
|
|
setupEventListeners();
|
|
|
|
|
|
|
|
|
|
|
|
if (extension_settings[EXT_ID].scriptAssistant.enabled) {
|
|
|
|
|
|
setTimeout(() => { if (typeof window['injectScriptDocs'] === 'function') window['injectScriptDocs'](); }, 1000);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function setupEventListeners() {
|
|
|
|
|
|
events.on(event_types.CHAT_CHANGED, () => setTimeout(checkAndInjectDocs, 500));
|
|
|
|
|
|
events.on(event_types.MESSAGE_RECEIVED, checkAndInjectDocs);
|
|
|
|
|
|
events.on(event_types.USER_MESSAGE_RENDERED, checkAndInjectDocs);
|
|
|
|
|
|
events.on(event_types.SETTINGS_LOADED_AFTER, () => setTimeout(checkAndInjectDocs, 1000));
|
|
|
|
|
|
events.on(event_types.APP_READY, () => setTimeout(checkAndInjectDocs, 1500));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function cleanup() {
|
|
|
|
|
|
events.cleanup();
|
|
|
|
|
|
if (typeof window['removeScriptDocs'] === 'function') window['removeScriptDocs']();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function checkAndInjectDocs() {
|
|
|
|
|
|
const globalEnabled = window.isXiaobaixEnabled !== undefined ? window.isXiaobaixEnabled : extension_settings[EXT_ID].enabled;
|
|
|
|
|
|
if (globalEnabled && extension_settings[EXT_ID].scriptAssistant?.enabled) {
|
|
|
|
|
|
injectScriptDocs();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
removeScriptDocs();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function injectScriptDocs() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
let docsContent = '';
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
const response = await fetch(`${extensionFolderPath}/docs/script-docs.md`);
|
|
|
|
|
|
if (response.ok) {
|
|
|
|
|
|
docsContent = await response.text();
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
docsContent = "无法加载script-docs.md文件";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const formattedPrompt = `
|
|
|
|
|
|
【小白X插件 - 写卡助手】
|
|
|
|
|
|
你是小白X插件的内置助手,专门帮助用户创建STscript脚本和交互式界面的角色卡。
|
|
|
|
|
|
以下是小白x功能和SillyTavern的官方STscript脚本文档,可结合小白X功能创作与SillyTavern深度交互的角色卡:
|
|
|
|
|
|
${docsContent}
|
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
setExtensionPrompt(
|
|
|
|
|
|
SCRIPT_MODULE_NAME,
|
|
|
|
|
|
formattedPrompt,
|
|
|
|
|
|
extension_prompt_types.IN_PROMPT,
|
|
|
|
|
|
2,
|
|
|
|
|
|
false,
|
|
|
|
|
|
0
|
|
|
|
|
|
);
|
|
|
|
|
|
} catch (error) {}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function removeScriptDocs() {
|
|
|
|
|
|
setExtensionPrompt(SCRIPT_MODULE_NAME, '', extension_prompt_types.IN_PROMPT, 2, false, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
window.injectScriptDocs = injectScriptDocs;
|
|
|
|
|
|
window.removeScriptDocs = removeScriptDocs;
|
|
|
|
|
|
|
|
|
|
|
|
export { initScriptAssistant };
|