#!/usr/bin/env node /** * Start headroom proxy for local MeMind loopback dev. * * Usage: * node scripts/start-headroom-proxy-local.mjs * * Requires: * - headroom-ai installed (uv tool install headroom-ai[proxy]) * - deepseek-no-think compat proxy on :18036 */ import { spawn } from 'node:child_process'; import { resolveDeepseekNoThinkProxyBaseUrl, } from '../deepseek-no-think-proxy.mjs'; import { probeHeadroomProxyReachable, resolveHeadroomProxyBaseUrl, resolveHeadroomProxyPort, resolveHeadroomUpstreamBaseUrl, } from '../memind-headroom-policy.mjs'; const upstream = resolveHeadroomUpstreamBaseUrl(); const port = resolveHeadroomProxyPort(); const proxyBase = resolveHeadroomProxyBaseUrl(); async function main() { const reachable = await probeHeadroomProxyReachable({ baseUrl: proxyBase }); if (reachable) { console.log(`HEADROOM_LOCAL_ALREADY_RUNNING: ${proxyBase}`); console.log(` upstream=${upstream}`); return; } console.log('HEADROOM_LOCAL_START:'); console.log(` proxy=${proxyBase}`); console.log(` upstream=${upstream}`); console.log(` compat=${resolveDeepseekNoThinkProxyBaseUrl()}`); console.log(' constraints: HEADROOM_OUTPUT_SHAPER=0, no wrap/learn'); const child = spawn( 'headroom', ['proxy', '--port', String(port), '--openai-api-url', upstream.replace(/\/v1\/?$/, '')], { stdio: 'inherit', env: { ...process.env, OPENAI_TARGET_API_URL: upstream, HEADROOM_OUTPUT_SHAPER: '0', MEMIND_HEADROOM_MODE: process.env.MEMIND_HEADROOM_MODE ?? 'shadow', }, }, ); child.on('exit', (code, signal) => { process.exit(code ?? (signal ? 1 : 0)); }); } main().catch((error) => { console.error(`HEADROOM_LOCAL_FAIL: ${error.message}`); process.exit(1); });