UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

112 lines (110 loc) 4.94 kB
/** * 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; }; }>;