mirror of
https://github.com/different-ai/openwork
synced 2026-04-25 17:15:34 +02:00
fix: rename openwork-server package references (#1040)
Co-authored-by: Omar McAdam <omar@OpenWork-Studio.localdomain>
This commit is contained in:
@@ -53,14 +53,20 @@ const logLine = (message: string) => {
|
||||
|
||||
const readBool = (value: string | undefined) => {
|
||||
const normalized = (value ?? "").trim().toLowerCase();
|
||||
return normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on";
|
||||
return (
|
||||
normalized === "1" ||
|
||||
normalized === "true" ||
|
||||
normalized === "yes" ||
|
||||
normalized === "on"
|
||||
);
|
||||
};
|
||||
|
||||
const silent = process.argv.includes("--silent");
|
||||
|
||||
const autoBuildEnabled = process.env.OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD == null
|
||||
? true
|
||||
: readBool(process.env.OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD);
|
||||
const autoBuildEnabled =
|
||||
process.env.OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD == null
|
||||
? true
|
||||
: readBool(process.env.OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD);
|
||||
|
||||
const runCommand = (command: string, args: string[]) =>
|
||||
new Promise<void>((resolve, reject) => {
|
||||
@@ -75,11 +81,20 @@ const runCommand = (command: string, args: string[]) =>
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
reject(new Error(`${command} ${args.join(" ")} exited with code ${code ?? "unknown"}`));
|
||||
reject(
|
||||
new Error(
|
||||
`${command} ${args.join(" ")} exited with code ${code ?? "unknown"}`,
|
||||
),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
const spawnLogged = (command: string, args: string[], logPath: string, env: NodeJS.ProcessEnv) => {
|
||||
const spawnLogged = (
|
||||
command: string,
|
||||
args: string[],
|
||||
logPath: string,
|
||||
env: NodeJS.ProcessEnv,
|
||||
) => {
|
||||
const logFd = openSync(logPath, "w");
|
||||
return spawn(command, args, {
|
||||
cwd,
|
||||
@@ -88,8 +103,13 @@ const spawnLogged = (command: string, args: string[], logPath: string, env: Node
|
||||
});
|
||||
};
|
||||
|
||||
const shutdown = (label: string, code: number | null, signal: NodeJS.Signals | null) => {
|
||||
const reason = code !== null ? `code ${code}` : signal ? `signal ${signal}` : "unknown";
|
||||
const shutdown = (
|
||||
label: string,
|
||||
code: number | null,
|
||||
signal: NodeJS.Signals | null,
|
||||
) => {
|
||||
const reason =
|
||||
code !== null ? `code ${code}` : signal ? `signal ${signal}` : "unknown";
|
||||
logLine(`[dev:headless-web] ${label} exited (${reason})`);
|
||||
process.exit(code ?? 1);
|
||||
};
|
||||
@@ -105,28 +125,48 @@ const openworkPort = await resolvePort(process.env.OPENWORK_PORT, "127.0.0.1");
|
||||
const webPort = await resolvePort(process.env.OPENWORK_WEB_PORT, "127.0.0.1");
|
||||
const openworkToken = process.env.OPENWORK_TOKEN ?? randomUUID();
|
||||
const openworkHostToken = process.env.OPENWORK_HOST_TOKEN ?? randomUUID();
|
||||
const openworkServerBin = path.join(cwd, "apps/server/dist/bin/openwork-server");
|
||||
const opencodeRouterBin = path.join(cwd, "apps/opencode-router/dist/bin/opencode-router");
|
||||
const openworkServerBin = path.join(
|
||||
cwd,
|
||||
"apps/server/dist/bin/openwork-server",
|
||||
);
|
||||
const opencodeRouterBin = path.join(
|
||||
cwd,
|
||||
"apps/opencode-router/dist/bin/opencode-router",
|
||||
);
|
||||
|
||||
const ensureOpenworkServer = async () => {
|
||||
try {
|
||||
await access(openworkServerBin);
|
||||
} catch {
|
||||
if (!autoBuildEnabled) {
|
||||
logLine(`[dev:headless-web] Missing OpenWork server binary at ${openworkServerBin}`);
|
||||
logLine("[dev:headless-web] Auto-build disabled (OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD=0)");
|
||||
logLine("[dev:headless-web] Run: pnpm --filter @openwork/server build:bin");
|
||||
logLine("[dev:headless-web] Or unset/enable OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD to auto-build.");
|
||||
logLine(
|
||||
`[dev:headless-web] Missing OpenWork server binary at ${openworkServerBin}`,
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Auto-build disabled (OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD=0)",
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Run: pnpm --filter openwork-server build:bin",
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Or unset/enable OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD to auto-build.",
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
logLine(`[dev:headless-web] Missing OpenWork server binary at ${openworkServerBin}`);
|
||||
logLine("[dev:headless-web] Auto-building: pnpm --filter @openwork/server build:bin");
|
||||
logLine(
|
||||
`[dev:headless-web] Missing OpenWork server binary at ${openworkServerBin}`,
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Auto-building: pnpm --filter openwork-server build:bin",
|
||||
);
|
||||
try {
|
||||
await runCommand("pnpm", ["--filter", "@openwork/server", "build:bin"]);
|
||||
await runCommand("pnpm", ["--filter", "openwork-server", "build:bin"]);
|
||||
await access(openworkServerBin);
|
||||
} catch (error) {
|
||||
logLine(`[dev:headless-web] Auto-build failed: ${error instanceof Error ? error.message : String(error)}`);
|
||||
logLine(
|
||||
`[dev:headless-web] Auto-build failed: ${error instanceof Error ? error.message : String(error)}`,
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
@@ -137,20 +177,34 @@ const ensureOpencodeRouter = async () => {
|
||||
await access(opencodeRouterBin);
|
||||
} catch {
|
||||
if (!autoBuildEnabled) {
|
||||
logLine(`[dev:headless-web] Missing opencode-router binary at ${opencodeRouterBin}`);
|
||||
logLine("[dev:headless-web] Auto-build disabled (OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD=0)");
|
||||
logLine("[dev:headless-web] Run: pnpm --filter opencode-router build:bin");
|
||||
logLine("[dev:headless-web] Or unset/enable OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD to auto-build.");
|
||||
logLine(
|
||||
`[dev:headless-web] Missing opencode-router binary at ${opencodeRouterBin}`,
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Auto-build disabled (OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD=0)",
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Run: pnpm --filter opencode-router build:bin",
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Or unset/enable OPENWORK_DEV_HEADLESS_WEB_AUTOBUILD to auto-build.",
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
logLine(`[dev:headless-web] Missing opencode-router binary at ${opencodeRouterBin}`);
|
||||
logLine("[dev:headless-web] Auto-building: pnpm --filter opencode-router build:bin");
|
||||
logLine(
|
||||
`[dev:headless-web] Missing opencode-router binary at ${opencodeRouterBin}`,
|
||||
);
|
||||
logLine(
|
||||
"[dev:headless-web] Auto-building: pnpm --filter opencode-router build:bin",
|
||||
);
|
||||
try {
|
||||
await runCommand("pnpm", ["--filter", "opencode-router", "build:bin"]);
|
||||
await access(opencodeRouterBin);
|
||||
} catch (error) {
|
||||
logLine(`[dev:headless-web] Auto-build failed: ${error instanceof Error ? error.message : String(error)}`);
|
||||
logLine(
|
||||
`[dev:headless-web] Auto-build failed: ${error instanceof Error ? error.message : String(error)}`,
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
@@ -160,10 +214,13 @@ const openworkUrl = `http://${clientHost}:${openworkPort}`;
|
||||
const webUrl = `http://${clientHost}:${webPort}`;
|
||||
// In practice we want opencode-router on for end-to-end messaging tests.
|
||||
// Allow opt-out via OPENWORK_DEV_OPENCODE_ROUTER=0.
|
||||
const opencodeRouterEnabled = process.env.OPENWORK_DEV_OPENCODE_ROUTER == null
|
||||
? true
|
||||
: readBool(process.env.OPENWORK_DEV_OPENCODE_ROUTER);
|
||||
const opencodeRouterRequired = readBool(process.env.OPENWORK_DEV_OPENCODE_ROUTER_REQUIRED);
|
||||
const opencodeRouterEnabled =
|
||||
process.env.OPENWORK_DEV_OPENCODE_ROUTER == null
|
||||
? true
|
||||
: readBool(process.env.OPENWORK_DEV_OPENCODE_ROUTER);
|
||||
const opencodeRouterRequired = readBool(
|
||||
process.env.OPENWORK_DEV_OPENCODE_ROUTER_REQUIRED,
|
||||
);
|
||||
const viteEnv = {
|
||||
...process.env,
|
||||
HOST: viteHost,
|
||||
@@ -200,8 +257,12 @@ logLine(
|
||||
);
|
||||
logLine(`[dev:headless-web] OPENWORK_TOKEN: ${openworkToken}`);
|
||||
logLine(`[dev:headless-web] OPENWORK_HOST_TOKEN: ${openworkHostToken}`);
|
||||
logLine(`[dev:headless-web] Web logs: ${path.relative(cwd, path.join(tmpDir, "dev-web.log"))}`);
|
||||
logLine(`[dev:headless-web] Headless logs: ${path.relative(cwd, path.join(tmpDir, "dev-headless.log"))}`);
|
||||
logLine(
|
||||
`[dev:headless-web] Web logs: ${path.relative(cwd, path.join(tmpDir, "dev-web.log"))}`,
|
||||
);
|
||||
logLine(
|
||||
`[dev:headless-web] Headless logs: ${path.relative(cwd, path.join(tmpDir, "dev-headless.log"))}`,
|
||||
);
|
||||
|
||||
const webProcess = spawnLogged(
|
||||
"pnpm",
|
||||
@@ -263,4 +324,6 @@ process.on("SIGTERM", () => {
|
||||
});
|
||||
|
||||
webProcess.on("exit", (code, signal) => shutdown("web", code, signal));
|
||||
headlessProcess.on("exit", (code, signal) => shutdown("orchestrator", code, signal));
|
||||
headlessProcess.on("exit", (code, signal) =>
|
||||
shutdown("orchestrator", code, signal),
|
||||
);
|
||||
|
||||
@@ -18,11 +18,19 @@ const readCargoVersion = (path) => {
|
||||
|
||||
const appPkg = readJson(resolve(root, "apps", "app", "package.json"));
|
||||
const desktopPkg = readJson(resolve(root, "apps", "desktop", "package.json"));
|
||||
const orchestratorPkg = readJson(resolve(root, "apps", "orchestrator", "package.json"));
|
||||
const orchestratorPkg = readJson(
|
||||
resolve(root, "apps", "orchestrator", "package.json"),
|
||||
);
|
||||
const serverPkg = readJson(resolve(root, "apps", "server", "package.json"));
|
||||
const opencodeRouterPkg = readJson(resolve(root, "apps", "opencode-router", "package.json"));
|
||||
const tauriConfig = readJson(resolve(root, "apps", "desktop", "src-tauri", "tauri.conf.json"));
|
||||
const cargoVersion = readCargoVersion(resolve(root, "apps", "desktop", "src-tauri", "Cargo.toml"));
|
||||
const opencodeRouterPkg = readJson(
|
||||
resolve(root, "apps", "opencode-router", "package.json"),
|
||||
);
|
||||
const tauriConfig = readJson(
|
||||
resolve(root, "apps", "desktop", "src-tauri", "tauri.conf.json"),
|
||||
);
|
||||
const cargoVersion = readCargoVersion(
|
||||
resolve(root, "apps", "desktop", "src-tauri", "Cargo.toml"),
|
||||
);
|
||||
|
||||
const versions = {
|
||||
app: appPkg.version ?? null,
|
||||
@@ -37,7 +45,8 @@ const versions = {
|
||||
orchestrator: orchestratorPkg.opencodeVersion ?? null,
|
||||
},
|
||||
opencodeRouterVersionPinned: desktopPkg.opencodeRouterVersion ?? null,
|
||||
orchestratorOpenworkServerRange: orchestratorPkg.dependencies?.["@openwork/server"] ?? null,
|
||||
orchestratorOpenworkServerRange:
|
||||
orchestratorPkg.dependencies?.["openwork-server"] ?? null,
|
||||
};
|
||||
|
||||
const checks = [];
|
||||
@@ -58,7 +67,9 @@ addCheck(
|
||||
);
|
||||
addCheck(
|
||||
"App/openwork-orchestrator versions match",
|
||||
versions.app && versions.orchestrator && versions.app === versions.orchestrator,
|
||||
versions.app &&
|
||||
versions.orchestrator &&
|
||||
versions.app === versions.orchestrator,
|
||||
`${versions.app ?? "?"} vs ${versions.orchestrator ?? "?"}`,
|
||||
);
|
||||
addCheck(
|
||||
@@ -68,7 +79,9 @@ addCheck(
|
||||
);
|
||||
addCheck(
|
||||
"App/opencode-router versions match",
|
||||
versions.app && versions.opencodeRouter && versions.app === versions.opencodeRouter,
|
||||
versions.app &&
|
||||
versions.opencodeRouter &&
|
||||
versions.app === versions.opencodeRouter,
|
||||
`${versions.app ?? "?"} vs ${versions.opencodeRouter ?? "?"}`,
|
||||
);
|
||||
addCheck(
|
||||
@@ -83,7 +96,9 @@ addCheck(
|
||||
);
|
||||
addCheck(
|
||||
"OpenCodeRouter version pinned in desktop",
|
||||
versions.opencodeRouter && versions.opencodeRouterVersionPinned && versions.opencodeRouter === versions.opencodeRouterVersionPinned,
|
||||
versions.opencodeRouter &&
|
||||
versions.opencodeRouterVersionPinned &&
|
||||
versions.opencodeRouter === versions.opencodeRouterVersionPinned,
|
||||
`${versions.opencodeRouterVersionPinned ?? "?"} vs ${versions.opencodeRouter ?? "?"}`,
|
||||
);
|
||||
if (versions.opencode.desktop || versions.opencode.orchestrator) {
|
||||
@@ -105,7 +120,9 @@ const openworkServerPinned = /^\d+\.\d+\.\d+/.test(openworkServerRange);
|
||||
if (!openworkServerRange) {
|
||||
addWarning("openwork-orchestrator is missing an openwork-server dependency.");
|
||||
} else if (!openworkServerPinned) {
|
||||
addWarning(`openwork-orchestrator openwork-server dependency is not pinned (${openworkServerRange}).`);
|
||||
addWarning(
|
||||
`openwork-orchestrator openwork-server dependency is not pinned (${openworkServerRange}).`,
|
||||
);
|
||||
} else {
|
||||
addCheck(
|
||||
"Openwork-server dependency matches server version",
|
||||
@@ -114,7 +131,14 @@ if (!openworkServerRange) {
|
||||
);
|
||||
}
|
||||
|
||||
const sidecarManifestPath = resolve(root, "apps", "orchestrator", "dist", "sidecars", "openwork-orchestrator-sidecars.json");
|
||||
const sidecarManifestPath = resolve(
|
||||
root,
|
||||
"apps",
|
||||
"orchestrator",
|
||||
"dist",
|
||||
"sidecars",
|
||||
"openwork-orchestrator-sidecars.json",
|
||||
);
|
||||
if (existsSync(sidecarManifestPath)) {
|
||||
const manifest = readJson(sidecarManifestPath);
|
||||
addCheck(
|
||||
@@ -145,7 +169,9 @@ if (existsSync(sidecarManifestPath)) {
|
||||
}
|
||||
|
||||
if (!process.env.SOURCE_DATE_EPOCH) {
|
||||
addWarning("SOURCE_DATE_EPOCH is not set (sidecar manifests will include current time).");
|
||||
addWarning(
|
||||
"SOURCE_DATE_EPOCH is not set (sidecar manifests will include current time).",
|
||||
);
|
||||
}
|
||||
|
||||
const report = { ok, versions, checks, warnings };
|
||||
|
||||
Reference in New Issue
Block a user