autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
275 lines (274 loc) • 8.59 kB
TypeScript
/**
* Mission Briefing 构建器 — 外部 Agent 驱动 Bootstrap 的核心数据构建
*
* 将 Phase 1-4 的分析结果(AST / EntityGraph / DepGraph / Guard)
* + 维度定义 + 提交规范 + 执行计划 整合为一站式 Mission Briefing,
* 让外部 Agent (Cursor/Copilot) 拥有全部必要上下文来完成代码分析。
*
* 设计原则:
* - 100KB 响应硬上限,大项目自动降级压缩
* - 文件内容永远不包含 → Agent 自己读更快
* - Example 按项目主语言自适应
* - Tier 编号使用 1/2/3(与 tier-scheduler.js 一致)
*
* @module bootstrap/MissionBriefingBuilder
*/
import type { AstSummary, CallGraphResult, CodeEntityGraphResult, DependencyGraph, DimensionDef, GuardAudit, IncrementalPlan, LocalPackageModule } from '#types/project-snapshot.js';
/** Guard rule 聚合条目 */
interface RuleMapEntry {
ruleId: string;
count: number;
example: string | null;
}
/** 维度任务 (enrichDimensionTask 返回值) */
interface DimensionTask {
id: string;
label?: string;
tier: number;
outputType: string;
status: string;
analysisGuide: string | Record<string, unknown>;
submissionSpec: {
preSubmitChecklist?: Record<string, unknown>;
[key: string]: unknown;
};
skillMeta?: {
name: string;
description: string;
format: string;
};
evidenceStarters?: Record<string, {
hint: string;
data: unknown;
}>;
}
/** Evidence starters 选项 */
interface EvidenceStarterOpts {
astData?: AstSummary | null;
guardAudit?: GuardAudit | null;
depGraphData?: DependencyGraph | null;
callGraphResult?: CallGraphResult | null;
panoramaResult?: Record<string, unknown> | null;
}
/** Target 信息 */
interface TargetInfo {
name: string;
type?: string;
inferredRole?: string;
fileCount?: number;
}
/** 压缩后的协议 */
interface CompressedProtocol {
name: string;
file?: string | null;
methodCount: number;
conformers?: string[];
}
/** 压缩后的 AST 类 */
interface CompressedAstClass {
name: string;
kind?: string;
superclass?: string | null;
file?: string | null;
methodCount: number;
protocols?: string[];
}
/** Mission Briefing 结构 */
interface MissionBriefing {
projectMeta: Record<string, unknown>;
ast: {
available: boolean;
compressionLevel?: string;
summary?: string | {
text: string;
kindDistribution: Record<string, number>;
insight: string;
};
classes: CompressedAstClass[];
protocols: CompressedProtocol[];
categories?: {
baseClass?: string;
name: string;
file?: string | null;
methods: string[];
}[];
patterns?: Record<string, unknown>;
metrics?: {
totalMethods?: number;
avgMethodsPerClass?: number;
maxNestingDepth?: number;
complexMethods?: number;
longMethods?: number;
} | null;
};
architectureOverview?: {
style: string;
layers: {
name: string;
modules: string[];
fileCount: number;
role: string;
}[];
externalDeps: {
name: string;
role: string;
}[];
keyInsights: string[];
} | null;
technologyStack?: {
name: string;
role: string;
usedBy: string[];
}[] | null;
keyAbstractions?: {
name: string;
kind: string;
module: string;
significance: string;
detail: string;
}[] | null;
codeEntityGraph: {
totalEntities: number;
totalEdges: number;
} | null;
callGraph: {
methodEntities: number;
callEdges: number;
durationMs: number;
} | null;
dependencyGraph: {
nodes: {
id: string;
label: string;
fileCount?: number;
dependentCount?: number;
}[];
edges: unknown[];
} | null;
guardFindings: {
totalViolations: number;
errors: number;
warnings: number;
topViolations: RuleMapEntry[];
} | null;
targets: {
name: string;
type: string;
inferredRole?: string;
fileCount?: number;
}[];
dimensions: DimensionTask[];
languageExtension: unknown;
submissionSchema: Record<string, unknown>;
languageStats: Record<string, number> | null;
executionPlan: {
tiers: unknown[];
totalDimensions: number;
workflow: string;
};
panorama: {
layers: Array<{
level: number;
name: string;
modules: string[];
}>;
couplingHotspots: Array<{
module: string;
fanIn: number;
fanOut: number;
}>;
cyclicDependencies: Array<{
cycle: string[];
severity: string;
}>;
knowledgeGaps: Array<{
dimension: string;
dimensionName: string;
recipeCount: number;
status: string;
priority: string;
}>;
} | null;
mustCoverModules: {
totalLocalPackages: number;
modules: {
name: string;
packageName: string;
fileCount: number;
inferredRole?: string;
keyFiles: string[];
}[];
instruction: string;
} | null;
session: Record<string, unknown>;
meta?: {
responseSizeKB: number;
compressionLevel: string;
warnings?: string[];
};
[key: string]: unknown;
}
/** buildMissionBriefing 参数 */
interface MissionBriefingParams {
projectMeta: Record<string, unknown>;
astData?: AstSummary | null;
codeEntityResult?: CodeEntityGraphResult | null;
callGraphResult?: CallGraphResult | null;
depGraphData?: DependencyGraph | null;
guardAudit?: GuardAudit | null;
targets?: (string | TargetInfo)[];
activeDimensions: DimensionDef[];
session: {
toJSON(): Record<string, unknown>;
};
languageExtension?: unknown;
incrementalPlan?: IncrementalPlan | null;
languageStats?: Record<string, number> | null;
panoramaResult?: Record<string, unknown> | null;
localPackageModules?: LocalPackageModule[];
}
/**
* 从 Phase 1-4 数据中为维度提取证据启发
*
* 将原本的"原始 AST / Guard 数据"转化为维度关联的结构化引导,
* 让外部 Agent 更有方向性地开始分析:
* - 与维度相关的 AST 类/协议/模式
* - Guard 违规中与维度话题相关的发现
* - 依赖图中与维度相关的模块关系
*
* 设计对标: 内部 Agent 的 buildProducerPromptV2 提供结构化 findings 和 code evidence,
* 外部 Agent 的 evidenceStarters 从 Phase 1-4 数据中提供类似的结构化起点。
*
* @param dim 维度定义
* @param [opts.astData] analyzeProject() 结果
* @param [opts.guardAudit] GuardCheckEngine.auditFiles() 结果
* @param [opts.depGraphData] 依赖图
* @returns evidenceStarters 对象,为空则返回 undefined
*/
export declare function buildEvidenceStarters(dim: DimensionDef, { astData, guardAudit, depGraphData, callGraphResult, panoramaResult }: EvidenceStarterOpts): {
[k: string]: {
hint: string;
data: unknown;
strength: number;
};
} | undefined;
/**
* 构建 Mission Briefing
*
* @param opts.projectMeta 项目元数据
* @param opts.astData analyzeProject() 原始结果
* @param opts.codeEntityResult CodeEntityGraph.populateFromAst() 结果
* @param opts.depGraphData discoverer.getDependencyGraph() 结果
* @param opts.guardAudit GuardCheckEngine.auditFiles() 结果
* @param opts.targets allTargets 列表
* @param opts.activeDimensions resolveActiveDimensions() 结果
* @param opts.skills 已加载的 bootstrap skills
* @param opts.session BootstrapSession 实例
* @returns Mission Briefing 响应数据
*/
export declare function buildMissionBriefing({ projectMeta, astData, codeEntityResult, callGraphResult, depGraphData, guardAudit, targets, activeDimensions, session, languageExtension, // §7.1: 语言扩展(反模式、Guard 规则、Agent 注意事项)
incrementalPlan, // §7.3: 增量 Bootstrap 评估结果
languageStats, // §7.4: 完整语言分布统计
panoramaResult, // §M1: Phase 1.8 全景数据
localPackageModules, }: MissionBriefingParams): MissionBriefing;
export {};