UNPKG

@mariozechner/pi-coding-agent

Version:

Coding agent CLI with read, bash, edit, write tools and session management

49 lines 1.56 kB
import { StringDecoder } from "node:string_decoder"; /** * Serialize a single strict JSONL record. * * Framing is LF-only. Payload strings may contain other Unicode separators such as * U+2028 and U+2029. Clients must split records on `\n` only. */ export function serializeJsonLine(value) { return `${JSON.stringify(value)}\n`; } /** * Attach an LF-only JSONL reader to a stream. * * This intentionally does not use Node readline. Readline splits on additional * Unicode separators that are valid inside JSON strings and therefore does not * implement strict JSONL framing. */ export function attachJsonlLineReader(stream, onLine) { const decoder = new StringDecoder("utf8"); let buffer = ""; const emitLine = (line) => { onLine(line.endsWith("\r") ? line.slice(0, -1) : line); }; const onData = (chunk) => { buffer += typeof chunk === "string" ? chunk : decoder.write(chunk); while (true) { const newlineIndex = buffer.indexOf("\n"); if (newlineIndex === -1) { return; } emitLine(buffer.slice(0, newlineIndex)); buffer = buffer.slice(newlineIndex + 1); } }; const onEnd = () => { buffer += decoder.end(); if (buffer.length > 0) { emitLine(buffer); buffer = ""; } }; stream.on("data", onData); stream.on("end", onEnd); return () => { stream.off("data", onData); stream.off("end", onEnd); }; } //# sourceMappingURL=jsonl.js.map