v3.1.0: Add parser error detection and recommended models section

This commit is contained in:
Spicy_Marinara
2026-01-07 22:56:26 +01:00
parent dbf5c2d17a
commit a3063aff4f
33 changed files with 599 additions and 459 deletions
+4 -4
View File
@@ -1001,7 +1001,7 @@ export class EncounterModal {
{ clearChatInput: false }
);
console.log(`[RPG Companion] Added combat summary to chat as "${speakerName}"`);
// console.log(`[RPG Companion] Added combat summary to chat as "${speakerName}"`);
// Update combat over screen
this.updateCombatOverScreen(true, speakerName);
@@ -1259,7 +1259,7 @@ export class EncounterModal {
return;
}
console.log('[RPG Companion] Regenerating request:', this.lastRequest.type);
// console.log('[RPG Companion] Regenerating request:', this.lastRequest.type);
if (this.lastRequest.type === 'init') {
// Retry initialization
@@ -1327,7 +1327,7 @@ export class EncounterModal {
return;
}
console.log('[RPG Companion] Regenerating request:', this.lastRequest.type);
// console.log('[RPG Companion] Regenerating request:', this.lastRequest.type);
if (this.lastRequest.type === 'init') {
// Retry initialization
@@ -1369,7 +1369,7 @@ export class EncounterModal {
this.modal.setAttribute('data-weather', weather.toLowerCase());
}
console.log('[RPG Companion] Applied environment styling:', styleNotes);
// console.log('[RPG Companion] Applied environment styling:', styleNotes);
}
/**
+42 -42
View File
@@ -92,12 +92,12 @@ export function updateCollapseToggleIcon() {
const isOpen = $panel.hasClass('rpg-mobile-open');
const isLeftPanel = $panel.hasClass('rpg-position-left');
console.log('[RPG Mobile] updateCollapseToggleIcon:', {
isMobile: true,
isOpen,
isLeftPanel,
settingIcon: isOpen ? (isLeftPanel ? 'chevron-left' : 'chevron-right') : (isLeftPanel ? 'chevron-right' : 'chevron-left')
});
// console.log('[RPG Mobile] updateCollapseToggleIcon:', {
// isMobile: true,
// isOpen,
// isLeftPanel,
// settingIcon: isOpen ? (isLeftPanel ? 'chevron-left' : 'chevron-right') : (isLeftPanel ? 'chevron-right' : 'chevron-left')
// });
if (isLeftPanel) {
if (isOpen) {
@@ -157,44 +157,44 @@ export function setupCollapseToggle() {
// On mobile: button toggles panel open/closed (same as desktop behavior)
if (isMobile) {
const isOpen = $panel.hasClass('rpg-mobile-open');
console.log('[RPG Mobile] Collapse toggle clicked. Current state:', {
isOpen,
panelClasses: $panel.attr('class'),
inlineStyles: $panel.attr('style'),
panelPosition: {
top: $panel.css('top'),
bottom: $panel.css('bottom'),
transform: $panel.css('transform'),
visibility: $panel.css('visibility')
}
});
// console.log('[RPG Mobile] Collapse toggle clicked. Current state:', {
// isOpen,
// panelClasses: $panel.attr('class'),
// inlineStyles: $panel.attr('style'),
// panelPosition: {
// top: $panel.css('top'),
// bottom: $panel.css('bottom'),
// transform: $panel.css('transform'),
// visibility: $panel.css('visibility')
// }
// });
if (isOpen) {
// Close panel with animation
console.log('[RPG Mobile] Closing panel');
// console.log('[RPG Mobile] Closing panel');
closeMobilePanelWithAnimation();
} else {
// Open panel
console.log('[RPG Mobile] Opening panel');
// console.log('[RPG Mobile] Opening panel');
$panel.addClass('rpg-mobile-open');
const $overlay = $('<div class="rpg-mobile-overlay"></div>');
$('body').append($overlay);
// Debug: Check state after animation should complete
setTimeout(() => {
console.log('[RPG Mobile] 500ms after opening:', {
panelClasses: $panel.attr('class'),
hasOpenClass: $panel.hasClass('rpg-mobile-open'),
visibility: $panel.css('visibility'),
transform: $panel.css('transform'),
display: $panel.css('display'),
opacity: $panel.css('opacity')
});
// console.log('[RPG Mobile] 500ms after opening:', {
// panelClasses: $panel.attr('class'),
// hasOpenClass: $panel.hasClass('rpg-mobile-open'),
// visibility: $panel.css('visibility'),
// transform: $panel.css('transform'),
// display: $panel.css('display'),
// opacity: $panel.css('opacity')
// });
}, 500);
// Close when clicking overlay
$overlay.on('click', function() {
console.log('[RPG Mobile] Overlay clicked - closing panel');
// console.log('[RPG Mobile] Overlay clicked - closing panel');
closeMobilePanelWithAnimation();
updateCollapseToggleIcon();
});
@@ -203,20 +203,20 @@ export function setupCollapseToggle() {
// Update icon to reflect new state
updateCollapseToggleIcon();
console.log('[RPG Mobile] After toggle:', {
panelClasses: $panel.attr('class'),
inlineStyles: $panel.attr('style'),
panelPosition: {
top: $panel.css('top'),
bottom: $panel.css('bottom'),
transform: $panel.css('transform'),
visibility: $panel.css('visibility')
},
gameContainer: {
opacity: $('.rpg-game-container').css('opacity'),
visibility: $('.rpg-game-container').css('visibility')
}
});
// console.log('[RPG Mobile] After toggle:', {
// panelClasses: $panel.attr('class'),
// inlineStyles: $panel.attr('style'),
// panelPosition: {
// top: $panel.css('top'),
// bottom: $panel.css('bottom'),
// transform: $panel.css('transform'),
// visibility: $panel.css('visibility')
// },
// gameContainer: {
// opacity: $('.rpg-game-container').css('opacity'),
// visibility: $('.rpg-game-container').css('visibility')
// }
// });
return;
}
+51 -54
View File
@@ -55,13 +55,13 @@ export function setupMobileToggle() {
const $overlay = $('<div class="rpg-mobile-overlay"></div>');
// DIAGNOSTIC: Check if elements exist and log setup state
console.log('[RPG Mobile] ========================================');
console.log('[RPG Mobile] setupMobileToggle called');
console.log('[RPG Mobile] Button exists:', $mobileToggle.length > 0, 'jQuery object:', $mobileToggle);
console.log('[RPG Mobile] Panel exists:', $panel.length > 0);
console.log('[RPG Mobile] Window width:', window.innerWidth);
console.log('[RPG Mobile] Is mobile viewport (<=1000):', window.innerWidth <= 1000);
console.log('[RPG Mobile] ========================================');
// console.log('[RPG Mobile] ========================================');
// console.log('[RPG Mobile] setupMobileToggle called');
// console.log('[RPG Mobile] Button exists:', $mobileToggle.length > 0, 'jQuery object:', $mobileToggle);
// console.log('[RPG Mobile] Panel exists:', $panel.length > 0);
// console.log('[RPG Mobile] Window width:', window.innerWidth);
// console.log('[RPG Mobile] Is mobile viewport (<=1000):', window.innerWidth <= 1000);
// console.log('[RPG Mobile] ========================================');
if ($mobileToggle.length === 0) {
console.error('[RPG Mobile] ERROR: Mobile toggle button not found in DOM!');
@@ -72,7 +72,7 @@ export function setupMobileToggle() {
// Load and apply saved FAB position
if (extensionSettings.mobileFabPosition) {
const pos = extensionSettings.mobileFabPosition;
console.log('[RPG Mobile] Loading saved FAB position:', pos);
// console.log('[RPG Mobile] Loading saved FAB position:', pos);
// Apply saved position
if (pos.top) $mobileToggle.css('top', pos.top);
@@ -250,7 +250,7 @@ export function setupMobileToggle() {
extensionSettings.mobileFabPosition = newPosition;
saveSettings();
console.log('[RPG Mobile] Saved new FAB position (mouse):', newPosition);
// console.log('[RPG Mobile] Saved new FAB position (mouse):', newPosition);
// Constrain to viewport bounds (now that position is saved)
setTimeout(() => constrainFabToViewport(), 10);
@@ -291,7 +291,7 @@ export function setupMobileToggle() {
extensionSettings.mobileFabPosition = newPosition;
saveSettings();
console.log('[RPG Mobile] Saved new FAB position:', newPosition);
// console.log('[RPG Mobile] Saved new FAB position:', newPosition);
// Constrain to viewport bounds (now that position is saved)
setTimeout(() => constrainFabToViewport(), 10);
@@ -304,7 +304,7 @@ export function setupMobileToggle() {
isDragging = false;
} else {
// Was a tap - toggle panel
console.log('[RPG Mobile] Quick tap detected - toggling panel');
// console.log('[RPG Mobile] Quick tap detected - toggling panel');
if ($panel.hasClass('rpg-mobile-open')) {
// Close panel with animation
@@ -327,28 +327,28 @@ export function setupMobileToggle() {
$mobileToggle.on('click', function(e) {
// Skip if we just finished dragging
if ($mobileToggle.data('just-dragged')) {
console.log('[RPG Mobile] Click blocked - just finished dragging');
// console.log('[RPG Mobile] Click blocked - just finished dragging');
return;
}
console.log('[RPG Mobile] >>> CLICK EVENT FIRED <<<', {
windowWidth: window.innerWidth,
isMobileViewport: window.innerWidth <= 1000,
panelOpen: $panel.hasClass('rpg-mobile-open')
});
// console.log('[RPG Mobile] >>> CLICK EVENT FIRED <<<', {
// windowWidth: window.innerWidth,
// isMobileViewport: window.innerWidth <= 1000,
// panelOpen: $panel.hasClass('rpg-mobile-open')
// });
// Work on both mobile and desktop (removed viewport check)
if ($panel.hasClass('rpg-mobile-open')) {
console.log('[RPG Mobile] Click: Closing panel');
// console.log('[RPG Mobile] Click: Closing panel');
closeMobilePanelWithAnimation();
} else {
console.log('[RPG Mobile] Click: Opening panel');
// console.log('[RPG Mobile] Click: Opening panel');
$panel.addClass('rpg-mobile-open');
$('body').append($overlay);
$mobileToggle.addClass('active');
$overlay.on('click', function() {
console.log('[RPG Mobile] Overlay clicked - closing panel');
// console.log('[RPG Mobile] Overlay clicked - closing panel');
closeMobilePanelWithAnimation();
});
}
@@ -367,7 +367,7 @@ export function setupMobileToggle() {
// Transitioning from desktop to mobile - handle immediately for smooth transition
if (!wasMobile && isMobile) {
console.log('[RPG Mobile] Transitioning desktop -> mobile');
// console.log('[RPG Mobile] Transitioning desktop -> mobile');
// Show mobile toggle button
$mobileToggle.show();
@@ -391,16 +391,16 @@ export function setupMobileToggle() {
// Clear any inline styles that might be overriding CSS
$panel.attr('style', '');
console.log('[RPG Mobile] After cleanup:', {
panelClasses: $panel.attr('class'),
inlineStyles: $panel.attr('style'),
panelPosition: {
top: $panel.css('top'),
bottom: $panel.css('bottom'),
transform: $panel.css('transform'),
visibility: $panel.css('visibility')
}
});
// console.log('[RPG Mobile] After cleanup:', {
// panelClasses: $panel.attr('class'),
// inlineStyles: $panel.attr('style'),
// panelPosition: {
// top: $panel.css('top'),
// bottom: $panel.css('bottom'),
// transform: $panel.css('transform'),
// visibility: $panel.css('visibility')
// }
// });
// Set up mobile tabs IMMEDIATELY (no debounce delay)
setupMobileTabs();
@@ -462,17 +462,14 @@ export function setupMobileToggle() {
// Clear any inline styles
$panel.attr('style', '');
console.log('[RPG Mobile] Initial load on mobile viewport:', {
panelClasses: $panel.attr('class'),
inlineStyles: $panel.attr('style'),
panelPosition: {
top: $panel.css('top'),
bottom: $panel.css('top'),
transform: $panel.css('transform'),
visibility: $panel.css('visibility')
}
});
setupMobileTabs();
// console.log('[RPG Mobile] Initial load on mobile viewport:', {
// panelClasses: $panel.attr('class'),
// inlineStyles: $panel.attr('style'),
// panelPosition: {
// top: $panel.css('top'),
// bottom: $panel.css('top'),
// transform: $panel.css('transform'),
// visibility: $panel.css('visibility')\n // }\n // });\n setupMobileTabs();
// Set initial icon for mobile
updateCollapseToggleIcon();
// Show mobile toggle on mobile viewport
@@ -491,7 +488,7 @@ export function setupMobileToggle() {
export function constrainFabToViewport() {
// Only constrain if user has set a custom position
if (!extensionSettings.mobileFabPosition) {
console.log('[RPG Mobile] Skipping viewport constraint - using CSS defaults');
// console.log('[RPG Mobile] Skipping viewport constraint - using CSS defaults');
return;
}
@@ -500,7 +497,7 @@ export function constrainFabToViewport() {
// Skip if button is not visible
if (!$mobileToggle.is(':visible')) {
console.log('[RPG Mobile] Skipping viewport constraint - button not visible');
// console.log('[RPG Mobile] Skipping viewport constraint - button not visible');
return;
}
@@ -530,12 +527,12 @@ export function constrainFabToViewport() {
// Only update if position changed
if (newX !== currentX || newY !== currentY) {
console.log('[RPG Mobile] Constraining FAB to viewport:', {
old: { x: currentX, y: currentY },
new: { x: newX, y: newY },
viewport: { width: window.innerWidth, height: window.innerHeight },
topBarHeight
});
// console.log('[RPG Mobile] Constraining FAB to viewport:', {
// old: { x: currentX, y: currentY },
// new: { x: newX, y: newY },
// viewport: { width: window.innerWidth, height: window.innerHeight },
// topBarHeight
// });
// Apply new position
$mobileToggle.css({
@@ -816,12 +813,12 @@ export function setupRefreshButtonDrag() {
return;
}
console.log('[RPG Mobile] setupRefreshButtonDrag called');
// console.log('[RPG Mobile] setupRefreshButtonDrag called');
// Load and apply saved position
if (extensionSettings.mobileRefreshPosition) {
const pos = extensionSettings.mobileRefreshPosition;
console.log('[RPG Mobile] Loading saved refresh button position:', pos);
// console.log('[RPG Mobile] Loading saved refresh button position:', pos);
// Apply saved position
if (pos.top) $refreshBtn.css('top', pos.top);
@@ -1031,12 +1028,12 @@ export function setupDebugButtonDrag() {
return;
}
console.log('[RPG Mobile] setupDebugButtonDrag called');
// console.log('[RPG Mobile] setupDebugButtonDrag called');
// Load and apply saved position
if (extensionSettings.debugFabPosition) {
const pos = extensionSettings.debugFabPosition;
console.log('[RPG Mobile] Loading saved debug button position:', pos);
// console.log('[RPG Mobile] Loading saved debug button position:', pos);
// Apply saved position
if (pos.top) $debugBtn.css('top', pos.top);
+3 -3
View File
@@ -355,7 +355,7 @@ export function setupSettingsPopup() {
// Clear cache button
$('#rpg-clear-cache').on('click', function() {
console.log('[RPG Companion] Clear Cache button clicked');
// console.log('[RPG Companion] Clear Cache button clicked');
// Clear the data (set to null so panels show "not generated yet")
lastGeneratedData.userStats = null;
@@ -375,7 +375,7 @@ export function setupSettingsPopup() {
const context = getContext();
if (context.chat_metadata && context.chat_metadata.rpg_companion) {
delete context.chat_metadata.rpg_companion;
console.log('[RPG Companion] Cleared chat_metadata.rpg_companion for current chat');
// console.log('[RPG Companion] Cleared chat_metadata.rpg_companion for current chat');
}
// Clear all message swipe data
@@ -495,7 +495,7 @@ export function setupSettingsPopup() {
renderInventory();
renderQuests();
console.log('[RPG Companion] Cache cleared successfully');
// console.log('[RPG Companion] Cache cleared successfully');
});
return settingsModal;
+2 -2
View File
@@ -243,7 +243,7 @@ function exportTrackerPreset() {
document.body.removeChild(link);
URL.revokeObjectURL(url);
console.log('[RPG Companion] Tracker preset exported successfully');
// console.log('[RPG Companion] Tracker preset exported successfully');
toastr.success(i18n.getTranslation('template.trackerEditorModal.messages.exportSuccess') || 'Tracker preset exported successfully!');
} catch (error) {
console.error('[RPG Companion] Error exporting tracker preset:', error);
@@ -292,7 +292,7 @@ function importTrackerPreset() {
// Re-render the editor UI
renderEditorUI();
console.log('[RPG Companion] Tracker preset imported successfully');
// console.log('[RPG Companion] Tracker preset imported successfully');
toastr.success(i18n.getTranslation('template.trackerEditorModal.messages.importSuccess') || 'Tracker preset imported successfully!');
} catch (error) {
console.error('[RPG Companion] Error importing tracker preset:', error);