fix(ai-context): sync manual edits to committed tracker data
Fixes critical issue where manual edits (add location, add item, change stats, etc.) were invisible to AI in next generation, causing edits to be immediately overwritten. Root Cause: - Manual edits updated extensionSettings and lastGeneratedData - AI prompt builder used committedTrackerData (NOT extensionSettings) - Manual edits were never synced to committedTrackerData - Result: AI didn't see manual changes, overwrote them Solution - Sync to Both Data Stores: All manual edit points now update BOTH: 1. lastGeneratedData (for display) 2. committedTrackerData (for AI context) Files Modified: 1. **src/systems/interaction/inventoryActions.js** - updateLastGeneratedDataInventory() now sets committedTrackerData.userStats - Affects: add/remove items, add/remove locations 2. **src/systems/rendering/userStats.js** - All 3 edit handlers now set committedTrackerData.userStats - Affects: stat values (health, etc.), mood emoji, conditions - Also fixed: now uses buildInventorySummary() for proper v2 format 3. **src/systems/rendering/infoBox.js** - updateInfoBoxField() now sets committedTrackerData.infoBox - Affects: date, weather, temperature, time, location 4. **src/systems/rendering/thoughts.js** - updateCharacterField() now sets committedTrackerData.characterThoughts - Affects: character emoji, name, traits, thoughts, relationship Impact - Manual Edits Now Persist: Before: - Add location "Home" → Next generation → Location gone ❌ - Add item "Sword" → Next generation → Item gone ❌ - Change health to 25% → AI ignores it ❌ After: - Add location "Home" → Next generation → Location persists ✓ - Add item "Sword" → Next generation → Item included ✓ - Change health to 25% → AI acknowledges low health ✓ Works in Both Modes: - Together mode: AI sees manual edits in injected prompt ✓ - Separate mode: AI sees manual edits in context ✓ User Experience: - "I edited it, so it should stay" - now works as expected - AI builds on manual changes instead of overwriting them - Minimal overhead (just string copies) Fixes: Manual inventory/stats edits being overwritten by AI generation
This commit is contained in:
@@ -8,6 +8,7 @@ import { user_avatar } from '../../../../../../../script.js';
|
||||
import {
|
||||
extensionSettings,
|
||||
lastGeneratedData,
|
||||
committedTrackerData,
|
||||
$userStatsContainer,
|
||||
FALLBACK_AVATAR_DATA_URI
|
||||
} from '../../core/state.js';
|
||||
@@ -17,6 +18,7 @@ import {
|
||||
updateMessageSwipeData
|
||||
} from '../../core/persistence.js';
|
||||
import { getSafeThumbnailUrl } from '../../utils/avatars.js';
|
||||
import { buildInventorySummary } from '../generation/promptBuilder.js';
|
||||
|
||||
/**
|
||||
* Renders the user stats panel with health bars, mood, inventory, and classic stats.
|
||||
@@ -178,13 +180,15 @@ export function renderUserStats() {
|
||||
// Update the setting
|
||||
extensionSettings.userStats[field] = value;
|
||||
|
||||
// Also update lastGeneratedData to keep it in sync
|
||||
if (!lastGeneratedData.userStats) {
|
||||
lastGeneratedData.userStats = '';
|
||||
}
|
||||
// Regenerate the userStats text with updated value
|
||||
const statsText = `Health: ${extensionSettings.userStats.health}%\nSatiety: ${extensionSettings.userStats.satiety}%\nEnergy: ${extensionSettings.userStats.energy}%\nHygiene: ${extensionSettings.userStats.hygiene}%\nArousal: ${extensionSettings.userStats.arousal}%\n${extensionSettings.userStats.mood}: ${extensionSettings.userStats.conditions}\nInventory: ${extensionSettings.userStats.inventory}`;
|
||||
// Rebuild userStats text with proper inventory format
|
||||
const stats = extensionSettings.userStats;
|
||||
const inventorySummary = buildInventorySummary(stats.inventory);
|
||||
const statsText = `Health: ${stats.health}%\nSatiety: ${stats.satiety}%\nEnergy: ${stats.energy}%\nHygiene: ${stats.hygiene}%\nArousal: ${stats.arousal}%\n${stats.mood}: ${stats.conditions}\n${inventorySummary}`;
|
||||
|
||||
// Update BOTH lastGeneratedData AND committedTrackerData
|
||||
// This makes manual edits immediately visible to AI
|
||||
lastGeneratedData.userStats = statsText;
|
||||
committedTrackerData.userStats = statsText;
|
||||
|
||||
saveSettings();
|
||||
saveChatData();
|
||||
@@ -199,9 +203,15 @@ export function renderUserStats() {
|
||||
const value = $(this).text().trim();
|
||||
extensionSettings.userStats.mood = value || '😐';
|
||||
|
||||
// Update lastGeneratedData
|
||||
const statsText = `Health: ${extensionSettings.userStats.health}%\nSatiety: ${extensionSettings.userStats.satiety}%\nEnergy: ${extensionSettings.userStats.energy}%\nHygiene: ${extensionSettings.userStats.hygiene}%\nArousal: ${extensionSettings.userStats.arousal}%\n${extensionSettings.userStats.mood}: ${extensionSettings.userStats.conditions}\nInventory: ${extensionSettings.userStats.inventory}`;
|
||||
// Rebuild userStats text with proper inventory format
|
||||
const stats = extensionSettings.userStats;
|
||||
const inventorySummary = buildInventorySummary(stats.inventory);
|
||||
const statsText = `Health: ${stats.health}%\nSatiety: ${stats.satiety}%\nEnergy: ${stats.energy}%\nHygiene: ${stats.hygiene}%\nArousal: ${stats.arousal}%\n${stats.mood}: ${stats.conditions}\n${inventorySummary}`;
|
||||
|
||||
// Update BOTH lastGeneratedData AND committedTrackerData
|
||||
// This makes manual edits immediately visible to AI
|
||||
lastGeneratedData.userStats = statsText;
|
||||
committedTrackerData.userStats = statsText;
|
||||
|
||||
saveSettings();
|
||||
saveChatData();
|
||||
@@ -212,9 +222,15 @@ export function renderUserStats() {
|
||||
const value = $(this).text().trim();
|
||||
extensionSettings.userStats.conditions = value || 'None';
|
||||
|
||||
// Update lastGeneratedData
|
||||
const statsText = `Health: ${extensionSettings.userStats.health}%\nSatiety: ${extensionSettings.userStats.satiety}%\nEnergy: ${extensionSettings.userStats.energy}%\nHygiene: ${extensionSettings.userStats.hygiene}%\nArousal: ${extensionSettings.userStats.arousal}%\n${extensionSettings.userStats.mood}: ${extensionSettings.userStats.conditions}\nInventory: ${extensionSettings.userStats.inventory}`;
|
||||
// Rebuild userStats text with proper inventory format
|
||||
const stats = extensionSettings.userStats;
|
||||
const inventorySummary = buildInventorySummary(stats.inventory);
|
||||
const statsText = `Health: ${stats.health}%\nSatiety: ${stats.satiety}%\nEnergy: ${stats.energy}%\nHygiene: ${stats.hygiene}%\nArousal: ${stats.arousal}%\n${stats.mood}: ${stats.conditions}\n${inventorySummary}`;
|
||||
|
||||
// Update BOTH lastGeneratedData AND committedTrackerData
|
||||
// This makes manual edits immediately visible to AI
|
||||
lastGeneratedData.userStats = statsText;
|
||||
committedTrackerData.userStats = statsText;
|
||||
|
||||
saveSettings();
|
||||
saveChatData();
|
||||
|
||||
Reference in New Issue
Block a user