Build: Release v2.80.28
This commit is contained in:
+22
-3
@@ -16,6 +16,7 @@ import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import { BrainProfile } from '../config';
|
||||
import { findBrainFiles, summarizeText } from '../utils';
|
||||
import { isInside } from '../lib/paths';
|
||||
import { MemoryManager } from '../memory';
|
||||
import { RetrievalChunk, RetrievalResult, ContextBudgetConfig } from './types';
|
||||
import { tokenize, expandQuery, scoreTfIdf, extractBestExcerpt } from './scoring';
|
||||
@@ -33,6 +34,14 @@ interface RetrievalOptions {
|
||||
contextBudget?: Partial<ContextBudgetConfig>;
|
||||
brainFileLimit?: number;
|
||||
includeRawConversations?: boolean;
|
||||
/**
|
||||
* Optional absolute folder paths constraining brain-file search to those
|
||||
* subtrees. When provided and non-empty, only brain files inside one of
|
||||
* the folders are considered. Empty / undefined preserves whole-brain
|
||||
* search (legacy behavior). Folders that escape the brain root are
|
||||
* silently dropped by the caller (see `agentKnowledgeMap.resolveScopeForAgent`).
|
||||
*/
|
||||
scopeFolders?: string[];
|
||||
}
|
||||
|
||||
export class RetrievalOrchestrator {
|
||||
@@ -50,15 +59,21 @@ export class RetrievalOrchestrator {
|
||||
fusionLog.push(`Expanded tokens: [${expandedTokens.slice(0, 15).join(', ')}]`);
|
||||
|
||||
// ── ① Brain File Search (TF-IDF enhanced) ──
|
||||
const scopeFolders = options.scopeFolders ?? [];
|
||||
const brainChunks = this.searchBrainFiles(
|
||||
query,
|
||||
expandedTokens,
|
||||
options.brain,
|
||||
options.brainFileLimit || 8,
|
||||
options.includeRawConversations || false
|
||||
options.includeRawConversations || false,
|
||||
scopeFolders
|
||||
);
|
||||
allChunks.push(...brainChunks);
|
||||
fusionLog.push(`Brain search: ${brainChunks.length} chunks found`);
|
||||
fusionLog.push(
|
||||
scopeFolders.length > 0
|
||||
? `Brain search (scoped to ${scopeFolders.length} folder(s)): ${brainChunks.length} chunks`
|
||||
: `Brain search: ${brainChunks.length} chunks found`
|
||||
);
|
||||
|
||||
// ── ② Memory Layers ──
|
||||
const memoryChunks = this.searchMemoryLayers(
|
||||
@@ -106,10 +121,14 @@ export class RetrievalOrchestrator {
|
||||
expandedTokens: string[],
|
||||
brain: BrainProfile,
|
||||
limit: number,
|
||||
includeRaw: boolean
|
||||
includeRaw: boolean,
|
||||
scopeFolders: string[] = []
|
||||
): RetrievalChunk[] {
|
||||
try {
|
||||
const scoped = (file: string) => scopeFolders.length === 0
|
||||
|| scopeFolders.some((folder) => isInside(folder, file));
|
||||
const allFiles = findBrainFiles(brain.localBrainPath)
|
||||
.filter(scoped)
|
||||
.filter((file) => includeRaw || !this.isRawConversation(path.relative(brain.localBrainPath, file)));
|
||||
|
||||
if (allFiles.length === 0) return [];
|
||||
|
||||
Reference in New Issue
Block a user