mirror of
https://github.com/FoggedLens/deflock.git
synced 2026-08-17 16:07:18 +02:00
34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
|
|
const KB_DIR = join(__dirname, '../../kb');
|
|
|
|
export interface KbDocument {
|
|
filename: string;
|
|
content: string;
|
|
}
|
|
|
|
export function loadKnowledgeBase(dir: string = KB_DIR): KbDocument[] {
|
|
if (!existsSync(dir)) return [];
|
|
return readdirSync(dir)
|
|
// CLAUDE.md documents this directory's conventions for engineers — it's not grounding
|
|
// content and must never be citable as a kb_reference.
|
|
.filter(f => f.endsWith('.md') && f.toUpperCase() !== 'CLAUDE.MD')
|
|
.sort()
|
|
.map(filename => ({ filename, content: readFileSync(join(dir, filename), 'utf-8') }));
|
|
}
|
|
|
|
export function formatKnowledgeBaseForPrompt(docs: KbDocument[]): string {
|
|
if (docs.length === 0) {
|
|
return [
|
|
'## Knowledge base',
|
|
'',
|
|
'No knowledge base documents are currently loaded. Always set kb_reference to "none". For',
|
|
'donation, api_data, camera_correction, and other, this means you cannot ground a reply',
|
|
'in policy yet — set suggested_action to internal_note_only rather than inventing an answer.',
|
|
].join('\n');
|
|
}
|
|
const sections = docs.map(d => `### ${d.filename}\n\n${d.content}`).join('\n\n---\n\n');
|
|
return `## Knowledge base\n\nCite the filename of the document you draw from as kb_reference. If none of these\ndocuments cover the question, set kb_reference to "none".\n\n${sections}`;
|
|
}
|