Files
memind/memind-zvec-workspace.test.mjs
T
john 40e4a527fe 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>
2026-09-09 21:28:04 +08:00

45 lines
1.3 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
formatZvecWorkspaceBlock,
resolveZvecWorkspaceMode,
searchZvecWorkspace,
} from './memind-zvec-workspace.mjs';
test('resolveZvecWorkspaceMode defaults to off', () => {
assert.equal(resolveZvecWorkspaceMode({}), 'off');
assert.equal(resolveZvecWorkspaceMode({ MEMIND_ZVEC_WORKSPACE_MODE: 'shadow' }), 'shadow');
});
test('searchZvecWorkspace is no-op when disabled', () => {
const result = searchZvecWorkspace({
query: 'headroom',
env: { MEMIND_ZVEC_WORKSPACE_MODE: 'off' },
});
assert.equal(result.skipped, true);
assert.equal(result.hits.length, 0);
});
test('formatZvecWorkspaceBlock renders hit paths', () => {
const block = formatZvecWorkspaceBlock({
hits: [{ path: 'a.mjs', startLine: 1, endLine: 3, matchedBy: 'fts' }],
});
assert.match(block, /a\.mjs:1-3/);
});
test('searchZvecWorkspace parses zg query stdout', () => {
const stdout = [
'query groups (1):',
'#1 matchedBy=fts docs/plan.md:10-20',
'#2 matchedBy=vector src/app.mjs:3-8',
].join('\n');
const result = searchZvecWorkspace({
query: 'plan',
env: { MEMIND_ZVEC_WORKSPACE_MODE: 'shadow' },
cwd: '/tmp',
spawnImpl: () => ({ status: 0, stdout, stderr: '' }),
});
assert.equal(result.hitCount, 2);
assert.equal(result.hits[0].path, 'docs/plan.md');
});