You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

67 lines
2.0 KiB

import { NextResponse } from "next/server";
import { exec } from "child_process";
import os from "os";
export async function POST(req: Request) {
// Never run in production
if (process.env.NODE_ENV !== "development") {
return NextResponse.json(
{ message: "Not available in production" },
{ status: 404 }
);
}
try {
const { locator } = await req.json();
if (!locator) {
return NextResponse.json(
{ message: "Locator is required" },
{ status: 400 }
);
}
const isWindows = os.platform() === "win32";
const bin = isWindows ? "antigravity-ide.cmd" : "antigravity-ide";
const cmd = `${bin} -r -g "${locator}"`;
return new Promise<Response>((resolve) => {
exec(cmd, (error) => {
if (error) {
// If primary IDE launcher isn't available, try fallback to code/cursor
const fallbackBin = isWindows ? "code.cmd" : "code";
const fallbackCmd = `${fallbackBin} -r -g "${locator}"`;
exec(fallbackCmd, (fallbackError) => {
if (fallbackError) {
console.error(
`[open-in-ide] Error opening file: ${error.message} / Fallback error: ${fallbackError.message}`
);
resolve(
NextResponse.json(
{
message: "Failed to open file in IDE",
error: error.message,
},
{ status: 500 }
)
);
} else {
resolve(NextResponse.json({ success: true, via: "code" }));
}
});
return;
}
resolve(NextResponse.json({ success: true, via: "antigravity" }));
});
});
} catch (err: unknown) {
const message = err instanceof Error ? err.message : String(err);
console.error("[open-in-ide] Handler error:", err);
return NextResponse.json(
{ message: "Internal server error", error: message },
{ status: 500 }
);
}
}