src / index.ts
import { type PluginContext } from "@lmstudio/sdk";
import { spawn } from "child_process";
import { join, resolve } from "path";
import { existsSync } from "fs";
function findBackgroundJs(originalDir: string): string {
let prefix = originalDir;
for (let i = 0; i < 6; i++) {
const candidate = resolve(join(prefix, "src", "background.js"));
if (existsSync(candidate)) return candidate;
prefix = join(prefix, "..");
}
throw new Error(`Could not find src/background.js starting from ${originalDir}`);
}
export async function main(ctx: PluginContext) {
return new Promise(resolve => {
const parts = process.argv[1].split("/");
const prodDir = parts.slice(0, -1).join("/");
const backgroundJs = findBackgroundJs(prodDir);
console.log(process.argv[1]);
console.log({ prodDir, backgroundJs });
const sp = spawn(process.argv0, [backgroundJs], {
detached: true,
stdio: "ignore",
});
sp.unref();
console.log(`Spawned background process PID: ${sp.pid}`);
setTimeout(() => {
resolve(0);
}, 10 * 1000);
});
}
src / index.ts
import { type PluginContext } from "@lmstudio/sdk";
import { spawn } from "child_process";
import { join, resolve } from "path";
import { existsSync } from "fs";
function findBackgroundJs(originalDir: string): string {
let prefix = originalDir;
for (let i = 0; i < 6; i++) {
const candidate = resolve(join(prefix, "src", "background.js"));
if (existsSync(candidate)) return candidate;
prefix = join(prefix, "..");
}
throw new Error(`Could not find src/background.js starting from ${originalDir}`);
}
export async function main(ctx: PluginContext) {
return new Promise(resolve => {
const parts = process.argv[1].split("/");
const prodDir = parts.slice(0, -1).join("/");
const backgroundJs = findBackgroundJs(prodDir);
console.log(process.argv[1]);
console.log({ prodDir, backgroundJs });
const sp = spawn(process.argv0, [backgroundJs], {
detached: true,
stdio: "ignore",
});
sp.unref();
console.log(`Spawned background process PID: ${sp.pid}`);
setTimeout(() => {
resolve(0);
}, 10 * 1000);
});
}