fix: rename openwork-server package references (#1040)

Co-authored-by: Omar McAdam <omar@OpenWork-Studio.localdomain>
This commit is contained in:
Omar McAdam
2026-03-19 14:27:34 -07:00
committed by GitHub
parent 10ec28d6dc
commit aa313c0ac9
10 changed files with 2275 additions and 689 deletions

View File

@@ -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),
);

View File

@@ -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 };