autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
553 lines (552 loc) • 16 kB
TypeScript
/**
* MCP 整合 Handler — 参数路由层
*
* 将整合后的工具(autosnippet_search / knowledge / structure / graph / guard / skill)
* 按 operation / mode 参数路由到已有 handler 实现。
*
* 不包含业务逻辑,仅做参数解构 → 路由 → 转发。
*
* autosnippet_bootstrap 已迁移到 bootstrap-external.js(外部 Agent 路径)。
*/
import * as guardHandlers from './guard.js';
import * as structureHandlers from './structure.js';
import type { ConsolidatedGraphArgs, ConsolidatedGuardArgs, ConsolidatedKnowledgeArgs, ConsolidatedSearchArgs, ConsolidatedSkillArgs, ConsolidatedStructureArgs, McpContext } from './types.js';
/**
* 统合搜索:根据 mode 参数路由到对应搜索 handler
* auto (默认) → search()
* keyword → keywordSearch()
* semantic → semanticSearch()
* context → contextSearch()
*/
export declare function consolidatedSearch(ctx: McpContext, args: ConsolidatedSearchArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: {
metadata?: {
responseTimeMs: number;
totalResults: any;
kindCounts: {
rule: number;
pattern: number;
fact: number;
};
} | undefined;
degraded?: boolean | undefined;
degradedReason?: string | undefined;
query: string;
mode: any;
kind: string | undefined;
totalResults: any;
items: any;
byKind: {
rule: {
kind?: string;
}[];
pattern: {
kind?: string;
}[];
fact: {
kind?: string;
}[];
};
kindCounts: {
rule: number;
pattern: number;
fact: number;
};
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;
/**
* 知识浏览:根据 operation 参数路由
* list (默认) → listByKind() 或 listRecipes()
* get → getRecipe()
* insights → recipeInsights()
* confirm_usage → confirmUsage()
*/
export declare function consolidatedKnowledge(ctx: McpContext, args: ConsolidatedKnowledgeArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: {
count: any;
total: any;
items: any;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
id: string;
title: string;
description: string | undefined;
trigger: string;
kind: string | undefined;
language: string | undefined;
category: string | undefined;
knowledgeType: string | undefined;
complexity: string | undefined;
tags: string[] | undefined;
whenClause: string | undefined;
doClause: string | undefined;
dontClause: string | undefined;
coreCode: string | undefined;
content: {
steps?: unknown[] | undefined;
rationale?: string | undefined;
markdown?: string | undefined;
pattern?: string | undefined;
} | undefined;
headers: string[] | undefined;
reasoning: {
sources?: unknown[] | undefined;
confidence?: number | undefined;
whyStandard?: string | undefined;
} | undefined;
relations: Record<string, unknown[]> | undefined;
constraints: {
sideEffects?: unknown[] | undefined;
guards?: unknown[] | undefined;
} | undefined;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
id: any;
title: any;
trigger: any;
kind: any;
lifecycle: any;
language: any;
category: any;
knowledgeType: any;
quality: {
overall: any;
completeness: any;
adaptation: any;
documentation: any;
};
stats: {
adoptions: any;
applications: any;
guardHits: any;
views: any;
searchHits: any;
};
content: {
hasPattern: boolean;
hasRationale: boolean;
hasMarkdown: boolean;
stepsCount: any;
codeChangesCount: any;
};
relations: Record<string, number>;
constraints: Record<string, unknown[]>;
tags: any;
complexity: any;
scope: any;
createdBy: any;
createdAt: any;
updatedAt: any;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
recipeId: string;
usageType: string;
feedback: string | null;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;
/**
* 项目结构:根据 operation 参数路由
* targets (默认) → getTargets()
* files → getTargetFiles()
* metadata → getTargetMetadata()
*/
export declare function consolidatedStructure(ctx: McpContext, args: ConsolidatedStructureArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: Record<string, unknown> | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
targets: structureHandlers.TargetInfo[];
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
targets: {
name: string;
packageName: string | null;
type: string;
inferredRole: string;
fileCount: number;
languageStats: Record<string, number>;
}[];
summary: {
targetCount: number;
totalFiles: number;
languageStats: Record<string, number>;
};
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
targetName: string;
files: {
name: string;
path: string;
relativePath: string;
language: string;
size: number;
content?: string | null;
totalLines?: number;
truncated?: boolean;
}[];
fileCount: number;
totalAvailable: number;
languageStats: Record<string, number>;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;
/** 调用链上下文查询:直接转发到 structure.callContext */
export declare function consolidatedCallContext(ctx: McpContext, args: ConsolidatedStructureArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: unknown;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;
/**
* 知识图谱:根据 operation 参数路由
* query → graphQuery()
* impact → graphImpact()
* path → graphPath()
* stats → graphStats()
*/
export declare function consolidatedGraph(ctx: McpContext, args: ConsolidatedGraphArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: any;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;
/**
* Guard 检查:按参数自动路由
* operation: 'reverse_audit' → guardReverseAudit() (Recipe→Code 反向验证)
* operation: 'coverage_matrix' → guardCoverageMatrix() (模块覆盖率矩阵)
* operation: 'compliance_report' → guardComplianceReport() (3D 合规报告)
* 无参数 → guardReview() (自动 git diff 检测 + inline recipe)
* 有 files → guardReview() (指定文件 + inline recipe) — files 为 string[] 或 {path}[]
* 有 code → guardCheck() (单文件内联检查)
*/
export declare function consolidatedGuard(ctx: McpContext, args: ConsolidatedGuardArgs): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: {
language: string;
violations: never[];
summary: {
total: number;
errors: number;
warnings: number;
};
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
warnings?: "未能识别语言,部分语言相关规则可能未执行。建议提供 language 或 filePath 参数。"[] | undefined;
language: string;
violations: guardHandlers.GuardViolation[];
summary: {
total: number;
errors: number;
warnings: number;
};
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
passed: boolean;
files: never[];
totalViolations: number;
reviewRound: any;
maxRoundsReached: boolean;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
passed: boolean;
files: never[];
totalViolations: number;
reviewRound: any;
fileSource: string;
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
uncertainSummary?: {
total: number;
byLayer: Record<string, number>;
byReason: Record<string, number>;
} | undefined;
uncertainResults?: unknown[] | undefined;
passed: boolean;
reviewRound: any;
fileSource: string;
files: guardHandlers.ReviewFileResult[];
totalViolations: number;
summary: {
total: number;
errors: number;
warnings: number;
filesChecked: number;
};
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
totalRecipes: number;
healthy: number;
investigate: number;
decay: number;
drifts: {
recipeId: string;
title: string;
recommendation: import("../../../service/guard/ReverseGuard.js").ReverseRecommendation;
signals: import("../../../service/guard/ReverseGuard.js").PatternDriftSignal[];
}[];
allResults: {
recipeId: string;
title: string;
recommendation: import("../../../service/guard/ReverseGuard.js").ReverseRecommendation;
signalCount: number;
}[];
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
overallCoverage: number;
zeroModules: string[];
lowModules: string[];
modules: import("../../../service/guard/CoverageAnalyzer.js").ModuleCoverage[];
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
} | {
success: boolean;
errorCode: string | null;
message: string;
data: {
scores: {
compliance: number;
coverage: number;
confidence: number;
};
qualityGate: {
status: string;
score: number;
thresholds: {
maxErrors: number;
maxWarnings: number;
minScore: number;
};
};
summary: {
filesScanned: number;
totalViolations: number;
errors: number;
warnings: number;
infos: number;
};
uncertainSummary: {
total: number;
byLayer: Record<string, number>;
byReason: Record<string, number>;
};
boundaries: {
type: string;
description: string;
affectedRules: string[];
suggestedAction: string;
}[];
topViolations: any[];
trend: {
errorsChange: number;
warningsChange: number;
hasHistory: boolean;
};
} | null;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;
/**
* Skill 管理:根据 operation 参数路由
* list → listSkills()
* load → loadSkill()
* create → createSkill()
* update → updateSkill()
* delete → deleteSkill()
* suggest → suggestSkills()
*/
export declare function consolidatedSkill(ctx: McpContext, args: ConsolidatedSkillArgs): Promise<string>;
/**
* 统一提交管线:单条与批量走同一代码路径。
*
* 流程:
* 1. 限流
* 2. V3 字段增强(MCP 特有预处理)
* 3. RecipeProductionGateway.create() — 统一管道
* 4. Bootstrap session 追踪
* 5. 返回统一结果
*
* 设计原则:
* - 不降级:缺字段不自动补全,要求 Agent 一次性生成完整数据
* - 不碎片化:优先增强已有 Recipe,而非总新建
* - 不重复提交:拒绝时不创建任何记录
* - 单条/批量完全一致的校验与融合逻辑
*/
export declare function enhancedSubmitKnowledge(ctx: McpContext, args: Record<string, unknown>): Promise<{
success: boolean;
errorCode: string | null;
message: string;
data: unknown;
meta: {
source?: string | undefined;
responseTimeMs?: number | undefined;
version: string;
tool?: string | undefined;
};
}>;