(opts: LoadConfigOptions)
| 75 | } |
| 76 | |
| 77 | export function loadConfig(opts: LoadConfigOptions): ServerConfig { |
| 78 | const env = opts.env ?? process.env; |
| 79 | |
| 80 | const command = parseCommand(env['WEB_TERMINAL_COMMAND']); |
| 81 | |
| 82 | // Guardian-injected Vite dev-server port; 5173 when running without the |
| 83 | // orchestrator (standalone Vite, prod — where no UI origin drift exists). |
| 84 | const uiPort = parseIntEnv(env['OPENALICE_UI_PORT'], 5173, 1, 65535); |
| 85 | const originsRaw = (env['WEB_TERMINAL_ALLOWED_ORIGINS'] ?? buildDefaultOrigins(opts.webPort, uiPort).join(',')) |
| 86 | .split(',') |
| 87 | .map((s) => s.trim()) |
| 88 | .filter(Boolean); |
| 89 | const allowAnyOrigin = originsRaw.includes('*'); |
| 90 | const allowedOrigins = new Set(originsRaw.filter((s) => s !== '*')); |
| 91 | |
| 92 | const bpHigh = parseIntEnv(env['WEB_TERMINAL_BP_HIGH'], DEFAULT_HIGH_WM, 1024, 1024 * 1024 * 1024); |
| 93 | const bpLow = parseIntEnv(env['WEB_TERMINAL_BP_LOW'], DEFAULT_LOW_WM, 0, bpHigh); |
| 94 | const shutdownTimeoutMs = parseIntEnv( |
| 95 | env['WEB_TERMINAL_SHUTDOWN_MS'], |
| 96 | DEFAULT_SHUTDOWN_MS, |
| 97 | 100, |
| 98 | 60_000, |
| 99 | ); |
| 100 | const replayBufferBytes = parseIntEnv( |
| 101 | env['WEB_TERMINAL_REPLAY_BYTES'], |
| 102 | DEFAULT_REPLAY_BYTES, |
| 103 | 1024, |
| 104 | 64 * 1024 * 1024, |
| 105 | ); |
| 106 | |
| 107 | const launcherRoot = resolve( |
| 108 | env['AQ_LAUNCHER_ROOT'] ?? join(homedir(), '.openalice', 'workspaces'), |
| 109 | ); |
| 110 | const templatesDir = resolve(env['AQ_TEMPLATES_DIR'] ?? templatesPath()); |
| 111 | const legacyBootstrapScript = env['AQ_BOOTSTRAP_SCRIPT'] |
| 112 | ? resolve(env['AQ_BOOTSTRAP_SCRIPT']) |
| 113 | : null; |
| 114 | const templateDir = env['AQ_TEMPLATE_DIR'] ? resolve(env['AQ_TEMPLATE_DIR']) : ''; |
| 115 | const bootstrapTimeoutMs = parseIntEnv( |
| 116 | env['AQ_BOOTSTRAP_TIMEOUT_MS'], |
| 117 | DEFAULT_BOOTSTRAP_TIMEOUT_MS, |
| 118 | 1_000, |
| 119 | 600_000, |
| 120 | ); |
| 121 | const launcherRepoRoot = computeLauncherRepoRoot(); |
| 122 | |
| 123 | return { |
| 124 | command, |
| 125 | allowedOrigins, |
| 126 | allowAnyOrigin, |
| 127 | bpHighWatermarkBytes: bpHigh, |
| 128 | bpLowWatermarkBytes: bpLow, |
| 129 | shutdownTimeoutMs, |
| 130 | replayBufferBytes, |
| 131 | launcherRoot, |
| 132 | templatesDir, |
| 133 | legacyBootstrapScript, |
| 134 | templateDir, |
no test coverage detected