import { TaskStatus } from './task-state.js'; /** * SEP-1686 wire states — the 7 status values visible to MCP clients. * Spec reference: §4.2 */ export type WireState = | 'submitted' | 'working' | 'input_required' | 'completed' | 'failed' | 'cancelled' | 'unknown'; /** * Maps an internal 10-state TaskStatus to a SEP-1686 wire state. * * Uses an exhaustive switch (no default) so TypeScript raises a compile error * if a new TaskStatus variant is added without updating this mapping. */ export function mapToWireState(status: TaskStatus): WireState { switch (status) { case TaskStatus.WAITING: return 'submitted'; case TaskStatus.PENDING: return 'submitted'; case TaskStatus.RUNNING: return 'working'; case TaskStatus.RATE_LIMITED: return 'working'; case TaskStatus.WAITING_ANSWER: return 'input_required'; case TaskStatus.COMPLETED: return 'completed'; case TaskStatus.FAILED: return 'failed'; case TaskStatus.TIMED_OUT: return 'failed'; case TaskStatus.CANCELLED: return 'cancelled'; case TaskStatus.UNKNOWN: return 'unknown'; } } /** * Maps an internal 10-state TaskStatus to a short bracketed display badge * for resource renders and UI. * * Uses an exhaustive switch (no default) so TypeScript raises a compile error * if a new TaskStatus variant is added without updating this mapping. */ export function mapToDisplay(status: TaskStatus): string { switch (status) { case TaskStatus.WAITING: return '[wait]'; case TaskStatus.PENDING: return '[wait]'; case TaskStatus.RUNNING: return '[busy]'; case TaskStatus.RATE_LIMITED: return '[rate]'; case TaskStatus.WAITING_ANSWER: return '[input]'; case TaskStatus.COMPLETED: return '[done]'; case TaskStatus.FAILED: return '[fail]'; case TaskStatus.TIMED_OUT: return '[time]'; case TaskStatus.CANCELLED: return '[cncl]'; case TaskStatus.UNKNOWN: return '[???]'; } }