Files
memind/scripts/start-headroom-proxy-local.mjs
T
john fc4ac98e9f feat(context): add dsh executor and headroom active loopback probe
Wire DeepSeek Harness as an optional fourth code executor (default off)
and add a loopback observation script that compares prompt tokens through
headroom proxy with OPENAI_TARGET_API_URL pointed at the compat proxy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 21:32:57 +08:00

64 lines
1.7 KiB
JavaScript

#!/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)],
{
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);
});