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/smart-agent.ts","../src/plugins/manager.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 * Smart Agent with automatic skill selection\n * Token-optimized decision making\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';\n\nexport interface SmartAgentConfig extends AgentConfig {\n decisionEngine?: DecisionEngineConfig;\n skillLoader?: SkillLoaderConfig;\n tokenOptimizer?: TokenOptimizerConfig;\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}\n\nexport class SmartAgent extends Agent {\n private decisionEngine: DecisionEngine;\n private skillLoader: DynamicSkillLoader;\n private tokenOptimizer: TokenOptimizer;\n private executionHistory: Array<{\n input: string;\n decision: Decision;\n timestamp: Date;\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 // 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\n */\n async process(input: string, context?: string): Promise<AutoExecutionResult> {\n const startTime = Date.now();\n let 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\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 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 // Track execution\n this.executionHistory.push({\n input,\n decision,\n timestamp: new Date(),\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 };\n }\n\n /**\n * Stream process user input\n */\n async *streamProcess(\n input: string,\n context?: string\n ): AsyncIterableIterator<{\n type: 'decision' | 'skill' | 'tool' | 'llm' | '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 switch (decision.type) {\n case 'skill':\n for (const skillName of decision.skills || []) {\n yield { type: 'skill', data: { name: skillName, status: 'executing' } };\n const params = await this.extractParameters(input, skillName);\n const result = await this.executeSkill(skillName, params);\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 result = await this.executeTool(toolName, input);\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 let fullResponse = '';\n\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 break;\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 }> {\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 * Clear execution history\n */\n clearHistory(): void {\n this.executionHistory = [];\n this.decisionEngine.clearCache();\n }\n}\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"],"mappings":"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","names":[]}
|
|
@@ -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 _chunkXPGICLEJcjs = require('../chunk-XPGICLEJ.cjs');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
exports.AnthropicProvider = _chunkXPGICLEJcjs.AnthropicProvider; exports.DeepSeekProvider = _chunkXPGICLEJcjs.DeepSeekProvider; exports.DoubaoProvider = _chunkXPGICLEJcjs.DoubaoProvider; exports.GeminiProvider = _chunkXPGICLEJcjs.GeminiProvider; exports.LLMManager = _chunkXPGICLEJcjs.LLMManager; exports.LLMProviderRegistry = _chunkXPGICLEJcjs.LLMProviderRegistry; exports.MiniMaxProvider = _chunkXPGICLEJcjs.MiniMaxProvider; exports.MoonshotProvider = _chunkXPGICLEJcjs.MoonshotProvider; exports.OpenAIProvider = _chunkXPGICLEJcjs.OpenAIProvider; exports.QwenProvider = _chunkXPGICLEJcjs.QwenProvider; exports.ZhipuProvider = _chunkXPGICLEJcjs.ZhipuProvider; exports.globalProviderRegistry = _chunkXPGICLEJcjs.globalProviderRegistry;
|
|
29
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["d:\\sdkwork-opensource\\sdkwork-browser-agent\\dist\\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\\llm\\index.cjs"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { f as LLMProviderConfig, L as LLMProvider, b as LLMRequest, c as LLMResponse, d as LLMStreamChunk } from '../provider-Dna36xA-.cjs';
|
|
2
|
+
export { e as LLMManager, a as LLMMessage, g as LLMProviderFactory, h as LLMProviderRegistry, i as ToolCall, T as ToolDefinition, j as globalProviderRegistry } from '../provider-Dna36xA-.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* OpenAI Provider Implementation
|
|
6
|
+
* Updated with latest GPT-5 series models (2025)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
interface OpenAIConfig extends LLMProviderConfig {
|
|
10
|
+
organization?: string;
|
|
11
|
+
project?: string;
|
|
12
|
+
}
|
|
13
|
+
declare class OpenAIProvider implements LLMProvider {
|
|
14
|
+
readonly name = "openai";
|
|
15
|
+
readonly supportedModels: string[];
|
|
16
|
+
private _apiKey;
|
|
17
|
+
private _baseUrl;
|
|
18
|
+
private _defaultParams;
|
|
19
|
+
private _timeout;
|
|
20
|
+
private _organization?;
|
|
21
|
+
private _project?;
|
|
22
|
+
constructor(config: OpenAIConfig);
|
|
23
|
+
validateConfig(): boolean;
|
|
24
|
+
private makeRequest;
|
|
25
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
26
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
27
|
+
private buildRequestBody;
|
|
28
|
+
private formatMessages;
|
|
29
|
+
private parseResponse;
|
|
30
|
+
private parseStreamChunk;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Anthropic Claude Provider Implementation
|
|
35
|
+
* Updated with Claude 4.5 series models (2025)
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
interface AnthropicConfig extends LLMProviderConfig {
|
|
39
|
+
anthropicVersion?: string;
|
|
40
|
+
}
|
|
41
|
+
declare class AnthropicProvider implements LLMProvider {
|
|
42
|
+
readonly name = "anthropic";
|
|
43
|
+
readonly supportedModels: string[];
|
|
44
|
+
private _apiKey;
|
|
45
|
+
private _baseUrl;
|
|
46
|
+
private _defaultParams;
|
|
47
|
+
private _timeout;
|
|
48
|
+
private _anthropicVersion;
|
|
49
|
+
constructor(config: AnthropicConfig);
|
|
50
|
+
validateConfig(): boolean;
|
|
51
|
+
private makeRequest;
|
|
52
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
53
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
54
|
+
private buildRequestBody;
|
|
55
|
+
private parseResponse;
|
|
56
|
+
private parseStreamChunk;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Google Gemini Provider Implementation
|
|
61
|
+
* Updated with Gemini 2.0/3.0 series models (2025)
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
interface GeminiConfig extends LLMProviderConfig {
|
|
65
|
+
apiVersion?: string;
|
|
66
|
+
}
|
|
67
|
+
declare class GeminiProvider implements LLMProvider {
|
|
68
|
+
readonly name = "gemini";
|
|
69
|
+
readonly supportedModels: string[];
|
|
70
|
+
private _apiKey;
|
|
71
|
+
private _baseUrl;
|
|
72
|
+
private _defaultParams;
|
|
73
|
+
private _timeout;
|
|
74
|
+
private _apiVersion;
|
|
75
|
+
constructor(config: GeminiConfig);
|
|
76
|
+
validateConfig(): boolean;
|
|
77
|
+
private makeRequest;
|
|
78
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
79
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
80
|
+
private buildRequestBody;
|
|
81
|
+
private parseResponse;
|
|
82
|
+
private parseStreamChunk;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Moonshot (月之暗面) Provider Implementation
|
|
87
|
+
* API: https://platform.moonshot.cn
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
interface MoonshotConfig extends LLMProviderConfig {
|
|
91
|
+
}
|
|
92
|
+
declare class MoonshotProvider implements LLMProvider {
|
|
93
|
+
readonly name = "moonshot";
|
|
94
|
+
readonly supportedModels: string[];
|
|
95
|
+
private _apiKey;
|
|
96
|
+
private _baseUrl;
|
|
97
|
+
private _defaultParams;
|
|
98
|
+
private _timeout;
|
|
99
|
+
constructor(config: MoonshotConfig);
|
|
100
|
+
validateConfig(): boolean;
|
|
101
|
+
private makeRequest;
|
|
102
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
103
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
104
|
+
private buildRequestBody;
|
|
105
|
+
private parseResponse;
|
|
106
|
+
private parseStreamChunk;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* MiniMax Provider Implementation
|
|
111
|
+
* API: https://platform.minimaxi.com
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
interface MiniMaxConfig extends LLMProviderConfig {
|
|
115
|
+
groupId?: string;
|
|
116
|
+
}
|
|
117
|
+
declare class MiniMaxProvider implements LLMProvider {
|
|
118
|
+
readonly name = "minimax";
|
|
119
|
+
readonly supportedModels: string[];
|
|
120
|
+
private _apiKey;
|
|
121
|
+
private _groupId;
|
|
122
|
+
private _baseUrl;
|
|
123
|
+
private _defaultParams;
|
|
124
|
+
private _timeout;
|
|
125
|
+
constructor(config: MiniMaxConfig);
|
|
126
|
+
validateConfig(): boolean;
|
|
127
|
+
private makeRequest;
|
|
128
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
129
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
130
|
+
private buildRequestBody;
|
|
131
|
+
private parseResponse;
|
|
132
|
+
private parseStreamChunk;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Zhipu AI (智谱AI) Provider Implementation
|
|
137
|
+
* API: https://open.bigmodel.cn
|
|
138
|
+
*/
|
|
139
|
+
|
|
140
|
+
interface ZhipuConfig extends LLMProviderConfig {
|
|
141
|
+
}
|
|
142
|
+
declare class ZhipuProvider implements LLMProvider {
|
|
143
|
+
readonly name = "zhipu";
|
|
144
|
+
readonly supportedModels: string[];
|
|
145
|
+
private _apiKey;
|
|
146
|
+
private _baseUrl;
|
|
147
|
+
private _defaultParams;
|
|
148
|
+
private _timeout;
|
|
149
|
+
constructor(config: ZhipuConfig);
|
|
150
|
+
validateConfig(): boolean;
|
|
151
|
+
private makeRequest;
|
|
152
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
153
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
154
|
+
private buildRequestBody;
|
|
155
|
+
private parseResponse;
|
|
156
|
+
private parseStreamChunk;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Qwen (通义千问) Provider Implementation
|
|
161
|
+
* API: https://dashscope.aliyun.com
|
|
162
|
+
* Updated with latest Qwen3 series models (2025)
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
interface QwenConfig extends LLMProviderConfig {
|
|
166
|
+
}
|
|
167
|
+
declare class QwenProvider implements LLMProvider {
|
|
168
|
+
readonly name = "qwen";
|
|
169
|
+
readonly supportedModels: string[];
|
|
170
|
+
private _apiKey;
|
|
171
|
+
private _baseUrl;
|
|
172
|
+
private _defaultParams;
|
|
173
|
+
private _timeout;
|
|
174
|
+
constructor(config: QwenConfig);
|
|
175
|
+
validateConfig(): boolean;
|
|
176
|
+
private makeRequest;
|
|
177
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
178
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
179
|
+
private buildRequestBody;
|
|
180
|
+
private parseResponse;
|
|
181
|
+
private parseStreamChunk;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* DeepSeek Provider Implementation
|
|
186
|
+
* API: https://platform.deepseek.com
|
|
187
|
+
* Updated with latest DeepSeek-V3.2 models (2025)
|
|
188
|
+
*/
|
|
189
|
+
|
|
190
|
+
interface DeepSeekConfig extends LLMProviderConfig {
|
|
191
|
+
}
|
|
192
|
+
declare class DeepSeekProvider implements LLMProvider {
|
|
193
|
+
readonly name = "deepseek";
|
|
194
|
+
readonly supportedModels: string[];
|
|
195
|
+
private _apiKey;
|
|
196
|
+
private _baseUrl;
|
|
197
|
+
private _defaultParams;
|
|
198
|
+
private _timeout;
|
|
199
|
+
constructor(config: DeepSeekConfig);
|
|
200
|
+
validateConfig(): boolean;
|
|
201
|
+
private makeRequest;
|
|
202
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
203
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
204
|
+
private buildRequestBody;
|
|
205
|
+
private parseResponse;
|
|
206
|
+
private parseStreamChunk;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Doubao (豆包) Provider Implementation
|
|
211
|
+
* API: https://console.volcengine.com/ark
|
|
212
|
+
* Updated with latest Doubao 1.8 series models (2025)
|
|
213
|
+
*/
|
|
214
|
+
|
|
215
|
+
interface DoubaoConfig extends LLMProviderConfig {
|
|
216
|
+
region?: string;
|
|
217
|
+
}
|
|
218
|
+
declare class DoubaoProvider implements LLMProvider {
|
|
219
|
+
readonly name = "doubao";
|
|
220
|
+
readonly supportedModels: string[];
|
|
221
|
+
private _apiKey;
|
|
222
|
+
private _baseUrl;
|
|
223
|
+
private _defaultParams;
|
|
224
|
+
private _timeout;
|
|
225
|
+
constructor(config: DoubaoConfig);
|
|
226
|
+
validateConfig(): boolean;
|
|
227
|
+
private makeRequest;
|
|
228
|
+
complete(request: LLMRequest): Promise<LLMResponse>;
|
|
229
|
+
stream(request: LLMRequest): AsyncIterableIterator<LLMStreamChunk>;
|
|
230
|
+
private buildRequestBody;
|
|
231
|
+
private parseResponse;
|
|
232
|
+
private parseStreamChunk;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export { type AnthropicConfig, AnthropicProvider, type DeepSeekConfig, DeepSeekProvider, type DoubaoConfig, DoubaoProvider, type GeminiConfig, GeminiProvider, LLMProvider, LLMProviderConfig, LLMRequest, LLMResponse, LLMStreamChunk, type MiniMaxConfig, MiniMaxProvider, type MoonshotConfig, MoonshotProvider, type OpenAIConfig, OpenAIProvider, type QwenConfig, QwenProvider, type ZhipuConfig, ZhipuProvider };
|