import { extension_settings, getContext } from "/scripts/extensions.js"; import { characters } from "/script.js"; import { world_names } from "/scripts/world-info.js"; import { extensionName } from "../utils/settings.js"; import { extractContentByTag, replaceContentByTag, extractFullTagBlock } from '../utils/tagProcessor.js'; import { getCombinedWorldbookContent, findLatestSummaryLore, DEDICATED_LOREBOOK_NAME, getChatIdentifier, } from "./lore.js"; import { compatibleTriggerSlash } from "./tavernhelper-compatibility.js"; import { isGoogleEndpoint, convertToGoogleRequest, parseGoogleResponse, buildGoogleApiUrl } from '../core/utils/googleAdapter.js'; import { intelligentPoll, createGooglePollingTask, progressTracker } from '../core/utils/pollingManager.js'; import { buildGoogleEmbeddingRequest, parseGoogleEmbeddingResponse, buildGoogleEmbeddingApiUrl } from './utils/googleAdapter.js'; import { getRequestHeaders } from '/script.js'; let ChatCompletionService = undefined; try { const module = await import('/scripts/custom-request.js'); ChatCompletionService = module.ChatCompletionService; console.log('[Amily2号-外交部] 已成功召唤“皇家信使”(ChatCompletionService)。'); } catch (e) { console.warn("[Amily2号-外交部] 未能召唤“皇家信使”,部分高级功能(如Claw代理)将受限。请考虑更新SillyTavern版本。", e); } 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"; export async function fetchMessageBoardContent() { if (!MESSAGE_BOARD_URL) { console.log('[Amily2号-内务府] 任务取消:陛下尚未配置留言板URL。'); return null; } try { const response = await fetch(MESSAGE_BOARD_URL, { cache: 'no-store' }); if (!response.ok) { throw new Error(`服务器响应异常: ${response.status}`); } const data = await response.json(); return data; } catch (error) { console.error('[Amily2号-内务府] 获取留言板内容失败:', error); return null; } } export async function checkForUpdates() { if (!UPDATE_CHECK_URL || UPDATE_CHECK_URL.includes('YourUsername')) { console.log('[Amily2号-外交部] 任务取消:陛下尚未配置情报来源URL。'); return null; } try { console.log('[Amily2号-外交部] 已派遣使者前往云端获取最新情报...'); const response = await fetch(UPDATE_CHECK_URL, { method: 'GET', cache: 'no-store', mode: 'cors' }); if (!response.ok) { throw new Error(`远方服务器响应异常,状态: ${response.status}`); } const data = await response.json(); console.log('[Amily2号-外交部] 情报已成功获取并解析。'); return data; } catch (error) { console.error('[Amily2号-外交部] 紧急军情:外交任务失败!', error); return null; } } function normalizeApiResponse(responseData) { let data = responseData; if (typeof data === 'string') { try { data = JSON.parse(data); } catch (e) { console.error(`[${extensionName}] API响应JSON解析失败:`, e); return { error: { message: 'Invalid JSON response' } }; } } if (data && typeof data.data === 'object' && data.data !== null && !Array.isArray(data.data)) { if (Object.hasOwn(data.data, 'data')) { data = data.data; } } if (data && data.choices && data.choices[0]) { return { content: data.choices[0].message?.content?.trim() }; } if (data && data.content) { return { content: data.content.trim() }; } if (data && data.data) { return { data: data.data }; } if (data && data.error) { return { error: data.error }; } return data; } export async function fetchModels() { if (window.AMILY2_LOCK_MODEL_FETCHING) { console.warn("[Amily2号-使节团] 上次任务尚未完成,本次任务取消。"); toastr.info("上次任务尚未完成,请稍后再试。", "任务排队中"); return []; } window.AMILY2_LOCK_MODEL_FETCHING = true; try { const apiProvider = $("#amily2_api_provider").val() || 'openai'; const apiUrl = $("#amily2_api_url").val().trim(); const apiKey = $("#amily2_api_key").val().trim(); const $button = $("#amily2_refresh_models"); const $selector = $("#amily2_model"); console.log(`[Amily2号-使节团] 使用 API 提供商: ${apiProvider}`); $button.prop("disabled", true).html(' 加载中'); $selector.empty().append($('