--- title: Agent Inbox --- ```js import {API, POLL} from "./components/config.js"; ``` ```js // Live poll: messages list const inboxState = (async function*() { while (true) { let messages = [], ok = false; try { const resp = await fetch(`${API}/messages/?limit=100`); ok = resp.ok; if (ok) messages = await resp.json(); } catch {} yield {messages, ok, ts: new Date()}; await new Promise(res => setTimeout(res, POLL)); } })(); ``` ```js const messages = inboxState.messages ?? []; const _ok = inboxState.ok ?? false; const _ts = inboxState.ts; const unread = messages.filter(m => !m.read_at && !m.archived_at); const read = messages.filter(m => m.read_at && !m.archived_at); const archived = messages.filter(m => m.archived_at); // Group unread by agent for KPI const agentCounts = {}; for (const m of unread) { agentCounts[m.to_agent] = (agentCounts[m.to_agent] ?? 0) + 1; } const topAgents = Object.entries(agentCounts).sort((a, b) => b[1] - a[1]).slice(0, 4); ``` # Agent Inbox ```js import {injectTocTop} from "./components/toc-sidebar.js"; import {withDocHelp} from "./components/doc-overlay.js"; const _kpiBox = html`
make api`}
${m.body}
No unread messages.
`); } else { display(html`No read messages.
`); } else { display(html`No archived messages.
`); } else { display(html`