Files
LittleWhiteBox/modules/script-assistant.js
2025-12-21 01:47:38 +08:00

105 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 };