diff --git a/public/js/conversations.js b/public/js/conversations.js index 7a1ca5b..ea6b50e 100644 --- a/public/js/conversations.js +++ b/public/js/conversations.js @@ -1012,6 +1012,7 @@ export async function openConversation(id) { state.setCurrentConversationId(id); state.deleteUnread(id); + state.resetCompressionPromptShown(); // Reset for fresh check in this conversation // Clear any text from previous conversation if (messageInput) messageInput.value = ''; setLoading(chatView, true); diff --git a/public/js/render.js b/public/js/render.js index 51cfea5..a8b716c 100644 --- a/public/js/render.js +++ b/public/js/render.js @@ -446,10 +446,12 @@ export function finalizeMessage(data) { // Import dynamically to avoid circular dependency import('./ui.js').then(ui => { // Calculate cumulative tokens from all messages (since we resume sessions) - const { inputTokens, outputTokens } = ui.calculateCumulativeTokens(state.getAllMessages()); + const allMessages = state.getAllMessages(); + const { inputTokens, outputTokens } = ui.calculateCumulativeTokens(allMessages); ui.updateContextBar(inputTokens, outputTokens, state.getCurrentModel()); // Check if context is near limit (85%) and show compression prompt + // But don't show if conversation was already compressed recently const models = state.getModels(); const modelId = state.getCurrentModel(); const model = models.find(m => m.id === modelId); @@ -457,7 +459,18 @@ export function finalizeMessage(data) { const totalTokens = inputTokens + outputTokens; const pct = (totalTokens / contextLimit) * 100; - if (pct >= 85 && !state.getCompressionPromptShown()) { + // Check if conversation has been compressed + const hasCompression = allMessages.some(m => m.compressionMeta); + + // Only show compression prompt if: + // 1. At 85%+ context + // 2. Haven't shown the prompt this session + // 3. Either never compressed OR at 95%+ (need to compress again urgently) + const shouldPrompt = pct >= 85 && + !state.getCompressionPromptShown() && + (!hasCompression || pct >= 95); + + if (shouldPrompt) { ui.showCompressionPrompt(pct, totalTokens, contextLimit); } }); diff --git a/public/sw.js b/public/sw.js index 3ae385e..ed95f48 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1,4 +1,4 @@ -const CACHE_NAME = 'concierge-v126'; +const CACHE_NAME = 'concierge-v127'; const STATIC_ASSETS = [ '/', '/index.html',