52 lines
1.9 KiB
JavaScript
52 lines
1.9 KiB
JavaScript
#!/usr/bin/env node
|
|
import { randomUUID } from "node:crypto";
|
|
import { createInterface } from "node:readline";
|
|
|
|
function writeMessage(message) {
|
|
process.stdout.write(`${JSON.stringify(message)}\n`);
|
|
}
|
|
|
|
async function handleRequest(request) {
|
|
if (request.method === "initialize") {
|
|
process.stderr.write("Error handling request { method: 'nes/close' } { code: -32601 }\n");
|
|
process.stderr.write("paperclip-acp-echo-agent started\n");
|
|
return {
|
|
protocolVersion: 1,
|
|
agentCapabilities: { loadSession: false, sessionCapabilities: { close: {} } },
|
|
agentInfo: { name: "paperclip-acp-echo-agent", version: "1.0.0" },
|
|
};
|
|
}
|
|
if (request.method === "session/new") return { sessionId: randomUUID() };
|
|
if (request.method === "session/prompt") {
|
|
writeMessage({
|
|
jsonrpc: "2.0",
|
|
method: "session/update",
|
|
params: {
|
|
sessionId: request.params.sessionId,
|
|
update: {
|
|
sessionUpdate: "agent_message_chunk",
|
|
content: { type: "text", text: process.env.PAPERCLIP_ACPX_SPAWN_SMOKE ?? "missing" },
|
|
},
|
|
},
|
|
});
|
|
return { stopReason: "end_turn" };
|
|
}
|
|
if (request.method === "session/close" || request.method === "session/set_mode" || request.method === "session/set_config_option") return {};
|
|
if (request.method === "session/cancel") return null;
|
|
throw new Error(`Unsupported ACP method: ${request.method}`);
|
|
}
|
|
|
|
const lines = createInterface({ input: process.stdin });
|
|
lines.on("line", async (line) => {
|
|
let request;
|
|
try {
|
|
request = JSON.parse(line);
|
|
const result = await handleRequest(request);
|
|
if (request.id !== undefined && result !== null) writeMessage({ jsonrpc: "2.0", id: request.id, result });
|
|
} catch (error) {
|
|
if (request?.id !== undefined) {
|
|
writeMessage({ jsonrpc: "2.0", id: request.id, error: { code: -32603, message: String(error?.message ?? error) } });
|
|
}
|
|
}
|
|
});
|