autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
121 lines (120 loc) • 3.73 kB
TypeScript
/**
* rescan-internal.ts — 内部 Agent 增量扫描
*
* 与 rescan-external.ts(为外部 IDE Agent 生成 Mission Briefing)不同,
* 本文件由内置 AI pipeline(fillDimensionsV3)在服务端自动完成知识补齐。
*
* 流程:
* 1. snapshotRecipes — 快照保留知识
* 2. rescanClean — 清理衍生缓存
* 2.5 Recipe 文件 ↔ DB 一致性恢复
* 3. Phase 1-4 全量分析(文件收集→AST→依赖→Guard→维度)
* 4. RecipeRelevanceAuditor — 证据验证 + 快速衰退
* 5. 计算 gap 维度(需要补齐的维度)
* 5.5 BootstrapSessionManager — 缓存 Phase 结果供复用
* 6. 快速返回骨架 → 异步 fillDimensionsV3 填充 gap 维度
* 7. 前端通过 Socket.io 接收维度完成进度
*
* @module handlers/rescan-internal
*/
import type { RescanInput } from '#shared/schemas/mcp-tools.js';
import type { McpContext } from './types.js';
interface RescanLogger {
info(...args: unknown[]): void;
warn(...args: unknown[]): void;
error(...args: unknown[]): void;
}
interface RescanMcpContext extends McpContext {
logger: RescanLogger;
}
interface RescanInternalArgs extends RescanInput {
/** 跳过异步填充(测试用) */
skipAsyncFill?: boolean;
}
/**
* rescanInternal — 内部 Agent 增量扫描
*
* 同步返回骨架(含 audit 摘要 + 异步会话 ID),
* 后台通过 fillDimensionsV3 对 gap 维度执行 AI 补齐。
*/
export declare function rescanInternal(ctx: RescanMcpContext, args: RescanInternalArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: {
message: string;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
rescan: {
preservedRecipes: number;
cleanedTables: number;
cleanedFiles: number;
reason: string | null;
};
relevanceAudit: {
totalAudited: number;
healthy: number;
watch: number;
decay: number;
severe: number;
dead: number;
proposalsCreated: number;
immediateDeprecated: number;
};
gapAnalysis: {
totalDimensions: number;
gapDimensions: number;
skippedDimensions: string[];
gaps: {
dimensionId: string;
label: string | undefined;
existing: number;
gap: number;
}[];
};
languageStats: Record<string, number>;
primaryLanguage: string | null;
guardSummary: {
totalViolations: number;
errors: number;
warnings: number;
} | null;
astSummary: {
classes: number;
protocols: number;
categories: number;
} | null;
codeEntityGraph: {
totalEntities: number;
totalEdges: number;
} | null;
callGraph: {
entitiesUpserted: number;
edgesCreated: number;
} | null;
panorama: Record<string, unknown> | null;
bootstrapSession: Record<string, unknown> | null;
sessionId: string | null;
asyncFill: boolean;
status: string;
files: number;
targets: number;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;
export {};