| |
| |
| |
| |
| |
| const t0 = Date.now(); |
|
|
| const log = (msg) => process.stdout.write(`[evework] ${msg}\n`); |
| const fail = (msg) => { |
| process.stderr.write(`[evework] FATAL (+${Date.now() - t0}ms): ${msg}\n`); |
| process.exit(1); |
| }; |
|
|
| log(`start pid=${process.pid} node=${process.version} cwd=${process.cwd()}`); |
|
|
| const has = (name) => Boolean(process.env[name]?.trim()); |
| const world = (process.env.WORKFLOW_WORLD ?? "local").trim().toLowerCase(); |
| |
| const missing = ["CUSTOM_BASE_URL", "CUSTOM_MODEL"].filter((k) => !has(k)); |
| if (world === "postgres" || world === "world-postgres") { |
| if (!has("WORKFLOW_POSTGRES_URL")) missing.push("WORKFLOW_POSTGRES_URL"); |
| } |
| if (missing.length > 0) { |
| fail( |
| `缺少环境变量: ${missing.join(", ")}。` + |
| `HF → Settings → Variables and secrets。` + |
| `镜像默认 WORKFLOW_WORLD=postgres,需 WORKFLOW_POSTGRES_URL;` + |
| `也可设 WORKFLOW_WORLD=local(状态写容器内 .workflow-data,重启丢失)。`, |
| ); |
| } |
|
|
| const dataDir = (process.env.EVEAGENT_DATA_DIR ?? "/data").trim() || "/data"; |
| try { |
| const { accessSync, constants, mkdirSync } = await import("node:fs"); |
| mkdirSync(dataDir, { recursive: true }); |
| accessSync(dataDir, constants.W_OK); |
| } catch (err) { |
| const detail = err instanceof Error ? err.message : String(err); |
| fail(`数据目录不可写: ${dataDir}(${detail})。请挂载可写卷或修正 EVEAGENT_DATA_DIR`); |
| } |
|
|
| log( |
| `workflow=${world} data=${dataDir} agent_key=${has("AGENT_API_KEY") ? "set" : "missing"}`, |
| ); |
|
|
| const entry = new URL("./.output/server/index.mjs", import.meta.url); |
| log(`import ${entry.pathname}`); |
| try { |
| await import(entry.href); |
| log(`nitro loaded +${Date.now() - t0}ms`); |
| } catch (err) { |
| const message = err instanceof Error ? (err.stack ?? err.message) : String(err); |
| fail(`import 失败:\n${message}`); |
| } |
|
|