// Adapted from claudegram's request-queue.ts — per-chat sequential processing const pendingQueues = new Map(); const processingFlags = new Map(); export function isProcessing(sessionKey) { return processingFlags.get(sessionKey) === true; } export function getQueuePosition(sessionKey) { const queue = pendingQueues.get(sessionKey); return queue ? queue.length : 0; } export function clearQueue(sessionKey) { pendingQueues.delete(sessionKey); processingFlags.delete(sessionKey); } export async function queueRequest(sessionKey, message, handler) { return new Promise((resolve, reject) => { const request = { message, handler, resolve, reject }; let queue = pendingQueues.get(sessionKey); if (!queue) { queue = []; pendingQueues.set(sessionKey, queue); } queue.push(request); processQueue(sessionKey); }); } async function processQueue(sessionKey) { if (processingFlags.get(sessionKey)) return; processingFlags.set(sessionKey, true); const queue = pendingQueues.get(sessionKey); while (queue && queue.length > 0) { const request = queue[0]; try { const result = await request.handler(); request.resolve(result); } catch (error) { request.reject(error); } queue.shift(); } processingFlags.delete(sessionKey); pendingQueues.delete(sessionKey); }