0106dd3f5d
Rename all remaining internal protocol identifiers: - x-metapi-* headers → x-boosapi-* - metapi: reasoning prefix → boosapi: - __metapi* runtime markers → __boosapi* - file-metapi-* → file-boosapi-* - METAPI_* env vars → BOOSAPI_* - metapi_turn_state/metapi_mcp_item__ etc. → boosapi_* - package.json name → boosapi - Docker/deploy/k3s/docs references 46 files changed, 168 insertions, 170 deletions. typecheck:web passes (0 new errors). Signed-off-by: Boos4721 <boos4721@icloud.com>
83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import { spawn } from 'node:child_process';
|
|
import { join } from 'node:path';
|
|
import {
|
|
buildBetterSqliteRebuildCommand,
|
|
isNodeModuleVersionMismatch,
|
|
} from '../../src/server/nativeModuleGuard.js';
|
|
|
|
function run(command: string, args: string[]) {
|
|
return new Promise<void>((resolve, reject) => {
|
|
const child = spawn(command, args, {
|
|
cwd: process.cwd(),
|
|
stdio: 'inherit',
|
|
shell: false,
|
|
env: process.env,
|
|
});
|
|
|
|
child.once('exit', (code, signal) => {
|
|
if (code === 0) {
|
|
resolve();
|
|
return;
|
|
}
|
|
reject(new Error(`Command failed: ${command} ${args.join(' ')} (code=${code ?? 'null'}, signal=${signal ?? 'null'})`));
|
|
});
|
|
|
|
child.once('error', reject);
|
|
});
|
|
}
|
|
|
|
async function ensureBetterSqliteCompatible() {
|
|
try {
|
|
await import('better-sqlite3');
|
|
return;
|
|
} catch (error) {
|
|
if (!isNodeModuleVersionMismatch(error)) {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
const rebuild = buildBetterSqliteRebuildCommand();
|
|
console.log('[boosapi] Detected better-sqlite3 ABI mismatch. Rebuilding for the current Node.js runtime...');
|
|
await run(rebuild.command, rebuild.args);
|
|
|
|
try {
|
|
await import('better-sqlite3');
|
|
} catch (error) {
|
|
throw new Error(
|
|
`better-sqlite3 is still incompatible after rebuild: ${error instanceof Error ? error.message : String(error)}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
async function main() {
|
|
const isWatchMode = process.argv.includes('--watch');
|
|
await ensureBetterSqliteCompatible();
|
|
|
|
if (isWatchMode) {
|
|
const tsxCli = join(process.cwd(), 'node_modules', 'tsx', 'dist', 'cli.mjs');
|
|
const child = spawn(process.execPath, [tsxCli, 'watch', 'src/server/index.ts'], {
|
|
cwd: process.cwd(),
|
|
stdio: 'inherit',
|
|
env: process.env,
|
|
});
|
|
child.once('exit', (code) => {
|
|
process.exit(code ?? 0);
|
|
});
|
|
return;
|
|
}
|
|
|
|
const child = spawn(process.execPath, ['dist/server/index.js'], {
|
|
cwd: process.cwd(),
|
|
stdio: 'inherit',
|
|
env: process.env,
|
|
});
|
|
child.once('exit', (code) => {
|
|
process.exit(code ?? 0);
|
|
});
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error(error);
|
|
process.exit(1);
|
|
});
|