mirror of
https://github.com/garrytan/gbrain.git
synced 2026-07-27 22:15:33 +00:00
* fix(integrations): parameterize resolver-row fence by recipe id The install fence was hardcoded gbrain:agent-voice:resolver-rows, so any second copy-into-host-repo recipe wrote a mislabeled block (and refresh/ uninstall keyed on recipe id would miss it). Derive it from manifest.recipe. * feat(context): Retrieval Reflex — teach the agent when/what to retrieve (#1981) Deterministic per-turn pointer layer in the context engine: a zero-LLM, precision-biased scan resolves salient entities (names, @handles) to existing brain pages and injects compact pointers (name → slug → safe synopsis). Detect + point, never auto-dump. Fail-open, capped, suppression on prior context only. Engine-aware resolver ladder (no second DB connection): host ctx.brainQuery → PGLite serve resolve IPC (unix socket) → Postgres cached direct → disabled. Synopsis runs through get_page's privacy strip. Plus the retrieval-reflex recipe + policy skill, the retrieval_reflex_health doctor check, config gate, and the init next-step hint. * chore: bump version and changelog (v0.42.38.0) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(architecture): KEY_FILES entries for Retrieval Reflex surface (#1981) Document the new src/core/context/ modules, the context-engine resolver ladder, the serve resolve IPC, the retrieval_reflex_health doctor check, and the recipe-id-keyed install fence. Current-state only. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
47 lines
1.9 KiB
TypeScript
47 lines
1.9 KiB
TypeScript
/**
|
|
* Doctor retrieval_reflex_health check (#1981, T8).
|
|
*/
|
|
import { describe, test, expect, afterEach } from 'bun:test';
|
|
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
import { tmpdir } from 'node:os';
|
|
import { join } from 'node:path';
|
|
import { buildRetrievalReflexCheck } from '../src/commands/doctor.ts';
|
|
|
|
const origEnv = process.env.GBRAIN_RETRIEVAL_REFLEX;
|
|
afterEach(() => {
|
|
if (origEnv === undefined) delete process.env.GBRAIN_RETRIEVAL_REFLEX;
|
|
else process.env.GBRAIN_RETRIEVAL_REFLEX = origEnv;
|
|
});
|
|
|
|
describe('buildRetrievalReflexCheck', () => {
|
|
test('disabled via env → warn, names the right check', () => {
|
|
process.env.GBRAIN_RETRIEVAL_REFLEX = 'false';
|
|
const c = buildRetrievalReflexCheck(null);
|
|
expect(c.name).toBe('retrieval_reflex_health');
|
|
expect(c.status).toBe('warn');
|
|
expect(c.message).toContain('disabled');
|
|
expect((c.details as any)?.enabled).toBe(false);
|
|
});
|
|
|
|
test('enabled → reports policy-skill install state in details', () => {
|
|
process.env.GBRAIN_RETRIEVAL_REFLEX = 'true';
|
|
const dir = mkdtempSync(join(tmpdir(), 'rr-doctor-'));
|
|
mkdirSync(join(dir, 'retrieval-reflex'), { recursive: true });
|
|
writeFileSync(join(dir, 'retrieval-reflex', 'SKILL.md'), '# stub\n');
|
|
const c = buildRetrievalReflexCheck(dir);
|
|
expect(c.name).toBe('retrieval_reflex_health');
|
|
expect((c.details as any)?.enabled).toBe(true);
|
|
expect((c.details as any)?.policy_skill_installed).toBe(true);
|
|
rmSync(dir, { recursive: true, force: true });
|
|
});
|
|
|
|
test('enabled, policy skill absent → message includes the install hint', () => {
|
|
process.env.GBRAIN_RETRIEVAL_REFLEX = 'true';
|
|
const dir = mkdtempSync(join(tmpdir(), 'rr-doctor-2-'));
|
|
const c = buildRetrievalReflexCheck(dir);
|
|
expect((c.details as any)?.policy_skill_installed).toBe(false);
|
|
expect(c.message).toContain('gbrain integrations install retrieval-reflex');
|
|
rmSync(dir, { recursive: true, force: true });
|
|
});
|
|
});
|