autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
93 lines (92 loc) • 3.09 kB
TypeScript
/**
* ToolForge — 工具锻造主编排器
*
* 三级锻造策略:
* Reuse (0ms) → 直接重用注册表中已有工具
* Compose (10ms) → 通过 DynamicComposer 组合已有原子工具
* Generate (5s) → LLM 生成工具代码 → SandboxRunner 验证 → 注册
*
* 瀑布逻辑:reuse → compose → generate,首个成功即返回。
*/
import type { SignalBus } from '#infra/signal/SignalBus.js';
import type { CompositionSpec } from './DynamicComposer.js';
import type { SandboxTestCase } from './SandboxRunner.js';
import { TemporaryToolRegistry } from './TemporaryToolRegistry.js';
import type { AnalysisResult, ToolRequirement } from './ToolRequirementAnalyzer.js';
import { ToolRequirementAnalyzer } from './ToolRequirementAnalyzer.js';
interface ToolRegistryLike {
has(name: string): boolean;
getToolNames(): string[];
execute(name: string, params: Record<string, unknown>, context?: Record<string, unknown>): Promise<unknown>;
register(toolDef: {
name: string;
description: string;
parameters?: Record<string, unknown>;
handler: Function;
}): void;
unregister(name: string): boolean;
}
export interface ForgeRequest {
/** 用户意图 */
intent: string;
/** 关键动作 */
action: string;
/** 目标对象 */
target: string;
/** 约束条件 */
constraints?: string[];
/** LLM 代码生成回调 — 仅 generate 模式时调用 */
codeGenerator?: (requirement: ToolRequirement) => Promise<GeneratedTool | null>;
}
export interface GeneratedTool {
/** 工具名 */
name: string;
/** 描述 */
description: string;
/** JSON Schema 参数 */
parameters: Record<string, unknown>;
/** 工具代码(需包含 toolHandler 函数) */
code: string;
/** 测试用例 */
testCases: SandboxTestCase[];
}
export interface ForgeResult {
/** 是否成功 */
success: boolean;
/** 使用的模式 */
mode: 'reuse' | 'compose' | 'generate';
/** 工具名称 */
toolName?: string;
/** 需求分析结果 */
analysis: AnalysisResult;
/** 失败原因 */
error?: string;
}
export interface ToolForgeOptions {
signalBus?: SignalBus;
/** 生成工具的默认 TTL(ms),默认 30 分钟 */
defaultTtlMs?: number;
/** compose 模式下的组合 spec 生成器 */
compositionSpecBuilder?: (analysis: AnalysisResult, requirement: ToolRequirement) => CompositionSpec | null;
}
export declare class ToolForge {
#private;
constructor(registry: ToolRegistryLike, options?: ToolForgeOptions);
/**
* 锻造工具 — 瀑布流:reuse → compose → generate
*/
forge(request: ForgeRequest): Promise<ForgeResult>;
/**
* 获取临时工具注册表(暴露给 Pipeline 集成用)
*/
get temporaryRegistry(): TemporaryToolRegistry;
/**
* 获取分析器
*/
get analyzer(): ToolRequirementAnalyzer;
/**
* 销毁 Forge(清理临时工具和定时器)
*/
dispose(): void;
}
export {};