SPB Git forge
7commits 1branches 0releases
229.0 KBsize
maindefault branch
12 days agolast push
TypeScript 91.8% HTML 3.2% JavaScript 3% SQL 1.4% CSS 0.7%
2.1 KB · 57 lines typescript
Raw Blame History
1import path from "node:path";2import fs from "node:fs";34/** Minimal .env loader (no dependency). Does not override already-set variables. */5export function loadDotEnv(cwd = process.cwd()): void {6  const file = path.join(cwd, ".env");7  if (!fs.existsSync(file)) return;8  for (const line of fs.readFileSync(file, "utf8").split("\n")) {9    const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/i);10    if (!m) continue;11    const key = m[1]!;12    let val = m[2]!;13    if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) val = val.slice(1, -1);14    if (process.env[key] === undefined) process.env[key] = val;15  }16}1718export interface AppConfig {19  dataDir: string;20  profilesDir: string;21  sessionsDir: string;22  platformModelDir: string;23  mediaDir: string;24  databaseUrl?: string;25  headless: boolean;26  browserChannel: string;27  llmProvider: "none" | "anthropic" | "local";28  llmModel: string;29  localLlmUrl?: string;30  localLlmKey?: string;31  localLlmModel?: string;32  dashboardPort: number;33}3435export function loadConfig(): AppConfig {36  loadDotEnv();37  const dataDir = path.resolve(process.env.SRC_DATA_DIR ?? "./data");38  const cfg: AppConfig = {39    dataDir,40    profilesDir: path.join(dataDir, "browser_profiles"),41    sessionsDir: path.join(dataDir, "sessions"),42    platformModelDir: path.join(dataDir, "platform_model"),43    mediaDir: path.join(dataDir, "media"),44    databaseUrl: process.env.SRC_DATABASE_URL || undefined,45    headless: /^(1|true|yes)$/i.test(process.env.SRC_HEADLESS ?? "false"),46    browserChannel: process.env.SRC_BROWSER_CHANNEL ?? "chromium",47    llmProvider: (process.env.SRC_LLM_PROVIDER as AppConfig["llmProvider"]) ?? "none",48    llmModel: process.env.SRC_LLM_MODEL ?? "claude-opus-5",49    localLlmUrl: process.env.SRC_LOCAL_LLM_URL,50    localLlmKey: process.env.SRC_LOCAL_LLM_KEY,51    localLlmModel: process.env.SRC_LOCAL_LLM_MODEL,52    dashboardPort: Number(process.env.SRC_DASHBOARD_PORT ?? 8340),53  };54  for (const d of [cfg.profilesDir, cfg.sessionsDir, cfg.platformModelDir, cfg.mediaDir]) fs.mkdirSync(d, { recursive: true });55  return cfg;56}57