Files
command-code-openai-bridge/src/index.ts
T
2026-08-06 12:01:17 +08:00

56 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
import path from "node:path";
import { loadConfig } from "./config.js";
import { printCumulativeUsage } from "./renderer.js";
import { createServer } from "./server.js";
function configPathFromArgs(args: string[]): string {
const index = args.indexOf("--config");
if (index === -1) return "config.yaml";
const value = args[index + 1];
if (!value) throw new Error("--config requires a file path");
return value;
}
async function main(): Promise<void> {
const configPath = path.resolve(configPathFromArgs(process.argv.slice(2)));
const config = await loadConfig(configPath);
const bridge = await createServer(config);
if (!bridge.installation.installed) {
process.stderr.write(`警告:找不到 ${config.command_code_executable}API 将返回 503。\n`);
} else if (!bridge.installation.authenticated) {
process.stderr.write("警告:Command Code 未登录。运行 command-code login 后重启服务。\n");
}
await bridge.app.listen({ host: config.host, port: config.port });
process.once("exit", printCumulativeUsage);
process.stdout.write(`Command Code OpenAI Bridge 已启动\n`);
process.stdout.write(`API: http://${config.host}:${config.port}/v1\n`);
process.stdout.write(`工作目录: ${config.resolvedWorkingDirectory}\n`);
process.stdout.write(`Command Code: ${bridge.installation.version ?? "unavailable"}\n`);
process.stdout.write(`权限模式: ${config.dangerously_skip_permissions ? "yolo" : config.permission_mode}\n`);
process.stdout.write("空闲时按 Ctrl+C 停止;请求运行中第一次 Ctrl+C 只取消当前请求。\n");
let shuttingDown = false;
const shutdown = async (signal: NodeJS.Signals) => {
if (bridge.abortActive()) {
process.stderr.write(`\n收到 ${signal},正在取消当前 Command Code 请求。\n`);
return;
}
if (shuttingDown) return;
shuttingDown = true;
process.stdout.write(`\n收到 ${signal},正在停止服务。\n`);
await bridge.app.close();
process.exitCode = 0;
};
process.on("SIGINT", () => { void shutdown("SIGINT"); });
process.on("SIGTERM", () => { void shutdown("SIGTERM"); });
}
main().catch((error) => {
process.stderr.write(`${error instanceof Error ? error.stack : String(error)}\n`);
process.exitCode = 1;
});