feat(server): add institutional memory recall
- File-based memory under .boocode/memory/ (project/user/reference topics) - Hierarchical 4-scope scan: global → home → project → session - Keyword/tag relevance matching for query-based recall - Injected as <boocode-memory> block in system prompt at assembly - v1 recall-only (extract/dream deferred to v2)
This commit is contained in:
@@ -22,6 +22,8 @@ import { readFile, stat } from 'node:fs/promises';
|
||||
import type { Agent, Project, Session } from '../types/api.js';
|
||||
import { getAgentsMtimes } from './agents.js';
|
||||
import { resolveRoute } from './inference/provider.js';
|
||||
import { loadMemoryForSession } from './memory/recall.js';
|
||||
import { formatMemoryBlock } from './memory/prompt.js';
|
||||
|
||||
const BASE_SYSTEM_PROMPT = (projectPath: string) =>
|
||||
`You are BooCode Chat, a code investigation assistant. The user is working on a project located at ${projectPath}. Use the file-read tools (view_file, list_dir, grep, find_files) to investigate code when needed. Be concise. Cite file paths and line numbers when discussing code. Do not hallucinate file contents — read the file first. Tool results may be truncated; if so, narrow your query rather than guessing.`;
|
||||
@@ -164,7 +166,11 @@ export async function buildSystemPromptWithFingerprint(
|
||||
let out = BASE_SYSTEM_PROMPT(project.path);
|
||||
const guidance = await getContainerGuidance();
|
||||
if (guidance) {
|
||||
out += `\n\n--- Container guidance ---\n${guidance}\n--- end container guidance ---\n`;
|
||||
out += '\n\n--- Container guidance ---\n' + guidance + '\n--- end container guidance ---\n';
|
||||
}
|
||||
const memory = await loadMemoryForSession(project.path, session.id).catch(() => []);
|
||||
if (memory.length > 0) {
|
||||
out += '\n\n' + formatMemoryBlock(memory);
|
||||
}
|
||||
if (agent && agent.system_prompt.trim().length > 0) {
|
||||
out += '\n\n' + agent.system_prompt.trim();
|
||||
|
||||
Reference in New Issue
Block a user