autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
112 lines (110 loc) • 4.94 kB
TypeScript
/**
* MCP Handlers — Bootstrap 冷启动知识库初始化 (内部 Agent 路径)
*
* ⚠️ 本文件是「内部 Agent」冷启动路径 — 由 AutoSnippet 内置的 Analyst/Producer
* 双 Agent AI pipeline 自动完成知识提取。需要配置 AI Provider (API Key)。
*
* 调用方:
* - CLI: `asd bootstrap --knowledge`
* - AgentRuntime: `bootstrapKnowledgeTool` (infrastructure.js)
* - Dashboard HTTP: POST /api/bootstrap/knowledge
*
* 外部 Agent 路径(Cursor/Copilot 等 IDE Agent)请参见:
* - bootstrap-external.js — 无参数 Mission Briefing 入口
* - dimension-complete.js — 维度完成通知
* 外部 Agent 使用 read_file/grep_search 等原生能力自行分析代码,
* 不经过本文件的 Phase 5 AI pipeline。
*
* 内部 Agent 架构 (v5 + Async Fill):
*
* 同步阶段(快速返回,~1-3s):
* Phase 1 → 文件收集(SPM Target 源文件扫描)
* Phase 1.5 → AST 代码结构分析(Tree-sitter)
* Phase 2 → SPM 依赖关系 → knowledge_edges(模块级图谱)
* Phase 3 → Guard 规则审计
* Phase 4 → 构建响应骨架(filesByTarget + analysisFramework + 任务清单)
*
* 异步阶段(后台逐一填充,通过 Socket.io 推送进度):
* Phase 5 → 微观维度 × 子主题提取代码特征 → 创建 N 条 Candidate(PENDING 状态)
* skillWorthy 维度仅提取内容,不创建 Candidate(避免与 Skill 重复)
* anti-pattern 已移除 — 代码问题由 Guard 独立处理
* Phase 5.5 → 宏观维度(architecture/code-standard/project-profile/agent-guidelines)
* 自动聚合为 Project Skill → 写入 AutoSnippet/skills/(不产生 Candidate)
*
* 进度推送事件(Socket.io + EventBus):
* bootstrap:started — 骨架创建完成,携带任务清单
* bootstrap:task-started — 单个维度开始填充
* bootstrap:task-completed — 单个维度填充完成
* bootstrap:task-failed — 单个维度失败
* bootstrap:all-completed — 全部维度完成(前端弹出通知)
*
* 模块结构:
* bootstrap.js ← 内部 Agent 主入口 (本文件)
* bootstrap-external.js ← 外部 Agent 主入口 (Mission Briefing)
* bootstrap/patterns.js ← 多语言代码模式匹配(内部 Agent 专用)
* bootstrap/dimensions.js ← 7 维度知识提取器(内部 Agent 专用)
* bootstrap/projectSkills.js ← Phase 5.5 Project Skill 生成(内部 Agent 专用)
*/
import { bootstrapRefine } from './bootstrap/refine.js';
import type { McpContext } from './types.js';
export { bootstrapRefine };
interface BootstrapLogger {
info(...args: unknown[]): void;
warn(...args: unknown[]): void;
error(...args: unknown[]): void;
}
interface BootstrapMcpContext extends McpContext {
logger: BootstrapLogger;
}
interface BootstrapKnowledgeArgs {
maxFiles?: number;
skipGuard?: boolean;
contentMaxLines?: number;
incremental?: boolean;
skipAsyncFill?: boolean;
loadSkills?: boolean;
/** 仅运行指定维度(传维度 id 数组),不传则运行全部活跃维度 */
dimensions?: string[];
[key: string]: unknown;
}
/**
* bootstrapKnowledge — 一键初始化知识库 (Skill-aware)
*
* 覆盖 7 大知识维度: 项目规范、使用习惯、架构模式、代码模式、最佳实践、项目库特征、Agent开发注意事项
* (注意:反模式/代码问题由 Guard 独立处理,不在 Bootstrap 覆盖范围)
* 为每个维度自动创建 Candidate(PENDING),由内置 Analyst/Producer pipeline 分析代码。
*
* ⚠️ 本函数是内部 Agent 路径。外部 Agent 使用 bootstrap-external.js 的 Mission Briefing + dimension_complete 流程。
*
* @param ctx { container, logger }
* @param [args.maxFiles=500] 最大扫描文件数
* @param [args.skipGuard=false] 是否跳过 Guard 审计
* @param [args.contentMaxLines=120] 每文件读取最大行数
* @param [args.incremental=true] 是否启用增量 Bootstrap (自动检测变更, 仅重跑受影响维度)
*/
export declare function bootstrapKnowledge(ctx: BootstrapMcpContext, args: BootstrapKnowledgeArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: {
report: import("./bootstrap/shared/bootstrap-phases.js").PhaseReport | {} | null;
message: string;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: Record<string, unknown> | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;