bddec84f4e
Introduce full AI orchestration ecosystem: - MCP Server with 16 tools, scoped auth, and audit logging - A2A v0.3 server with JSON-RPC 2.0, SSE streaming, and task manager - Auto-Combo engine with 6-factor scoring and self-healing - VS Code extension with smart dispatch and budget tracking - Harden CI pipeline: add static checks, remove continue-on-error - Add translator schema validation tests - Update .gitignore and CHANGELOG for release checklist
77 lines
2.0 KiB
JavaScript
77 lines
2.0 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { existsSync, renameSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import {
|
|
resolveRuntimePorts,
|
|
sanitizeColorEnv,
|
|
spawnWithForwardedSignals,
|
|
withRuntimePortEnv,
|
|
} from "./runtime-env.mjs";
|
|
|
|
const mode = process.argv[2] === "start" ? "start" : "dev";
|
|
const cwd = process.cwd();
|
|
const appDir = join(cwd, "app");
|
|
const srcAppDir = join(cwd, "src", "app");
|
|
const appPage = join(appDir, "page.tsx");
|
|
const backupDir = join(cwd, "app.__qa_backup");
|
|
|
|
let appDirMoved = false;
|
|
|
|
function shouldMoveAppDir() {
|
|
return existsSync(appDir) && !existsSync(appPage) && existsSync(srcAppDir);
|
|
}
|
|
|
|
function prepareAppDir() {
|
|
if (!shouldMoveAppDir()) return;
|
|
|
|
if (existsSync(backupDir)) {
|
|
console.warn(
|
|
"[Playwright WebServer] app.__qa_backup already exists; leaving app/ in place. " +
|
|
"If tests hit 404 on every route, clear app/ artifacts before running e2e."
|
|
);
|
|
return;
|
|
}
|
|
|
|
renameSync(appDir, backupDir);
|
|
appDirMoved = true;
|
|
console.log("[Playwright WebServer] Temporarily moved app/ to app.__qa_backup");
|
|
}
|
|
|
|
function restoreAppDir() {
|
|
if (!appDirMoved) return;
|
|
if (!existsSync(backupDir) || existsSync(appDir)) return;
|
|
|
|
renameSync(backupDir, appDir);
|
|
console.log("[Playwright WebServer] Restored app/ directory");
|
|
}
|
|
|
|
process.on("exit", restoreAppDir);
|
|
process.on("uncaughtException", (error) => {
|
|
restoreAppDir();
|
|
throw error;
|
|
});
|
|
|
|
prepareAppDir();
|
|
|
|
const runtimePorts = resolveRuntimePorts();
|
|
const testServerEnv = {
|
|
...sanitizeColorEnv(process.env),
|
|
OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK: process.env.OMNIROUTE_DISABLE_TOKEN_HEALTHCHECK || "1",
|
|
OMNIROUTE_HIDE_HEALTHCHECK_LOGS: process.env.OMNIROUTE_HIDE_HEALTHCHECK_LOGS || "1",
|
|
};
|
|
const args = [
|
|
"./node_modules/next/dist/bin/next",
|
|
mode,
|
|
"--port",
|
|
String(runtimePorts.dashboardPort),
|
|
];
|
|
if (mode === "dev") {
|
|
args.splice(2, 0, "--webpack");
|
|
}
|
|
|
|
spawnWithForwardedSignals(process.execPath, args, {
|
|
stdio: "inherit",
|
|
env: withRuntimePortEnv(testServerEnv, runtimePorts),
|
|
});
|