sdkwork-browser-agent 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +228 -0
- package/README.zh.md +228 -0
- package/dist/agent-Bpxmkz8W.d.ts +197 -0
- package/dist/agent-kexkkI13.d.cts +197 -0
- package/dist/browser/agent-Bpxmkz8W.d.ts +197 -0
- package/dist/browser/chunk-7W2JJCSS.js +276 -0
- package/dist/browser/chunk-7W2JJCSS.js.map +1 -0
- package/dist/browser/chunk-BHRFRGR7.js +144 -0
- package/dist/browser/chunk-BHRFRGR7.js.map +1 -0
- package/dist/browser/chunk-CLP6UNSV.js +285 -0
- package/dist/browser/chunk-CLP6UNSV.js.map +1 -0
- package/dist/browser/chunk-HXLRBB7S.js +1569 -0
- package/dist/browser/chunk-HXLRBB7S.js.map +1 -0
- package/dist/browser/chunk-VJEFLRZT.js +1720 -0
- package/dist/browser/chunk-VJEFLRZT.js.map +1 -0
- package/dist/browser/index.d.ts +842 -0
- package/dist/browser/index.js +3293 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/llm/index.d.ts +235 -0
- package/dist/browser/llm/index.js +29 -0
- package/dist/browser/llm/index.js.map +1 -0
- package/dist/browser/mcp/index.d.ts +63 -0
- package/dist/browser/mcp/index.js +9 -0
- package/dist/browser/mcp/index.js.map +1 -0
- package/dist/browser/provider-Dna36xA-.d.ts +105 -0
- package/dist/browser/skills/index.d.ts +401 -0
- package/dist/browser/skills/index.js +31 -0
- package/dist/browser/skills/index.js.map +1 -0
- package/dist/browser/storage/index.d.ts +64 -0
- package/dist/browser/storage/index.js +15 -0
- package/dist/browser/storage/index.js.map +1 -0
- package/dist/browser/tools/index.d.ts +45 -0
- package/dist/browser/tools/index.js +15 -0
- package/dist/browser/tools/index.js.map +1 -0
- package/dist/browser/types-CG5I-byI.d.ts +30 -0
- package/dist/chunk-56J3IBXZ.js +144 -0
- package/dist/chunk-56J3IBXZ.js.map +1 -0
- package/dist/chunk-5XTVS5MB.js +1720 -0
- package/dist/chunk-5XTVS5MB.js.map +1 -0
- package/dist/chunk-6AYIRBGI.js +166 -0
- package/dist/chunk-6AYIRBGI.js.map +1 -0
- package/dist/chunk-C2EYJHXW.cjs +276 -0
- package/dist/chunk-C2EYJHXW.cjs.map +1 -0
- package/dist/chunk-HOZQ445W.cjs +166 -0
- package/dist/chunk-HOZQ445W.cjs.map +1 -0
- package/dist/chunk-KZNZ6CGD.cjs +144 -0
- package/dist/chunk-KZNZ6CGD.cjs.map +1 -0
- package/dist/chunk-XFMT5ZA4.js +276 -0
- package/dist/chunk-XFMT5ZA4.js.map +1 -0
- package/dist/chunk-XPGICLEJ.cjs +1720 -0
- package/dist/chunk-XPGICLEJ.cjs.map +1 -0
- package/dist/index.cjs +1311 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +395 -0
- package/dist/index.d.ts +395 -0
- package/dist/index.js +1311 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/index.cjs +29 -0
- package/dist/llm/index.cjs.map +1 -0
- package/dist/llm/index.d.cts +235 -0
- package/dist/llm/index.d.ts +235 -0
- package/dist/llm/index.js +29 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/mcp/index.cjs +9 -0
- package/dist/mcp/index.cjs.map +1 -0
- package/dist/mcp/index.d.cts +63 -0
- package/dist/mcp/index.d.ts +63 -0
- package/dist/mcp/index.js +9 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/node/agent-Bpxmkz8W.d.ts +197 -0
- package/dist/node/agent-kexkkI13.d.cts +197 -0
- package/dist/node/chunk-7W2JJCSS.js +276 -0
- package/dist/node/chunk-7W2JJCSS.js.map +1 -0
- package/dist/node/chunk-BHRFRGR7.js +144 -0
- package/dist/node/chunk-BHRFRGR7.js.map +1 -0
- package/dist/node/chunk-CLP6UNSV.js +285 -0
- package/dist/node/chunk-CLP6UNSV.js.map +1 -0
- package/dist/node/chunk-HXLRBB7S.js +1569 -0
- package/dist/node/chunk-HXLRBB7S.js.map +1 -0
- package/dist/node/chunk-IYG37UN3.cjs +144 -0
- package/dist/node/chunk-IYG37UN3.cjs.map +1 -0
- package/dist/node/chunk-JF33ZOMB.cjs +285 -0
- package/dist/node/chunk-JF33ZOMB.cjs.map +1 -0
- package/dist/node/chunk-KXXS33G3.cjs +276 -0
- package/dist/node/chunk-KXXS33G3.cjs.map +1 -0
- package/dist/node/chunk-MTFOABGC.cjs +1720 -0
- package/dist/node/chunk-MTFOABGC.cjs.map +1 -0
- package/dist/node/chunk-VJEFLRZT.js +1720 -0
- package/dist/node/chunk-VJEFLRZT.js.map +1 -0
- package/dist/node/chunk-YDHQCPSN.cjs +1569 -0
- package/dist/node/chunk-YDHQCPSN.cjs.map +1 -0
- package/dist/node/index.cjs +3293 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +842 -0
- package/dist/node/index.d.ts +842 -0
- package/dist/node/index.js +3293 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/llm/index.cjs +29 -0
- package/dist/node/llm/index.cjs.map +1 -0
- package/dist/node/llm/index.d.cts +235 -0
- package/dist/node/llm/index.d.ts +235 -0
- package/dist/node/llm/index.js +29 -0
- package/dist/node/llm/index.js.map +1 -0
- package/dist/node/mcp/index.cjs +9 -0
- package/dist/node/mcp/index.cjs.map +1 -0
- package/dist/node/mcp/index.d.cts +63 -0
- package/dist/node/mcp/index.d.ts +63 -0
- package/dist/node/mcp/index.js +9 -0
- package/dist/node/mcp/index.js.map +1 -0
- package/dist/node/provider-Dna36xA-.d.cts +105 -0
- package/dist/node/provider-Dna36xA-.d.ts +105 -0
- package/dist/node/skills/index.cjs +31 -0
- package/dist/node/skills/index.cjs.map +1 -0
- package/dist/node/skills/index.d.cts +401 -0
- package/dist/node/skills/index.d.ts +401 -0
- package/dist/node/skills/index.js +31 -0
- package/dist/node/skills/index.js.map +1 -0
- package/dist/node/storage/index.cjs +15 -0
- package/dist/node/storage/index.cjs.map +1 -0
- package/dist/node/storage/index.d.cts +64 -0
- package/dist/node/storage/index.d.ts +64 -0
- package/dist/node/storage/index.js +15 -0
- package/dist/node/storage/index.js.map +1 -0
- package/dist/node/tools/index.cjs +15 -0
- package/dist/node/tools/index.cjs.map +1 -0
- package/dist/node/tools/index.d.cts +45 -0
- package/dist/node/tools/index.d.ts +45 -0
- package/dist/node/tools/index.js +15 -0
- package/dist/node/tools/index.js.map +1 -0
- package/dist/node/types-CG5I-byI.d.cts +30 -0
- package/dist/node/types-CG5I-byI.d.ts +30 -0
- package/dist/provider-Dna36xA-.d.cts +105 -0
- package/dist/provider-Dna36xA-.d.ts +105 -0
- package/dist/skills/index.cjs +15 -0
- package/dist/skills/index.cjs.map +1 -0
- package/dist/skills/index.d.cts +43 -0
- package/dist/skills/index.d.ts +43 -0
- package/dist/skills/index.js +15 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/tools/index.cjs +15 -0
- package/dist/tools/index.cjs.map +1 -0
- package/dist/tools/index.d.cts +45 -0
- package/dist/tools/index.d.ts +45 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/agent.ts","../../src/core/decision-engine.ts","../../src/core/skill-loader.ts","../../src/core/token-optimizer.ts","../../src/core/evaluation-engine.ts","../../src/core/smart-agent.ts","../../src/core/advanced-decision-engine.ts","../../src/core/parameter-extractor.ts","../../src/core/execution-engine.ts","../../src/plugins/manager.ts","../../src/index.ts"],"sourcesContent":["/**\n * Core Agent Architecture\n * High cohesion, low coupling design\n * Compatible with https://agentskills.io/specification\n */\n\nimport {\n LLMProvider,\n LLMRequest,\n LLMResponse,\n LLMStreamChunk,\n LLMMessage,\n ToolDefinition,\n} from '../llm/provider';\n\n// ============================================\n// Type Definitions\n// ============================================\n\nexport interface Skill {\n name: string;\n description: string;\n parameters: ParameterSchema;\n handler: SkillHandler;\n metadata?: SkillMetadata;\n}\n\nexport interface ParameterSchema {\n type: 'object';\n properties: Record<string, ParameterProperty>;\n required?: string[];\n}\n\nexport interface ParameterProperty {\n type: string;\n description: string;\n enum?: string[];\n default?: unknown;\n}\n\nexport interface SkillMetadata {\n category?: string;\n tags?: string[];\n version?: string;\n author?: string;\n deprecated?: boolean;\n}\n\nexport type SkillHandler = (\n params: Record<string, unknown>,\n context: ExecutionContext\n) => Promise<SkillResult>;\n\nexport interface ExecutionContext {\n agent: Agent;\n skillName: string;\n timestamp: Date;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SkillResult {\n success: boolean;\n data?: unknown;\n error?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface Tool {\n name: string;\n description: string;\n parameters?: ParameterSchema;\n execute: ToolExecutor;\n metadata?: ToolMetadata;\n}\n\nexport interface ToolMetadata {\n category?: string;\n tags?: string[];\n version?: string;\n requiresConfirmation?: boolean;\n}\n\nexport type ToolExecutor = (input: unknown, context: ExecutionContext) => Promise<ToolOutput>;\n\nexport interface ToolOutput {\n content: Array<{ type: string; text?: string; data?: unknown }>;\n isError?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface MCPResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n read: () => Promise<MCPResourceContent>;\n metadata?: MCPResourceMetadata;\n}\n\nexport interface MCPResourceContent {\n uri: string;\n mimeType: string;\n text?: string;\n blob?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface MCPResourceMetadata {\n size?: number;\n lastModified?: Date;\n etag?: string;\n}\n\nexport interface MCPTool {\n name: string;\n description: string;\n inputSchema: unknown;\n execute: (args: unknown, context: ExecutionContext) => Promise<MCPToolResult>;\n metadata?: ToolMetadata;\n}\n\nexport interface MCPToolResult {\n content: Array<{ type: string; text?: string; data?: unknown }>;\n isError?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface Plugin {\n name: string;\n version: string;\n description?: string;\n initialize: (context: PluginContext) => Promise<void>;\n destroy?: () => Promise<void>;\n metadata?: PluginMetadata;\n}\n\nexport interface PluginMetadata {\n author?: string;\n homepage?: string;\n repository?: string;\n license?: string;\n dependencies?: string[];\n}\n\nexport interface PluginContext {\n agent: Agent;\n registerSkill: (skill: Skill) => void;\n registerTool: (tool: Tool) => void;\n registerMCPResource: (resource: MCPResource) => void;\n registerMCPTool: (tool: MCPTool) => void;\n getLLMProvider: () => LLMProvider | undefined;\n config: Record<string, unknown>;\n}\n\n// ============================================\n// Agent Configuration\n// ============================================\n\nexport interface AgentConfig {\n name: string;\n description?: string;\n version?: string;\n llmProvider?: LLMProvider;\n systemPrompt?: string;\n maxIterations?: number;\n skills?: Skill[];\n tools?: Tool[];\n plugins?: Plugin[];\n mcpResources?: MCPResource[];\n mcpTools?: MCPTool[];\n middlewares?: AgentMiddleware[];\n hooks?: AgentHooks;\n}\n\nexport interface AgentHooks {\n beforeSkillExecution?: (skillName: string, params: Record<string, unknown>) => Promise<void>;\n afterSkillExecution?: (skillName: string, result: SkillResult) => Promise<void>;\n onError?: (error: Error, context: ExecutionContext) => Promise<void>;\n onToolCall?: (toolName: string, args: unknown) => Promise<void>;\n}\n\nexport type AgentMiddleware = (\n context: ExecutionContext,\n next: () => Promise<SkillResult>\n) => Promise<SkillResult>;\n\n// ============================================\n// Agent Core\n// ============================================\n\nexport class Agent {\n private _skills = new Map<string, Skill>();\n private _tools = new Map<string, Tool>();\n private _plugins = new Map<string, Plugin>();\n private _mcpResources = new Map<string, MCPResource>();\n private _mcpTools = new Map<string, MCPTool>();\n private _middlewares: AgentMiddleware[] = [];\n private _initialized = false;\n\n readonly name: string;\n readonly description?: string;\n readonly version?: string;\n llmProvider?: LLMProvider;\n systemPrompt?: string;\n maxIterations: number;\n hooks?: AgentHooks;\n\n constructor(private config: AgentConfig) {\n this.name = config.name;\n this.description = config.description;\n this.version = config.version;\n this.llmProvider = config.llmProvider;\n this.systemPrompt = config.systemPrompt;\n this.maxIterations = config.maxIterations || 10;\n this.hooks = config.hooks;\n this._middlewares = config.middlewares || [];\n }\n\n async initialize(): Promise<void> {\n if (this._initialized) return;\n\n // Register core components\n this.config.skills?.forEach(skill => this.registerSkill(skill));\n this.config.tools?.forEach(tool => this.registerTool(tool));\n this.config.mcpResources?.forEach(resource => this.registerMCPResource(resource));\n this.config.mcpTools?.forEach(tool => this.registerMCPTool(tool));\n\n // Initialize plugins\n const pluginContext: PluginContext = {\n agent: this,\n registerSkill: skill => this.registerSkill(skill),\n registerTool: tool => this.registerTool(tool),\n registerMCPResource: resource => this.registerMCPResource(resource),\n registerMCPTool: tool => this.registerMCPTool(tool),\n getLLMProvider: () => this.llmProvider,\n config: {},\n };\n\n for (const plugin of this.config.plugins || []) {\n await plugin.initialize(pluginContext);\n this._plugins.set(plugin.name, plugin);\n }\n\n this._initialized = true;\n }\n\n // ============================================\n // Registration Methods\n // ============================================\n\n registerSkill(skill: Skill): void {\n if (this._skills.has(skill.name)) {\n console.warn(`Skill '${skill.name}' is already registered. Overwriting.`);\n }\n this._skills.set(skill.name, skill);\n }\n\n registerTool(tool: Tool): void {\n if (this._tools.has(tool.name)) {\n console.warn(`Tool '${tool.name}' is already registered. Overwriting.`);\n }\n this._tools.set(tool.name, tool);\n }\n\n registerMCPResource(resource: MCPResource): void {\n if (this._mcpResources.has(resource.uri)) {\n console.warn(`MCP Resource '${resource.uri}' is already registered. Overwriting.`);\n }\n this._mcpResources.set(resource.uri, resource);\n }\n\n registerMCPTool(tool: MCPTool): void {\n if (this._mcpTools.has(tool.name)) {\n console.warn(`MCP Tool '${tool.name}' is already registered. Overwriting.`);\n }\n this._mcpTools.set(tool.name, tool);\n }\n\n use(middleware: AgentMiddleware): void {\n this._middlewares.push(middleware);\n }\n\n // ============================================\n // Execution Methods\n // ============================================\n\n async executeSkill(name: string, params: Record<string, unknown> = {}): Promise<SkillResult> {\n const skill = this._skills.get(name);\n if (!skill) {\n return { success: false, error: `Skill '${name}' not found` };\n }\n\n const context: ExecutionContext = {\n agent: this,\n skillName: name,\n timestamp: new Date(),\n };\n\n await this.hooks?.beforeSkillExecution?.(name, params);\n\n const execute = async (): Promise<SkillResult> => {\n try {\n const result = await skill.handler(params, context);\n await this.hooks?.afterSkillExecution?.(name, result);\n return result;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n await this.hooks?.onError?.(err, context);\n return { success: false, error: err.message };\n }\n };\n\n // Apply middlewares\n const chain = this._middlewares.reduceRight<() => Promise<SkillResult>>(\n (next, middleware) => () => middleware(context, next),\n execute\n );\n\n return chain();\n }\n\n async executeTool(name: string, input: unknown): Promise<ToolOutput> {\n const tool = this._tools.get(name);\n if (!tool) {\n return {\n content: [{ type: 'error', text: `Tool '${name}' not found` }],\n isError: true,\n };\n }\n\n const context: ExecutionContext = {\n agent: this,\n skillName: name,\n timestamp: new Date(),\n };\n\n try {\n await this.hooks?.onToolCall?.(name, input);\n return await tool.execute(input, context);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'error', text: message }],\n isError: true,\n };\n }\n }\n\n async readMCPResource(uri: string): Promise<MCPResourceContent | null> {\n const resource = this._mcpResources.get(uri);\n if (!resource) return null;\n return resource.read();\n }\n\n async executeMCPTool(name: string, args: unknown): Promise<MCPToolResult> {\n const tool = this._mcpTools.get(name);\n if (!tool) {\n return {\n content: [{ type: 'error', text: `MCP Tool '${name}' not found` }],\n isError: true,\n };\n }\n\n const context: ExecutionContext = {\n agent: this,\n skillName: name,\n timestamp: new Date(),\n };\n\n try {\n return await tool.execute(args, context);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'error', text: message }],\n isError: true,\n };\n }\n }\n\n // ============================================\n // LLM Integration\n // ============================================\n\n async chat(messages: LLMMessage[], options?: Partial<LLMRequest>): Promise<LLMResponse> {\n if (!this.llmProvider) {\n throw new Error('No LLM provider configured');\n }\n\n const request: LLMRequest = {\n messages: this.systemPrompt\n ? [{ role: 'system', content: this.systemPrompt }, ...messages]\n : messages,\n ...options,\n };\n\n return this.llmProvider.complete(request);\n }\n\n async *streamChat(\n messages: LLMMessage[],\n options?: Partial<LLMRequest>\n ): AsyncIterableIterator<LLMStreamChunk> {\n if (!this.llmProvider) {\n throw new Error('No LLM provider configured');\n }\n\n const request: LLMRequest = {\n messages: this.systemPrompt\n ? [{ role: 'system', content: this.systemPrompt }, ...messages]\n : messages,\n stream: true,\n ...options,\n };\n\n yield* this.llmProvider.stream(request);\n }\n\n async executeWithTools(messages: LLMMessage[], tools?: ToolDefinition[]): Promise<LLMResponse> {\n if (!this.llmProvider) {\n throw new Error('No LLM provider configured');\n }\n\n const request: LLMRequest = {\n messages: this.systemPrompt\n ? [{ role: 'system', content: this.systemPrompt }, ...messages]\n : messages,\n tools,\n tool_choice: 'auto',\n };\n\n return this.llmProvider.complete(request);\n }\n\n // ============================================\n // Query Methods\n // ============================================\n\n getSkill(name: string): Skill | undefined {\n return this._skills.get(name);\n }\n\n getTool(name: string): Tool | undefined {\n return this._tools.get(name);\n }\n\n getMCPResource(uri: string): MCPResource | undefined {\n return this._mcpResources.get(uri);\n }\n\n getMCPTool(name: string): MCPTool | undefined {\n return this._mcpTools.get(name);\n }\n\n getPlugin(name: string): Plugin | undefined {\n return this._plugins.get(name);\n }\n\n getSkillNames(): string[] {\n return Array.from(this._skills.keys());\n }\n\n getToolNames(): string[] {\n return Array.from(this._tools.keys());\n }\n\n getMCPResourceURIs(): string[] {\n return Array.from(this._mcpResources.keys());\n }\n\n getMCPToolNames(): string[] {\n return Array.from(this._mcpTools.keys());\n }\n\n getPluginNames(): string[] {\n return Array.from(this._plugins.keys());\n }\n\n getAllSkills(): Skill[] {\n return Array.from(this._skills.values());\n }\n\n getAllTools(): Tool[] {\n return Array.from(this._tools.values());\n }\n\n // ============================================\n // Lifecycle Methods\n // ============================================\n\n async destroy(): Promise<void> {\n for (const plugin of this._plugins.values()) {\n await plugin.destroy?.();\n }\n this._skills.clear();\n this._tools.clear();\n this._plugins.clear();\n this._mcpResources.clear();\n this._mcpTools.clear();\n this._middlewares = [];\n this._initialized = false;\n }\n}\n","/**\n * Decision Engine for automatic skill selection\n * Optimized for minimal token consumption\n */\n\nimport { Skill } from '../core/agent';\n\nexport interface Decision {\n type: 'skill' | 'tool' | 'llm' | 'multi';\n skills?: string[];\n tools?: string[];\n reasoning?: string;\n confidence: number;\n fallback?: string;\n}\n\nexport interface DecisionContext {\n input: string;\n history?: string[];\n availableSkills: string[];\n availableTools: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface DecisionEngineConfig {\n threshold?: number;\n maxSkills?: number;\n enableEmbeddings?: boolean;\n enableCaching?: boolean;\n similarityThreshold?: number;\n}\n\n// Simple embedding interface (can be replaced with actual embeddings)\nexport interface EmbeddingProvider {\n embed(text: string): Promise<number[]>;\n similarity(a: number[], b: number[]): number;\n}\n\n// Simple TF-IDF-like embedding for browser compatibility\nexport class SimpleEmbeddingProvider implements EmbeddingProvider {\n private vocabulary = new Map<string, number>();\n private vocabSize = 0;\n private readonly maxVocabSize = 1000;\n\n async embed(text: string): Promise<number[]> {\n const tokens = this.tokenize(text);\n const embedding = new Array(this.maxVocabSize).fill(0);\n\n for (const token of tokens) {\n if (!this.vocabulary.has(token)) {\n if (this.vocabSize < this.maxVocabSize) {\n this.vocabulary.set(token, this.vocabSize++);\n }\n }\n const idx = this.vocabulary.get(token);\n if (idx !== undefined) {\n embedding[idx] += 1;\n }\n }\n\n // Normalize\n const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));\n if (magnitude > 0) {\n return embedding.map(val => val / magnitude);\n }\n return embedding;\n }\n\n similarity(a: number[], b: number[]): number {\n let dotProduct = 0;\n for (let i = 0; i < Math.min(a.length, b.length); i++) {\n dotProduct += a[i] * b[i];\n }\n return dotProduct;\n }\n\n private tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s]/g, ' ')\n .split(/\\s+/)\n .filter(t => t.length > 2);\n }\n}\n\nexport class DecisionEngine {\n private skillEmbeddings = new Map<string, number[]>();\n private embeddingProvider: EmbeddingProvider;\n private decisionCache = new Map<string, Decision>();\n private config: Required<DecisionEngineConfig>;\n\n constructor(config: DecisionEngineConfig = {}, embeddingProvider?: EmbeddingProvider) {\n this.config = {\n threshold: config.threshold ?? 0.6,\n maxSkills: config.maxSkills ?? 3,\n enableEmbeddings: config.enableEmbeddings ?? true,\n enableCaching: config.enableCaching ?? true,\n similarityThreshold: config.similarityThreshold ?? 0.5,\n };\n this.embeddingProvider = embeddingProvider ?? new SimpleEmbeddingProvider();\n }\n\n /**\n * Index skills for fast retrieval\n */\n async indexSkill(skill: Skill): Promise<void> {\n if (!this.config.enableEmbeddings) return;\n\n const text = `${skill.name} ${skill.description} ${this.extractKeywords(skill)}`;\n const embedding = await this.embeddingProvider.embed(text);\n this.skillEmbeddings.set(skill.name, embedding);\n }\n\n /**\n * Make decision based on input\n */\n async decide(context: DecisionContext): Promise<Decision> {\n const cacheKey = this.generateCacheKey(context);\n\n // Check cache\n if (this.config.enableCaching) {\n const cached = this.decisionCache.get(cacheKey);\n if (cached) return cached;\n }\n\n // Find relevant skills using embeddings\n const relevantSkills = await this.findRelevantSkills(context);\n\n // Find relevant tools\n const relevantTools = this.findRelevantTools(context);\n\n let decision: Decision;\n\n if (relevantSkills.length === 0 && relevantTools.length === 0) {\n // No relevant skills/tools, use LLM directly\n decision = {\n type: 'llm',\n confidence: 1.0,\n reasoning: 'No relevant skills found, using LLM directly',\n };\n } else if (relevantSkills.length === 1 && relevantTools.length === 0) {\n // Single skill match\n decision = {\n type: 'skill',\n skills: [relevantSkills[0].name],\n confidence: relevantSkills[0].confidence,\n reasoning: `Single skill match: ${relevantSkills[0].name}`,\n };\n } else if (relevantTools.length === 1 && relevantSkills.length === 0) {\n // Single tool match\n decision = {\n type: 'tool',\n tools: [relevantTools[0].name],\n confidence: relevantTools[0].confidence,\n reasoning: `Single tool match: ${relevantTools[0].name}`,\n };\n } else {\n // Multiple matches or mixed\n const topSkills = relevantSkills.slice(0, this.config.maxSkills);\n const topTools = relevantTools.slice(0, 2);\n\n decision = {\n type: 'multi',\n skills: topSkills.map(s => s.name),\n tools: topTools.map(t => t.name),\n confidence: Math.max(topSkills[0]?.confidence ?? 0, topTools[0]?.confidence ?? 0),\n reasoning: `Multiple matches: ${topSkills.map(s => s.name).join(', ')}`,\n fallback: 'llm',\n };\n }\n\n // Cache decision\n if (this.config.enableCaching) {\n this.decisionCache.set(cacheKey, decision);\n\n // Limit cache size\n if (this.decisionCache.size > 1000) {\n const firstKey = this.decisionCache.keys().next().value;\n if (firstKey !== undefined) {\n this.decisionCache.delete(firstKey);\n }\n }\n }\n\n return decision;\n }\n\n /**\n * Find relevant skills using similarity matching\n */\n private async findRelevantSkills(\n context: DecisionContext\n ): Promise<Array<{ name: string; confidence: number }>> {\n if (!this.config.enableEmbeddings || this.skillEmbeddings.size === 0) {\n return this.fallbackSkillMatching(context);\n }\n\n const inputEmbedding = await this.embeddingProvider.embed(context.input);\n const results: Array<{ name: string; confidence: number }> = [];\n\n for (const [skillName, skillEmbedding] of this.skillEmbeddings) {\n const similarity = this.embeddingProvider.similarity(inputEmbedding, skillEmbedding);\n if (similarity >= this.config.similarityThreshold) {\n results.push({ name: skillName, confidence: similarity });\n }\n }\n\n // Sort by confidence\n results.sort((a, b) => b.confidence - a.confidence);\n\n return results;\n }\n\n /**\n * Fallback matching using keyword extraction\n */\n private fallbackSkillMatching(\n context: DecisionContext\n ): Array<{ name: string; confidence: number }> {\n const inputKeywords = this.extractKeywordsFromText(context.input);\n const results: Array<{ name: string; confidence: number }> = [];\n\n for (const skillName of context.availableSkills) {\n // Simple keyword matching\n const skillKeywords = skillName.toLowerCase().split(/[_-]/);\n const matches = inputKeywords.filter(kw =>\n skillKeywords.some(sk => sk.includes(kw) || kw.includes(sk))\n );\n\n if (matches.length > 0) {\n const confidence = matches.length / Math.max(inputKeywords.length, skillKeywords.length);\n if (confidence >= this.config.threshold) {\n results.push({ name: skillName, confidence });\n }\n }\n }\n\n results.sort((a, b) => b.confidence - a.confidence);\n return results;\n }\n\n /**\n * Find relevant tools\n */\n private findRelevantTools(context: DecisionContext): Array<{ name: string; confidence: number }> {\n const inputKeywords = this.extractKeywordsFromText(context.input);\n const results: Array<{ name: string; confidence: number }> = [];\n\n for (const toolName of context.availableTools) {\n const toolKeywords = toolName.toLowerCase().split(/[_-]/);\n const matches = inputKeywords.filter(kw =>\n toolKeywords.some(tk => tk.includes(kw) || kw.includes(tk))\n );\n\n if (matches.length > 0) {\n const confidence = matches.length / Math.max(inputKeywords.length, toolKeywords.length);\n if (confidence >= this.config.threshold) {\n results.push({ name: toolName, confidence });\n }\n }\n }\n\n results.sort((a, b) => b.confidence - a.confidence);\n return results;\n }\n\n /**\n * Extract keywords from skill\n */\n private extractKeywords(skill: Skill): string {\n const keywords: string[] = [\n skill.name,\n skill.description,\n ...(skill.metadata?.tags ?? []),\n skill.metadata?.category ?? '',\n ];\n\n // Add parameter names and descriptions\n for (const [key, prop] of Object.entries(skill.parameters.properties)) {\n keywords.push(key, prop.description);\n }\n\n return keywords.join(' ');\n }\n\n /**\n * Extract keywords from text\n */\n private extractKeywordsFromText(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s]/g, ' ')\n .split(/\\s+/)\n .filter(t => t.length > 2);\n }\n\n /**\n * Generate cache key\n */\n private generateCacheKey(context: DecisionContext): string {\n return `${context.input}:${context.availableSkills.join(',')}:${context.availableTools.join(',')}`;\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.decisionCache.clear();\n }\n\n /**\n * Get cache stats\n */\n getCacheStats(): { size: number; hitRate?: number } {\n return { size: this.decisionCache.size };\n }\n}\n","/**\n * Dynamic Skill Loader\n * Lazy loading and caching of skills\n */\n\nimport { Skill } from './agent';\n\nexport interface SkillLoaderConfig {\n skillDirectory?: string;\n enableLazyLoading?: boolean;\n enableCaching?: boolean;\n cacheSize?: number;\n hotReload?: boolean;\n}\n\nexport interface SkillSource {\n name: string;\n type: 'builtin' | 'file' | 'url' | 'module';\n source: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface LoadedSkill extends Skill {\n loadedAt: Date;\n source: SkillSource;\n size?: number;\n}\n\nexport class DynamicSkillLoader {\n private loadedSkills = new Map<string, LoadedSkill>();\n private skillCache = new Map<string, Skill>();\n private skillSources = new Map<string, SkillSource>();\n private config: Required<SkillLoaderConfig>;\n\n constructor(config: SkillLoaderConfig = {}) {\n this.config = {\n skillDirectory: config.skillDirectory ?? './skills',\n enableLazyLoading: config.enableLazyLoading ?? true,\n enableCaching: config.enableCaching ?? true,\n cacheSize: config.cacheSize ?? 100,\n hotReload: config.hotReload ?? false,\n };\n }\n\n /**\n * Register a skill source for lazy loading\n */\n registerSource(source: SkillSource): void {\n this.skillSources.set(source.name, source);\n }\n\n /**\n * Load a skill dynamically\n */\n async load(name: string): Promise<Skill | null> {\n // Check cache first\n if (this.config.enableCaching) {\n const cached = this.skillCache.get(name);\n if (cached) return cached;\n }\n\n // Check if already loaded\n const loaded = this.loadedSkills.get(name);\n if (loaded) {\n return loaded;\n }\n\n // Get skill source\n const source = this.skillSources.get(name);\n if (!source) {\n return null;\n }\n\n // Load based on source type\n let skill: Skill | null = null;\n\n switch (source.type) {\n case 'builtin':\n skill = await this.loadBuiltin(source);\n break;\n case 'file':\n skill = await this.loadFromFile(source);\n break;\n case 'url':\n skill = await this.loadFromUrl(source);\n break;\n case 'module':\n skill = await this.loadFromModule(source);\n break;\n }\n\n if (skill) {\n // Cache skill\n if (this.config.enableCaching) {\n this.skillCache.set(name, skill);\n this.enforceCacheLimit();\n }\n\n // Track loaded skill\n const loadedSkill: LoadedSkill = {\n ...skill,\n loadedAt: new Date(),\n source,\n size: JSON.stringify(skill).length,\n };\n this.loadedSkills.set(name, loadedSkill);\n }\n\n return skill;\n }\n\n /**\n * Load multiple skills\n */\n async loadMultiple(names: string[]): Promise<Map<string, Skill>> {\n const results = new Map<string, Skill>();\n\n await Promise.all(\n names.map(async name => {\n const skill = await this.load(name);\n if (skill) {\n results.set(name, skill);\n }\n })\n );\n\n return results;\n }\n\n /**\n * Unload a skill\n */\n unload(name: string): boolean {\n this.skillCache.delete(name);\n return this.loadedSkills.delete(name);\n }\n\n /**\n * Check if skill is loaded\n */\n isLoaded(name: string): boolean {\n return this.loadedSkills.has(name) || this.skillCache.has(name);\n }\n\n /**\n * Get loaded skill info\n */\n getLoadedSkill(name: string): LoadedSkill | undefined {\n return this.loadedSkills.get(name);\n }\n\n /**\n * List all loaded skills\n */\n listLoaded(): LoadedSkill[] {\n return Array.from(this.loadedSkills.values());\n }\n\n /**\n * List available skill sources\n */\n listSources(): SkillSource[] {\n return Array.from(this.skillSources.values());\n }\n\n /**\n * Preload skills (eager loading)\n */\n async preload(names: string[]): Promise<void> {\n await this.loadMultiple(names);\n }\n\n /**\n * Get memory usage stats\n */\n getStats(): {\n loaded: number;\n cached: number;\n sources: number;\n totalSize: number;\n } {\n const loaded = this.listLoaded();\n return {\n loaded: loaded.length,\n cached: this.skillCache.size,\n sources: this.skillSources.size,\n totalSize: loaded.reduce((sum, s) => sum + (s.size ?? 0), 0),\n };\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.skillCache.clear();\n }\n\n /**\n * Clear all loaded skills\n */\n clear(): void {\n this.loadedSkills.clear();\n this.skillCache.clear();\n }\n\n // Private loading methods\n\n private async loadBuiltin(_source: SkillSource): Promise<Skill | null> {\n // Built-in skills are already available\n // This would typically import from a known location\n return null;\n }\n\n private async loadFromFile(source: SkillSource): Promise<Skill | null> {\n if (typeof window !== 'undefined') {\n console.warn('File loading not supported in browser');\n return null;\n }\n\n try {\n const fs = await import('fs/promises');\n const content = await fs.readFile(source.source, 'utf-8');\n const module = JSON.parse(content);\n return this.validateSkill(module);\n } catch (error) {\n console.error(`Failed to load skill from file: ${source.source}`, error);\n return null;\n }\n }\n\n private async loadFromUrl(source: SkillSource): Promise<Skill | null> {\n try {\n const response = await fetch(source.source);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n const module = await response.json();\n return this.validateSkill(module);\n } catch (error) {\n console.error(`Failed to load skill from URL: ${source.source}`, error);\n return null;\n }\n }\n\n private async loadFromModule(source: SkillSource): Promise<Skill | null> {\n try {\n // Dynamic import\n const module = await import(source.source);\n const skill = module.default || module.skill || module;\n return this.validateSkill(skill);\n } catch (error) {\n console.error(`Failed to load skill from module: ${source.source}`, error);\n return null;\n }\n }\n\n private validateSkill(obj: unknown): Skill | null {\n if (typeof obj !== 'object' || obj === null) return null;\n\n const skill = obj as Record<string, unknown>;\n\n if (\n typeof skill.name === 'string' &&\n typeof skill.description === 'string' &&\n typeof skill.parameters === 'object' &&\n typeof skill.handler === 'function'\n ) {\n return skill as unknown as Skill;\n }\n\n return null;\n }\n\n private enforceCacheLimit(): void {\n while (this.skillCache.size > this.config.cacheSize) {\n const firstKey = this.skillCache.keys().next().value;\n if (firstKey !== undefined) {\n this.skillCache.delete(firstKey);\n }\n }\n }\n}\n","/**\n * Token Optimizer\n * Minimize token consumption for LLM calls\n */\n\nimport type { Skill, Tool, ParameterSchema } from './agent';\nimport type { LLMMessage } from '../llm/provider';\n\nexport interface TokenOptimizerConfig {\n maxContextTokens?: number;\n maxSkillDescriptionLength?: number;\n enableCompression?: boolean;\n preserveSystemPrompt?: boolean;\n}\n\nexport interface TokenEstimate {\n prompt: number;\n completion: number;\n total: number;\n}\n\nexport class TokenOptimizer {\n private config: Required<TokenOptimizerConfig>;\n\n constructor(config: TokenOptimizerConfig = {}) {\n this.config = {\n maxContextTokens: config.maxContextTokens ?? 4000,\n maxSkillDescriptionLength: config.maxSkillDescriptionLength ?? 200,\n enableCompression: config.enableCompression ?? true,\n preserveSystemPrompt: config.preserveSystemPrompt ?? true,\n };\n }\n\n /**\n * Optimize skills for minimal token usage\n */\n optimizeSkills(skills: Skill[], forQuery?: string): Skill[] {\n if (!this.config.enableCompression) return skills;\n\n return skills.map(skill => this.compressSkill(skill, forQuery));\n }\n\n /**\n * Compress a single skill\n */\n private compressSkill(skill: Skill, forQuery?: string): Skill {\n const compressed: Skill = {\n ...skill,\n description: this.truncateDescription(skill.description),\n parameters: this.compressParameters(skill.parameters),\n };\n\n // Remove metadata if not relevant to query\n if (forQuery && skill.metadata) {\n const relevant = this.isMetadataRelevant(skill.metadata as Record<string, unknown>, forQuery);\n if (!relevant) {\n delete (compressed as { metadata?: unknown }).metadata;\n }\n }\n\n return compressed;\n }\n\n /**\n * Optimize tools for minimal token usage\n */\n optimizeTools(tools: Tool[]): Tool[] {\n if (!this.config.enableCompression) return tools;\n\n return tools.map(tool => ({\n ...tool,\n description: this.truncateDescription(tool.description),\n parameters: tool.parameters ? this.compressParameters(tool.parameters) : undefined,\n }));\n }\n\n /**\n * Optimize messages for context window\n */\n optimizeMessages(messages: LLMMessage[], maxTokens?: number): LLMMessage[] {\n const limit = maxTokens ?? this.config.maxContextTokens;\n let totalTokens = this.estimateMessagesTokens(messages);\n\n if (totalTokens <= limit) return messages;\n\n // Start removing from oldest non-system messages\n const optimized: LLMMessage[] = [];\n let systemMessage: LLMMessage | null = null;\n\n // Preserve system message if configured\n if (this.config.preserveSystemPrompt) {\n systemMessage = messages.find(m => m.role === 'system') || null;\n if (systemMessage) {\n optimized.push(systemMessage);\n totalTokens -= this.estimateTokens(systemMessage.content);\n }\n }\n\n // Add recent messages until limit\n const recentMessages = messages.filter(m => m.role !== 'system').reverse();\n\n for (const message of recentMessages) {\n const messageTokens = this.estimateTokens(message.content);\n if (totalTokens + messageTokens <= limit) {\n optimized.unshift(message);\n totalTokens += messageTokens;\n } else {\n break;\n }\n }\n\n return optimized;\n }\n\n /**\n * Build optimized prompt with skills\n */\n buildOptimizedPrompt(userInput: string, availableSkills: Skill[], context?: string): string {\n const parts: string[] = [];\n\n // Add context if provided\n if (context) {\n parts.push(`Context: ${this.truncateDescription(context, 500)}`);\n }\n\n // Add user input\n parts.push(`User: ${userInput}`);\n\n // Add available skills (compressed)\n if (availableSkills.length > 0) {\n const skillDescriptions = availableSkills.map(skill => this.formatSkillForPrompt(skill));\n parts.push(`\\nAvailable skills:\\n${skillDescriptions.join('\\n')}`);\n }\n\n return parts.join('\\n\\n');\n }\n\n /**\n * Estimate tokens for text\n */\n estimateTokens(text: string): number {\n // Rough estimate: 1 token ≈ 4 characters for English\n return Math.ceil(text.length / 4);\n }\n\n /**\n * Estimate tokens for messages\n */\n estimateMessagesTokens(messages: LLMMessage[]): number {\n return messages.reduce((total, msg) => {\n // Base tokens per message (role, formatting)\n const baseTokens = 4;\n return total + baseTokens + this.estimateTokens(msg.content);\n }, 0);\n }\n\n /**\n * Estimate tokens for skills\n */\n estimateSkillsTokens(skills: Skill[]): number {\n return skills.reduce((total, skill) => {\n return (\n total +\n this.estimateTokens(skill.name) +\n this.estimateTokens(skill.description) +\n this.estimateTokens(JSON.stringify(skill.parameters))\n );\n }, 0);\n }\n\n /**\n * Get optimization stats\n */\n getOptimizationStats(\n original: Skill[],\n optimized: Skill[]\n ): {\n originalTokens: number;\n optimizedTokens: number;\n savings: number;\n savingsPercent: number;\n } {\n const originalTokens = this.estimateSkillsTokens(original);\n const optimizedTokens = this.estimateSkillsTokens(optimized);\n const savings = originalTokens - optimizedTokens;\n\n return {\n originalTokens,\n optimizedTokens,\n savings,\n savingsPercent: originalTokens > 0 ? (savings / originalTokens) * 100 : 0,\n };\n }\n\n // Private helper methods\n\n private truncateDescription(description: string, maxLength?: number): string {\n const limit = maxLength ?? this.config.maxSkillDescriptionLength;\n if (description.length <= limit) return description;\n return description.substring(0, limit - 3) + '...';\n }\n\n private compressParameters(parameters: ParameterSchema): ParameterSchema {\n // Remove unnecessary fields from parameters\n const compressed: ParameterSchema = {\n type: parameters.type,\n properties: {},\n };\n\n if (parameters.required) {\n compressed.required = parameters.required;\n }\n\n // Compress property descriptions\n for (const [key, prop] of Object.entries(parameters.properties)) {\n compressed.properties[key] = {\n type: prop.type,\n description: this.truncateDescription(prop.description, 100),\n ...(prop.enum && { enum: prop.enum }),\n ...(prop.default !== undefined && { default: prop.default }),\n };\n }\n\n return compressed;\n }\n\n private isMetadataRelevant(\n metadata: Record<string, unknown> | undefined,\n query: string\n ): boolean {\n if (!metadata) return false;\n const queryLower = query.toLowerCase();\n const metadataStr = JSON.stringify(metadata).toLowerCase();\n return metadataStr.includes(queryLower);\n }\n\n private formatSkillForPrompt(skill: Skill): string {\n const params = Object.keys(skill.parameters.properties).join(', ');\n return `- ${skill.name}(${params}): ${skill.description}`;\n }\n}\n","/**\n * Agent Evaluation Engine\n *\n * Features:\n * - Multi-dimensional result evaluation\n * - Correctness verification with multiple strategies\n * - Configurable evaluation levels\n * - Feedback loop for continuous improvement\n * - Performance scoring and benchmarking\n */\n\nimport { Skill, SkillResult } from './agent';\nimport { ExecutionResult, StepResult } from './types';\n\nexport type EvaluationLevel = 'none' | 'basic' | 'standard' | 'strict';\nexport type EvaluationStrategy = 'exact' | 'semantic' | 'schema' | 'custom';\n\nexport interface EvaluationConfig {\n enabled: boolean;\n level: EvaluationLevel;\n strategies: EvaluationStrategy[];\n threshold?: number;\n autoRetry?: boolean;\n maxRetries?: number;\n customValidator?: (result: unknown, expected?: unknown) => EvaluationScore;\n}\n\nexport interface EvaluationScore {\n overall: number; // 0-1\n correctness: number;\n completeness: number;\n relevance: number;\n details: EvaluationDetail[];\n}\n\nexport interface EvaluationDetail {\n category: string;\n score: number;\n message: string;\n suggestion?: string;\n}\n\nexport interface EvaluationResult {\n passed: boolean;\n score: EvaluationScore;\n feedback: string;\n suggestions: string[];\n metadata: {\n executionTime: number;\n tokensUsed: number;\n strategyUsed: EvaluationStrategy;\n };\n}\n\nexport interface EvaluationContext {\n originalInput: string;\n expectedOutput?: unknown;\n expectedSchema?: unknown;\n skill?: Skill;\n executionHistory?: StepResult[];\n}\n\nexport interface Evaluator {\n name: string;\n evaluate(result: unknown, context: EvaluationContext): Promise<EvaluationScore>;\n}\n\n// ============================================\n// Built-in Evaluators\n// ============================================\n\nexport class ExactMatchEvaluator implements Evaluator {\n name = 'exact';\n\n async evaluate(result: unknown, context: EvaluationContext): Promise<EvaluationScore> {\n if (context.expectedOutput === undefined) {\n return {\n overall: 0.5,\n correctness: 0.5,\n completeness: 0.5,\n relevance: 0.5,\n details: [{\n category: 'exact_match',\n score: 0.5,\n message: 'No expected output provided for comparison',\n }],\n };\n }\n\n const isMatch = JSON.stringify(result) === JSON.stringify(context.expectedOutput);\n const score = isMatch ? 1.0 : 0.0;\n\n return {\n overall: score,\n correctness: score,\n completeness: score,\n relevance: score,\n details: [{\n category: 'exact_match',\n score,\n message: isMatch ? 'Result matches expected output exactly' : 'Result does not match expected output',\n suggestion: isMatch ? undefined : 'Check output format and values',\n }],\n };\n }\n}\n\nexport class SemanticEvaluator implements Evaluator {\n name = 'semantic';\n\n async evaluate(result: unknown, context: EvaluationContext): Promise<EvaluationScore> {\n const resultStr = JSON.stringify(result).toLowerCase();\n const inputStr = context.originalInput.toLowerCase();\n\n // Check if result addresses the input query\n const inputKeywords = this.extractKeywords(inputStr);\n const resultKeywords = this.extractKeywords(resultStr);\n\n const matchingKeywords = inputKeywords.filter(kw => \n resultKeywords.some(rkw => rkw.includes(kw) || kw.includes(rkw))\n );\n\n const relevanceScore = inputKeywords.length > 0 \n ? matchingKeywords.length / inputKeywords.length \n : 0.5;\n\n // Check result completeness\n const completenessScore = this.assessCompleteness(result);\n\n return {\n overall: (relevanceScore + completenessScore) / 2,\n correctness: relevanceScore,\n completeness: completenessScore,\n relevance: relevanceScore,\n details: [\n {\n category: 'semantic_relevance',\n score: relevanceScore,\n message: `Matched ${matchingKeywords.length}/${inputKeywords.length} keywords`,\n },\n {\n category: 'completeness',\n score: completenessScore,\n message: completenessScore > 0.8 ? 'Result appears complete' : 'Result may be incomplete',\n },\n ],\n };\n }\n\n private extractKeywords(text: string): string[] {\n return text\n .replace(/[^\\w\\s]/g, ' ')\n .split(/\\s+/)\n .filter(w => w.length > 2)\n .filter(w => !this.isStopWord(w));\n }\n\n private isStopWord(word: string): boolean {\n const stopWords = new Set([\n 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been',\n 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would',\n 'could', 'should', 'may', 'might', 'must', 'shall', 'can',\n 'need', 'dare', 'ought', 'used', 'to', 'of', 'in', 'for',\n 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through',\n 'during', 'before', 'after', 'above', 'below', 'between',\n 'and', 'but', 'or', 'yet', 'so', 'if', 'because', 'although',\n 'though', 'while', 'where', 'when', 'that', 'which', 'who',\n 'whom', 'whose', 'what', 'this', 'these', 'those', 'i',\n 'you', 'he', 'she', 'it', 'we', 'they', 'me', 'him', 'her',\n 'us', 'them', 'my', 'your', 'his', 'its', 'our', 'their',\n ]);\n return stopWords.has(word.toLowerCase());\n }\n\n private assessCompleteness(result: unknown): number {\n if (result === null || result === undefined) return 0;\n if (typeof result === 'string') {\n return result.length > 10 ? 0.8 : 0.5;\n }\n if (typeof result === 'object' && result !== null) {\n const keys = Object.keys(result);\n if (keys.length === 0) return 0.3;\n if (keys.length >= 3) return 0.9;\n return 0.6;\n }\n return 0.7;\n }\n}\n\nexport class SchemaValidator implements Evaluator {\n name = 'schema';\n\n async evaluate(result: unknown, context: EvaluationContext): Promise<EvaluationScore> {\n if (!context.expectedSchema) {\n return {\n overall: 0.5,\n correctness: 0.5,\n completeness: 0.5,\n relevance: 0.5,\n details: [{\n category: 'schema_validation',\n score: 0.5,\n message: 'No schema provided for validation',\n }],\n };\n }\n\n const validation = this.validateAgainstSchema(result, context.expectedSchema);\n \n return {\n overall: validation.score,\n correctness: validation.score,\n completeness: validation.score,\n relevance: validation.score,\n details: validation.errors.map(err => ({\n category: 'schema_validation',\n score: 0,\n message: err,\n })),\n };\n }\n\n private validateAgainstSchema(result: unknown, schema: unknown): { score: number; errors: string[] } {\n const errors: string[] = [];\n \n if (typeof schema !== 'object' || schema === null) {\n return { score: 1, errors: [] };\n }\n\n const schemaObj = schema as Record<string, unknown>;\n \n // Check type\n if (schemaObj.type && typeof schemaObj.type === 'string' && typeof result !== schemaObj.type) {\n errors.push(`Expected type ${schemaObj.type}, got ${typeof result}`);\n }\n\n // Check required properties\n if (schemaObj.required && Array.isArray(schemaObj.required)) {\n if (typeof result === 'object' && result !== null) {\n const resultObj = result as Record<string, unknown>;\n for (const prop of schemaObj.required) {\n if (!(prop in resultObj)) {\n errors.push(`Missing required property: ${prop}`);\n }\n }\n }\n }\n\n // Check properties\n if (schemaObj.properties && typeof result === 'object' && result !== null) {\n const resultObj = result as Record<string, unknown>;\n const properties = schemaObj.properties as Record<string, unknown>;\n \n for (const [key, propSchema] of Object.entries(properties)) {\n if (key in resultObj) {\n const propValidation = this.validateAgainstSchema(resultObj[key], propSchema);\n errors.push(...propValidation.errors);\n }\n }\n }\n\n const score = errors.length === 0 ? 1 : Math.max(0, 1 - errors.length * 0.2);\n return { score, errors };\n }\n}\n\n// ============================================\n// Evaluation Engine\n// ============================================\n\nexport class EvaluationEngine {\n private config: EvaluationConfig;\n private evaluators: Map<EvaluationStrategy, Evaluator> = new Map();\n private evaluationHistory: Array<{\n timestamp: Date;\n result: EvaluationResult;\n context: EvaluationContext;\n }> = [];\n\n constructor(config: Partial<EvaluationConfig> = {}) {\n this.config = {\n enabled: config.enabled ?? true,\n level: config.level ?? 'standard',\n strategies: config.strategies ?? ['semantic'],\n threshold: config.threshold ?? 0.7,\n autoRetry: config.autoRetry ?? false,\n maxRetries: config.maxRetries ?? 3,\n customValidator: config.customValidator,\n };\n\n this.registerBuiltInEvaluators();\n }\n\n private registerBuiltInEvaluators(): void {\n this.evaluators.set('exact', new ExactMatchEvaluator());\n this.evaluators.set('semantic', new SemanticEvaluator());\n this.evaluators.set('schema', new SchemaValidator());\n }\n\n /**\n * Evaluate execution result\n */\n async evaluate(\n result: SkillResult,\n context: EvaluationContext\n ): Promise<EvaluationResult> {\n if (!this.config.enabled || this.config.level === 'none') {\n return this.createPassThroughResult(result);\n }\n\n const startTime = Date.now();\n let tokensUsed = 0;\n\n // Run all configured evaluators\n const scores: EvaluationScore[] = [];\n \n for (const strategy of this.config.strategies) {\n const evaluator = this.evaluators.get(strategy);\n if (evaluator) {\n const score = await evaluator.evaluate(result.data, context);\n scores.push(score);\n tokensUsed += 50; // Approximate token cost\n }\n }\n\n // Run custom validator if provided\n if (this.config.customValidator) {\n const customScore = this.config.customValidator(result.data, context.expectedOutput);\n scores.push(customScore);\n }\n\n // Aggregate scores\n const finalScore = this.aggregateScores(scores);\n \n // Determine pass/fail based on level\n const passed = this.determinePassFail(finalScore);\n\n const evaluationResult: EvaluationResult = {\n passed,\n score: finalScore,\n feedback: this.generateFeedback(finalScore, passed),\n suggestions: this.generateSuggestions(finalScore),\n metadata: {\n executionTime: Date.now() - startTime,\n tokensUsed,\n strategyUsed: this.config.strategies[0],\n },\n };\n\n // Store in history\n this.evaluationHistory.push({\n timestamp: new Date(),\n result: evaluationResult,\n context,\n });\n\n // Limit history size\n if (this.evaluationHistory.length > 1000) {\n this.evaluationHistory = this.evaluationHistory.slice(-500);\n }\n\n return evaluationResult;\n }\n\n /**\n * Evaluate full execution result\n */\n async evaluateExecution(\n executionResult: ExecutionResult,\n context: EvaluationContext\n ): Promise<EvaluationResult> {\n if (!this.config.enabled || this.config.level === 'none') {\n return this.createPassThroughResult(executionResult.finalOutput);\n }\n\n // Evaluate each step\n const stepEvaluations: EvaluationScore[] = [];\n \n for (const stepResult of executionResult.stepResults) {\n if (stepResult.output !== undefined) {\n const stepContext: EvaluationContext = {\n ...context,\n executionHistory: executionResult.stepResults.slice(0, -1),\n };\n \n const score = await this.evaluateStep(stepResult, stepContext);\n stepEvaluations.push(score);\n }\n }\n\n // Evaluate final output\n const finalScore = await this.evaluateFinalOutput(\n executionResult.finalOutput,\n context\n );\n\n // Aggregate all scores\n const allScores = [...stepEvaluations, finalScore];\n const aggregatedScore = this.aggregateScores(allScores);\n const passed = this.determinePassFail(aggregatedScore);\n\n return {\n passed,\n score: aggregatedScore,\n feedback: this.generateFeedback(aggregatedScore, passed),\n suggestions: this.generateSuggestions(aggregatedScore),\n metadata: {\n executionTime: executionResult.metrics.totalTime,\n tokensUsed: executionResult.metrics.totalTokens,\n strategyUsed: this.config.strategies[0],\n },\n };\n }\n\n private async evaluateStep(\n stepResult: StepResult,\n context: EvaluationContext\n ): Promise<EvaluationScore> {\n const evaluator = this.evaluators.get(this.config.strategies[0]);\n if (!evaluator) {\n return this.createDefaultScore();\n }\n\n return evaluator.evaluate(stepResult.output, context);\n }\n\n private async evaluateFinalOutput(\n output: unknown,\n context: EvaluationContext\n ): Promise<EvaluationScore> {\n const evaluator = this.evaluators.get(this.config.strategies[0]);\n if (!evaluator) {\n return this.createDefaultScore();\n }\n\n return evaluator.evaluate(output, context);\n }\n\n private aggregateScores(scores: EvaluationScore[]): EvaluationScore {\n if (scores.length === 0) {\n return this.createDefaultScore();\n }\n\n if (scores.length === 1) {\n return scores[0];\n }\n\n // Weight by level\n const weights = this.getLevelWeights();\n \n const overall = this.weightedAverage(scores.map(s => s.overall), weights);\n const correctness = this.weightedAverage(scores.map(s => s.correctness), weights);\n const completeness = this.weightedAverage(scores.map(s => s.completeness), weights);\n const relevance = this.weightedAverage(scores.map(s => s.relevance), weights);\n\n const allDetails = scores.flatMap(s => s.details);\n\n return {\n overall,\n correctness,\n completeness,\n relevance,\n details: allDetails,\n };\n }\n\n private getLevelWeights(): number[] {\n switch (this.config.level) {\n case 'basic':\n return [0.6, 0.4];\n case 'strict':\n return [0.5, 0.3, 0.2];\n case 'standard':\n default:\n return [0.5, 0.5];\n }\n }\n\n private weightedAverage(values: number[], weights: number[]): number {\n const sum = values.reduce((acc, val, i) => acc + val * (weights[i] ?? 0.5), 0);\n const weightSum = weights.slice(0, values.length).reduce((a, b) => a + b, 0);\n return weightSum > 0 ? sum / weightSum : sum;\n }\n\n private determinePassFail(score: EvaluationScore): boolean {\n const threshold = this.config.threshold ?? 0.7;\n \n switch (this.config.level) {\n case 'basic':\n return score.overall >= threshold * 0.8;\n case 'strict':\n return score.overall >= threshold && \n score.correctness >= threshold && \n score.completeness >= threshold;\n case 'standard':\n default:\n return score.overall >= threshold;\n }\n }\n\n private generateFeedback(score: EvaluationScore, passed: boolean): string {\n if (passed) {\n if (score.overall >= 0.9) {\n return 'Excellent result! High quality output with strong correctness and completeness.';\n } else if (score.overall >= 0.8) {\n return 'Good result. Output meets expectations with minor room for improvement.';\n } else {\n return 'Acceptable result. Output is usable but could be improved.';\n }\n } else {\n if (score.correctness < this.config.threshold!) {\n return 'Result failed correctness check. Please review the output for accuracy.';\n } else if (score.completeness < this.config.threshold!) {\n return 'Result appears incomplete. Consider providing more comprehensive output.';\n } else {\n return 'Result does not meet quality standards. Please review and retry.';\n }\n }\n }\n\n private generateSuggestions(score: EvaluationScore): string[] {\n const suggestions: string[] = [];\n\n if (score.correctness < 0.7) {\n suggestions.push('Verify output accuracy against expected results');\n }\n\n if (score.completeness < 0.7) {\n suggestions.push('Include more details or missing information in the output');\n }\n\n if (score.relevance < 0.7) {\n suggestions.push('Ensure output directly addresses the input query');\n }\n\n // Add specific suggestions from details\n for (const detail of score.details) {\n if (detail.suggestion && detail.score < 0.7) {\n suggestions.push(detail.suggestion);\n }\n }\n\n return [...new Set(suggestions)]; // Remove duplicates\n }\n\n private createPassThroughResult(_result: unknown): EvaluationResult {\n return {\n passed: true,\n score: {\n overall: 1,\n correctness: 1,\n completeness: 1,\n relevance: 1,\n details: [{\n category: 'evaluation_disabled',\n score: 1,\n message: 'Evaluation is disabled, passing through',\n }],\n },\n feedback: 'Evaluation disabled. Result passed through without validation.',\n suggestions: [],\n metadata: {\n executionTime: 0,\n tokensUsed: 0,\n strategyUsed: this.config.strategies[0],\n },\n };\n }\n\n private createDefaultScore(): EvaluationScore {\n return {\n overall: 0.5,\n correctness: 0.5,\n completeness: 0.5,\n relevance: 0.5,\n details: [],\n };\n }\n\n /**\n * Register custom evaluator\n */\n registerEvaluator(strategy: EvaluationStrategy, evaluator: Evaluator): void {\n this.evaluators.set(strategy, evaluator);\n }\n\n /**\n * Update configuration\n */\n updateConfig(config: Partial<EvaluationConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Get current configuration\n */\n getConfig(): EvaluationConfig {\n return { ...this.config };\n }\n\n /**\n * Get evaluation statistics\n */\n getStats(): {\n totalEvaluations: number;\n passRate: number;\n averageScore: number;\n historySize: number;\n } {\n const total = this.evaluationHistory.length;\n if (total === 0) {\n return {\n totalEvaluations: 0,\n passRate: 0,\n averageScore: 0,\n historySize: 0,\n };\n }\n\n const passed = this.evaluationHistory.filter(h => h.result.passed).length;\n const avgScore = this.evaluationHistory.reduce((sum, h) => sum + h.result.score.overall, 0) / total;\n\n return {\n totalEvaluations: total,\n passRate: passed / total,\n averageScore: avgScore,\n historySize: this.evaluationHistory.length,\n };\n }\n\n /**\n * Clear evaluation history\n */\n clearHistory(): void {\n this.evaluationHistory = [];\n }\n\n /**\n * Get recent evaluations\n */\n getRecentEvaluations(limit: number = 10): Array<{\n timestamp: Date;\n passed: boolean;\n score: number;\n input: string;\n }> {\n return this.evaluationHistory\n .slice(-limit)\n .map(h => ({\n timestamp: h.timestamp,\n passed: h.result.passed,\n score: h.result.score.overall,\n input: h.context.originalInput.substring(0, 100),\n }));\n }\n}\n\nexport default EvaluationEngine;\n","/**\n * Smart Agent with automatic skill selection\n * Token-optimized decision making\n * Integrated evaluation system\n */\n\nimport { Agent, AgentConfig, Skill, SkillResult } from './agent';\nimport type { LLMMessage } from '../llm/provider';\nimport { DecisionEngine, Decision, DecisionContext, DecisionEngineConfig } from './decision-engine';\nimport { DynamicSkillLoader, SkillLoaderConfig } from './skill-loader';\nimport { TokenOptimizer, TokenOptimizerConfig } from './token-optimizer';\nimport { \n EvaluationEngine, \n EvaluationConfig, \n EvaluationResult, \n EvaluationContext,\n EvaluationLevel \n} from './evaluation-engine';\n\nexport interface SmartAgentConfig extends AgentConfig {\n decisionEngine?: DecisionEngineConfig;\n skillLoader?: SkillLoaderConfig;\n tokenOptimizer?: TokenOptimizerConfig;\n evaluation?: EvaluationConfig;\n autoDecide?: boolean;\n maxAutoIterations?: number;\n enableStreaming?: boolean;\n}\n\nexport interface AutoExecutionResult {\n decision: Decision;\n result: SkillResult | string;\n tokensUsed: number;\n executionTime: number;\n skillsLoaded?: string[];\n evaluation?: EvaluationResult;\n}\n\nexport class SmartAgent extends Agent {\n private decisionEngine: DecisionEngine;\n private skillLoader: DynamicSkillLoader;\n private tokenOptimizer: TokenOptimizer;\n private evaluationEngine: EvaluationEngine;\n private executionHistory: Array<{\n input: string;\n decision: Decision;\n timestamp: Date;\n evaluation?: EvaluationResult;\n }> = [];\n\n constructor(config: SmartAgentConfig) {\n super(config);\n this.decisionEngine = new DecisionEngine(config.decisionEngine);\n this.skillLoader = new DynamicSkillLoader(config.skillLoader);\n this.tokenOptimizer = new TokenOptimizer(config.tokenOptimizer);\n this.evaluationEngine = new EvaluationEngine(config.evaluation ?? { enabled: true, level: 'standard', strategies: ['semantic'] });\n // Store config values that might be used in future implementations\n void config.autoDecide;\n void config.maxAutoIterations;\n void config.enableStreaming;\n }\n\n /**\n * Initialize the smart agent\n */\n async initialize(): Promise<void> {\n await super.initialize();\n\n // Index all registered skills for decision making\n for (const skill of this.getAllSkills()) {\n await this.decisionEngine.indexSkill(skill);\n }\n }\n\n /**\n * Auto-process user input with smart decision making and evaluation\n */\n async process(input: string, context?: string): Promise<AutoExecutionResult> {\n const startTime = Date.now();\n const tokensUsed = 0;\n\n // Step 1: Make decision\n const decision = await this.makeDecision(input, context);\n\n // Step 2: Load required skills dynamically\n const loadedSkills: string[] = [];\n if (decision.skills) {\n for (const skillName of decision.skills) {\n if (!this.getSkill(skillName)) {\n const skill = await this.skillLoader.load(skillName);\n if (skill) {\n this.registerSkill(skill);\n await this.decisionEngine.indexSkill(skill);\n loadedSkills.push(skillName);\n }\n }\n }\n }\n\n // Step 3: Execute based on decision type\n let result: SkillResult | string;\n let skillUsed: Skill | undefined;\n\n switch (decision.type) {\n case 'skill':\n if (decision.skills?.length === 1) {\n // Single skill - extract parameters and execute\n const skillName = decision.skills[0];\n skillUsed = this.getSkill(skillName);\n const params = await this.extractParameters(input, skillName);\n const skillResult = await this.executeSkill(skillName, params);\n result = skillResult.success\n ? String(skillResult.data ?? 'Success')\n : String(skillResult.error ?? 'Error');\n } else {\n // Multiple skills - use LLM to coordinate\n result = await this.coordinateSkills(input, decision.skills || []);\n }\n break;\n\n case 'tool':\n if (decision.tools?.length === 1) {\n const toolName = decision.tools[0];\n const toolResult = await this.executeTool(toolName, input);\n result = toolResult.isError\n ? String(toolResult.content[0]?.text ?? 'Error')\n : String(toolResult.content[0]?.text ?? 'Success');\n } else {\n result = await this.coordinateTools(input, decision.tools || []);\n }\n break;\n\n case 'multi':\n // Mixed skill/tool execution\n result = await this.executeMixed(input, decision);\n break;\n\n case 'llm':\n default:\n // Direct LLM response\n result = await this.directLLMResponse(input, context);\n break;\n }\n\n // Step 4: Evaluate result if enabled\n let evaluation: EvaluationResult | undefined;\n const config = this.evaluationEngine.getConfig();\n \n if (config.enabled && config.level !== 'none') {\n const skillResult: SkillResult = typeof result === 'string' \n ? { success: true, data: result }\n : result;\n\n const evalContext: EvaluationContext = {\n originalInput: input,\n skill: skillUsed,\n };\n\n evaluation = await this.evaluationEngine.evaluate(skillResult, evalContext);\n \n // If evaluation failed and auto-retry is enabled, attempt retry\n if (!evaluation.passed && config.autoRetry && config.maxRetries && config.maxRetries > 0) {\n const retryResult = await this.attemptRetry(input, context, decision, config.maxRetries);\n if (retryResult) {\n result = retryResult.result;\n evaluation = retryResult.evaluation;\n }\n }\n }\n\n // Track execution\n this.executionHistory.push({\n input,\n decision,\n timestamp: new Date(),\n evaluation,\n });\n\n const executionTime = Date.now() - startTime;\n\n return {\n decision,\n result,\n tokensUsed,\n executionTime,\n skillsLoaded: loadedSkills.length > 0 ? loadedSkills : undefined,\n evaluation,\n };\n }\n\n /**\n * Attempt retry with improved parameters\n */\n private async attemptRetry(\n input: string, \n context: string | undefined, \n originalDecision: Decision,\n maxRetries: number\n ): Promise<{ result: SkillResult | string; evaluation: EvaluationResult } | null> {\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n // Try with different approach\n const retryDecision: Decision = {\n ...originalDecision,\n reasoning: `${originalDecision.reasoning} (retry attempt ${attempt})`,\n };\n\n let retryResult: SkillResult | string;\n \n switch (retryDecision.type) {\n case 'skill':\n if (retryDecision.skills?.length === 1) {\n const skillName = retryDecision.skills[0];\n const params = await this.extractParameters(input, skillName);\n const skillResult = await this.executeSkill(skillName, params);\n retryResult = skillResult.success\n ? String(skillResult.data ?? 'Success')\n : String(skillResult.error ?? 'Error');\n } else {\n retryResult = await this.coordinateSkills(input, retryDecision.skills || []);\n }\n break;\n case 'llm':\n default:\n retryResult = await this.directLLMResponse(input, context);\n break;\n }\n\n const skillResult: SkillResult = typeof retryResult === 'string' \n ? { success: true, data: retryResult }\n : retryResult;\n\n const evalContext: EvaluationContext = {\n originalInput: input,\n };\n\n const evaluation = await this.evaluationEngine.evaluate(skillResult, evalContext);\n \n if (evaluation.passed) {\n return { result: retryResult, evaluation };\n }\n }\n\n return null;\n }\n\n /**\n * Stream process user input with evaluation\n */\n async *streamProcess(\n input: string,\n context?: string\n ): AsyncIterableIterator<{\n type: 'decision' | 'skill' | 'tool' | 'llm' | 'evaluation' | 'complete';\n data?: unknown;\n }> {\n // Step 1: Make decision\n const decision = await this.makeDecision(input, context);\n yield { type: 'decision', data: decision };\n\n // Step 2: Execute based on decision\n let result: SkillResult | string = '';\n let skillUsed: Skill | undefined;\n\n switch (decision.type) {\n case 'skill':\n for (const skillName of decision.skills || []) {\n yield { type: 'skill', data: { name: skillName, status: 'executing' } };\n skillUsed = this.getSkill(skillName);\n const params = await this.extractParameters(input, skillName);\n const skillResult = await this.executeSkill(skillName, params);\n result = skillResult.success\n ? String(skillResult.data ?? 'Success')\n : String(skillResult.error ?? 'Error');\n yield { type: 'skill', data: { name: skillName, result } };\n }\n break;\n\n case 'tool':\n for (const toolName of decision.tools || []) {\n yield { type: 'tool', data: { name: toolName, status: 'executing' } };\n const toolResult = await this.executeTool(toolName, input);\n result = toolResult.isError\n ? String(toolResult.content[0]?.text ?? 'Error')\n : String(toolResult.content[0]?.text ?? 'Success');\n yield { type: 'tool', data: { name: toolName, result } };\n }\n break;\n\n case 'llm':\n yield { type: 'llm', data: { status: 'generating' } };\n const messages: LLMMessage[] = [{ role: 'user', content: input }];\n\n let fullResponse = '';\n for await (const chunk of this.streamChat(messages)) {\n if (chunk.delta.content) {\n fullResponse += chunk.delta.content;\n yield { type: 'llm', data: { chunk: chunk.delta.content } };\n }\n }\n result = fullResponse;\n break;\n }\n\n // Step 3: Evaluate if enabled\n const config = this.evaluationEngine.getConfig();\n if (config.enabled && config.level !== 'none') {\n const skillResult: SkillResult = typeof result === 'string' \n ? { success: true, data: result }\n : result as SkillResult;\n\n const evalContext: EvaluationContext = {\n originalInput: input,\n skill: skillUsed,\n };\n\n const evaluation = await this.evaluationEngine.evaluate(skillResult, evalContext);\n yield { type: 'evaluation', data: evaluation };\n }\n\n yield { type: 'complete' };\n }\n\n /**\n * Make decision based on input\n */\n private async makeDecision(input: string, context?: string): Promise<Decision> {\n const decisionContext: DecisionContext = {\n input,\n history: this.executionHistory.slice(-5).map(h => h.input),\n availableSkills: this.getSkillNames(),\n availableTools: this.getToolNames(),\n metadata: context ? { context } : undefined,\n };\n\n return this.decisionEngine.decide(decisionContext);\n }\n\n /**\n * Extract parameters from input for a skill\n */\n private async extractParameters(\n input: string,\n skillName: string\n ): Promise<Record<string, unknown>> {\n const skill = this.getSkill(skillName);\n if (!skill) return {};\n\n // Use LLM to extract parameters if provider available\n if (this.llmProvider) {\n const prompt = this.buildParameterExtractionPrompt(input, skill);\n const response = await this.chat([{ role: 'user', content: prompt }]);\n\n try {\n const params = JSON.parse(response.content);\n return params;\n } catch {\n // Fallback to empty params\n return {};\n }\n }\n\n // Fallback: simple keyword matching\n return this.simpleParameterExtraction(input, skill);\n }\n\n /**\n * Coordinate multiple skills\n */\n private async coordinateSkills(input: string, skillNames: string[]): Promise<string> {\n const skills = skillNames\n .map(name => this.getSkill(name))\n .filter((s): s is Skill => s !== undefined);\n\n const optimizedSkills = this.tokenOptimizer.optimizeSkills(skills, input);\n\n if (!this.llmProvider) {\n // Execute skills sequentially without LLM\n const results: string[] = [];\n for (const skill of optimizedSkills) {\n const params = await this.extractParameters(input, skill.name);\n const result = await this.executeSkill(skill.name, params);\n results.push(`${skill.name}: ${result.success ? result.data : result.error}`);\n }\n return results.join('\\n');\n }\n\n // Use LLM to coordinate\n const prompt = this.tokenOptimizer.buildOptimizedPrompt(\n input,\n optimizedSkills,\n 'Coordinate the following skills to answer the user query.'\n );\n\n const response = await this.chat([{ role: 'user', content: prompt }]);\n return response.content;\n }\n\n /**\n * Coordinate multiple tools\n */\n private async coordinateTools(input: string, toolNames: string[]): Promise<string> {\n const tools = toolNames\n .map(name => this.getTool(name))\n .filter((t): t is NonNullable<typeof t> => t !== undefined);\n\n const results: string[] = [];\n for (const tool of tools) {\n const result = await this.executeTool(tool.name, input);\n results.push(`${tool.name}: ${result.content[0]?.text ?? 'No output'}`);\n }\n\n return results.join('\\n');\n }\n\n /**\n * Execute mixed skills and tools\n */\n private async executeMixed(input: string, decision: Decision): Promise<string> {\n const results: string[] = [];\n\n // Execute skills\n if (decision.skills) {\n for (const skillName of decision.skills) {\n const params = await this.extractParameters(input, skillName);\n const result = await this.executeSkill(skillName, params);\n results.push(`Skill ${skillName}: ${result.success ? result.data : result.error}`);\n }\n }\n\n // Execute tools\n if (decision.tools) {\n for (const toolName of decision.tools) {\n const result = await this.executeTool(toolName, input);\n results.push(`Tool ${toolName}: ${result.content[0]?.text ?? 'No output'}`);\n }\n }\n\n return results.join('\\n');\n }\n\n /**\n * Direct LLM response\n */\n private async directLLMResponse(input: string, context?: string): Promise<string> {\n if (!this.llmProvider) {\n return 'No LLM provider configured';\n }\n\n const messages: LLMMessage[] = [];\n\n if (context) {\n messages.push({\n role: 'system',\n content: `Context: ${context}`,\n });\n }\n\n messages.push({ role: 'user', content: input });\n\n const response = await this.chat(messages);\n return response.content;\n }\n\n /**\n * Build parameter extraction prompt\n */\n private buildParameterExtractionPrompt(input: string, skill: Skill): string {\n const params = Object.entries(skill.parameters.properties)\n .map(([key, prop]) => {\n const required = skill.parameters.required?.includes(key) ? ' (required)' : '';\n return `- ${key}: ${prop.description}${required}`;\n })\n .join('\\n');\n\n return `Extract parameters for skill \"${skill.name}\" from the following input.\n\nSkill description: ${skill.description}\n\nParameters:\n${params}\n\nInput: \"${input}\"\n\nReturn only a JSON object with the parameter names and values. If a parameter cannot be determined, use null or omit it.`;\n }\n\n /**\n * Simple parameter extraction without LLM\n */\n private simpleParameterExtraction(input: string, skill: Skill): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n for (const [key, prop] of Object.entries(skill.parameters.properties)) {\n // Look for \"key: value\" or \"key is value\" patterns\n const patterns = [\n new RegExp(`${key}[:=]\\\\s*([^,\\\\s]+)`, 'i'),\n new RegExp(`${key}\\\\s+is\\\\s+([^,\\\\s]+)`, 'i'),\n new RegExp(`${key}\\\\s+([^,\\\\s]+)`, 'i'),\n ];\n\n for (const pattern of patterns) {\n const match = input.match(pattern);\n if (match) {\n let value: unknown = match[1];\n\n // Type conversion\n if (prop.type === 'number') {\n value = parseFloat(value as string);\n } else if (prop.type === 'boolean') {\n value = ['true', 'yes', '1'].includes((value as string).toLowerCase());\n }\n\n params[key] = value;\n break;\n }\n }\n\n // Use default if available and not set\n if (!(key in params) && prop.default !== undefined) {\n params[key] = prop.default;\n }\n }\n\n return params;\n }\n\n /**\n * Register a skill source for dynamic loading\n */\n registerSkillSource(name: string, source: string, type: 'file' | 'url' | 'module'): void {\n this.skillLoader.registerSource({\n name,\n type,\n source,\n });\n }\n\n /**\n * Get execution history\n */\n getExecutionHistory(): Array<{ input: string; decision: Decision; timestamp: Date; evaluation?: EvaluationResult }> {\n return [...this.executionHistory];\n }\n\n /**\n * Get decision engine stats\n */\n getDecisionStats(): {\n cacheSize: number;\n loadedSkills: number;\n historySize: number;\n } {\n return {\n cacheSize: this.decisionEngine.getCacheStats().size,\n loadedSkills: this.skillLoader.getStats().loaded,\n historySize: this.executionHistory.length,\n };\n }\n\n /**\n * Get evaluation stats\n */\n getEvaluationStats(): {\n totalEvaluations: number;\n passRate: number;\n averageScore: number;\n config: { enabled: boolean; level: EvaluationLevel };\n } {\n const stats = this.evaluationEngine.getStats();\n const config = this.evaluationEngine.getConfig();\n \n return {\n ...stats,\n config: {\n enabled: config.enabled,\n level: config.level,\n },\n };\n }\n\n /**\n * Update evaluation configuration\n */\n updateEvaluationConfig(config: Partial<EvaluationConfig>): void {\n this.evaluationEngine.updateConfig(config);\n }\n\n /**\n * Get evaluation configuration\n */\n getEvaluationConfig(): EvaluationConfig {\n return this.evaluationEngine.getConfig();\n }\n\n /**\n * Clear execution history\n */\n clearHistory(): void {\n this.executionHistory = [];\n this.decisionEngine.clearCache();\n this.evaluationEngine.clearHistory();\n }\n\n /**\n * Get recent evaluations\n */\n getRecentEvaluations(limit: number = 10): Array<{\n timestamp: Date;\n passed: boolean;\n score: number;\n input: string;\n feedback: string;\n }> {\n return this.executionHistory\n .filter(h => h.evaluation)\n .slice(-limit)\n .map(h => ({\n timestamp: h.timestamp,\n passed: h.evaluation!.passed,\n score: h.evaluation!.score.overall,\n input: h.input.substring(0, 100),\n feedback: h.evaluation!.feedback,\n }));\n }\n\n /**\n * Generate evaluation report\n */\n generateEvaluationReport(): {\n summary: {\n totalExecutions: number;\n evaluatedExecutions: number;\n passRate: number;\n averageScore: number;\n };\n recentEvaluations: Array<{\n timestamp: Date;\n passed: boolean;\n score: number;\n input: string;\n feedback: string;\n }>;\n suggestions: string[];\n } {\n const stats = this.evaluationEngine.getStats();\n const recent = this.getRecentEvaluations(10);\n \n // Collect all suggestions\n const allSuggestions = this.executionHistory\n .filter(h => h.evaluation)\n .flatMap(h => h.evaluation!.suggestions);\n \n const uniqueSuggestions = [...new Set(allSuggestions)].slice(0, 10);\n\n return {\n summary: {\n totalExecutions: this.executionHistory.length,\n evaluatedExecutions: stats.totalEvaluations,\n passRate: stats.passRate,\n averageScore: stats.averageScore,\n },\n recentEvaluations: recent,\n suggestions: uniqueSuggestions,\n };\n }\n}\n","/**\r\n * Advanced Decision Engine\r\n * \r\n * Features:\r\n * - Multi-stage decision making with confidence scoring\r\n * - Intent classification with hierarchical matching\r\n * - Context-aware skill selection\r\n * - Adaptive learning from execution history\r\n */\r\n\r\nimport { Skill } from './agent';\r\nimport { Decision, DecisionContext, DecisionEngineConfig, EmbeddingProvider, SimpleEmbeddingProvider } from './decision-engine';\r\n\r\nexport interface AdvancedDecision extends Decision {\r\n intent: string;\r\n intentConfidence: number;\r\n subDecisions?: AdvancedDecision[];\r\n estimatedTokens: number;\r\n estimatedTime: number;\r\n prerequisites?: string[];\r\n postProcessing?: string[];\r\n}\r\n\r\nexport interface IntentPattern {\r\n name: string;\r\n patterns: RegExp[];\r\n keywords: string[];\r\n weight: number;\r\n relatedSkills: string[];\r\n}\r\n\r\nexport interface ExecutionContext {\r\n previousDecisions: AdvancedDecision[];\r\n userPreferences: Record<string, unknown>;\r\n sessionContext: Record<string, unknown>;\r\n constraints: {\r\n maxTokens?: number;\r\n maxTime?: number;\r\n allowedSkills?: string[];\r\n blockedSkills?: string[];\r\n };\r\n}\r\n\r\nexport class AdvancedDecisionEngine {\r\n private skillEmbeddings = new Map<string, number[]>();\r\n private intentPatterns: IntentPattern[] = [];\r\n private embeddingProvider: EmbeddingProvider;\r\n private decisionCache = new Map<string, AdvancedDecision>();\r\n private executionHistory: Array<{\r\n input: string;\r\n decision: AdvancedDecision;\r\n success: boolean;\r\n executionTime: number;\r\n }> = [];\r\n private config: Required<DecisionEngineConfig> & {\r\n enableIntentClassification: boolean;\r\n enableContextualMemory: boolean;\r\n learningRate: number;\r\n };\r\n\r\n constructor(\r\n config: DecisionEngineConfig & {\r\n enableIntentClassification?: boolean;\r\n enableContextualMemory?: boolean;\r\n learningRate?: number;\r\n } = {},\r\n embeddingProvider?: EmbeddingProvider\r\n ) {\r\n this.config = {\r\n threshold: config.threshold ?? 0.6,\r\n maxSkills: config.maxSkills ?? 3,\r\n enableEmbeddings: config.enableEmbeddings ?? true,\r\n enableCaching: config.enableCaching ?? true,\r\n similarityThreshold: config.similarityThreshold ?? 0.5,\r\n enableIntentClassification: config.enableIntentClassification ?? true,\r\n enableContextualMemory: config.enableContextualMemory ?? true,\r\n learningRate: config.learningRate ?? 0.1,\r\n };\r\n this.embeddingProvider = embeddingProvider ?? new SimpleEmbeddingProvider();\r\n this.initializeIntentPatterns();\r\n }\r\n\r\n /**\r\n * Initialize common intent patterns\r\n */\r\n private initializeIntentPatterns(): void {\r\n this.intentPatterns = [\r\n {\r\n name: 'calculation',\r\n patterns: [/calculate|compute|sum|add|subtract|multiply|divide/i],\r\n keywords: ['math', 'calculate', 'compute', 'number', 'sum', 'total'],\r\n weight: 1.0,\r\n relatedSkills: ['math', 'calculator', 'arithmetic'],\r\n },\r\n {\r\n name: 'data_processing',\r\n patterns: [/process|transform|convert|parse|extract/i],\r\n keywords: ['data', 'process', 'transform', 'convert', 'parse', 'extract'],\r\n weight: 1.0,\r\n relatedSkills: ['data-processor', 'transformer', 'parser'],\r\n },\r\n {\r\n name: 'document_analysis',\r\n patterns: [/analyze|read|extract|summarize.*document|pdf/i],\r\n keywords: ['document', 'pdf', 'analyze', 'read', 'extract', 'text'],\r\n weight: 1.0,\r\n relatedSkills: ['pdf-processor', 'document-reader', 'text-extractor'],\r\n },\r\n {\r\n name: 'search_query',\r\n patterns: [/search|find|lookup|query/i],\r\n keywords: ['search', 'find', 'lookup', 'query', 'retrieve'],\r\n weight: 0.9,\r\n relatedSkills: ['search', 'retrieval', 'lookup'],\r\n },\r\n {\r\n name: 'generation',\r\n patterns: [/generate|create|write|compose|draft/i],\r\n keywords: ['generate', 'create', 'write', 'compose', 'draft', 'produce'],\r\n weight: 0.9,\r\n relatedSkills: ['generator', 'writer', 'creator'],\r\n },\r\n {\r\n name: 'comparison',\r\n patterns: [/compare|difference|versus|vs|better|best/i],\r\n keywords: ['compare', 'difference', 'versus', 'contrast', 'evaluate'],\r\n weight: 0.8,\r\n relatedSkills: ['comparator', 'evaluator'],\r\n },\r\n {\r\n name: 'information_retrieval',\r\n patterns: [/what is|how to|explain|tell me about|describe/i],\r\n keywords: ['information', 'explain', 'describe', 'what', 'how', 'why'],\r\n weight: 0.7,\r\n relatedSkills: ['qa', 'information-retrieval', 'explainer'],\r\n },\r\n ];\r\n }\r\n\r\n /**\r\n * Make advanced decision with full context analysis\r\n */\r\n async decide(\r\n context: DecisionContext,\r\n executionContext?: ExecutionContext\r\n ): Promise<AdvancedDecision> {\r\n const cacheKey = this.generateCacheKey(context, executionContext);\r\n\r\n // Check cache\r\n if (this.config.enableCaching) {\r\n const cached = this.decisionCache.get(cacheKey);\r\n if (cached) {\r\n return this.enrichDecisionWithContext(cached, executionContext);\r\n }\r\n }\r\n\r\n // Stage 1: Intent Classification\r\n const intentResult = this.config.enableIntentClassification\r\n ? this.classifyIntent(context.input)\r\n : { intent: 'general', confidence: 0.5 };\r\n\r\n // Stage 2: Find relevant skills with intent boost\r\n const relevantSkills = await this.findRelevantSkills(context, intentResult);\r\n\r\n // Stage 3: Find relevant tools\r\n const relevantTools = this.findRelevantTools(context, intentResult);\r\n\r\n // Stage 4: Build decision tree\r\n const decision = await this.buildDecision(\r\n context,\r\n intentResult,\r\n relevantSkills,\r\n relevantTools,\r\n executionContext\r\n );\r\n\r\n // Cache decision\r\n if (this.config.enableCaching) {\r\n this.decisionCache.set(cacheKey, decision);\r\n this.limitCacheSize();\r\n }\r\n\r\n return decision;\r\n }\r\n\r\n /**\r\n * Classify user intent from input\r\n */\r\n private classifyIntent(input: string): { intent: string; confidence: number } {\r\n const scores: Array<{ intent: string; score: number }> = [];\r\n\r\n for (const pattern of this.intentPatterns) {\r\n let score = 0;\r\n\r\n // Check regex patterns\r\n for (const regex of pattern.patterns) {\r\n if (regex.test(input)) {\r\n score += pattern.weight * 0.6;\r\n }\r\n }\r\n\r\n // Check keyword matches\r\n const inputLower = input.toLowerCase();\r\n const keywordMatches = pattern.keywords.filter(kw => inputLower.includes(kw));\r\n score += (keywordMatches.length / pattern.keywords.length) * pattern.weight * 0.4;\r\n\r\n if (score > 0) {\r\n scores.push({ intent: pattern.name, score });\r\n }\r\n }\r\n\r\n // Sort by score\r\n scores.sort((a, b) => b.score - a.score);\r\n\r\n if (scores.length === 0) {\r\n return { intent: 'general', confidence: 0.3 };\r\n }\r\n\r\n // Normalize confidence\r\n const topScore = scores[0].score;\r\n const normalizedConfidence = Math.min(topScore / 0.8, 1.0);\r\n\r\n return {\r\n intent: scores[0].intent,\r\n confidence: normalizedConfidence,\r\n };\r\n }\r\n\r\n /**\r\n * Find relevant skills with intent boosting\r\n */\r\n private async findRelevantSkills(\r\n decisionContext: DecisionContext,\r\n intentResult: { intent: string; confidence: number }\r\n ): Promise<Array<{ name: string; confidence: number; reasons: string[] }>> {\r\n const results: Array<{ name: string; confidence: number; reasons: string[] }> = [];\r\n\r\n // Get intent pattern for boosting\r\n const intentPattern = this.intentPatterns.find(p => p.name === intentResult.intent);\r\n\r\n if (this.config.enableEmbeddings && this.skillEmbeddings.size > 0) {\r\n const inputEmbedding = await this.embeddingProvider.embed(decisionContext.input);\r\n\r\n for (const [skillName, skillEmbedding] of this.skillEmbeddings) {\r\n const similarity = this.embeddingProvider.similarity(inputEmbedding, skillEmbedding);\r\n let confidence = similarity;\r\n const reasons: string[] = [];\r\n\r\n // Boost confidence for intent-related skills\r\n if (intentPattern?.relatedSkills.includes(skillName)) {\r\n confidence = Math.min(confidence * 1.3, 1.0);\r\n reasons.push(`Matches ${intentResult.intent} intent`);\r\n }\r\n\r\n if (confidence >= this.config.similarityThreshold) {\r\n results.push({ name: skillName, confidence, reasons });\r\n }\r\n }\r\n } else {\r\n // Fallback to keyword matching with intent boost\r\n const inputKeywords = this.extractKeywordsFromText(decisionContext.input);\r\n\r\n for (const skillName of decisionContext.availableSkills) {\r\n const skillKeywords = skillName.toLowerCase().split(/[_-]/);\r\n const matches = inputKeywords.filter(kw =>\r\n skillKeywords.some(sk => sk.includes(kw) || kw.includes(sk))\r\n );\r\n\r\n if (matches.length > 0) {\r\n let confidence = matches.length / Math.max(inputKeywords.length, skillKeywords.length);\r\n const reasons: string[] = [`Keyword match: ${matches.join(', ')}`];\r\n\r\n // Boost for intent-related skills\r\n if (intentPattern?.relatedSkills.includes(skillName)) {\r\n confidence = Math.min(confidence * 1.3, 1.0);\r\n reasons.push(`Matches ${intentResult.intent} intent`);\r\n }\r\n\r\n if (confidence >= this.config.threshold) {\r\n results.push({ name: skillName, confidence, reasons });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Sort by confidence\r\n results.sort((a, b) => b.confidence - a.confidence);\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Find relevant tools with intent consideration\r\n */\r\n private findRelevantTools(\r\n context: DecisionContext,\r\n intentResult: { intent: string; confidence: number }\r\n ): Array<{ name: string; confidence: number; reasons: string[] }> {\r\n const inputKeywords = this.extractKeywordsFromText(context.input);\r\n const results: Array<{ name: string; confidence: number; reasons: string[] }> = [];\r\n\r\n for (const toolName of context.availableTools) {\r\n const toolKeywords = toolName.toLowerCase().split(/[_-]/);\r\n const matches = inputKeywords.filter(kw =>\r\n toolKeywords.some(tk => tk.includes(kw) || kw.includes(tk))\r\n );\r\n\r\n if (matches.length > 0) {\r\n let confidence = matches.length / Math.max(inputKeywords.length, toolKeywords.length);\r\n const reasons: string[] = [`Keyword match: ${matches.join(', ')}`];\r\n\r\n // Boost for tools matching intent\r\n if (intentResult.intent !== 'general' && matches.some(m => m.includes(intentResult.intent))) {\r\n confidence = Math.min(confidence * 1.2, 1.0);\r\n reasons.push(`Matches ${intentResult.intent} intent`);\r\n }\r\n\r\n if (confidence >= this.config.threshold) {\r\n results.push({ name: toolName, confidence, reasons });\r\n }\r\n }\r\n }\r\n\r\n results.sort((a, b) => b.confidence - a.confidence);\r\n return results;\r\n }\r\n\r\n /**\r\n * Build comprehensive decision\r\n */\r\n private async buildDecision(\r\n _decisionContext: DecisionContext,\r\n intentResult: { intent: string; confidence: number },\r\n relevantSkills: Array<{ name: string; confidence: number; reasons: string[] }>,\r\n relevantTools: Array<{ name: string; confidence: number; reasons: string[] }>,\r\n executionContext?: ExecutionContext\r\n ): Promise<AdvancedDecision> {\r\n // Determine decision type and components\r\n let type: Decision['type'] = 'llm';\r\n let skills: string[] | undefined;\r\n let tools: string[] | undefined;\r\n let reasoning: string;\r\n let confidence: number;\r\n let subDecisions: AdvancedDecision[] | undefined;\r\n\r\n const topSkills = relevantSkills.slice(0, this.config.maxSkills);\r\n const topTools = relevantTools.slice(0, 2);\r\n\r\n if (topSkills.length === 0 && topTools.length === 0) {\r\n type = 'llm';\r\n confidence = 1.0;\r\n reasoning = `No relevant skills/tools found for intent \"${intentResult.intent}\". Using LLM directly.`;\r\n } else if (topSkills.length === 1 && topTools.length === 0) {\r\n type = 'skill';\r\n skills = [topSkills[0].name];\r\n confidence = topSkills[0].confidence * intentResult.confidence;\r\n reasoning = `Single skill match: ${topSkills[0].name}. ${topSkills[0].reasons.join('; ')}`;\r\n } else if (topTools.length === 1 && topSkills.length === 0) {\r\n type = 'tool';\r\n tools = [topTools[0].name];\r\n confidence = topTools[0].confidence * intentResult.confidence;\r\n reasoning = `Single tool match: ${topTools[0].name}. ${topTools[0].reasons.join('; ')}`;\r\n } else {\r\n type = 'multi';\r\n skills = topSkills.map(s => s.name);\r\n tools = topTools.map(t => t.name);\r\n confidence = Math.max(\r\n topSkills[0]?.confidence ?? 0,\r\n topTools[0]?.confidence ?? 0\r\n ) * intentResult.confidence;\r\n reasoning = `Multiple matches for intent \"${intentResult.intent}\": Skills [${skills.join(', ')}], Tools [${tools.join(', ')}]`;\r\n\r\n // Build sub-decisions for complex scenarios\r\n subDecisions = this.buildSubDecisions(topSkills, topTools);\r\n }\r\n\r\n // Calculate estimates\r\n const estimatedTokens = this.estimateTokenUsage(type, skills, tools);\r\n const estimatedTime = this.estimateExecutionTime(type, skills, tools);\r\n\r\n // Apply constraints from execution context\r\n if (executionContext?.constraints) {\r\n const { maxTokens, maxTime, allowedSkills, blockedSkills } = executionContext.constraints;\r\n\r\n if (maxTokens && estimatedTokens > maxTokens) {\r\n reasoning += ` (Token limit exceeded: ${estimatedTokens} > ${maxTokens})`;\r\n confidence *= 0.8;\r\n }\r\n\r\n if (maxTime && estimatedTime > maxTime) {\r\n reasoning += ` (Time limit exceeded: ${estimatedTime}ms > ${maxTime}ms)`;\r\n confidence *= 0.8;\r\n }\r\n\r\n // Filter blocked skills\r\n if (blockedSkills && skills) {\r\n skills = skills.filter(s => !blockedSkills.includes(s));\r\n }\r\n\r\n // Check allowed skills\r\n if (allowedSkills && skills) {\r\n skills = skills.filter(s => allowedSkills.includes(s));\r\n }\r\n }\r\n\r\n return {\r\n type,\r\n skills,\r\n tools,\r\n confidence,\r\n reasoning,\r\n fallback: confidence < 0.5 ? 'llm' : undefined,\r\n intent: intentResult.intent,\r\n intentConfidence: intentResult.confidence,\r\n subDecisions,\r\n estimatedTokens,\r\n estimatedTime,\r\n };\r\n }\r\n\r\n /**\r\n * Build sub-decisions for complex scenarios\r\n */\r\n private buildSubDecisions(\r\n skills: Array<{ name: string; confidence: number }>,\r\n tools: Array<{ name: string; confidence: number }>\r\n ): AdvancedDecision[] {\r\n const subDecisions: AdvancedDecision[] = [];\r\n\r\n for (const skill of skills) {\r\n subDecisions.push({\r\n type: 'skill',\r\n skills: [skill.name],\r\n confidence: skill.confidence,\r\n reasoning: `Execute skill: ${skill.name}`,\r\n intent: 'sub-task',\r\n intentConfidence: skill.confidence,\r\n estimatedTokens: 500,\r\n estimatedTime: 1000,\r\n });\r\n }\r\n\r\n for (const tool of tools) {\r\n subDecisions.push({\r\n type: 'tool',\r\n tools: [tool.name],\r\n confidence: tool.confidence,\r\n reasoning: `Execute tool: ${tool.name}`,\r\n intent: 'sub-task',\r\n intentConfidence: tool.confidence,\r\n estimatedTokens: 200,\r\n estimatedTime: 500,\r\n });\r\n }\r\n\r\n return subDecisions;\r\n }\r\n\r\n /**\r\n * Enrich decision with execution context\r\n */\r\n private enrichDecisionWithContext(\r\n decision: AdvancedDecision,\r\n executionContext?: ExecutionContext\r\n ): AdvancedDecision {\r\n if (!executionContext || !this.config.enableContextualMemory) {\r\n return decision;\r\n }\r\n\r\n // Adjust based on previous decisions\r\n const similarDecisions = executionContext.previousDecisions.filter(\r\n d => d.intent === decision.intent\r\n );\r\n\r\n if (similarDecisions.length > 0) {\r\n const avgSuccess = similarDecisions.filter(d => d.confidence > 0.7).length / similarDecisions.length;\r\n decision.confidence = decision.confidence * (0.8 + avgSuccess * 0.2);\r\n }\r\n\r\n return decision;\r\n }\r\n\r\n /**\r\n * Estimate token usage\r\n */\r\n private estimateTokenUsage(\r\n type: Decision['type'],\r\n skills?: string[],\r\n tools?: string[]\r\n ): number {\r\n let tokens = 500; // Base overhead\r\n\r\n if (type === 'skill' || type === 'multi') {\r\n tokens += (skills?.length ?? 0) * 800;\r\n }\r\n\r\n if (type === 'tool' || type === 'multi') {\r\n tokens += (tools?.length ?? 0) * 300;\r\n }\r\n\r\n if (type === 'llm') {\r\n tokens += 2000;\r\n }\r\n\r\n return tokens;\r\n }\r\n\r\n /**\r\n * Estimate execution time\r\n */\r\n private estimateExecutionTime(\r\n type: Decision['type'],\r\n skills?: string[],\r\n tools?: string[]\r\n ): number {\r\n let time = 500; // Base overhead\r\n\r\n if (type === 'skill' || type === 'multi') {\r\n time += (skills?.length ?? 0) * 2000;\r\n }\r\n\r\n if (type === 'tool' || type === 'multi') {\r\n time += (tools?.length ?? 0) * 1000;\r\n }\r\n\r\n if (type === 'llm') {\r\n time += 3000;\r\n }\r\n\r\n return time;\r\n }\r\n\r\n /**\r\n * Learn from execution result\r\n */\r\n learn(input: string, decision: AdvancedDecision, success: boolean, executionTime: number): void {\r\n this.executionHistory.push({\r\n input,\r\n decision,\r\n success,\r\n executionTime,\r\n });\r\n\r\n // Limit history size\r\n if (this.executionHistory.length > 1000) {\r\n this.executionHistory = this.executionHistory.slice(-500);\r\n }\r\n\r\n // Update intent pattern weights based on success\r\n if (this.config.enableContextualMemory) {\r\n const pattern = this.intentPatterns.find(p => p.name === decision.intent);\r\n if (pattern) {\r\n const adjustment = success ? this.config.learningRate : -this.config.learningRate;\r\n pattern.weight = Math.max(0.1, Math.min(2.0, pattern.weight + adjustment));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Index skill for retrieval\r\n */\r\n async indexSkill(skill: Skill): Promise<void> {\r\n if (!this.config.enableEmbeddings) return;\r\n\r\n const text = `${skill.name} ${skill.description} ${this.extractKeywords(skill)}`;\r\n const embedding = await this.embeddingProvider.embed(text);\r\n this.skillEmbeddings.set(skill.name, embedding);\r\n }\r\n\r\n /**\r\n * Extract keywords from skill\r\n */\r\n private extractKeywords(skill: Skill): string {\r\n const keywords: string[] = [\r\n skill.name,\r\n skill.description,\r\n ...(skill.metadata?.tags ?? []),\r\n skill.metadata?.category ?? '',\r\n ];\r\n\r\n for (const [key, prop] of Object.entries(skill.parameters.properties)) {\r\n keywords.push(key, prop.description);\r\n }\r\n\r\n return keywords.join(' ');\r\n }\r\n\r\n /**\r\n * Extract keywords from text\r\n */\r\n private extractKeywordsFromText(text: string): string[] {\r\n return text\r\n .toLowerCase()\r\n .replace(/[^\\w\\s]/g, ' ')\r\n .split(/\\s+/)\r\n .filter(t => t.length > 2);\r\n }\r\n\r\n /**\r\n * Generate cache key\r\n */\r\n private generateCacheKey(\r\n context: DecisionContext,\r\n executionContext?: ExecutionContext\r\n ): string {\r\n const base = `${context.input}:${context.availableSkills.join(',')}:${context.availableTools.join(',')}`;\r\n if (executionContext?.constraints.allowedSkills) {\r\n return `${base}:${executionContext.constraints.allowedSkills.join(',')}`;\r\n }\r\n return base;\r\n }\r\n\r\n /**\r\n * Limit cache size\r\n */\r\n private limitCacheSize(): void {\r\n if (this.decisionCache.size > 1000) {\r\n const firstKey = this.decisionCache.keys().next().value;\r\n if (firstKey !== undefined) {\r\n this.decisionCache.delete(firstKey);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get performance statistics\r\n */\r\n getStats(): {\r\n cacheSize: number;\r\n historySize: number;\r\n intentPatterns: Array<{ name: string; weight: number }>;\r\n averageSuccessRate: number;\r\n } {\r\n const successCount = this.executionHistory.filter(h => h.success).length;\r\n const averageSuccessRate = this.executionHistory.length > 0\r\n ? successCount / this.executionHistory.length\r\n : 0;\r\n\r\n return {\r\n cacheSize: this.decisionCache.size,\r\n historySize: this.executionHistory.length,\r\n intentPatterns: this.intentPatterns.map(p => ({ name: p.name, weight: p.weight })),\r\n averageSuccessRate,\r\n };\r\n }\r\n\r\n /**\r\n * Clear all data\r\n */\r\n clear(): void {\r\n this.decisionCache.clear();\r\n this.executionHistory = [];\r\n this.skillEmbeddings.clear();\r\n }\r\n}\r\n\r\nexport default AdvancedDecisionEngine;\r\n","/**\r\n * Advanced Parameter Extractor\r\n *\r\n * Features:\r\n * - Multi-strategy parameter extraction (LLM, pattern, context)\r\n * - Type coercion and validation\r\n * - Required/optional parameter handling\r\n * - Context-aware extraction\r\n */\r\n\r\nimport { Skill } from './agent';\r\n\r\nexport interface ParameterSchema {\r\n type: 'string' | 'number' | 'boolean' | 'array' | 'object';\r\n description: string;\r\n required?: boolean;\r\n default?: unknown;\r\n enum?: unknown[];\r\n pattern?: string;\r\n min?: number;\r\n max?: number;\r\n items?: ParameterSchema;\r\n properties?: Record<string, ParameterSchema>;\r\n}\r\n\r\nexport interface ExtractionResult {\r\n params: Record<string, unknown>;\r\n confidence: number;\r\n missing: string[];\r\n invalid: Array<{ param: string; reason: string }>;\r\n suggestions: Array<{ param: string; suggestion: string }>;\r\n}\r\n\r\nexport interface ExtractionContext {\r\n previousParams?: Record<string, unknown>;\r\n userPreferences?: Record<string, unknown>;\r\n conversationHistory?: string[];\r\n extractedEntities?: Record<string, unknown>;\r\n}\r\n\r\nexport interface ExtractorConfig {\r\n useLLM?: boolean;\r\n usePatternMatching?: boolean;\r\n useContextInference?: boolean;\r\n confidenceThreshold?: number;\r\n maxRetries?: number;\r\n}\r\n\r\nexport class ParameterExtractor {\r\n private config: Required<ExtractorConfig>;\r\n\r\n constructor(config: ExtractorConfig = {}) {\r\n this.config = {\r\n useLLM: config.useLLM ?? true,\r\n usePatternMatching: config.usePatternMatching ?? true,\r\n useContextInference: config.useContextInference ?? true,\r\n confidenceThreshold: config.confidenceThreshold ?? 0.7,\r\n maxRetries: config.maxRetries ?? 3,\r\n };\r\n }\r\n\r\n /**\r\n * Extract parameters from input using multiple strategies\r\n */\r\n async extract(\r\n input: string,\r\n skill: Skill,\r\n context?: ExtractionContext,\r\n llmProvider?: {\r\n complete(prompt: string): Promise<{ content: string }>;\r\n }\r\n ): Promise<ExtractionResult> {\r\n const results: ExtractionResult[] = [];\r\n\r\n // Strategy 1: Pattern matching\r\n if (this.config.usePatternMatching) {\r\n const patternResult = this.extractWithPatterns(input, skill);\r\n results.push(patternResult);\r\n }\r\n\r\n // Strategy 2: Context inference\r\n if (this.config.useContextInference && context) {\r\n const contextResult = this.extractFromContext(skill, context);\r\n results.push(contextResult);\r\n }\r\n\r\n // Strategy 3: LLM extraction\r\n if (this.config.useLLM && llmProvider) {\r\n const llmResult = await this.extractWithLLM(input, skill, llmProvider);\r\n results.push(llmResult);\r\n }\r\n\r\n // Merge results with confidence weighting\r\n return this.mergeResults(results, skill);\r\n }\r\n\r\n /**\r\n * Extract parameters using pattern matching\r\n */\r\n private extractWithPatterns(input: string, skill: Skill): ExtractionResult {\r\n const params: Record<string, unknown> = {};\r\n const missing: string[] = [];\r\n const invalid: Array<{ param: string; reason: string }> = [];\r\n const suggestions: Array<{ param: string; suggestion: string }> = [];\r\n let confidence = 0;\r\n\r\n for (const [key, prop] of Object.entries(skill.parameters.properties)) {\r\n const schema = this.convertPropertyToSchema(prop);\r\n const value = this.extractValueWithPatterns(input, key, schema);\r\n\r\n if (value !== undefined) {\r\n const validation = this.validateValue(value, schema);\r\n if (validation.valid) {\r\n params[key] = value;\r\n confidence += 0.3; // Base confidence for pattern match\r\n } else {\r\n invalid.push({ param: key, reason: validation.reason || 'Invalid value' });\r\n suggestions.push({\r\n param: key,\r\n suggestion: this.generateSuggestion(schema, validation.reason),\r\n });\r\n }\r\n } else if (skill.parameters.required?.includes(key)) {\r\n missing.push(key);\r\n suggestions.push({\r\n param: key,\r\n suggestion: `Please provide ${prop.description}`,\r\n });\r\n } else if (prop.default !== undefined) {\r\n params[key] = prop.default;\r\n confidence += 0.1; // Lower confidence for defaults\r\n }\r\n }\r\n\r\n const totalParams = Object.keys(skill.parameters.properties).length;\r\n confidence = totalParams > 0 ? confidence / totalParams : 0;\r\n\r\n return {\r\n params,\r\n confidence,\r\n missing,\r\n invalid,\r\n suggestions,\r\n };\r\n }\r\n\r\n /**\r\n * Convert ParameterProperty to ParameterSchema\r\n */\r\n private convertPropertyToSchema(prop: { type: string; description: string; enum?: string[]; default?: unknown }): ParameterSchema {\r\n const type = prop.type as 'string' | 'number' | 'boolean' | 'array' | 'object';\r\n return {\r\n type,\r\n description: prop.description,\r\n enum: prop.enum,\r\n default: prop.default,\r\n };\r\n }\r\n\r\n /**\r\n * Extract a single value using patterns\r\n */\r\n private extractValueWithPatterns(\r\n input: string,\r\n key: string,\r\n schema: ParameterSchema\r\n ): unknown {\r\n const patterns = [\r\n // \"key: value\" or \"key = value\"\r\n new RegExp(`${key}[:=]\\\\s*([^,;\\\\n]+)`, 'i'),\r\n // \"key is value\"\r\n new RegExp(`${key}\\\\s+is\\\\s+([^,;\\\\n]+)`, 'i'),\r\n // \"with key value\" or \"using key value\"\r\n new RegExp(`(?:with|using)\\\\s+${key}\\\\s+([^,;\\\\n]+)`, 'i'),\r\n // \"key value\" (positional)\r\n new RegExp(`${key}\\\\s+([^,;\\\\n]+)`, 'i'),\r\n ];\r\n\r\n for (const pattern of patterns) {\r\n const match = input.match(pattern);\r\n if (match) {\r\n const rawValue = match[1].trim();\r\n return this.coerceValue(rawValue, schema);\r\n }\r\n }\r\n\r\n // Special handling for arrays\r\n if (schema.type === 'array' && schema.items) {\r\n return this.extractArrayValue(input, key, schema.items);\r\n }\r\n\r\n // Special handling for booleans\r\n if (schema.type === 'boolean') {\r\n const boolPattern = new RegExp(`\\\\b${key}\\\\b`, 'i');\r\n if (boolPattern.test(input)) {\r\n // Check for negative indicators\r\n const negativePattern = new RegExp(`(no\\\\s+${key}|without\\\\s+${key}|disable\\\\s+${key})`, 'i');\r\n return !negativePattern.test(input);\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Extract array values\r\n */\r\n private extractArrayValue(\r\n input: string,\r\n key: string,\r\n itemSchema: ParameterSchema\r\n ): unknown[] | undefined {\r\n const patterns = [\r\n new RegExp(`${key}[:=]\\\\s*\\\\[([^\\\\]]+)\\\\]`, 'i'),\r\n new RegExp(`${key}[:=]\\\\s*([^,;\\\\n]+)`, 'i'),\r\n ];\r\n\r\n for (const pattern of patterns) {\r\n const match = input.match(pattern);\r\n if (match) {\r\n const items = match[1].split(/[,;]/).map(s => s.trim());\r\n return items.map(item => this.coerceValue(item, itemSchema));\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Coerce value to correct type\r\n */\r\n private coerceValue(rawValue: string, schema: ParameterSchema): unknown {\r\n switch (schema.type) {\r\n case 'number': {\r\n const num = parseFloat(rawValue);\r\n return isNaN(num) ? rawValue : num;\r\n }\r\n case 'boolean':\r\n return ['true', 'yes', '1', 'on'].includes(rawValue.toLowerCase());\r\n case 'array': {\r\n try {\r\n const parsed = JSON.parse(rawValue);\r\n if (Array.isArray(parsed)) return parsed;\r\n } catch {\r\n return rawValue.split(/[,;]/).map(s => s.trim());\r\n }\r\n return [rawValue];\r\n }\r\n case 'object':\r\n try {\r\n return JSON.parse(rawValue);\r\n } catch {\r\n return rawValue;\r\n }\r\n case 'string':\r\n default:\r\n // Check enum\r\n if (schema.enum) {\r\n const match = schema.enum.find(\r\n e => String(e).toLowerCase() === rawValue.toLowerCase()\r\n );\r\n if (match !== undefined) return match;\r\n }\r\n return rawValue;\r\n }\r\n }\r\n\r\n /**\r\n * Validate extracted value\r\n */\r\n private validateValue(\r\n value: unknown,\r\n schema: ParameterSchema\r\n ): { valid: boolean; reason?: string } {\r\n // Check enum\r\n if (schema.enum && !schema.enum.includes(value)) {\r\n return {\r\n valid: false,\r\n reason: `Value must be one of: ${schema.enum.join(', ')}`,\r\n };\r\n }\r\n\r\n // Check pattern\r\n if (schema.pattern && typeof value === 'string') {\r\n const regex = new RegExp(schema.pattern);\r\n if (!regex.test(value)) {\r\n return {\r\n valid: false,\r\n reason: `Value does not match required pattern`,\r\n };\r\n }\r\n }\r\n\r\n // Check number range\r\n if (schema.type === 'number' && typeof value === 'number') {\r\n if (schema.min !== undefined && value < schema.min) {\r\n return {\r\n valid: false,\r\n reason: `Value must be at least ${schema.min}`,\r\n };\r\n }\r\n if (schema.max !== undefined && value > schema.max) {\r\n return {\r\n valid: false,\r\n reason: `Value must be at most ${schema.max}`,\r\n };\r\n }\r\n }\r\n\r\n // Check array length\r\n if (schema.type === 'array' && Array.isArray(value)) {\r\n if (schema.min !== undefined && value.length < schema.min) {\r\n return {\r\n valid: false,\r\n reason: `Array must have at least ${schema.min} items`,\r\n };\r\n }\r\n if (schema.max !== undefined && value.length > schema.max) {\r\n return {\r\n valid: false,\r\n reason: `Array must have at most ${schema.max} items`,\r\n };\r\n }\r\n }\r\n\r\n return { valid: true };\r\n }\r\n\r\n /**\r\n * Extract parameters from context\r\n */\r\n private extractFromContext(\r\n skill: Skill,\r\n context: ExtractionContext\r\n ): ExtractionResult {\r\n const params: Record<string, unknown> = {};\r\n const missing: string[] = [];\r\n const invalid: Array<{ param: string; reason: string }> = [];\r\n const suggestions: Array<{ param: string; suggestion: string }> = [];\r\n let confidence = 0;\r\n\r\n for (const key of Object.keys(skill.parameters.properties)) {\r\n const prop = skill.parameters.properties[key];\r\n // Check previous params\r\n if (context.previousParams?.[key] !== undefined) {\r\n params[key] = context.previousParams[key];\r\n confidence += 0.2;\r\n continue;\r\n }\r\n\r\n // Check user preferences\r\n if (context.userPreferences?.[key] !== undefined) {\r\n params[key] = context.userPreferences[key];\r\n confidence += 0.15;\r\n continue;\r\n }\r\n\r\n // Check extracted entities\r\n if (context.extractedEntities?.[key] !== undefined) {\r\n params[key] = context.extractedEntities[key];\r\n confidence += 0.25;\r\n continue;\r\n }\r\n\r\n // Use default if available\r\n if (prop.default !== undefined) {\r\n params[key] = prop.default;\r\n confidence += 0.1;\r\n } else if (skill.parameters.required?.includes(key)) {\r\n missing.push(key);\r\n suggestions.push({\r\n param: key,\r\n suggestion: `Please provide ${prop.description}`,\r\n });\r\n }\r\n }\r\n\r\n const totalParams = Object.keys(skill.parameters.properties).length;\r\n confidence = totalParams > 0 ? confidence / totalParams : 0;\r\n\r\n return {\r\n params,\r\n confidence,\r\n missing,\r\n invalid,\r\n suggestions,\r\n };\r\n }\r\n\r\n /**\r\n * Extract parameters using LLM\r\n */\r\n private async extractWithLLM(\r\n input: string,\r\n skill: Skill,\r\n llmProvider: { complete(prompt: string): Promise<{ content: string }> }\r\n ): Promise<ExtractionResult> {\r\n const prompt = this.buildExtractionPrompt(input, skill);\r\n\r\n try {\r\n const response = await llmProvider.complete(prompt);\r\n const parsed = JSON.parse(response.content);\r\n\r\n return {\r\n params: parsed.params || {},\r\n confidence: parsed.confidence || 0.8,\r\n missing: parsed.missing || [],\r\n invalid: parsed.invalid || [],\r\n suggestions: parsed.suggestions || [],\r\n };\r\n } catch {\r\n // Fallback to empty result\r\n return {\r\n params: {},\r\n confidence: 0,\r\n missing: skill.parameters.required || [],\r\n invalid: [],\r\n suggestions: [],\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Build LLM extraction prompt\r\n */\r\n private buildExtractionPrompt(input: string, skill: Skill): string {\r\n const params = Object.entries(skill.parameters.properties)\r\n .map(([key, prop]) => {\r\n const required = skill.parameters.required?.includes(key) ? ' (required)' : '';\r\n const type = prop.type ? ` [${prop.type}]` : '';\r\n const enum_ = prop.enum ? ` enum: [${prop.enum.join(', ')}]` : '';\r\n return `- ${key}${type}${required}: ${prop.description}${enum_}`;\r\n })\r\n .join('\\n');\r\n\r\n return `Extract parameters from the user input for the skill \"${skill.name}\".\r\n\r\nSkill description: ${skill.description}\r\n\r\nParameters:\r\n${params}\r\n\r\nUser input: \"${input}\"\r\n\r\nReturn a JSON object with this structure:\r\n{\r\n \"params\": { \"paramName\": \"extractedValue\", ... },\r\n \"confidence\": 0.0-1.0,\r\n \"missing\": [\"paramName\", ...],\r\n \"invalid\": [{\"param\": \"name\", \"reason\": \"why invalid\"}],\r\n \"suggestions\": [{\"param\": \"name\", \"suggestion\": \"helpful suggestion\"}]\r\n}`;\r\n }\r\n\r\n /**\r\n * Merge extraction results from multiple strategies\r\n */\r\n private mergeResults(results: ExtractionResult[], skill: Skill): ExtractionResult {\r\n const merged: Record<string, unknown> = {};\r\n const missing = new Set<string>();\r\n const invalid: Array<{ param: string; reason: string }> = [];\r\n const suggestions: Array<{ param: string; suggestion: string }> = [];\r\n let totalConfidence = 0;\r\n\r\n // Weight results by confidence\r\n const weights = results.map(r => r.confidence);\r\n\r\n for (const key of Object.keys(skill.parameters.properties)) {\r\n const prop = skill.parameters.properties[key];\r\n const values: Array<{ value: unknown; weight: number }> = [];\r\n\r\n for (let i = 0; i < results.length; i++) {\r\n const result = results[i];\r\n if (key in result.params) {\r\n values.push({ value: result.params[key], weight: weights[i] });\r\n }\r\n }\r\n\r\n if (values.length > 0) {\r\n // Use highest confidence value\r\n values.sort((a, b) => b.weight - a.weight);\r\n merged[key] = values[0].value;\r\n totalConfidence += values[0].weight;\r\n } else if (skill.parameters.required?.includes(key)) {\r\n missing.add(key);\r\n } else if (prop.default !== undefined) {\r\n merged[key] = prop.default;\r\n totalConfidence += 0.1;\r\n }\r\n }\r\n\r\n // Collect all missing, invalid, and suggestions\r\n for (const result of results) {\r\n result.missing.forEach(m => missing.add(m));\r\n invalid.push(...result.invalid);\r\n suggestions.push(...result.suggestions);\r\n }\r\n\r\n const totalParams = Object.keys(skill.parameters.properties).length;\r\n const avgConfidence = totalParams > 0 ? totalConfidence / totalParams : 0;\r\n\r\n return {\r\n params: merged,\r\n confidence: avgConfidence,\r\n missing: Array.from(missing),\r\n invalid,\r\n suggestions,\r\n };\r\n }\r\n\r\n /**\r\n * Generate helpful suggestion for invalid parameter\r\n */\r\n private generateSuggestion(schema: ParameterSchema, reason?: string): string {\r\n if (schema.enum) {\r\n return `Please use one of: ${schema.enum.join(', ')}`;\r\n }\r\n if (schema.pattern) {\r\n return `Value must match pattern: ${schema.pattern}`;\r\n }\r\n if (schema.min !== undefined || schema.max !== undefined) {\r\n const range = `${schema.min ?? 'min'} to ${schema.max ?? 'max'}`;\r\n return `Value must be within range ${range}`;\r\n }\r\n return reason || `Please provide valid ${schema.type}`;\r\n }\r\n\r\n /**\r\n * Validate all parameters against schema\r\n */\r\n validate(params: Record<string, unknown>, skill: Skill): ExtractionResult {\r\n const missing: string[] = [];\r\n const invalid: Array<{ param: string; reason: string }> = [];\r\n\r\n for (const key of Object.keys(skill.parameters.properties)) {\r\n const prop = skill.parameters.properties[key];\r\n if (!(key in params)) {\r\n if (skill.parameters.required?.includes(key)) {\r\n missing.push(key);\r\n }\r\n continue;\r\n }\r\n\r\n const schema = this.convertPropertyToSchema(prop);\r\n const validation = this.validateValue(params[key], schema);\r\n if (!validation.valid) {\r\n invalid.push({ param: key, reason: validation.reason || 'Invalid value' });\r\n }\r\n }\r\n\r\n return {\r\n params,\r\n confidence: 1.0,\r\n missing,\r\n invalid,\r\n suggestions: invalid.map(inv => ({\r\n param: inv.param,\r\n suggestion: this.generateSuggestion(\r\n this.convertPropertyToSchema(skill.parameters.properties[inv.param]),\r\n inv.reason\r\n ),\r\n })),\r\n };\r\n }\r\n}\r\n\r\nexport default ParameterExtractor;\r\n","/**\n * Perfect Execution Engine - Part 1: Core Engine\n *\n * Features:\n * - Deterministic execution with full traceability\n * - Multi-strategy execution (sequential, parallel, adaptive)\n * - Comprehensive retry and circuit breaker patterns\n * - Real-time execution monitoring\n */\n\nimport {\n ExecutionContext,\n ExecutionPlan,\n ExecutionStep,\n ExecutionResult,\n StepResult,\n ExecutionStatus,\n ExecutionPhase,\n ExecutionError,\n ExecutionMetrics,\n ExecutionTrace,\n ResilienceContext,\n RetryPolicy,\n CircuitBreakerConfig,\n ExecutionObserver,\n} from './types';\n\nexport interface ExecutionEngineConfig {\n defaultTimeout?: number;\n defaultRetryPolicy?: RetryPolicy;\n enableTracing?: boolean;\n enableMetrics?: boolean;\n maxConcurrentExecutions?: number;\n observers?: ExecutionObserver[];\n}\n\nexport class ExecutionEngine {\n private config: Required<ExecutionEngineConfig>;\n private activeExecutions = new Map<string, AbortController>();\n private circuitBreakers = new Map<string, CircuitBreaker>();\n private metrics: ExecutionMetrics = {\n totalTime: 0,\n totalTokens: 0,\n llmCalls: 0,\n skillCalls: 0,\n toolCalls: 0,\n cacheHits: 0,\n cacheMisses: 0,\n retryCount: 0,\n };\n\n constructor(config: ExecutionEngineConfig = {}) {\n this.config = {\n defaultTimeout: config.defaultTimeout ?? 30000,\n defaultRetryPolicy: config.defaultRetryPolicy ?? {\n maxRetries: 3,\n backoffStrategy: 'exponential',\n baseDelay: 1000,\n maxDelay: 30000,\n retryableErrors: ['ETIMEDOUT', 'ECONNRESET', 'EAI_AGAIN'],\n },\n enableTracing: config.enableTracing ?? true,\n enableMetrics: config.enableMetrics ?? true,\n maxConcurrentExecutions: config.maxConcurrentExecutions ?? 10,\n observers: config.observers ?? [],\n };\n }\n\n async execute(\n plan: ExecutionPlan,\n context: Partial<ExecutionContext> = {},\n resilience?: ResilienceContext\n ): Promise<ExecutionResult> {\n const executionId = this.generateId();\n const fullContext: ExecutionContext = {\n executionId,\n sessionId: context.sessionId ?? this.generateId(),\n timestamp: new Date(),\n metadata: context.metadata ?? {},\n ...context,\n };\n\n if (this.activeExecutions.size >= this.config.maxConcurrentExecutions) {\n throw new Error('Maximum concurrent executions reached');\n }\n\n const abortController = new AbortController();\n this.activeExecutions.set(executionId, abortController);\n\n const startTime = Date.now();\n const trace: ExecutionTrace = {\n phases: [],\n decisions: [],\n llmCalls: [],\n };\n\n try {\n this.notifyObservers('onExecutionStart', fullContext);\n\n await this.executePhase('initialization', fullContext, trace, async () => {\n this.validatePlan(plan);\n });\n\n const stepResults = await this.executePhase('execution', fullContext, trace, async () => {\n return this.executeSteps(plan.steps, fullContext, abortController.signal, resilience);\n });\n\n const finalOutput = await this.executePhase(\n 'result_processing',\n fullContext,\n trace,\n async () => {\n return this.processResults(stepResults);\n }\n );\n\n const result: ExecutionResult = {\n executionId,\n status: this.determineFinalStatus(stepResults),\n plan,\n stepResults,\n finalOutput,\n metrics: { ...this.metrics },\n errors: stepResults.filter(s => s.error).map(s => s.error!),\n trace,\n };\n\n this.metrics.totalTime = Date.now() - startTime;\n this.notifyObservers('onExecutionEnd', result, fullContext);\n\n return result;\n } catch (error) {\n const executionError: ExecutionError = {\n stepId: 'engine',\n code: 'EXECUTION_FAILED',\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n recoverable: false,\n };\n\n this.notifyObservers('onError', executionError, fullContext);\n\n return {\n executionId,\n status: 'failed',\n plan,\n stepResults: [],\n finalOutput: null,\n metrics: { ...this.metrics },\n errors: [executionError],\n trace,\n };\n } finally {\n this.activeExecutions.delete(executionId);\n }\n }\n\n private async executeSteps(\n steps: ExecutionStep[],\n context: ExecutionContext,\n signal: AbortSignal,\n resilience?: ResilienceContext\n ): Promise<StepResult[]> {\n const results: StepResult[] = [];\n const executedSteps = new Set<string>();\n\n while (executedSteps.size < steps.length) {\n const readySteps = steps.filter(\n step =>\n !executedSteps.has(step.id) &&\n (step.dependencies ?? []).every(dep => executedSteps.has(dep))\n );\n\n if (readySteps.length === 0) {\n const remainingSteps = steps.filter(s => !executedSteps.has(s.id));\n if (remainingSteps.length > 0) {\n throw new Error(\n `Circular dependency detected: ${remainingSteps.map(s => s.id).join(', ')}`\n );\n }\n break;\n }\n\n const stepPromises = readySteps.map(step =>\n this.executeStepWithResilience(step, context, signal, resilience)\n );\n\n const stepResults = await Promise.all(stepPromises);\n\n for (const result of stepResults) {\n results.push(result);\n executedSteps.add(result.stepId);\n\n if (result.status === 'failed' && result.error) {\n const step = steps.find(s => s.id === result.stepId);\n if (step?.onError === 'fail') {\n return results;\n }\n }\n }\n }\n\n return results;\n }\n\n private async executeStepWithResilience(\n step: ExecutionStep,\n context: ExecutionContext,\n signal: AbortSignal,\n resilience?: ResilienceContext\n ): Promise<StepResult> {\n const startTime = Date.now();\n const retryPolicy = resilience?.retryPolicy ?? this.config.defaultRetryPolicy;\n const timeout = step.timeout ?? resilience?.timeout ?? this.config.defaultTimeout;\n\n this.notifyObservers('onStepStart', step, context);\n\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= retryPolicy.maxRetries; attempt++) {\n try {\n if (signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n if (resilience?.circuitBreaker) {\n const cb = this.getCircuitBreaker(step.target, resilience.circuitBreaker);\n if (!cb.canExecute()) {\n throw new Error(`Circuit breaker open for ${step.target}`);\n }\n }\n\n const result = await this.executeWithTimeout(\n () => this.executeStep(step, context),\n timeout\n );\n\n if (resilience?.circuitBreaker) {\n const cb = this.getCircuitBreaker(step.target, resilience.circuitBreaker);\n cb.recordSuccess();\n }\n\n const stepResult: StepResult = {\n stepId: step.id,\n status: 'completed',\n output: result,\n executionTime: Date.now() - startTime,\n tokensUsed: 0,\n startTime: new Date(startTime),\n endTime: new Date(),\n };\n\n this.notifyObservers('onStepEnd', step, stepResult, context);\n return stepResult;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (resilience?.circuitBreaker) {\n const cb = this.getCircuitBreaker(step.target, resilience.circuitBreaker);\n cb.recordFailure();\n }\n\n const isRetryable = this.isRetryableError(lastError, retryPolicy);\n\n if (!isRetryable || attempt === retryPolicy.maxRetries) {\n break;\n }\n\n const delay = this.calculateBackoff(attempt, retryPolicy);\n retryPolicy.onRetry?.(attempt + 1, lastError, delay);\n this.metrics.retryCount++;\n\n await this.sleep(delay);\n }\n }\n\n const stepResult: StepResult = {\n stepId: step.id,\n status: 'failed',\n error: {\n stepId: step.id,\n code: 'STEP_EXECUTION_FAILED',\n message: lastError?.message ?? 'Unknown error',\n stack: lastError?.stack,\n recoverable: false,\n },\n executionTime: Date.now() - startTime,\n tokensUsed: 0,\n startTime: new Date(startTime),\n endTime: new Date(),\n };\n\n this.notifyObservers('onStepEnd', step, stepResult, context);\n return stepResult;\n }\n\n private async executeStep(step: ExecutionStep, _context: ExecutionContext): Promise<unknown> {\n return {\n stepId: step.id,\n type: step.type,\n target: step.target,\n parameters: step.parameters,\n };\n }\n\n private async executeWithTimeout<T>(fn: () => Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n fn(),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Timeout after ${timeout}ms`)), timeout)\n ),\n ]);\n }\n\n private async executePhase<T>(\n phase: ExecutionPhase,\n context: ExecutionContext,\n trace: ExecutionTrace,\n fn: () => Promise<T>\n ): Promise<T> {\n this.notifyObservers('onPhaseStart', phase, context);\n const startTime = Date.now();\n\n try {\n const result = await fn();\n const duration = Date.now() - startTime;\n\n trace.phases.push({\n phase,\n startTime: new Date(startTime),\n endTime: new Date(),\n duration,\n });\n\n this.notifyObservers('onPhaseEnd', phase, duration, context);\n return result;\n } catch (error) {\n const duration = Date.now() - startTime;\n\n trace.phases.push({\n phase,\n startTime: new Date(startTime),\n endTime: new Date(),\n duration,\n metadata: { error: error instanceof Error ? error.message : String(error) },\n });\n\n this.notifyObservers('onPhaseEnd', phase, duration, context);\n throw error;\n }\n }\n\n private validatePlan(plan: ExecutionPlan): void {\n const stepIds = new Set(plan.steps.map(s => s.id));\n\n if (stepIds.size !== plan.steps.length) {\n throw new Error('Duplicate step IDs in plan');\n }\n\n for (const step of plan.steps) {\n for (const dep of step.dependencies ?? []) {\n if (!stepIds.has(dep)) {\n throw new Error(`Step ${step.id} depends on unknown step ${dep}`);\n }\n }\n }\n }\n\n private processResults(stepResults: StepResult[]): unknown {\n const successfulResults = stepResults.filter(r => r.status === 'completed');\n\n if (successfulResults.length === 0) {\n return null;\n }\n\n if (successfulResults.length === 1) {\n return successfulResults[0].output;\n }\n\n return successfulResults.map(r => r.output);\n }\n\n private determineFinalStatus(stepResults: StepResult[]): ExecutionStatus {\n if (stepResults.every(r => r.status === 'completed')) {\n return 'completed';\n }\n\n if (stepResults.some(r => r.status === 'failed')) {\n return 'failed';\n }\n\n return 'completed';\n }\n\n private calculateBackoff(attempt: number, policy: RetryPolicy): number {\n const { backoffStrategy, baseDelay, maxDelay } = policy;\n\n let delay: number;\n switch (backoffStrategy) {\n case 'fixed':\n delay = baseDelay;\n break;\n case 'linear':\n delay = baseDelay * (attempt + 1);\n break;\n case 'exponential':\n default:\n delay = baseDelay * Math.pow(2, attempt);\n break;\n }\n\n const jitter = Math.random() * 0.1 * delay;\n delay += jitter;\n\n return Math.min(delay, maxDelay);\n }\n\n private isRetryableError(error: Error, policy: RetryPolicy): boolean {\n const errorCode = (error as { code?: string }).code;\n if (errorCode && policy.retryableErrors.includes(errorCode)) {\n return true;\n }\n\n if (error.message.includes('timeout') || error.message.includes('Timeout')) {\n return true;\n }\n\n return false;\n }\n\n private getCircuitBreaker(name: string, config: CircuitBreakerConfig): CircuitBreaker {\n if (!this.circuitBreakers.has(name)) {\n this.circuitBreakers.set(name, new CircuitBreaker(config));\n }\n return this.circuitBreakers.get(name)!;\n }\n\n cancelExecution(executionId: string): boolean {\n const controller = this.activeExecutions.get(executionId);\n if (controller) {\n controller.abort();\n this.activeExecutions.delete(executionId);\n return true;\n }\n return false;\n }\n\n getMetrics(): ExecutionMetrics {\n return { ...this.metrics };\n }\n\n resetMetrics(): void {\n this.metrics = {\n totalTime: 0,\n totalTokens: 0,\n llmCalls: 0,\n skillCalls: 0,\n toolCalls: 0,\n cacheHits: 0,\n cacheMisses: 0,\n retryCount: 0,\n };\n }\n\n addObserver(observer: ExecutionObserver): void {\n this.config.observers.push(observer);\n }\n\n removeObserver(observer: ExecutionObserver): void {\n const index = this.config.observers.indexOf(observer);\n if (index > -1) {\n this.config.observers.splice(index, 1);\n }\n }\n\n private notifyObservers(event: string, ...args: unknown[]): void {\n for (const observer of this.config.observers) {\n try {\n const handler = (observer as Record<string, unknown>)[event];\n if (typeof handler === 'function') {\n (handler as (...args: unknown[]) => void).apply(observer, args);\n }\n } catch {\n // Ignore observer errors\n }\n }\n }\n\n private generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n}\n\nclass CircuitBreaker {\n private state: 'closed' | 'open' | 'half-open' = 'closed';\n private failureCount = 0;\n private successCount = 0;\n private lastFailureTime?: number;\n\n constructor(private config: CircuitBreakerConfig) {}\n\n canExecute(): boolean {\n if (this.state === 'closed') {\n return true;\n }\n\n if (this.state === 'open') {\n if (Date.now() - (this.lastFailureTime ?? 0) > this.config.resetTimeout) {\n this.state = 'half-open';\n this.successCount = 0;\n return true;\n }\n return false;\n }\n\n return this.successCount < this.config.halfOpenMaxCalls;\n }\n\n recordSuccess(): void {\n if (this.state === 'half-open') {\n this.successCount++;\n if (this.successCount >= this.config.halfOpenMaxCalls) {\n this.state = 'closed';\n this.failureCount = 0;\n }\n } else {\n this.failureCount = 0;\n }\n }\n\n recordFailure(): void {\n this.failureCount++;\n this.lastFailureTime = Date.now();\n\n if (this.state === 'half-open' || this.failureCount >= this.config.failureThreshold) {\n this.state = 'open';\n }\n }\n}\n\nexport default ExecutionEngine;\n","/**\n * Plugin System\n * Extensible architecture for adding capabilities\n */\n\nimport { Agent, Plugin, PluginContext } from '../core/agent';\n\nexport interface PluginManagerConfig {\n autoLoad?: boolean;\n pluginDirectory?: string;\n allowedPlugins?: string[];\n}\n\nexport class PluginManager {\n private plugins = new Map<string, Plugin>();\n private contexts = new Map<string, PluginContext>();\n\n constructor(\n private agent: Agent,\n private config: PluginManagerConfig = {}\n ) {}\n\n async load(plugin: Plugin, config: Record<string, unknown> = {}): Promise<void> {\n // Check if plugin is allowed\n if (this.config.allowedPlugins && !this.config.allowedPlugins.includes(plugin.name)) {\n throw new Error(`Plugin '${plugin.name}' is not in the allowed list`);\n }\n\n // Create plugin context\n const context: PluginContext = {\n agent: this.agent,\n registerSkill: skill => this.agent.registerSkill(skill),\n registerTool: tool => this.agent.registerTool(tool),\n registerMCPResource: resource => this.agent.registerMCPResource(resource),\n registerMCPTool: tool => this.agent.registerMCPTool(tool),\n getLLMProvider: () => this.agent.llmProvider,\n config,\n };\n\n // Initialize plugin\n await plugin.initialize(context);\n\n // Store plugin and context\n this.plugins.set(plugin.name, plugin);\n this.contexts.set(plugin.name, context);\n }\n\n async unload(name: string): Promise<void> {\n const plugin = this.plugins.get(name);\n if (!plugin) {\n throw new Error(`Plugin '${name}' not found`);\n }\n\n // Call destroy hook if available\n await plugin.destroy?.();\n\n // Remove plugin\n this.plugins.delete(name);\n this.contexts.delete(name);\n }\n\n get(name: string): Plugin | undefined {\n return this.plugins.get(name);\n }\n\n getContext(name: string): PluginContext | undefined {\n return this.contexts.get(name);\n }\n\n list(): Plugin[] {\n return Array.from(this.plugins.values());\n }\n\n listNames(): string[] {\n return Array.from(this.plugins.keys());\n }\n\n isLoaded(name: string): boolean {\n return this.plugins.has(name);\n }\n\n async reload(name: string): Promise<void> {\n const plugin = this.plugins.get(name);\n if (!plugin) {\n throw new Error(`Plugin '${name}' not found`);\n }\n\n const context = this.contexts.get(name);\n if (!context) {\n throw new Error(`Context for plugin '${name}' not found`);\n }\n\n // Destroy and reinitialize\n await plugin.destroy?.();\n await plugin.initialize(context);\n }\n\n async unloadAll(): Promise<void> {\n for (const [name] of this.plugins) {\n await this.unload(name);\n }\n }\n\n getStats(): {\n total: number;\n withDestroy: number;\n } {\n return {\n total: this.plugins.size,\n withDestroy: this.list().filter(p => p.destroy !== undefined).length,\n };\n }\n}\n\n// Plugin Factory for creating plugins from different sources\nexport interface PluginFactory {\n create(config: Record<string, unknown>): Plugin | Promise<Plugin>;\n}\n\nexport class PluginLoader {\n private factories = new Map<string, PluginFactory>();\n\n registerFactory(type: string, factory: PluginFactory): void {\n this.factories.set(type, factory);\n }\n\n async loadFromSource(\n type: string,\n source: string,\n config: Record<string, unknown> = {}\n ): Promise<Plugin> {\n const factory = this.factories.get(type);\n if (!factory) {\n throw new Error(`Unknown plugin type: ${type}`);\n }\n\n // Load plugin configuration from source\n // This could be a file path, URL, or other source\n const pluginConfig = await this.loadConfig(source);\n\n return factory.create({ ...pluginConfig, ...config });\n }\n\n private async loadConfig(source: string): Promise<Record<string, unknown>> {\n // Implementation depends on source type\n // Could load from JSON, YAML, remote URL, etc.\n if (source.startsWith('http')) {\n const response = await fetch(source);\n return response.json();\n }\n\n // Default: assume it's a JSON file\n // Note: File system operations are only available in Node.js\n // Browser environments should use URLs or pass config objects directly\n throw new Error(\n 'Loading config from file path is not supported. ' +\n 'Use a URL (http/https) or pass config object directly.'\n );\n }\n}\n","/**\n * Main exports for sdkwork-browser-agent\n * Browser and Node.js compatible agent architecture\n */\n\n// Core Agent\nexport * from './core';\n\n// LLM Providers\nexport * from './llm';\n\n// Skills\nexport * from './skills';\n\n// Tools\nexport * from './tools';\n\n// MCP\nexport * from './mcp';\n\n// Plugins\nexport * from './plugins';\n\n// Storage - NEW: Unified storage abstraction\nexport * from './storage';\n\n// Re-export commonly used types\nexport type {\n AgentConfig,\n Skill,\n SkillResult,\n Tool,\n ToolOutput,\n MCPResource,\n MCPResourceContent,\n MCPTool,\n MCPToolResult,\n Plugin,\n PluginContext,\n ExecutionContext,\n} from './core/agent';\n\nexport type { SmartAgentConfig, AutoExecutionResult } from './core/smart-agent';\n\nexport type {\n Decision,\n DecisionContext,\n DecisionEngineConfig,\n EmbeddingProvider,\n} from './core/decision-engine';\n\nexport type { SkillSource, LoadedSkill, SkillLoaderConfig } from './core/skill-loader';\n\nexport type { TokenOptimizerConfig, TokenEstimate } from './core/token-optimizer';\n\nexport type {\n LLMProvider,\n LLMProviderConfig,\n LLMRequest,\n LLMResponse,\n LLMStreamChunk,\n LLMMessage,\n ToolDefinition,\n} from './llm/provider';\n\n// Storage types - NEW\nexport type {\n StorageAdapter,\n FileMetadata,\n StorageConfig,\n} from './storage';\n\n// Version info\nexport const VERSION = '1.0.0';\n\n// Environment detection\nexport const isBrowser = typeof window !== 'undefined';\nexport const isNode = typeof window === 'undefined';\n"],"mappings":"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","names":["skillResult","stepResult"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
var _chunkMTFOABGCcjs = require('../chunk-MTFOABGC.cjs');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
exports.AnthropicProvider = _chunkMTFOABGCcjs.AnthropicProvider; exports.DeepSeekProvider = _chunkMTFOABGCcjs.DeepSeekProvider; exports.DoubaoProvider = _chunkMTFOABGCcjs.DoubaoProvider; exports.GeminiProvider = _chunkMTFOABGCcjs.GeminiProvider; exports.LLMManager = _chunkMTFOABGCcjs.LLMManager; exports.LLMProviderRegistry = _chunkMTFOABGCcjs.LLMProviderRegistry; exports.MiniMaxProvider = _chunkMTFOABGCcjs.MiniMaxProvider; exports.MoonshotProvider = _chunkMTFOABGCcjs.MoonshotProvider; exports.OpenAIProvider = _chunkMTFOABGCcjs.OpenAIProvider; exports.QwenProvider = _chunkMTFOABGCcjs.QwenProvider; exports.ZhipuProvider = _chunkMTFOABGCcjs.ZhipuProvider; exports.globalProviderRegistry = _chunkMTFOABGCcjs.globalProviderRegistry;
|
|
29
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["d:\\sdkwork-opensource\\sdkwork-browser-agent\\dist\\node\\llm\\index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+tBAAC","file":"D:\\sdkwork-opensource\\sdkwork-browser-agent\\dist\\node\\llm\\index.cjs"}
|