--- title: Capability Requests --- ```js import {API} from "./components/config.js"; const POLL = 30_000; ``` ```js // Live poll for capability requests const reqState = (async function*() { while (true) { let data = [], ok = false; try { const r = await fetch(`${API}/capability-requests/`); ok = r.ok; data = ok ? await r.json() : []; } catch {} yield {data, ok, ts: new Date()}; await new Promise(res => setTimeout(res, POLL)); } })(); ``` ```js const requests = reqState.data ?? []; const _ok = reqState.ok ?? false; const _ts = reqState.ts; ``` # Capability Requests ```js import {injectTocTop} from "./components/toc-sidebar.js"; import {withDocHelp} from "./components/doc-overlay.js"; const _liveEl = html`
${requests.filter(r => r.status === "requested").length}
${requests.filter(r => ["accepted","in_progress"].includes(r.status)).length}
${requests.filter(r => r.status === "ready_for_review").length}
${completed.length}
No capability requests match the current filters.
`); } else { const ageDays = (r) => ((Date.now() - new Date(r.created_at)) / 86400000).toFixed(0); display(html`No capabilities registered yet. Add ```capability blocks to SCOPE.md files and run make ingest-capabilities-all.