UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

400 lines (399 loc) 11.5 kB
/** * ProjectSnapshot 统一项目快照类型定义 * * 这是所有 Phase 1-4 数据的唯一类型来源(Single Source of Truth)。 * 消除了之前在 bootstrap-phases.ts、MissionBriefingBuilder.ts、 * handler-types.ts、rescan-internal.ts 等文件中重复定义的类型。 * * 设计原则: * 1. **不可变** 创建后通过 Object.freeze 冻结 * 2. **完整** 包含 Phase 1-4 全部产出 * 3. **类型化** 每个字段有明确接口,不使用 `any` * 4. **单一定义** 项目分析数据的唯一类型来源 * * @module types/project-snapshot */ /** 项目级别的文件信息,来自 Phase 1 扫描 */ export interface SnapshotFile { name: string; path: string; relativePath: string; content: string; targetName: string; language?: string; totalLines?: number; priority?: string; truncated?: boolean; } /** 构建目标 (Target),来自 Phase 1 Discoverer */ export interface SnapshotTarget { name: string; type?: string; framework?: string; packageName?: string; inferredRole?: string; fileCount?: number; /** 标记来自子包的 target */ isLocalPackage?: boolean; } /** 本地子包模块信息 */ export interface LocalPackageModule { name: string; packageName: string; fileCount: number; inferredRole?: string; keyFiles?: string[]; } /** 语言统计 */ export interface LanguageProfile { primaryLang: string; stats: Record<string, number>; secondary?: string[]; isMultiLang?: boolean; } /** AST 分析摘要,来自 Phase 1.5 */ export interface AstSummary { classes?: AstClassInfo[]; protocols?: AstProtocolInfo[]; categories?: AstCategoryInfo[]; fileSummaries?: AstFileSummary[]; patternStats?: Record<string, unknown>; projectMetrics?: ProjectMetrics; fileCount?: number; } export interface AstClassInfo { name: string; kind?: string; superclass?: string; methodCount?: number; methods?: unknown[]; protocols?: string[]; conformedProtocols?: string[]; file?: string; relativePath?: string; targetName?: string; } export interface AstProtocolInfo { name: string; file?: string; relativePath?: string; methodCount?: number; methods?: unknown[]; conformers?: string[]; targetName?: string; } export interface AstCategoryInfo { baseClass?: string; extendedClass?: string; name?: string; file?: string; relativePath?: string; methods?: Array<string | { name: string; }>; } export interface AstMethodInfo { name: string; className?: string; isAsync?: boolean; complexity?: number; file?: string; line?: number; lines?: number; bodyLines?: number; [key: string]: unknown; } export interface AstFileSummary { exports?: unknown[]; methods?: AstMethodInfo[]; } export interface ProjectMetrics { totalMethods?: number; complexMethods?: AstMethodInfo[]; longMethods?: AstMethodInfo[]; avgMethodsPerClass?: number; maxNestingDepth?: number; } /** AST 上下文文本(用于 prompt),来自 Phase 1.5 */ export type AstContext = string | null; /** 代码实体图结果,来自 Phase 1.6 */ export interface CodeEntityGraphResult { entitiesUpserted?: number; edgesCreated?: number; entityCount?: number; edgeCount?: number; } /** 调用图结果,来自 Phase 1.7 */ export interface CallGraphResult { entitiesUpserted?: number; edgesCreated?: number; durationMs?: number; } /** 全景分析结果,来自 Phase 1.8 */ export interface PanoramaResult { 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; }>; modules?: unknown; gaps?: unknown; [key: string]: unknown; } /** 依赖关系图,来自 Phase 2 */ export interface DependencyGraph { nodes?: Array<DependencyNode | string>; edges?: Array<DependencyEdge>; [key: string]: unknown; } export interface DependencyNode { id?: string; label?: string; fileCount?: number; } export interface DependencyEdge { from: string; to: string; type?: string; [key: string]: unknown; } /** Guard 审计结果,来自 Phase 3 */ export interface GuardAudit { files?: GuardAuditFileEntry[]; summary?: GuardAuditSummary; crossFileViolations?: GuardViolation[]; rules?: unknown[]; [key: string]: unknown; } export interface GuardAuditFileEntry { filePath: string; violations: GuardViolation[]; } export interface GuardViolation { ruleId?: string; severity?: string; message?: string; line?: number; fixSuggestion?: string | null; locations?: Array<{ filePath: string; line?: number; }>; } export interface GuardAuditSummary { totalErrors?: number; totalWarnings?: number; totalViolations?: number; errors?: number; warnings?: number; } /** * 维度定义 (来自统一维度注册表 DimensionRegistry) * * 兼容旧 BaseDimension 字段 + UnifiedDimension 字段 */ export interface DimensionDef { id: string; label?: string; guide?: string; knowledgeTypes?: string[]; skillWorthy?: boolean; skillMeta?: { name: string; description: string; } | Record<string, unknown> | null; dualOutput?: boolean; tierHint?: number; conditions?: { languages?: string[]; frameworks?: string[]; }; /** 层级 (统一维度注册表新增) */ layer?: 'universal' | 'language' | 'framework'; /** 输出模式 (统一维度注册表新增) */ outputMode?: 'candidate-only'; } /** Enhancement Pack 信息,来自 Phase 4 */ export interface EnhancementPackInfo { id: string; displayName: string; extraDimensions?: number; guardRules?: number; patterns?: Array<Record<string, unknown>>; } /** Phase 执行报告 */ export interface PhaseReport { phases: Record<string, Record<string, unknown>>; startTime: number; totalMs?: number; [key: string]: unknown; } /** 增量计划(rescan 场景) */ export interface IncrementalPlan { mode?: string; canIncremental?: boolean; affectedDimensions?: string[]; skippedDimensions?: string[]; reason?: string; diff?: { added: unknown[]; modified: unknown[]; deleted: unknown[]; unchanged: unknown[]; changeRatio?: number; }; dimensions?: Array<{ id: string; status?: string; }>; changedFiles?: string[]; [key: string]: unknown; } /** 已有 Recipe 信息(rescan 去重 + lifecycle 感知) */ export interface ExistingRecipeInfo { id: string; title: string; trigger: string; knowledgeType: string; doClause?: string; relevanceScore?: number; verdict?: string; /** lifecycle 感知状态(Evolution Agent 填充) */ status?: 'healthy' | 'decaying' | 'evolved' | 'deprecated'; /** 衰退原因(仅 decaying 状态) */ decayReason?: string; /** 审计分数 0-100(来自 RecipeRelevanceAuditor) */ auditScore?: number; /** Recipe 完整内容 Evolution Agent 读取以验证真实性 */ content?: { markdown?: string; rationale?: string; coreCode?: string; }; /** 源文件引用列表 Evolution Agent 读取以验证代码是否存在 */ sourceRefs?: string[]; /** 审计证据详情 作为 hint 提供给 Evolution Agent */ auditEvidence?: Record<string, unknown>; } /** Discoverer 摘要信息 */ export interface DiscovererInfo { id: string; displayName: string; } /** Minimal shape of BootstrapSession */ export interface BootstrapSessionShape { id: string; toJSON(): Record<string, unknown>; } /** Shape of the mission briefing returned by buildMissionBriefing */ export interface MissionBriefingResult { meta?: { warnings?: string[]; responseSizeKB?: number; [key: string]: unknown; }; [key: string]: unknown; } /** * ProjectSnapshot runAllPhases() 的完整产出。 * * 设计原则: * 1. **不可变** 创建后不应被修改 * 2. **完整** 包含所有 Phase 1-4 的产出 * 3. **类型化** 每个字段有明确的接口,不使用 `any` * 4. **单一定义** 这是项目分析数据的唯一类型来源 * * 用法: * - `buildProjectSnapshot()` runAllPhases() 返回值构建 * - 4 handler snapshot 读取数据,不再解构/重组 * - `snapshot-views.ts` 提供面向消费者的衍生视图 */ export interface ProjectSnapshot { readonly version: string; readonly timestamp: number; readonly projectRoot: string; readonly sourceTag?: string; readonly allFiles: readonly SnapshotFile[]; readonly allTargets: readonly SnapshotTarget[]; readonly discoverer: DiscovererInfo; readonly truncated: boolean; readonly language: LanguageProfile; readonly ast: AstSummary | null; readonly astContext: AstContext; readonly codeEntityGraph: CodeEntityGraphResult | null; readonly callGraph: CallGraphResult | null; readonly panorama: PanoramaResult | null; readonly dependencyGraph: DependencyGraph | null; readonly depEdgesWritten: number; readonly guardAudit: GuardAudit | null; readonly activeDimensions: readonly DimensionDef[]; readonly enhancementPackInfo: readonly EnhancementPackInfo[]; readonly enhancementPatterns: readonly Record<string, unknown>[]; readonly enhancementGuardRules: readonly unknown[]; readonly detectedFrameworks: readonly string[]; readonly langProfile: LanguageProfile; readonly targetsSummary: readonly SnapshotTarget[]; readonly localPackageModules: readonly LocalPackageModule[]; readonly phaseReport: PhaseReport | null; readonly warnings: readonly string[]; readonly incrementalPlan: IncrementalPlan | null; readonly isEmpty: boolean; } /** * 构建快照的输入参数 * runAllPhases() 的松散返回值到类型化快照的桥梁 */ export interface ProjectSnapshotInput { projectRoot: string; sourceTag?: string; allFiles: unknown[]; allTargets: unknown[]; discoverer: { id: string; displayName: string; [key: string]: unknown; }; langStats: Record<string, number>; truncated?: boolean; primaryLang: string | null; langProfile?: { secondary?: string[]; isMultiLang?: boolean; [key: string]: unknown; }; astProjectSummary: unknown; astContext: unknown; codeEntityResult: unknown; callGraphResult: unknown; panoramaResult: unknown; depGraphData: unknown; depEdgesWritten?: number; guardAudit: unknown; activeDimensions: unknown[]; enhancementPackInfo?: unknown[]; enhancementPatterns?: unknown[]; enhancementGuardRules?: unknown[]; detectedFrameworks?: string[]; targetsSummary?: unknown[]; localPackageModules?: unknown[]; report?: unknown; warnings?: string[]; incrementalPlan?: unknown; isEmpty?: boolean; }