feat(context): add recall fusion and zvec workspace adapters
Introduce RRF-based recall fusion for personal/episodic/temporal paths, zvec-grep workspace shadow probing for code executors, and a local headroom proxy starter aligned with the fusion plan defaults. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Local zvec-grep workspace smoke (loopback/dev only).
|
||||
*/
|
||||
import { searchZvecWorkspace } from '../memind-zvec-workspace.mjs';
|
||||
|
||||
const query = process.env.MEMIND_ZVEC_SMOKE_QUERY ?? 'context budget';
|
||||
const mode = process.env.MEMIND_ZVEC_WORKSPACE_MODE ?? 'shadow';
|
||||
|
||||
const result = searchZvecWorkspace({
|
||||
query,
|
||||
env: {
|
||||
...process.env,
|
||||
MEMIND_ZVEC_WORKSPACE_MODE: mode,
|
||||
},
|
||||
});
|
||||
|
||||
console.log('ZVEC_WORKSPACE_PROBE:');
|
||||
console.log(` mode=${result.mode}`);
|
||||
console.log(` query=${result.query}`);
|
||||
console.log(` hits=${result.hitCount ?? 0}`);
|
||||
if (result.skipped) {
|
||||
console.error(`ZVEC_WORKSPACE_FAIL: ${result.reason}`);
|
||||
process.exit(1);
|
||||
}
|
||||
if (!result.hits?.length) {
|
||||
console.error('ZVEC_WORKSPACE_FAIL: no hits (run zg index in repo root first)');
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(`ZVEC_WORKSPACE_OK: top=${result.hits[0].path}:${result.hits[0].startLine}`);
|
||||
@@ -0,0 +1,63 @@
|
||||
#!/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_BASE_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);
|
||||
});
|
||||
Reference in New Issue
Block a user