askme-cli
Version:
askme-cli MCP server that collects user's next plan or confirmation through terminal window
56 lines • 2.16 kB
JavaScript
import * as fs from "fs";
import * as net from "net";
import { CONFIG } from "../config/index.js";
// Common function to clean up socket file
export const cleanupSocket = (socketPath) => {
if (fs.existsSync(socketPath)) {
try {
fs.unlinkSync(socketPath);
console.error(`🧹 Cleaned up socket file: ${socketPath}`);
}
catch (error) {
console.error(`❌ Failed to clean up socket file: ${error.message}`);
}
}
};
// Create Unix Socket server - return complete user confirmation message
export const createSocketServer = (socketPath) => {
return new Promise((resolve, reject) => {
const socketServer = net.createServer((socket) => {
let buffer = Buffer.alloc(0);
socket.on("data", (data) => {
buffer = Buffer.concat([buffer, data]);
try {
const message = JSON.parse(buffer.toString());
socket.end();
socketServer.close();
cleanupSocket(socketPath);
// Return complete message object instead of just text
resolve(message);
}
catch (error) {
// Wait for more data
}
});
socket.on("error", (error) => {
console.error("Socket error:", error);
socketServer.close();
cleanupSocket(socketPath);
reject(new Error(`Socket connection error: ${error.message}`));
});
});
socketServer.listen(socketPath);
socketServer.on("error", (error) => {
console.error("Unix Socket server error:", error);
cleanupSocket(socketPath);
reject(new Error(`Unix Socket server failed to start: ${error.message}`));
});
// Set timeout cleanup
setTimeout(() => {
socketServer.close();
cleanupSocket(socketPath);
reject(new Error("User input timeout (10 minutes)"));
}, CONFIG.TIMEOUT_MS);
});
};
//# sourceMappingURL=socket.js.map