autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
65 lines (64 loc) • 2.2 kB
TypeScript
/**
* AiScanService — `asd ais [Target]` 的核心逻辑
*
* 按文件粒度扫描 Target 源码,通过 AgentFactory.scanKnowledge 提取 Recipe,
* 创建后自动发布(PENDING → ACTIVE),无需 Dashboard 人工审核。
*
* Agent(LLM) 直接分析代码 + 使用 AST 工具,输出 Recipe 结构化 JSON。
* 本服务可脱离 MCP 独立在 CLI 运行。
*/
import Logger from '../infrastructure/logging/Logger.js';
export declare class AiScanService {
agentFactory: {
scanKnowledge: (opts: Record<string, unknown>) => Promise<Record<string, unknown>>;
} | null;
container: {
get: (name: string) => Record<string, unknown>;
singletons?: Record<string, unknown>;
};
logger: ReturnType<typeof Logger.getInstance>;
projectRoot: string;
/**
* @param opts.container ServiceContainer 实例
* @param opts.projectRoot 项目根目录
*/
constructor({ container, projectRoot, }: {
container: {
get: (name: string) => Record<string, unknown>;
singletons?: Record<string, unknown>;
};
projectRoot: string;
});
/**
* 扫描指定 Target(或全部 Target)的源文件并提取 Recipe,创建后直接发布
* @param targetName Target 名称;null 时扫描全部
* @param opts { maxFiles, dryRun, concurrency }
* @returns >}
*/
scan(targetName: string | null, opts?: {
maxFiles?: number;
dryRun?: boolean;
}): Promise<{
published: number;
files: number;
errors: string[];
skipped: number;
}>;
/** 收集 Target 源文件 */
_collectFiles(targetName: string | null, maxFiles: number): Promise<{
name: string;
path: string;
relativePath: string;
targetName: string;
}[]>;
/** 递归扫描目录(fallback) */
_walkDir(dir: string, files: Array<{
name: string;
path: string;
relativePath: string;
targetName: string;
}>, maxFiles: number, targetName: string): void;
/** 从文件名推断语言 */
_inferLanguage(filename: string): string;
}
export default AiScanService;