UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

93 lines (92 loc) 3.09 kB
/** * 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 {};