autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
126 lines (125 loc) • 4.13 kB
TypeScript
/**
* pipeline/dimension-context.js — 跨维度上下文管理 (v6)
*
* ⚠️ 内部 Agent 专用 — 被 orchestrator.js 的 PipelineStrategy analyze 阶段调用。
* 外部 Agent 不使用此模块(外部 Agent 的跨维度上下文由 BootstrapSession.js + EpisodicMemory 管理)。
*
* 在 PipelineStrategy 按维度分批执行时,维护跨维度的上下文:
* - 项目基础信息 (不变)
* - 已完成维度的 DimensionDigest (累积)
* - 已提交候选的摘要列表 (累积)
*
* 确保每个维度的 Analyst 阶段都能看到前序维度的分析结论,
* 实现跨维度透明互补。
*
* @module pipeline/dimension-context
*/
/** Project base info (immutable during a bootstrap session) */
interface ProjectContext {
projectName: string;
primaryLang: string;
fileCount: number;
targetCount: number;
modules: string[];
depGraph?: Record<string, unknown>;
astMetrics?: Record<string, unknown>;
guardSummary?: Record<string, unknown>;
}
/** Summary of a completed dimension's analysis */
interface DimensionDigest {
summary?: string;
candidateCount?: number;
candidateTitles?: string[];
keyFindings?: string[];
crossRefs?: Record<string, string>;
gaps?: string[];
remainingTasks?: Array<{
signal?: string;
} | string>;
dimId?: string;
completedAt?: number;
}
/** Summary of a submitted candidate */
interface CandidateSummary {
dimId: string;
title: string;
subTopic: string;
summary?: string;
}
/** Serialized form of DimensionContext (for checkpoint restore) */
interface DimensionContextJSON {
projectContext: ProjectContext;
completedDimensions?: Record<string, DimensionDigest>;
submittedCandidates?: CandidateSummary[];
}
/**
* DimensionContext — 跨维度上下文容器
*
* 在单次 bootstrap 会话中创建一次,按维度累积上下文。
*/
export declare class DimensionContext {
completedDimensions: Map<string, DimensionDigest>;
projectContext: ProjectContext;
submittedCandidates: CandidateSummary[];
/** @param projectContext 项目基础信息 (全程不变) */
constructor(projectContext: ProjectContext);
/**
* 维度完成后存储其摘要
*
* @param dimId 维度 ID
* @param digest 维度分析摘要
*/
addDimensionDigest(dimId: string, digest: DimensionDigest): void;
/**
* 记录已提交的候选
*
* @param candidateInfo { title, subTopic, summary }
*/
addSubmittedCandidate(dimId: string, candidateInfo: {
title?: string;
subTopic?: string;
summary?: string;
}): void;
/**
* 构建给 Agent 的上下文快照
*
* @param currentDimId 当前维度 ID
*/
buildContextForDimension(currentDimId: string): {
project: ProjectContext;
previousDimensions: Record<string, Partial<DimensionDigest>>;
existingCandidates: {
dimId: string;
title: string;
subTopic: string;
}[];
currentDimension: string;
};
/** 重算某维度时,获取该维度已有候选 */
getExistingCandidatesForDimension(dimId: string): CandidateSummary[];
/**
* 获取所有维度摘要的紧凑文本表示
* 用于 Agent prompt 中注入
*/
getDigestsSummaryText(): string;
/** 将完整上下文序列化为 JSON (用于断点恢复) */
toJSON(): {
projectContext: ProjectContext;
completedDimensions: {
[k: string]: DimensionDigest;
};
submittedCandidates: CandidateSummary[];
};
/** 从 JSON 恢复上下文 (断点恢复) */
static fromJSON(json: DimensionContextJSON): DimensionContext;
}
/**
* 从 Agent 的最终回复中解析 DimensionDigest
*
* Agent 被要求在回复末尾包含 JSON 格式的 dimensionDigest。
* 此函数从自由格式文本中提取该 JSON 块。
*
* @param reply Agent 的完整回复文本
*/
export declare function parseDimensionDigest(reply: string | null | undefined): DimensionDigest | null;
export {};