// tools/secretary-enqueue.mjs // Чистый решатель: какие спаны поставить в очередь воркера на этом проходе хука. Курсор — обработанный // воркером индекс. closing → добить последний открытый спан. Дедуп по index — на стороне очереди. import { computeSpans, spansToDistill } from './secretary-span.mjs'; export function spansToEnqueue({ rawBounds, lastTurn, cursor, session, closing = false, note = '' }) { const jobs = spansToDistill(rawBounds, lastTurn, cursor) .map((s) => ({ session, kind: 'span', span: { ...s, note } })); if (closing) { const all = computeSpans(rawBounds, lastTurn).map((s, index) => ({ ...s, index })); const lastOpen = all[all.length - 1]; if (lastOpen && lastOpen.open && lastOpen.index > (Number.isFinite(cursor) ? cursor : -1)) jobs.push({ session, kind: 'span', span: { start: lastOpen.start, end: lastOpen.end, index: lastOpen.index, note } }); } return jobs; }