autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
57 lines (56 loc) • 1.96 kB
TypeScript
/**
* ToolRegistry — 统一工具注册表
*
* 管理 Agent 可调用的所有工具定义。
* 每个工具包含: name, description, parameters(JSON Schema), handler
*
* 设计原则:
* - 所有 AI 能力均封装为 Tool,不再散落在各处
* - Tool handler 仅做参数整理 + 调用已有 Service,不含业务逻辑
* - 支持 Agent ReAct 循环调用(通过 LLM 推理决定工具调用)
*/
/** 工具定义输入 */
interface ToolDefinition {
name: string;
description: string;
parameters?: Record<string, unknown>;
handler: Function;
}
export declare class ToolRegistry {
#private;
constructor();
/**
* 注册一个工具
* @param toolDef.name 工具唯一名称 (snake_case)
* @param toolDef.description 给 LLM 看的工具描述
* @param toolDef.parameters JSON Schema 格式的参数定义
* @param toolDef.handler async (params, context) => result
*/
register(toolDef: ToolDefinition): void;
/** 批量注册 */
registerAll(defs: ToolDefinition[]): void;
/**
* 获取工具定义(不含 handler,给 LLM prompt 使用)
* @param [allowedTools] 限制返回的工具列表(不传则返回全部)
* @returns >}
*/
getToolSchemas(allowedTools?: readonly unknown[] | null): {
name: string;
description: string;
parameters: Record<string, unknown>;
}[];
/**
* 直接执行某个工具
* @param context { container, aiProvider, projectRoot, ... }
*/
execute(name: string, params: Record<string, unknown>, context?: Record<string, unknown>): Promise<unknown>;
/** 检查工具是否存在 */
has(name: string): boolean;
/** 移除一个已注册的工具(Forge TTL 回收用) */
unregister(name: string): boolean;
/** 获取所有工具名 */
getToolNames(): string[];
/** 工具数量 */
get size(): number;
}
export default ToolRegistry;