#!/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) } }); } } });