import { CliError } from './errors.mjs'; export const USAGE_USAGE = 'mosaic usage [--business ID] [--json] [--tester]'; export async function usageCommand(args, io, callFor) { const parsed = { flags: new Set(), values: {} }; for (let i = 0; i < args.length; i++) { const arg = args[i]; if ((arg === '--json' || arg === '--tester') && !parsed.flags.has(arg)) parsed.flags.add(arg); else if (arg === '--business' && args[i + 1] && !args[i + 1].startsWith('--') && !parsed.values[arg]) parsed.values[arg] = args[++i]; else throw new CliError(USAGE_USAGE, 4); } const result = await callFor(parsed)('usage', {}); if (parsed.flags.has('--json')) { io.stdout.write(JSON.stringify(result, null, 2) + '\n'); return; } const counts = row => `input=${row.input} output=${row.output} cacheWrite=${row.cacheWrite} cacheRead=${row.cacheRead} unknown=${row.unknownTurns}`; const lines = [`Total: ${counts(result.total)}`]; for (const group of ['byRun', 'byInstance', 'byModel', 'byProvider', 'byAccount']) { for (const row of result[group]) { const name = ['run', 'instance', 'provider', 'model', 'account'].filter(key => key in row) .map(key => row[key] ?? '(unassigned)').join(' / '); lines.push(`${group} ${name}: ${counts(row)}`); } } io.stdout.write(lines.join('\n') + '\n'); }