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'); });