34 lines
866 B
JavaScript
34 lines
866 B
JavaScript
/** SSE line split + data payload parse (shared by agent-openai + tests). */
|
|
|
|
/**
|
|
* Parse one SSE `data:` JSON line after the `data: ` prefix.
|
|
* @param {string} dataLine content after `data: ` prefix
|
|
*/
|
|
function bareAgentParseSseDataPayload(dataLine) {
|
|
const t = String(dataLine).trim()
|
|
if (t === '[DONE]') return { kind: 'done' }
|
|
try {
|
|
const j = JSON.parse(t)
|
|
return { kind: 'json', value: j }
|
|
} catch {
|
|
return { kind: 'raw', value: t }
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Split SSE buffer into lines (keep incomplete tail).
|
|
* @param {string} buf
|
|
* @returns {{ lines: string[], rest: string }}
|
|
*/
|
|
function bareAgentSplitSseLines(buf) {
|
|
const lines = []
|
|
let start = 0
|
|
for (let i = 0; i < buf.length; i++) {
|
|
if (buf.charCodeAt(i) === 10) {
|
|
lines.push(buf.slice(start, i))
|
|
start = i + 1
|
|
}
|
|
}
|
|
return { lines, rest: buf.slice(start) }
|
|
}
|