From e9317595b6779e3380d7c310775af00960b8f218 Mon Sep 17 00:00:00 2001 From: Subarashimo Date: Fri, 5 Dec 2025 19:52:25 +0100 Subject: [PATCH] fix: string format skills --- src/systems/generation/apiClient.js | 3 ++- src/systems/generation/injector.js | 3 ++- src/systems/generation/parser.js | 6 ++++++ src/systems/generation/promptBuilder.js | 20 +++++++++++++++++++- src/systems/rendering/userStats.js | 4 ++-- src/types/trackerData.js | 4 ++-- 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/systems/generation/apiClient.js b/src/systems/generation/apiClient.js index a1e919d..d4bd8a8 100644 --- a/src/systems/generation/apiClient.js +++ b/src/systems/generation/apiClient.js @@ -10,7 +10,8 @@ import { lastGeneratedData, committedTrackerData, isGenerating, - setIsGenerating + setIsGenerating, + setLastActionWasSwipe } from '../../core/state.js'; import { saveChatData } from '../../core/persistence.js'; import { generateSeparateUpdatePrompt } from './promptBuilder.js'; diff --git a/src/systems/generation/injector.js b/src/systems/generation/injector.js index ad0b651..11d71dd 100644 --- a/src/systems/generation/injector.js +++ b/src/systems/generation/injector.js @@ -9,7 +9,8 @@ import { extensionSettings, committedTrackerData, lastGeneratedData, - isGenerating + isGenerating, + lastActionWasSwipe } from '../../core/state.js'; import { evaluateSuppression } from './suppression.js'; import { parseUserStats } from './parser.js'; diff --git a/src/systems/generation/parser.js b/src/systems/generation/parser.js index 10d7968..9898151 100644 --- a/src/systems/generation/parser.js +++ b/src/systems/generation/parser.js @@ -279,6 +279,12 @@ export function parseJSONTrackerData(jsonData) { debugLog('[RPG Parser] Status fields (filtered):', filteredValues); } } + + // Parse skills (string) + if (jsonData.skills && typeof jsonData.skills === 'string') { + extensionSettings.userStats.skills = jsonData.skills; + debugLog('[RPG Parser] Skills (string format) extracted from status:', jsonData.skills); + } // Parse infoBox - normalize values and filter out null if (jsonData.infoBox) { diff --git a/src/systems/generation/promptBuilder.js b/src/systems/generation/promptBuilder.js index 3a01195..92a8f5f 100644 --- a/src/systems/generation/promptBuilder.js +++ b/src/systems/generation/promptBuilder.js @@ -246,6 +246,12 @@ export function generateJSONTrackerInstructions(includeHtmlPrompt = true, includ statusJson += '\n }'; sections.push(statusJson); } + + // Skills section + const skillsSectionEnabled = trackerConfig?.userStats?.skillsSection?.enabled || false; + if (skillsSectionEnabled && !extensionSettings.showSkills) { + sections.push(` "skills": "Skill1, Skill2, Skill3"`); + } } // Attributes section (if RPG attributes are enabled and should be included) @@ -536,6 +542,12 @@ export function generateContextualSummary() { currentState.status.fields[field] = extensionSettings.userStats.conditions || 'None'; } } + + // Skills section + const skillsSectionEnabled = trackerConfig?.userStats?.skillsSection?.enabled || false; + if (skillsSectionEnabled && !extensionSettings.showSkills) { + currentState.skills = extensionSettings.userStats?.skills || 'None'; + } } // InfoBox @@ -676,6 +688,7 @@ export function generateContextualSummary() { * @returns {string} Full prompt text for separate tracker generation */ export function generateRPGPromptText() { + const trackerConfig = extensionSettings.trackerConfig; let promptText = ''; promptText += `Here are the previous trackers in JSON format that you should consider when responding:\n`; @@ -706,6 +719,12 @@ export function generateRPGPromptText() { previousState.status.fields[field] = extensionSettings.userStats.conditions || 'None'; } } + + // Skills + const skillsSectionEnabled = trackerConfig?.userStats?.skillsSection?.enabled || false; + if (skillsSectionEnabled && !extensionSettings.showSkills) { + previousState.skills = extensionSettings.userStats.skills; + } } // InfoBox @@ -759,7 +778,6 @@ export function generateRPGPromptText() { } // Attributes and level (if RPG attributes are enabled and should be included) - const trackerConfig = extensionSettings.trackerConfig; const showRPGAttributes = trackerConfig?.userStats?.showRPGAttributes; const alwaysSendAttributes = trackerConfig?.userStats?.alwaysSendAttributes; const shouldSendAttributes = alwaysSendAttributes || extensionSettings.lastDiceRoll; diff --git a/src/systems/rendering/userStats.js b/src/systems/rendering/userStats.js index d0ed946..5fe8a41 100644 --- a/src/systems/rendering/userStats.js +++ b/src/systems/rendering/userStats.js @@ -62,8 +62,8 @@ export function buildUserStatsText() { } // Add skills if enabled AND not shown in separate tab - if (config.skillsSection.enabled && stats.skills && !extensionSettings.showSkills) { - text += `\n${config.skillsSection.label}: ${stats.skills}`; + if (config.skillsSection.enabled && !extensionSettings.showSkills) { + text += `\n${config.skillsSection.label}: ${extensionSettings.userStats?.skills || 'None'}`; } return text.trim(); diff --git a/src/types/trackerData.js b/src/types/trackerData.js index 06981c5..d471ec7 100644 --- a/src/types/trackerData.js +++ b/src/types/trackerData.js @@ -301,8 +301,8 @@ export function validateTrackerData(data) { } // Validate skills structure if present - if (data.skills && typeof data.skills !== 'object') { - errors.push('skills must be an object'); + if (data.skills && typeof data.skills !== 'object' && typeof data.skills !== 'string') { + errors.push('skills must be an object or a string'); } // Validate quests structure if present