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/skills/registry.ts","../../src/skills/builtin/index.ts","../../src/skills/skill-loader.ts","../../src/skills/skill-resource-manager.ts","../../src/skills/skill-script-executor.ts","../../src/skills/enhanced-skill-executor.ts"],"sourcesContent":["/**\n * Enhanced Skill Registry\n * Advanced caching, indexing, and skill management\n */\n\nimport { Skill } from '../core/agent';\nimport { StorageAdapter } from '../storage';\n\nexport interface RegistryConfig {\n storage?: StorageAdapter | null;\n enableCache?: boolean;\n enableIndexing?: boolean;\n maxCacheSize?: number;\n cacheTTL?: number;\n hotReload?: boolean;\n}\n\ninterface CachedSkill {\n skill: Skill;\n loadedAt: Date;\n lastAccessed: Date;\n accessCount: number;\n size: number;\n tags: string[];\n}\n\ninterface SkillIndex {\n byName: Map<string, string>;\n byCategory: Map<string, Set<string>>;\n byTag: Map<string, Set<string>>;\n byDescription: Map<string, Set<string>>;\n}\n\nexport class SkillRegistry {\n private skills = new Map<string, CachedSkill>();\n private index: SkillIndex = {\n byName: new Map(),\n byCategory: new Map(),\n byTag: new Map(),\n byDescription: new Map(),\n };\n private config: Required<RegistryConfig>;\n private storage: StorageAdapter | null = null;\n private watchers = new Map<string, () => void>();\n\n constructor(config: RegistryConfig = {}) {\n this.config = {\n storage: config.storage ?? null,\n enableCache: config.enableCache ?? true,\n enableIndexing: config.enableIndexing ?? true,\n maxCacheSize: config.maxCacheSize ?? 100,\n cacheTTL: config.cacheTTL ?? 3600000, // 1 hour\n hotReload: config.hotReload ?? false,\n };\n\n if (this.config.storage) {\n this.storage = this.config.storage;\n }\n }\n\n /**\n * Register a skill in the registry\n */\n register(skill: Skill): void {\n const cached: CachedSkill = {\n skill,\n loadedAt: new Date(),\n lastAccessed: new Date(),\n accessCount: 0,\n size: this.calculateSkillSize(skill),\n tags: skill.metadata?.tags ?? [],\n };\n\n this.skills.set(skill.name, cached);\n\n if (this.config.enableIndexing) {\n this.indexSkill(skill);\n }\n\n if (this.config.hotReload && this.storage) {\n this.watchSkill(skill);\n }\n }\n\n /**\n * Unregister a skill\n */\n unregister(name: string): boolean {\n const skill = this.skills.get(name);\n if (!skill) return false;\n\n // Remove from index\n if (this.config.enableIndexing) {\n this.removeFromIndex(skill.skill);\n }\n\n // Remove watcher\n if (this.config.hotReload) {\n const watcher = this.watchers.get(name);\n if (watcher) {\n watcher();\n this.watchers.delete(name);\n }\n }\n\n return this.skills.delete(name);\n }\n\n /**\n * Get a skill by name\n */\n get(name: string): Skill | undefined {\n const cached = this.skills.get(name);\n if (!cached) return undefined;\n\n // Update access stats\n cached.lastAccessed = new Date();\n cached.accessCount++;\n\n return cached.skill;\n }\n\n /**\n * Check if skill exists\n */\n has(name: string): boolean {\n return this.skills.has(name);\n }\n\n /**\n * Find skills by category\n */\n findByCategory(category: string): Skill[] {\n if (!this.config.enableIndexing) {\n return this.getAll().filter(s => s.metadata?.category === category);\n }\n\n const names = this.index.byCategory.get(category);\n if (!names) return [];\n\n return Array.from(names)\n .map(name => this.get(name))\n .filter((s): s is Skill => s !== undefined);\n }\n\n /**\n * Find skills by tag\n */\n findByTag(tag: string): Skill[] {\n if (!this.config.enableIndexing) {\n return this.getAll().filter(s => s.metadata?.tags?.includes(tag));\n }\n\n const names = this.index.byTag.get(tag);\n if (!names) return [];\n\n return Array.from(names)\n .map(name => this.get(name))\n .filter((s): s is Skill => s !== undefined);\n }\n\n /**\n * Search skills by keyword\n */\n search(keyword: string): Skill[] {\n const lowerKeyword = keyword.toLowerCase();\n const results = new Set<Skill>();\n\n // Search by name\n for (const [name, cached] of this.skills) {\n if (name.toLowerCase().includes(lowerKeyword)) {\n results.add(cached.skill);\n }\n }\n\n // Search by tags\n if (this.config.enableIndexing) {\n const tagNames = this.index.byTag.get(lowerKeyword);\n if (tagNames) {\n for (const name of tagNames) {\n const skill = this.get(name);\n if (skill) results.add(skill);\n }\n }\n } else {\n for (const cached of this.skills.values()) {\n if (cached.skill.metadata?.tags?.some(tag => tag.toLowerCase() === lowerKeyword)) {\n results.add(cached.skill);\n }\n }\n }\n\n // Search by description\n if (this.config.enableIndexing) {\n for (const [desc, names] of this.index.byDescription) {\n if (desc.includes(lowerKeyword)) {\n for (const name of names) {\n const skill = this.get(name);\n if (skill) results.add(skill);\n }\n }\n }\n } else {\n for (const cached of this.skills.values()) {\n if (cached.skill.description.toLowerCase().includes(lowerKeyword)) {\n results.add(cached.skill);\n }\n }\n }\n\n return Array.from(results);\n }\n\n /**\n * Get all registered skills\n */\n getAll(): Skill[] {\n return Array.from(this.skills.values()).map(c => c.skill);\n }\n\n /**\n * Get all skill names\n */\n getNames(): string[] {\n return Array.from(this.skills.keys());\n }\n\n /**\n * Get skills by names\n */\n getMany(names: string[]): Skill[] {\n return names\n .map(name => this.get(name))\n .filter((s): s is Skill => s !== undefined);\n }\n\n /**\n * Get registry statistics\n */\n getStats(): {\n totalSkills: number;\n totalSize: number;\n averageAccessCount: number;\n cacheHitRate: number;\n categories: string[];\n tags: string[];\n } {\n let totalAccessCount = 0;\n let totalSize = 0;\n const categories = new Set<string>();\n const tags = new Set<string>();\n\n for (const cached of this.skills.values()) {\n totalAccessCount += cached.accessCount;\n totalSize += cached.size;\n \n if (cached.skill.metadata?.category) {\n categories.add(cached.skill.metadata.category);\n }\n \n cached.tags.forEach(tag => tags.add(tag));\n }\n\n return {\n totalSkills: this.skills.size,\n totalSize,\n averageAccessCount: this.skills.size > 0 ? totalAccessCount / this.skills.size : 0,\n cacheHitRate: this.calculateCacheHitRate(),\n categories: Array.from(categories),\n tags: Array.from(tags),\n };\n }\n\n /**\n * Clear all skills\n */\n clear(): void {\n // Stop all watchers\n for (const [, stop] of this.watchers) {\n stop();\n }\n this.watchers.clear();\n\n this.skills.clear();\n this.clearIndex();\n }\n\n /**\n * Clear expired cache entries\n */\n clearExpired(): number {\n const now = Date.now();\n let cleared = 0;\n\n for (const [name, cached] of this.skills) {\n if (now - cached.lastAccessed.getTime() > this.config.cacheTTL) {\n this.unregister(name);\n cleared++;\n }\n }\n\n return cleared;\n }\n\n /**\n * Optimize cache by removing least recently used entries\n */\n optimizeCache(): void {\n if (this.skills.size <= this.config.maxCacheSize) return;\n\n // Sort by last accessed time\n const sorted = Array.from(this.skills.entries()).sort(\n (a, b) => a[1].lastAccessed.getTime() - b[1].lastAccessed.getTime()\n );\n\n // Remove oldest entries\n const toRemove = sorted.slice(0, sorted.length - this.config.maxCacheSize);\n for (const [name] of toRemove) {\n this.unregister(name);\n }\n }\n\n // Private methods\n\n private indexSkill(skill: Skill): void {\n // Index by name\n this.index.byName.set(skill.name, skill.name);\n\n // Index by category\n if (skill.metadata?.category) {\n const category = skill.metadata.category;\n if (!this.index.byCategory.has(category)) {\n this.index.byCategory.set(category, new Set());\n }\n this.index.byCategory.get(category)!.add(skill.name);\n }\n\n // Index by tags\n skill.metadata?.tags?.forEach(tag => {\n if (!this.index.byTag.has(tag)) {\n this.index.byTag.set(tag, new Set());\n }\n this.index.byTag.get(tag)!.add(skill.name);\n });\n\n // Index by description words\n const words = skill.description.toLowerCase().split(/\\s+/);\n words.forEach(word => {\n if (word.length > 3) { // Only index words longer than 3 chars\n if (!this.index.byDescription.has(word)) {\n this.index.byDescription.set(word, new Set());\n }\n this.index.byDescription.get(word)!.add(skill.name);\n }\n });\n }\n\n private removeFromIndex(skill: Skill): void {\n this.index.byName.delete(skill.name);\n\n if (skill.metadata?.category) {\n const categorySet = this.index.byCategory.get(skill.metadata.category);\n if (categorySet) {\n categorySet.delete(skill.name);\n if (categorySet.size === 0) {\n this.index.byCategory.delete(skill.metadata.category);\n }\n }\n }\n\n skill.metadata?.tags?.forEach(tag => {\n const tagSet = this.index.byTag.get(tag);\n if (tagSet) {\n tagSet.delete(skill.name);\n if (tagSet.size === 0) {\n this.index.byTag.delete(tag);\n }\n }\n });\n\n const words = skill.description.toLowerCase().split(/\\s+/);\n words.forEach(word => {\n const descSet = this.index.byDescription.get(word);\n if (descSet) {\n descSet.delete(skill.name);\n if (descSet.size === 0) {\n this.index.byDescription.delete(word);\n }\n }\n });\n }\n\n private clearIndex(): void {\n this.index.byName.clear();\n this.index.byCategory.clear();\n this.index.byTag.clear();\n this.index.byDescription.clear();\n }\n\n private calculateSkillSize(skill: Skill): number {\n return JSON.stringify(skill).length;\n }\n\n private calculateCacheHitRate(): number {\n // Simplified calculation - in real implementation would track hits/misses\n return this.skills.size > 0 ? 1 : 0;\n }\n\n private watchSkill(skill: Skill): void {\n // Placeholder for hot reload implementation\n // Would use fs.watch in Node.js or polling in browser\n this.watchers.set(skill.name, () => {\n // Cleanup function\n });\n }\n}\n\nexport default SkillRegistry;\n","/**\n * Built-in Skills - TypeScript Implementations\n *\n * Each skill follows the Agent Skills Specification:\n * - SKILL.md with YAML frontmatter\n * - Progressive disclosure pattern\n * - Standardized parameters and responses\n */\n\nimport { Skill, ExecutionContext } from '../../core/agent';\n\n// ============================================\n// Echo Skill\n// ============================================\n\nexport const echoSkill: Skill = {\n name: 'echo',\n description:\n 'Echo back the input message. Use for debugging, testing, or verifying message passing in the agent system.',\n parameters: {\n type: 'object',\n properties: {\n message: {\n type: 'string',\n description: 'The message to echo back',\n },\n },\n required: ['message'],\n },\n handler: async params => ({\n success: true,\n data: params.message,\n }),\n metadata: {\n category: 'utility',\n tags: ['debug', 'test', 'utility'],\n version: '1.0.0',\n author: 'sdkwork-browser-agent',\n },\n};\n\n// ============================================\n// Math Skill\n// ============================================\n\nexport const mathSkill: Skill = {\n name: 'math',\n description:\n 'Perform mathematical calculations safely. Use when users ask for calculations, math problems, or numeric operations.',\n parameters: {\n type: 'object',\n properties: {\n expression: {\n type: 'string',\n description:\n 'Mathematical expression to evaluate. Allowed: +, -, *, /, (), digits, decimals',\n },\n },\n required: ['expression'],\n },\n handler: async params => {\n try {\n const expression = String(params.expression);\n\n // Security: Only allow basic math characters\n const sanitized = expression.replace(/[^0-9+\\-*/().\\s]/g, '');\n\n if (sanitized.length === 0) {\n return {\n success: false,\n error: 'Invalid expression: no valid mathematical characters found',\n };\n }\n\n if (sanitized.length > 1000) {\n return {\n success: false,\n error: 'Expression too long (max 1000 characters)',\n };\n }\n\n // eslint-disable-next-line no-eval\n const result = eval(sanitized);\n\n return {\n success: true,\n data: result,\n metadata: {\n originalExpression: expression,\n sanitizedExpression: sanitized,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Invalid mathematical expression',\n };\n }\n },\n metadata: {\n category: 'utility',\n tags: ['math', 'calculation', 'arithmetic', 'utility'],\n version: '1.0.0',\n author: 'sdkwork-browser-agent',\n },\n};\n\n// ============================================\n// List Skills\n// ============================================\n\nexport const listSkillsSkill: Skill = {\n name: 'list-skills',\n description:\n 'List all available skills in the registry. Use when users want to know what skills are available or need help finding a skill.',\n parameters: {\n type: 'object',\n properties: {\n category: {\n type: 'string',\n description: 'Filter skills by category (optional)',\n },\n },\n },\n handler: async (params, context: ExecutionContext) => {\n const skills = context.agent.getAllSkills().map(skill => ({\n name: skill.name,\n description: skill.description,\n category: skill.metadata?.category,\n tags: skill.metadata?.tags,\n }));\n\n // Filter by category if provided\n if (params.category && typeof params.category === 'string') {\n const filtered = skills.filter(s => s.category === params.category);\n return { success: true, data: filtered };\n }\n\n return { success: true, data: skills };\n },\n metadata: {\n category: 'meta',\n tags: ['introspection', 'meta', 'skills', 'list'],\n version: '1.0.0',\n author: 'sdkwork-browser-agent',\n },\n};\n\n// ============================================\n// Lyrics Generator Skill\n// ============================================\n\nexport const lyricsGeneratorSkill: Skill = {\n name: 'lyrics-generator',\n description:\n 'Generate professional music lyrics for songs across all genres. Creates original, emotionally resonant lyrics with proper structure, rhyme schemes, and thematic depth.',\n parameters: {\n type: 'object',\n properties: {\n theme: {\n type: 'string',\n description:\n 'Main subject or emotion of the song (e.g., \"love\", \"heartbreak\", \"summer romance\")',\n },\n genre: {\n type: 'string',\n description:\n 'Musical genre: \"pop\", \"rock\", \"hip-hop\", \"country\", \"rnb\", \"edm\", \"folk\", \"jazz\", \"k-pop\", etc.',\n },\n mood: {\n type: 'string',\n description: 'Emotional tone: \"happy\", \"sad\", \"romantic\", \"energetic\", \"nostalgic\", etc.',\n },\n structure: {\n type: 'string',\n description: 'Song structure: \"verse-chorus\", \"verse-chorus-bridge\", \"aaba\", etc.',\n },\n language: {\n type: 'string',\n description: 'Lyrics language: \"english\", \"chinese\", \"japanese\", \"spanish\", etc.',\n },\n length: {\n type: 'string',\n description: 'Song length: \"short\", \"medium\", \"long\"',\n },\n tempo: {\n type: 'string',\n description: 'Speed: \"slow\", \"mid-tempo\", \"fast\"',\n },\n keywords: {\n type: 'array',\n description: 'Specific words or phrases to include',\n },\n referenceArtist: {\n type: 'string',\n description: 'Style similar to artist (e.g., \"Taylor Swift\", \"BTS\")',\n },\n complexity: {\n type: 'string',\n description: 'Lyrical sophistication: \"simple\", \"moderate\", \"complex\"',\n },\n },\n required: ['theme'],\n },\n handler: async (params, context) => {\n try {\n const { agent } = context;\n const theme = String(params.theme);\n const genre = String(params.genre || 'pop');\n const mood = String(params.mood || 'neutral');\n const structure = String(params.structure || 'verse-chorus');\n const language = String(params.language || 'english');\n const length = String(params.length || 'medium');\n const tempo = String(params.tempo || 'mid-tempo');\n const keywords = Array.isArray(params.keywords) ? params.keywords : [];\n const referenceArtist = params.referenceArtist ? String(params.referenceArtist) : '';\n const complexity = String(params.complexity || 'moderate');\n\n const lengthGuidelines = {\n short: '2-3 minutes, minimal sections (verse-chorus-verse-chorus)',\n medium: '3-4 minutes, standard structure with bridge',\n long: '4-5+ minutes, extended with multiple sections',\n };\n\n const complexityGuidelines = {\n simple: 'Easy to understand, catchy, straightforward language',\n moderate: 'Balanced depth with some metaphors, accessible',\n complex: 'Rich metaphors, poetic language, sophisticated vocabulary',\n };\n\n const messages = [\n {\n role: 'system' as const,\n content: `You are a professional songwriter and lyricist with expertise in all music genres. Create original, emotionally resonant lyrics with proper song structure.`,\n },\n {\n role: 'user' as const,\n content: `Generate song lyrics with the following specifications:\n\nTheme: ${theme}\nGenre: ${genre}\nMood: ${mood}\nStructure: ${structure}\nLanguage: ${language}\nLength: ${length} - ${lengthGuidelines[length as keyof typeof lengthGuidelines]}\nTempo: ${tempo}\nComplexity: ${complexity} - ${complexityGuidelines[complexity as keyof typeof complexityGuidelines]}\n${keywords.length > 0 ? `Keywords to include: ${keywords.join(', ')}` : ''}\n${referenceArtist ? `Style reference: Similar to ${referenceArtist}` : ''}\n\nRequirements:\n1. Create original lyrics (not copying existing songs)\n2. Use proper song structure with clear section labels [Verse], [Chorus], [Bridge], etc.\n3. Include a catchy, memorable chorus\n4. Use appropriate rhyme schemes for the genre\n5. Show emotions through imagery rather than just stating them\n6. Ensure lyrics are singable and flow well\n7. Match the complexity level requested\n8. ${language !== 'english' ? `Write in ${language} language` : 'Write in English'}\n\nFormat the output with clear section labels and line breaks for readability.`,\n },\n ];\n\n const response = await agent.chat(messages);\n const lyrics =\n typeof response.content === 'string' ? response.content : JSON.stringify(response.content);\n\n return {\n success: true,\n data: lyrics,\n metadata: {\n theme,\n genre,\n mood,\n structure,\n language,\n length,\n tempo,\n keywords,\n referenceArtist,\n complexity,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Lyrics generation failed',\n };\n }\n },\n metadata: {\n category: 'creative',\n tags: ['lyrics', 'music', 'songwriting', 'composition', 'creative-writing'],\n version: '1.0.0',\n author: 'sdkwork-browser-agent',\n },\n};\n\n// ============================================\n// Export All Built-in Skills\n// ============================================\n\nexport const builtInSkills = [echoSkill, mathSkill, listSkillsSkill, lyricsGeneratorSkill];\n\n// Map for easy lookup\nexport const builtInSkillsMap = new Map(builtInSkills.map(skill => [skill.name, skill]));\n","/**\n * Agent Skills Specification Loader\n *\n * Loads skills following the Agent Skills Specification:\n * - skill-name/\n * └── SKILL.md (with YAML frontmatter)\n * └── scripts/ (optional)\n * └── references/ (optional)\n * └── assets/ (optional)\n */\n\nimport { Skill, SkillMetadata } from '../core/agent';\n\nexport interface SkillManifest {\n name: string;\n description: string;\n license?: string;\n compatibility?: string;\n metadata?: Record<string, string>;\n allowedTools?: string[];\n}\n\nexport interface ParsedSkill {\n manifest: SkillManifest;\n instructions: string;\n skill: Skill;\n}\n\n/**\n * Parse SKILL.md content\n * Extracts YAML frontmatter and markdown body\n */\nexport function parseSkillMd(content: string): { manifest: SkillManifest; instructions: string } {\n const frontmatterRegex = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)$/;\n const match = content.match(frontmatterRegex);\n\n if (!match) {\n throw new Error('Invalid SKILL.md format: missing YAML frontmatter');\n }\n\n const yamlContent = match[1];\n const instructions = match[2].trim();\n\n // Simple YAML parser for frontmatter\n const manifest = parseYaml(yamlContent);\n\n // Validate required fields\n if (!manifest.name || !manifest.description) {\n throw new Error('Invalid SKILL.md: name and description are required in frontmatter');\n }\n\n // Validate name format (per spec)\n if (!isValidSkillName(manifest.name)) {\n throw new Error(\n `Invalid skill name \"${manifest.name}\". Must be 1-64 chars, lowercase alphanumeric and hyphens only, ` +\n 'cannot start/end with hyphen, no consecutive hyphens.'\n );\n }\n\n return { manifest, instructions };\n}\n\n/**\n * Simple YAML parser for frontmatter\n */\nfunction parseYaml(yaml: string): SkillManifest {\n const result: Record<string, unknown> = {};\n const lines = yaml.split('\\n');\n let currentKey: string | null = null;\n let currentIndent = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const match = line.match(/^(\\s*)(\\w+):\\s*(.*)$/);\n if (match) {\n const [, indent, key, value] = match;\n currentIndent = indent.length;\n currentKey = key;\n\n if (value) {\n // Simple value\n result[key] = parseYamlValue(value);\n } else {\n // Could be a nested object or array\n result[key] = {};\n }\n } else if (currentKey && line.startsWith(' '.repeat(currentIndent + 2))) {\n // Nested value under currentKey\n const nestedMatch = line.match(/^\\s+(\\w+):\\s*(.*)$/);\n if (nestedMatch) {\n const [, nestedKey, nestedValue] = nestedMatch;\n if (typeof result[currentKey] === 'object' && result[currentKey] !== null) {\n (result[currentKey] as Record<string, unknown>)[nestedKey] = parseYamlValue(nestedValue);\n }\n }\n }\n }\n\n return result as unknown as SkillManifest;\n}\n\nfunction parseYamlValue(value: string): unknown {\n const trimmed = value.trim();\n\n // Boolean\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n\n // Null\n if (trimmed === 'null' || trimmed === '~') return null;\n\n // Number\n if (/^-?\\d+$/.test(trimmed)) return parseInt(trimmed, 10);\n if (/^-?\\d+\\.\\d+$/.test(trimmed)) return parseFloat(trimmed);\n\n // String (remove quotes if present)\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1);\n }\n\n return trimmed;\n}\n\n/**\n * Validate skill name per Agent Skills Specification\n */\nfunction isValidSkillName(name: string): boolean {\n // 1-64 characters\n if (name.length < 1 || name.length > 64) return false;\n\n // Only lowercase alphanumeric and hyphens\n if (!/^[a-z0-9-]+$/.test(name)) return false;\n\n // Cannot start or end with hyphen\n if (name.startsWith('-') || name.endsWith('-')) return false;\n\n // No consecutive hyphens\n if (name.includes('--')) return false;\n\n return true;\n}\n\n/**\n * Convert manifest and instructions to Skill object\n * Note: This creates a placeholder skill. Real implementation\n * would need to load actual handler from scripts/ directory\n */\nexport function createSkillFromManifest(manifest: SkillManifest, _instructions: string): Skill {\n // Parse metadata\n const metadata: SkillMetadata = {\n category: manifest.metadata?.category,\n tags: manifest.metadata?.tags?.split(/\\s+/),\n version: manifest.metadata?.version,\n author: manifest.metadata?.author,\n };\n\n // Create skill with placeholder handler\n // In real implementation, this would load from scripts/\n const skill: Skill = {\n name: manifest.name,\n description: manifest.description,\n parameters: {\n type: 'object',\n properties: {},\n },\n handler: async () => ({\n success: false,\n error: 'Skill handler not implemented. This is a manifest-only skill.',\n }),\n metadata,\n };\n\n return skill;\n}\n\n/**\n * Load skill from directory\n */\nexport async function loadSkillFromDirectory(skillPath: string): Promise<ParsedSkill> {\n // In browser environment, we can't read files\n if (typeof window !== 'undefined') {\n throw new Error('Directory loading not supported in browser environment');\n }\n\n // Dynamic import for Node.js fs\n const fs = await import('fs/promises');\n const path = await import('path');\n\n const skillMdPath = path.join(skillPath, 'SKILL.md');\n\n try {\n const content = await fs.readFile(skillMdPath, 'utf-8');\n const { manifest, instructions } = parseSkillMd(content);\n const skill = createSkillFromManifest(manifest, instructions);\n\n return { manifest, instructions, skill };\n } catch (error) {\n throw new Error(\n `Failed to load skill from ${skillPath}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n}\n\n/**\n * Validate skill manifest\n */\nexport function validateManifest(manifest: SkillManifest): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Required fields\n if (!manifest.name) {\n errors.push('Missing required field: name');\n } else if (!isValidSkillName(manifest.name)) {\n errors.push(`Invalid name format: \"${manifest.name}\"`);\n }\n\n if (!manifest.description) {\n errors.push('Missing required field: description');\n } else if (manifest.description.length > 1024) {\n errors.push('Description exceeds 1024 characters');\n }\n\n // Optional field validations\n if (manifest.compatibility && manifest.compatibility.length > 500) {\n errors.push('Compatibility exceeds 500 characters');\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n","/**\n * Skill Resource Manager\n *\n * Manages loading and execution of skills following Agent Skills Specification\n * Implements progressive disclosure: metadata → instructions → resources\n */\n\nimport { SkillManifest } from './skill-loader';\n\n// Resource types\nexport interface ScriptFile {\n name: string;\n path: string;\n language: 'javascript' | 'typescript' | 'python' | 'bash';\n content: string;\n}\n\nexport interface ReferenceFile {\n name: string;\n path: string;\n content: string;\n}\n\nexport interface AssetFile {\n name: string;\n path: string;\n type: 'template' | 'image' | 'data' | 'other';\n content: string;\n}\n\n// Progressive disclosure levels\nexport type DisclosureLevel = 'metadata' | 'instructions' | 'resources';\n\nexport interface LoadedSkill {\n name: string;\n path: string;\n manifest: SkillManifest;\n instructions?: string;\n scripts: Map<string, ScriptFile>;\n references: Map<string, ReferenceFile>;\n assets: Map<string, AssetFile>;\n currentLevel: DisclosureLevel;\n loadedAt: Date;\n}\n\nexport interface SkillManagerConfig {\n basePath?: string;\n enableCaching?: boolean;\n maxCacheSize?: number;\n}\n\n/**\n * Skill Resource Manager\n * Manages loading and execution of skills following Agent Skills Specification\n */\nexport class SkillResourceManager {\n private config: Required<SkillManagerConfig>;\n private cache = new Map<string, LoadedSkill>();\n private metadataCache = new Map<string, SkillManifest>();\n\n constructor(config: SkillManagerConfig = {}) {\n this.config = {\n basePath: config.basePath ?? './skills',\n enableCaching: config.enableCaching ?? true,\n maxCacheSize: config.maxCacheSize ?? 50,\n };\n }\n\n /**\n * Level 1: Load metadata only (~100 tokens)\n * Loaded at startup for all skills\n */\n async loadMetadata(skillPath: string): Promise<SkillManifest> {\n // Check cache\n if (this.config.enableCaching && this.metadataCache.has(skillPath)) {\n return this.metadataCache.get(skillPath)!;\n }\n\n const content = await this.readFile(`${skillPath}/SKILL.md`);\n if (!content) {\n throw new Error(`SKILL.md not found at ${skillPath}`);\n }\n\n const { manifest } = this.parseSkillMd(content);\n\n // Validate manifest according to Agent Skills Specification\n this.validateManifest(manifest, skillPath);\n\n // Cache metadata\n if (this.config.enableCaching) {\n this.metadataCache.set(skillPath, manifest);\n }\n\n return manifest;\n }\n\n /**\n * Level 2: Load instructions (< 5000 tokens)\n * Loaded when skill is activated\n */\n async loadInstructions(skillPath: string): Promise<string> {\n const content = await this.readFile(`${skillPath}/SKILL.md`);\n if (!content) {\n throw new Error(`SKILL.md not found at ${skillPath}`);\n }\n\n const { instructions } = this.parseSkillMd(content);\n return instructions;\n }\n\n /**\n * Level 3: Load complete skill with resources\n * Resources loaded as needed\n */\n async loadFullSkill(skillPath: string): Promise<LoadedSkill> {\n // Check cache\n if (this.config.enableCaching && this.cache.has(skillPath)) {\n return this.cache.get(skillPath)!;\n }\n\n // Load manifest\n const manifest = await this.loadMetadata(skillPath);\n\n // Load instructions\n const instructions = await this.loadInstructions(skillPath);\n\n // Load resources\n const scripts = await this.loadScripts(skillPath);\n const references = await this.loadReferences(skillPath);\n const assets = await this.loadAssets(skillPath);\n\n const skill: LoadedSkill = {\n name: manifest.name,\n path: skillPath,\n manifest,\n instructions,\n scripts,\n references,\n assets,\n currentLevel: 'resources',\n loadedAt: new Date(),\n };\n\n // Cache\n if (this.config.enableCaching) {\n this.cache.set(skillPath, skill);\n this.enforceCacheLimit();\n }\n\n return skill;\n }\n\n /**\n * Progressive loading - load up to specified level\n */\n async loadProgressive(\n skillPath: string,\n level: DisclosureLevel = 'metadata'\n ): Promise<LoadedSkill> {\n // Always load metadata first\n const manifest = await this.loadMetadata(skillPath);\n\n const skill: LoadedSkill = {\n name: manifest.name,\n path: skillPath,\n manifest,\n scripts: new Map(),\n references: new Map(),\n assets: new Map(),\n currentLevel: 'metadata',\n loadedAt: new Date(),\n };\n\n if (level === 'metadata') {\n return skill;\n }\n\n // Load instructions\n skill.instructions = await this.loadInstructions(skillPath);\n skill.currentLevel = 'instructions';\n\n if (level === 'instructions') {\n return skill;\n }\n\n // Load all resources\n skill.scripts = await this.loadScripts(skillPath);\n skill.references = await this.loadReferences(skillPath);\n skill.assets = await this.loadAssets(skillPath);\n skill.currentLevel = 'resources';\n\n return skill;\n }\n\n /**\n * Load a specific resource on demand\n */\n async loadResource(\n skillPath: string,\n type: 'script' | 'reference' | 'asset',\n name: string\n ): Promise<ScriptFile | ReferenceFile | AssetFile | null> {\n switch (type) {\n case 'script':\n return this.loadScript(skillPath, name);\n case 'reference':\n return this.loadReference(skillPath, name);\n case 'asset':\n return this.loadAsset(skillPath, name);\n default:\n return null;\n }\n }\n\n /**\n * Get reference content\n */\n async getReference(skillPath: string, referenceName: string): Promise<string | null> {\n const reference = await this.loadReference(skillPath, referenceName);\n return reference?.content ?? null;\n }\n\n /**\n * Get asset content\n */\n async getAsset(skillPath: string, assetName: string): Promise<string | null> {\n const asset = await this.loadAsset(skillPath, assetName);\n return asset?.content ?? null;\n }\n\n // Private methods\n\n private async loadScripts(skillPath: string): Promise<Map<string, ScriptFile>> {\n const scripts = new Map<string, ScriptFile>();\n\n try {\n const files = await this.listDirectory(`${skillPath}/scripts`);\n for (const file of files) {\n const content = await this.readFile(`${skillPath}/scripts/${file}`);\n if (content) {\n const language = this.detectLanguage(file);\n scripts.set(file, {\n name: file,\n path: `${skillPath}/scripts/${file}`,\n language,\n content,\n });\n }\n }\n } catch {\n // scripts/ directory may not exist\n }\n\n return scripts;\n }\n\n private async loadReferences(skillPath: string): Promise<Map<string, ReferenceFile>> {\n const references = new Map<string, ReferenceFile>();\n\n try {\n const files = await this.listDirectory(`${skillPath}/references`);\n for (const file of files) {\n if (file.endsWith('.md')) {\n const content = await this.readFile(`${skillPath}/references/${file}`);\n if (content) {\n references.set(file, {\n name: file,\n path: `${skillPath}/references/${file}`,\n content,\n });\n }\n }\n }\n } catch {\n // references/ directory may not exist\n }\n\n return references;\n }\n\n private async loadAssets(skillPath: string): Promise<Map<string, AssetFile>> {\n const assets = new Map<string, AssetFile>();\n\n try {\n const files = await this.listDirectory(`${skillPath}/assets`);\n for (const file of files) {\n const content = await this.readFile(`${skillPath}/assets/${file}`);\n if (content) {\n assets.set(file, {\n name: file,\n path: `${skillPath}/assets/${file}`,\n type: this.detectAssetType(file),\n content,\n });\n }\n }\n } catch {\n // assets/ directory may not exist\n }\n\n return assets;\n }\n\n private async loadScript(skillPath: string, name: string): Promise<ScriptFile | null> {\n const content = await this.readFile(`${skillPath}/scripts/${name}`);\n if (!content) return null;\n\n return {\n name,\n path: `${skillPath}/scripts/${name}`,\n language: this.detectLanguage(name),\n content,\n };\n }\n\n private async loadReference(skillPath: string, name: string): Promise<ReferenceFile | null> {\n const content = await this.readFile(`${skillPath}/references/${name}`);\n if (!content) return null;\n\n return {\n name,\n path: `${skillPath}/references/${name}`,\n content,\n };\n }\n\n private async loadAsset(skillPath: string, name: string): Promise<AssetFile | null> {\n const content = await this.readFile(`${skillPath}/assets/${name}`);\n if (!content) return null;\n\n return {\n name,\n path: `${skillPath}/assets/${name}`,\n type: this.detectAssetType(name),\n content,\n };\n }\n\n private parseSkillMd(content: string): { manifest: SkillManifest; instructions: string } {\n const frontmatterRegex = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)$/;\n const match = content.match(frontmatterRegex);\n\n if (!match) {\n throw new Error('Invalid SKILL.md format: missing YAML frontmatter');\n }\n\n const yamlContent = match[1];\n const instructions = match[2].trim();\n\n return { manifest: this.parseYaml(yamlContent), instructions };\n }\n\n private parseYaml(yaml: string): SkillManifest {\n const result: Record<string, unknown> = {};\n const lines = yaml.split('\\n');\n let currentKey: string | null = null;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const match = line.match(/^(\\w+):\\s*(.*)$/);\n if (match) {\n const [, key, value] = match;\n currentKey = key;\n result[key] = value ? this.parseYamlValue(value) : {};\n } else if (currentKey && line.startsWith(' ')) {\n const nestedMatch = line.match(/^\\s+(\\w+):\\s*(.*)$/);\n if (nestedMatch && typeof result[currentKey] === 'object') {\n const [, nestedKey, nestedValue] = nestedMatch;\n (result[currentKey] as Record<string, unknown>)[nestedKey] =\n this.parseYamlValue(nestedValue);\n }\n }\n }\n\n return result as unknown as SkillManifest;\n }\n\n private parseYamlValue(value: string): unknown {\n const trimmed = value.trim();\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n if (trimmed === 'null') return null;\n if (/^-?\\d+$/.test(trimmed)) return parseInt(trimmed, 10);\n if (/^-?\\d+\\.\\d+$/.test(trimmed)) return parseFloat(trimmed);\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n }\n\n /**\n * Validate manifest according to Agent Skills Specification\n */\n private validateManifest(manifest: SkillManifest, skillPath: string): void {\n // Required fields\n if (!manifest.name) {\n throw new Error('Skill manifest missing required field: name');\n }\n if (!manifest.description) {\n throw new Error('Skill manifest missing required field: description');\n }\n\n // Name must match directory name\n const expectedName = skillPath.split('/').pop();\n if (manifest.name !== expectedName) {\n throw new Error(`Skill name \"${manifest.name}\" must match directory name \"${expectedName}\"`);\n }\n\n // Name constraints per specification\n if (!/^[a-z0-9-]+$/.test(manifest.name)) {\n throw new Error(\n `Skill name \"${manifest.name}\" contains invalid characters. Only lowercase alphanumeric and hyphens allowed.`\n );\n }\n\n if (manifest.name.startsWith('-') || manifest.name.endsWith('-')) {\n throw new Error('Skill name cannot start or end with hyphen');\n }\n\n if (manifest.name.includes('--')) {\n throw new Error('Skill name cannot contain consecutive hyphens');\n }\n\n if (manifest.name.length < 1 || manifest.name.length > 64) {\n throw new Error('Skill name must be 1-64 characters');\n }\n\n // Description constraints\n if (manifest.description.length < 1 || manifest.description.length > 1024) {\n throw new Error('Skill description must be 1-1024 characters');\n }\n\n // Optional field validations\n if (manifest.compatibility && manifest.compatibility.length > 500) {\n throw new Error('Compatibility field exceeds 500 characters');\n }\n }\n\n private detectLanguage(filename: string): ScriptFile['language'] {\n const ext = filename.split('.').pop()?.toLowerCase();\n switch (ext) {\n case 'js':\n return 'javascript';\n case 'ts':\n return 'typescript';\n case 'py':\n return 'python';\n case 'sh':\n return 'bash';\n default:\n return 'javascript';\n }\n }\n\n private detectAssetType(filename: string): AssetFile['type'] {\n const ext = filename.split('.').pop()?.toLowerCase();\n if (['json', 'yaml', 'yml', 'csv', 'xml'].includes(ext || '')) return 'data';\n if (['png', 'jpg', 'jpeg', 'gif', 'svg'].includes(ext || '')) return 'image';\n if (['template', 'tpl'].includes(ext || '')) return 'template';\n return 'other';\n }\n\n private enforceCacheLimit(): void {\n if (this.cache.size > this.config.maxCacheSize) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n }\n\n // File system abstraction\n private async readFile(path: string): Promise<string | null> {\n if (typeof window !== 'undefined') {\n // Browser environment - fetch from server\n try {\n const response = await fetch(path);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n } else {\n // Node.js environment\n try {\n const fs = await import('fs/promises');\n return await fs.readFile(path, 'utf-8');\n } catch {\n return null;\n }\n }\n }\n\n private async listDirectory(path: string): Promise<string[]> {\n if (typeof window !== 'undefined') {\n // Browser - would need server API\n return [];\n } else {\n try {\n const fs = await import('fs/promises');\n const entries = await fs.readdir(path, { withFileTypes: true });\n return entries.filter(e => e.isFile()).map(e => e.name);\n } catch {\n return [];\n }\n }\n }\n}\n\nexport default SkillResourceManager;\n","/**\n * Enhanced Skill Script Executor\n *\n * Executes scripts from Skill scripts/ directory with comprehensive sandboxing\n * Supports JavaScript, TypeScript, Python, and Bash with security controls\n */\n\nimport { ScriptFile } from './skill-resource-manager';\nimport { ExecutionContext } from '../core/agent';\n\nexport interface ScriptExecutionResult {\n success: boolean;\n output?: unknown;\n error?: string;\n executionTime: number;\n memoryUsage?: number;\n}\n\nexport interface ScriptExecutorConfig {\n timeout?: number;\n allowedGlobals?: string[];\n restrictedGlobals?: string[];\n maxMemoryMB?: number;\n allowedTools?: string[];\n enableLogging?: boolean;\n}\n\ninterface SandboxContext {\n params: Record<string, unknown>;\n operation: string;\n console: {\n log: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n };\n Math: typeof Math;\n JSON: typeof JSON;\n Date: typeof Date;\n Array: typeof Array;\n Object: typeof Object;\n String: typeof String;\n Number: typeof Number;\n Boolean: typeof Boolean;\n Promise: typeof Promise;\n Set: typeof Set;\n Map: typeof Map;\n Error: typeof Error;\n RegExp: typeof RegExp;\n ArrayBuffer: typeof ArrayBuffer;\n Uint8Array: typeof Uint8Array;\n TextEncoder: typeof TextEncoder;\n TextDecoder: typeof TextDecoder;\n}\n\n/**\n * Enhanced Skill Script Executor with comprehensive sandboxing\n */\nexport class SkillScriptExecutor {\n private config: Required<ScriptExecutorConfig>;\n private executionCount = 0;\n\n constructor(config: ScriptExecutorConfig = {}) {\n this.config = {\n timeout: config.timeout ?? 30000,\n allowedGlobals: config.allowedGlobals ?? [\n 'console',\n 'Math',\n 'JSON',\n 'Date',\n 'Array',\n 'Object',\n 'String',\n 'Number',\n 'Boolean',\n 'Promise',\n 'Set',\n 'Map',\n 'Error',\n 'RegExp',\n 'ArrayBuffer',\n 'Uint8Array',\n 'TextEncoder',\n 'TextDecoder',\n ],\n restrictedGlobals: config.restrictedGlobals ?? [\n 'eval',\n 'Function',\n 'require',\n 'import',\n 'exports',\n 'module',\n 'process',\n 'global',\n 'globalThis',\n 'window',\n 'document',\n 'fetch',\n 'XMLHttpRequest',\n 'WebSocket',\n 'localStorage',\n 'sessionStorage',\n 'indexedDB',\n ],\n maxMemoryMB: config.maxMemoryMB ?? 100,\n allowedTools: config.allowedTools ?? [],\n enableLogging: config.enableLogging ?? false,\n };\n }\n\n /**\n * Execute a script with given operation and parameters\n */\n async execute(\n script: ScriptFile,\n operation: string,\n params: Record<string, unknown>,\n context: ExecutionContext\n ): Promise<ScriptExecutionResult> {\n const startTime = Date.now();\n const executionId = ++this.executionCount;\n\n if (this.config.enableLogging) {\n console.log(`[ScriptExecutor:${executionId}] Starting execution of ${script.name}`);\n }\n\n try {\n // Validate script against allowed tools\n if (!this.isScriptAllowed(script)) {\n return {\n success: false,\n error: `Script execution not allowed. Check allowed-tools in SKILL.md`,\n executionTime: Date.now() - startTime,\n };\n }\n\n let result: unknown;\n\n switch (script.language) {\n case 'javascript':\n case 'typescript':\n result = await this.executeJavaScript(script.content, operation, params, context);\n break;\n case 'python':\n result = await this.executePython(script.content, operation, params);\n break;\n case 'bash':\n result = await this.executeBash(script.content, operation, params);\n break;\n default:\n return {\n success: false,\n error: `Unsupported language: ${script.language}`,\n executionTime: Date.now() - startTime,\n };\n }\n\n if (this.config.enableLogging) {\n console.log(`[ScriptExecutor:${executionId}] Execution completed successfully`);\n }\n\n return {\n success: true,\n output: result,\n executionTime: Date.now() - startTime,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n \n if (this.config.enableLogging) {\n console.error(`[ScriptExecutor:${executionId}] Execution failed:`, errorMessage);\n }\n\n return {\n success: false,\n error: errorMessage,\n executionTime: Date.now() - startTime,\n };\n }\n }\n\n /**\n * Check if script is allowed to execute based on allowed-tools configuration\n */\n private isScriptAllowed(script: ScriptFile): boolean {\n if (this.config.allowedTools.length === 0) {\n return true; // No restrictions\n }\n\n // Check if script name matches any allowed tool pattern\n return this.config.allowedTools.some(pattern => {\n if (pattern.includes('*')) {\n // Convert glob pattern to regex\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\n return regex.test(script.name);\n }\n return pattern === script.name;\n });\n }\n\n /**\n * Execute JavaScript/TypeScript in secure sandbox\n */\n private async executeJavaScript(\n code: string,\n operation: string,\n params: Record<string, unknown>,\n _context: ExecutionContext\n ): Promise<unknown> {\n // Sanitize code - remove dangerous patterns\n const sanitizedCode = this.sanitizeJavaScript(code);\n\n // Create sandbox with allowed globals\n const sandbox = this.createSandbox(operation, params);\n\n // Wrap code in async function for better control\n const wrappedCode = `\n \"use strict\";\n ${sanitizedCode}\n if (typeof handler === 'function') {\n return await handler(operation, params);\n }\n if (typeof main === 'function') {\n return await main(operation, params);\n }\n throw new Error('Script must export a handler or main function');\n `;\n\n // Execute with timeout using Web Worker in browser or VM in Node.js\n if (typeof window !== 'undefined') {\n return this.executeInBrowserWorker(wrappedCode, sandbox);\n } else {\n return this.executeInNodeVM(wrappedCode, sandbox);\n }\n }\n\n /**\n * Sanitize JavaScript code to remove dangerous patterns\n */\n private sanitizeJavaScript(code: string): string {\n // Remove eval and Function constructor\n let sanitized = code\n .replace(/eval\\s*\\(/gi, '/* eval blocked */(')\n .replace(/new\\s+Function\\s*\\(/gi, '/* Function blocked */(')\n .replace(/import\\s*\\(/gi, '/* dynamic import blocked */(');\n\n // Remove restricted global access attempts\n for (const restricted of this.config.restrictedGlobals) {\n const pattern = new RegExp(`\\\\b${restricted}\\\\b`, 'g');\n sanitized = sanitized.replace(pattern, `/* ${restricted} blocked */`);\n }\n\n return sanitized;\n }\n\n /**\n * Create sandbox context with allowed globals\n */\n private createSandbox(operation: string, params: Record<string, unknown>): SandboxContext {\n const logs: unknown[][] = [];\n \n return {\n params,\n operation,\n console: {\n log: (...args: unknown[]) => {\n logs.push(args);\n if (this.config.enableLogging) {\n console.log('[Skill]', ...args);\n }\n },\n error: (...args: unknown[]) => {\n logs.push(args);\n if (this.config.enableLogging) {\n console.error('[Skill]', ...args);\n }\n },\n warn: (...args: unknown[]) => {\n logs.push(args);\n if (this.config.enableLogging) {\n console.warn('[Skill]', ...args);\n }\n },\n info: (...args: unknown[]) => {\n logs.push(args);\n if (this.config.enableLogging) {\n console.info('[Skill]', ...args);\n }\n },\n },\n Math,\n JSON,\n Date,\n Array,\n Object,\n String,\n Number,\n Boolean,\n Promise,\n Set,\n Map,\n Error,\n RegExp,\n ArrayBuffer,\n Uint8Array,\n TextEncoder,\n TextDecoder,\n };\n }\n\n /**\n * Execute JavaScript in browser using Web Worker\n */\n private executeInBrowserWorker(code: string, sandbox: SandboxContext): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const workerScript = `\n self.onmessage = async function(e) {\n try {\n const { code, sandbox } = e.data;\n \n // Create function with sandbox bindings\n const fn = new Function('sandbox', \\`\n with (sandbox) {\n return (async () => {\\n \\${code}\n })();\n }\n \\`);\n \n const result = await fn(sandbox);\n self.postMessage({ success: true, result });\n } catch (error) {\n self.postMessage({ success: false, error: error.message });\n }\n };\n `;\n\n const blob = new Blob([workerScript], { type: 'application/javascript' });\n const workerUrl = URL.createObjectURL(blob);\n const worker = new Worker(workerUrl);\n\n const timeoutId = setTimeout(() => {\n worker.terminate();\n URL.revokeObjectURL(workerUrl);\n reject(new Error(`Script execution timeout after ${this.config.timeout}ms`));\n }, this.config.timeout);\n\n worker.onmessage = (e) => {\n clearTimeout(timeoutId);\n worker.terminate();\n URL.revokeObjectURL(workerUrl);\n\n if (e.data.success) {\n resolve(e.data.result);\n } else {\n reject(new Error(e.data.error));\n }\n };\n\n worker.onerror = (error) => {\n clearTimeout(timeoutId);\n worker.terminate();\n URL.revokeObjectURL(workerUrl);\n reject(error);\n };\n\n worker.postMessage({ code, sandbox });\n });\n }\n\n /**\n * Execute JavaScript in Node.js using VM module\n */\n private async executeInNodeVM(code: string, sandbox: SandboxContext): Promise<unknown> {\n // Use Node.js built-in vm module instead of vm2 for better compatibility\n const vm = await import('node:vm');\n \n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const context = vm.createContext(sandbox as unknown as Record<string, unknown>);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const script = new vm.Script(code);\n \n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return script.runInContext(context);\n }\n\n /**\n * Execute Python code (requires Python runtime)\n */\n private async executePython(\n code: string,\n operation: string,\n params: Record<string, unknown>\n ): Promise<unknown> {\n if (typeof window !== 'undefined') {\n throw new Error('Python execution not supported in browser environment');\n }\n\n const { spawn } = await import('child_process');\n const inputData = JSON.stringify({ operation, params });\n\n return new Promise((resolve, reject) => {\n const pythonProcess = spawn('python3', ['-c', code]);\n \n let output = '';\n let errorOutput = '';\n\n pythonProcess.stdout.on('data', (data: Buffer) => {\n output += data.toString();\n });\n\n pythonProcess.stderr.on('data', (data: Buffer) => {\n errorOutput += data.toString();\n });\n\n pythonProcess.on('close', (code: number | null) => {\n if (code === 0) {\n try {\n resolve(JSON.parse(output));\n } catch {\n resolve(output.trim());\n }\n } else {\n reject(new Error(errorOutput || `Python process exited with code ${code}`));\n }\n });\n\n pythonProcess.stdin?.write(inputData);\n pythonProcess.stdin?.end();\n\n setTimeout(() => {\n pythonProcess.kill();\n reject(new Error('Python execution timeout'));\n }, this.config.timeout);\n });\n }\n\n /**\n * Execute Bash script (Node.js only)\n */\n private async executeBash(\n code: string,\n _operation: string,\n _params: Record<string, unknown>\n ): Promise<unknown> {\n if (typeof window !== 'undefined') {\n throw new Error('Bash execution not supported in browser environment');\n }\n\n const { exec } = await import('child_process');\n const { promisify } = await import('util');\n const execAsync = promisify(exec);\n\n const { stdout, stderr } = await execAsync(code, {\n timeout: this.config.timeout,\n maxBuffer: this.config.maxMemoryMB * 1024 * 1024,\n });\n\n if (stderr) {\n throw new Error(stderr);\n }\n\n return stdout.trim();\n }\n\n /**\n * Get executor statistics\n */\n getStats(): {\n totalExecutions: number;\n config: ScriptExecutorConfig;\n } {\n return {\n totalExecutions: this.executionCount,\n config: { ...this.config },\n };\n }\n}\n\nexport default SkillScriptExecutor;\n","/**\n * Enhanced Skill Executor\n *\n * Integrates SkillResourceManager and SkillScriptExecutor\n * Provides complete Skill execution with resource loading\n */\n\nimport { SkillResourceManager, LoadedSkill } from './skill-resource-manager';\nimport { SkillScriptExecutor, ScriptExecutionResult } from './skill-script-executor';\nimport { ExecutionContext, SkillResult } from '../core/agent';\n\nexport interface EnhancedSkillExecutorConfig {\n resourceManager?: SkillResourceManager;\n scriptExecutor?: SkillScriptExecutor;\n defaultScriptName?: string;\n}\n\n/**\n * Enhanced Skill Executor with full resource support\n */\nexport class EnhancedSkillExecutor {\n private resourceManager: SkillResourceManager;\n private scriptExecutor: SkillScriptExecutor;\n private defaultScriptName: string;\n\n constructor(config: EnhancedSkillExecutorConfig = {}) {\n this.resourceManager = config.resourceManager ?? new SkillResourceManager();\n this.scriptExecutor = config.scriptExecutor ?? new SkillScriptExecutor();\n this.defaultScriptName = config.defaultScriptName ?? 'handler.js';\n }\n\n /**\n * Execute a skill with full resource loading\n *\n * This method:\n * 1. Loads the skill with all resources (if not cached)\n * 2. Finds the appropriate script\n * 3. Executes the script with the operation and parameters\n * 4. Returns the result\n */\n async execute(\n skillPath: string,\n operation: string,\n params: Record<string, unknown> = {},\n context: ExecutionContext\n ): Promise<SkillResult> {\n try {\n // Load skill with all resources\n const skill = await this.resourceManager.loadFullSkill(skillPath);\n\n // Find script to execute\n const scriptName = this.findScript(skill, operation);\n if (!scriptName) {\n return {\n success: false,\n error: `No script found for operation \"${operation}\" in skill \"${skill.name}\"`,\n };\n }\n\n const script = skill.scripts.get(scriptName);\n if (!script) {\n return {\n success: false,\n error: `Script \"${scriptName}\" not found in skill \"${skill.name}\"`,\n };\n }\n\n // Execute script\n const result: ScriptExecutionResult = await this.scriptExecutor.execute(\n script,\n operation,\n params,\n context\n );\n\n if (result.success) {\n return {\n success: true,\n data: result.output,\n metadata: {\n skillName: skill.name,\n operation,\n scriptName,\n executionTime: result.executionTime,\n },\n };\n } else {\n return {\n success: false,\n error: result.error || 'Script execution failed',\n metadata: {\n skillName: skill.name,\n operation,\n scriptName,\n executionTime: result.executionTime,\n },\n };\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Execute skill with progressive loading\n * Loads only metadata first, then instructions if needed, then resources\n */\n async executeProgressive(\n skillPath: string,\n operation: string,\n params: Record<string, unknown> = {},\n context: ExecutionContext\n ): Promise<SkillResult> {\n try {\n // Step 1: Load metadata (fast, ~100 tokens)\n const metadata = await this.resourceManager.loadMetadata(skillPath);\n\n // Check if operation is supported by looking at instructions\n const instructions = await this.resourceManager.loadInstructions(skillPath);\n\n // If instructions don't mention the operation, return early\n if (!this.operationSupported(instructions, operation)) {\n return {\n success: false,\n error: `Operation \"${operation}\" not supported by skill \"${metadata.name}\"`,\n };\n }\n\n // Step 2: Load full skill with resources\n return this.execute(skillPath, operation, params, context);\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Get skill information without loading resources\n */\n async getSkillInfo(skillPath: string): Promise<{\n name: string;\n description: string;\n hasScripts: boolean;\n hasReferences: boolean;\n hasAssets: boolean;\n }> {\n const skill = await this.resourceManager.loadProgressive(skillPath, 'instructions');\n\n return {\n name: skill.manifest.name,\n description: skill.manifest.description,\n hasScripts: skill.scripts.size > 0,\n hasReferences: skill.references.size > 0,\n hasAssets: skill.assets.size > 0,\n };\n }\n\n /**\n * Get reference documentation\n */\n async getReference(skillPath: string, referenceName: string): Promise<string | null> {\n return this.resourceManager.getReference(skillPath, referenceName);\n }\n\n /**\n * Get asset content\n */\n async getAsset(skillPath: string, assetName: string): Promise<string | null> {\n return this.resourceManager.getAsset(skillPath, assetName);\n }\n\n /**\n * List all available skills in a directory\n */\n async listSkills(directoryPath: string): Promise<\n Array<{\n path: string;\n name: string;\n description: string;\n }>\n > {\n const skills: Array<{ path: string; name: string; description: string }> = [];\n\n try {\n // In Node.js, list directory\n if (typeof window === 'undefined') {\n const fs = await import('fs/promises');\n const path = await import('path');\n\n const entries = await fs.readdir(directoryPath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const skillPath = path.join(directoryPath, entry.name);\n try {\n const manifest = await this.resourceManager.loadMetadata(skillPath);\n skills.push({\n path: skillPath,\n name: manifest.name,\n description: manifest.description,\n });\n } catch {\n // Not a valid skill directory\n }\n }\n }\n }\n } catch {\n // Directory doesn't exist or can't be read\n }\n\n return skills;\n }\n\n // Private helper methods\n\n private findScript(skill: LoadedSkill, operation: string): string | null {\n // Priority order:\n // 1. Script with name matching operation (e.g., extract-text.js)\n // 2. Default script (handler.js or index.js)\n // 3. First available script\n\n const operationScript = `${operation}.js`;\n if (skill.scripts.has(operationScript)) {\n return operationScript;\n }\n\n if (skill.scripts.has(this.defaultScriptName)) {\n return this.defaultScriptName;\n }\n\n if (skill.scripts.has('index.js')) {\n return 'index.js';\n }\n\n const firstScript = skill.scripts.keys().next().value;\n return firstScript ?? null;\n }\n\n private operationSupported(instructions: string, operation: string): boolean {\n // Simple check: see if operation name appears in instructions\n // In production, this could be more sophisticated (parse markdown, etc.)\n const lowerInstructions = instructions.toLowerCase();\n const lowerOperation = operation.toLowerCase();\n\n return (\n lowerInstructions.includes(lowerOperation) ||\n lowerInstructions.includes('## ' + lowerOperation) ||\n lowerInstructions.includes('### ' + lowerOperation)\n );\n }\n}\n\nexport default EnhancedSkillExecutor;\n"],"mappings":"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","names":["params","result","result","params","result","sanitized","code","params","result"]}
|