feat: serve and command

This commit is contained in:
Cristina Poncela Cubeiro
2026-06-18 13:16:10 +02:00
parent 83e8c3d39b
commit 946b9c7dee
4 changed files with 52 additions and 12 deletions
+24 -12
View File
@@ -2,6 +2,7 @@
import { readFileSync } from "node:fs";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";
import { serve } from "./serve.ts";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@@ -10,21 +11,32 @@ const packageJson = JSON.parse(readFileSync(join(__dirname, "../package.json"),
};
function printHelp(): void {
console.log(`orchestrator v${packageJson.version}\n\nUsage:\n orchestrator --help\n orchestrator --version`);
console.log(
`orchestrator v${packageJson.version}\n\nUsage:\n orchestrator serve\n orchestrator --help\n orchestrator --version`,
);
}
const args = process.argv.slice(2);
async function main(): Promise<void> {
const args = process.argv.slice(2);
if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
printHelp();
process.exit(0);
}
if (args[0] === "--version" || args[0] === "-v") {
console.log(packageJson.version);
process.exit(0);
}
if (args[0] === "serve") {
await serve();
return;
}
console.error(`Unknown command: ${args[0]}`);
printHelp();
process.exit(0);
process.exit(1);
}
if (args[0] === "--version" || args[0] === "-v") {
console.log(packageJson.version);
process.exit(0);
}
console.error(`Unknown command: ${args[0]}`);
printHelp();
process.exit(1);
await main();
+1
View File
@@ -39,6 +39,7 @@ export async function handleIpcRequest(request: SpawnRequest): Promise<SpawnResp
export async function handleIpcRequest(request: ListRequest): Promise<ListResponse | ErrorResponse>;
export async function handleIpcRequest(request: StopRequest): Promise<StopResponse | ErrorResponse>;
export async function handleIpcRequest(request: StatusRequest): Promise<StatusResponse | ErrorResponse>;
export async function handleIpcRequest(request: OrchestratorRequest): Promise<OrchestratorResponse>;
export async function handleIpcRequest(request: OrchestratorRequest): Promise<OrchestratorResponse> {
switch (request.type) {
case "spawn": {
+1
View File
@@ -3,5 +3,6 @@ export * from "./handler.ts";
export * from "./ipc/client.ts";
export * from "./ipc/protocol.ts";
export * from "./ipc/server.ts";
export * from "./serve.ts";
export * from "./storage.ts";
export * from "./types.ts";
+26
View File
@@ -0,0 +1,26 @@
import { existsSync, unlinkSync } from "node:fs";
import { getSocketPath } from "./config.ts";
import { handleIpcRequest } from "./handler.ts";
import { startIpcServer } from "./ipc/server.ts";
export async function serve(): Promise<void> {
const socketPath = getSocketPath();
const server = await startIpcServer(handleIpcRequest);
const cleanup = () => {
server.close();
if (existsSync(socketPath)) {
unlinkSync(socketPath);
}
};
process.on("SIGINT", () => {
cleanup();
process.exit(0);
});
process.on("SIGTERM", () => {
cleanup();
process.exit(0);
});
}