UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

39 lines (38 loc) • 1.37 kB
export function encodeFrame(json) { const payload = Buffer.from(json, "utf8"); return Buffer.concat([Buffer.from(`Content-Length: ${payload.length}\r\n\r\n`, "ascii"), payload]); } export function createFrameDecoder(maxBytes = 50 * 1024 * 1024) { const HEADER_SLACK = 128; let buf = Buffer.alloc(0); return function decode(chunk) { const frames = []; buf = Buffer.concat([buf, chunk]); let awaiting; for (;;) { const he = buf.indexOf("\r\n\r\n"); if (he === -1) break; const m = /Content-Length:\s*(\d+)/i.exec(buf.subarray(0, he).toString("ascii")); if (!m) { buf = buf.subarray(he + 4); continue; } const len = Number(m[1]); if (!Number.isFinite(len) || len < 0 || len > maxBytes) { buf = buf.subarray(he + 4); continue; } const start = he + 4; if (buf.length < start + len) { awaiting = start + len; break; } frames.push(buf.subarray(start, start + len).toString("utf8")); buf = buf.subarray(start + len); } if (buf.length > (awaiting ?? maxBytes + HEADER_SLACK)) buf = Buffer.alloc(0); return frames; }; }