mirror of
https://github.com/harivansh-afk/sandbox-agent.git
synced 2026-04-15 18:01:30 +00:00
100 lines
1.8 KiB
TypeScript
100 lines
1.8 KiB
TypeScript
import { createInterface } from "node:readline";
|
|
|
|
interface JsonRpcRequest {
|
|
jsonrpc?: unknown;
|
|
id?: unknown;
|
|
method?: unknown;
|
|
params?: unknown;
|
|
result?: unknown;
|
|
error?: unknown;
|
|
}
|
|
|
|
let outboundRequestSeq = 0;
|
|
|
|
function writeMessage(payload: unknown): void {
|
|
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
}
|
|
|
|
function echoNotification(message: unknown): void {
|
|
writeMessage({
|
|
jsonrpc: "2.0",
|
|
method: "mock/echo",
|
|
params: {
|
|
message,
|
|
},
|
|
});
|
|
}
|
|
|
|
function handleMessage(raw: string): void {
|
|
if (!raw.trim()) {
|
|
return;
|
|
}
|
|
|
|
let msg: JsonRpcRequest;
|
|
try {
|
|
msg = JSON.parse(raw) as JsonRpcRequest;
|
|
} catch (error) {
|
|
writeMessage({
|
|
jsonrpc: "2.0",
|
|
method: "mock/parse_error",
|
|
params: {
|
|
error: error instanceof Error ? error.message : String(error),
|
|
raw,
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
echoNotification(msg);
|
|
|
|
const hasMethod = typeof msg.method === "string";
|
|
const hasId = msg.id !== undefined;
|
|
|
|
if (hasMethod && hasId) {
|
|
if (msg.method === "mock/ask_client") {
|
|
outboundRequestSeq += 1;
|
|
writeMessage({
|
|
jsonrpc: "2.0",
|
|
id: `agent-req-${outboundRequestSeq}`,
|
|
method: "mock/request",
|
|
params: {
|
|
prompt: "please respond",
|
|
},
|
|
});
|
|
}
|
|
|
|
writeMessage({
|
|
jsonrpc: "2.0",
|
|
id: msg.id,
|
|
result: {
|
|
echoed: msg,
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (!hasMethod && hasId) {
|
|
writeMessage({
|
|
jsonrpc: "2.0",
|
|
method: "mock/client_response",
|
|
params: {
|
|
id: msg.id,
|
|
result: msg.result ?? null,
|
|
error: msg.error ?? null,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
const rl = createInterface({
|
|
input: process.stdin,
|
|
crlfDelay: Infinity,
|
|
});
|
|
|
|
rl.on("line", (line) => {
|
|
handleMessage(line);
|
|
});
|
|
|
|
rl.on("close", () => {
|
|
process.exit(0);
|
|
});
|