This repository has been archived on 2026-03-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw-extensions/wecom/node_modules/@agentclientprotocol/sdk/dist/stream.js
T

64 lines
2.3 KiB
JavaScript

/**
* Creates an ACP Stream from a pair of newline-delimited JSON streams.
*
* This is the typical way to handle ACP connections over stdio, converting
* between AnyMessage objects and newline-delimited JSON.
*
* @param output - The writable stream to send encoded messages to
* @param input - The readable stream to receive encoded messages from
* @returns A Stream for bidirectional ACP communication
*/
export function ndJsonStream(output, input) {
const textEncoder = new TextEncoder();
const textDecoder = new TextDecoder();
const readable = new ReadableStream({
async start(controller) {
let content = "";
const reader = input.getReader();
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
if (!value) {
continue;
}
content += textDecoder.decode(value, { stream: true });
const lines = content.split("\n");
content = lines.pop() || "";
for (const line of lines) {
const trimmedLine = line.trim();
if (trimmedLine) {
try {
const message = JSON.parse(trimmedLine);
controller.enqueue(message);
}
catch (err) {
console.error("Failed to parse JSON message:", trimmedLine, err);
}
}
}
}
}
finally {
reader.releaseLock();
controller.close();
}
},
});
const writable = new WritableStream({
async write(message) {
const content = JSON.stringify(message) + "\n";
const writer = output.getWriter();
try {
await writer.write(textEncoder.encode(content));
}
finally {
writer.releaseLock();
}
},
});
return { readable, writable };
}
//# sourceMappingURL=stream.js.map