diff --git a/agent-queue/dashboard.mjs b/agent-queue/dashboard.mjs index 4ca5ba4..40499f1 100644 --- a/agent-queue/dashboard.mjs +++ b/agent-queue/dashboard.mjs @@ -72,6 +72,18 @@ const parseMeta = (file) => { return out; }; +// Compact per-job insights (read-only from meta; agent-queue.sh is the source of +// truth). Surfaces tokens or cost + attempts + line deltas for finished jobs. +const insightsTag = (m) => { + const parts = []; + if (m.attempts && m.attempts !== '1') parts.push(`x${m.attempts}`); + if (m.cost_usd) parts.push(`$${m.cost_usd}${m.usage_estimated ? '~' : ''}`); + else if (m.tokens_in || m.tokens_out) parts.push(`tok ${m.tokens_in || 0}/${m.tokens_out || 0}`); + if (m.lines_added || m.lines_deleted) parts.push(`+${m.lines_added || 0}/-${m.lines_deleted || 0}`); + if (m.duration_s) parts.push(`${m.duration_s}s`); + return parts.join(' '); +}; + const pidAlive = (pid) => { if (!pid) return false; try { process.kill(Number(pid), 0); return true; } catch { return false; } @@ -307,7 +319,9 @@ function drawBoard() { } else { for (const m of recent) { const res = m.result || ''; - const failedRes = res === 'failed' || res === 'timeout' || res === 'verify_failed' || res === 'rejected'; + const failedRes = res === 'failed' || res === 'timeout' || res === 'verify_failed' || + res === 'rejected' || res === 'retries_exhausted' || res === 'capability_mismatch' || + res === 'no_engine'; const mark = failedRes ? c('red', '✕') : c('green', '▣'); const when = m.ended ? new Date(Number(m.ended) * 1000).toLocaleTimeString() : ''; let label; @@ -317,12 +331,13 @@ function drawBoard() { else if (res === 'verify_failed') label = c('red', 'verify failed'); else if (res === 'timeout') label = c('red', 'timeout'); else if (res === 'rejected') label = c('red', 'rejected'); + else if (res === 'retries_exhausted') label = c('red', 'retries exhausted'); else if (res === 'failed') label = c('red', 'failed rc=' + (m.exit || '?')); else label = c('gray', res || '?'); out.push( ` ${mark} ${trunc(m.job || '?', 34).padEnd(34)} ` + `${c('gray', (m.engine || '').padEnd(7))} ` + - `${label} ${c('gray', when)}` + `${label} ${c('gray', when)} ${c('cyan', insightsTag(m))}` ); } }