/** * ContextInjector — 根据当前任务上下文,从 Repository 拉取相关知识条目注入 * * 编排流程:Repository.search → RelevanceScorer → InjectionFormatter → InjectionPolicy → 组装响应 * 对应 arc42 §5 Intent Enhancer 域 E 的 ContextInjector(FR-E01) */ import type { KnowledgeType, KnowledgeSource, KnowledgeEntry } from '../types/index.js'; import type { KnowledgeRepository } from '../repository/index.js'; import { type RelevanceScorerOptions, type ScoredEntry } from './relevance-scorer.js'; import { type InjectionFormat, type DisclosureMode } from './injection-formatter.js'; export interface InjectionRequest { userQuery: string; tokenBudget: number; preferredTypes?: KnowledgeType[]; format?: InjectionFormat; minScore?: number; topK?: number; /** * Disclosure mode for progressive disclosure. * - 'summary': inject one-line descriptions only (saves tokens, for system prompt) * - 'full': inject complete content (for deep context) * Default: 'full' */ disclosureMode?: DisclosureMode; } export interface InjectionResponse { injectedContext: string; entries: Array<{ entryId: string; type: KnowledgeType; summary: string; sourceRef: KnowledgeSource; }>; tokensUsed: number; truncated: boolean; /** The disclosure mode used for this injection */ disclosureMode: DisclosureMode; } /** Interface for any scorer compatible with ContextInjector */ export interface ScorerLike { score(query: string, entries: KnowledgeEntry[]): Promise; } export interface ContextInjectorOptions { repository: KnowledgeRepository; scorer?: RelevanceScorerOptions; /** Optional pre-built scorer instance (e.g. SemanticRelevanceScorer). Takes precedence over `scorer` options. */ scorerInstance?: ScorerLike; defaultFormat?: InjectionFormat; defaultTopK?: number; /** Enable FR-E05 AC6 injection value gate (LLM-based). Default: false */ enableValueGate?: boolean; } export declare class ContextInjector { private readonly repository; private readonly scorer; private readonly defaultFormat; private readonly defaultTopK; private readonly enableValueGate; constructor(options: ContextInjectorOptions); inject(request: InjectionRequest): Promise; /** * Load full content for a specific entry by ID. * Used in progressive disclosure: after summary-only injection, * the agent can request full content for entries it needs. */ injectById(entryId: string, format?: InjectionFormat, maxTokens?: number): Promise; } //# sourceMappingURL=context-injector.d.ts.map