/** * TaskQueue Stream Definition * * Manages global task queue state for concurrency control. * Tracks running tasks count and queued task list. * * @see Requirements 10.1, 10.4 */ import { defineStream } from '@motia/core' import { z } from 'zod' // Maximum concurrent tasks export const MAX_CONCURRENT = 4 // Task queue state schema export const TaskQueueStateSchema = z.object({ runningCount: z.number().min(0).max(MAX_CONCURRENT), maxConcurrent: z.number().default(MAX_CONCURRENT), queue: z.array(z.string()), // sessionId list in FIFO order }) export type TaskQueueState = z.infer /** * Create initial queue state */ export function createInitialQueueState(): TaskQueueState { return { runningCount: 0, maxConcurrent: MAX_CONCURRENT, queue: [], } } /** * Check if a new task can run immediately */ export function canRunImmediately(state: TaskQueueState): boolean { return state.runningCount < state.maxConcurrent } /** * Get queue position for a session (1-based, null if not in queue) */ export function getQueuePosition( state: TaskQueueState, sessionId: string ): number | null { const index = state.queue.indexOf(sessionId) return index === -1 ? null : index + 1 } // Define the taskQueue stream (global, single instance) export const taskQueueStream = defineStream({ name: 'taskQueue', schema: TaskQueueStateSchema, persistence: { enabled: true, }, })