{"version":3,"sources":["../src/agent/wasm/wasm-tool.ts"],"names":[],"mappings":";AA0CO,SAAS,eAAe,MAAA,EAA8B;AAC3D,EAAA,IAAI,cAAA,GAA4C,IAAA;AAEhD,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,aAAA,EAAe,OAAA;AAAA,IAEf,OAAA,EAAS,OAAO,KAAA,EAAgB,IAAA,KAAwC;AAEtE,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,IAAI,SAAA;AACJ,QAAA,IAAI,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU;AACrC,UAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAC1C,UAAA,SAAA,GAAY,MAAM,SAAS,WAAA,EAAY;AAAA,QACzC,CAAA,MAAO;AACL,UAAA,SAAA,GAAY,MAAA,CAAO,MAAA;AAAA,QACrB;AACA,QAAA,cAAA,GAAiB,MAAM,WAAA,CAAY,OAAA,CAAQ,SAAS,CAAA;AAAA,MACtD;AAGA,MAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,MAAA,CAAO;AAAA,QACpC,OAAA,EAAS,OAAO,WAAA,IAAe,EAAA;AAAA,QAC/B,OAAA,EAAS,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,cAAc,CAAA,GAAI;AAAA,OACxD,CAAA;AAED,MAAA,MAAM,OAAA,GAA+B;AAAA,QACnC,GAAA,EAAK;AAAA,UACH,MAAA;AAAA,UACA,OAAO,MAAM;AACX,YAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,UAC1C;AAAA;AACF,OACF;AAGA,MAAA,IAAI,MAAA,CAAO,YAAA,EAAc,QAAA,CAAS,MAAM,CAAA,EAAG;AACzC,QAAC,QAAQ,GAAA,CAAgC,UAAU,CAAA,GAAI,MAAM,KAAK,GAAA,EAAI;AAAA,MACxE;AAEA,MAAA,IAAI,MAAA,CAAO,YAAA,EAAc,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC3C,QAAC,QAAQ,GAAA,CAAgC,QAAQ,CAAA,GAAI,MACnD,KAAK,MAAA,EAAO;AAAA,MAChB;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,WAAA,CAAY,gBAAgB,OAAO,CAAA;AAEtE,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA;AAIrD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAA,CAAO,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,MACtE;AAGA,MAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,GAAA;AACtC,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,QAChC,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,QACjC,IAAI,OAAA;AAAA,UAAQ,CAAC,GAAG,MAAA,KACd,UAAA;AAAA,YACE,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,0BAA0B,CAAC,CAAA;AAAA,YAClD;AAAA;AACF;AACF,OACD,CAAA;AAED,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,GACF;AACF","file":"chunk-BBQMWGX4.mjs","sourcesContent":["/**\n * WASM Tool Execution\n *\n * Execute WebAssembly modules as agent tools in the browser.\n * Sandboxed execution with capability-based permissions.\n * UNIQUE to EADK.\n */\n\nimport { z } from 'zod';\nimport type { Tool, ToolContext, ComputePreference } from '../core/types';\n\nexport interface WASMToolConfig {\n  /** Tool name */\n  name: string;\n  /** Tool description */\n  description: string;\n  /** WASM module (bytes or URL) */\n  module: ArrayBuffer | string;\n  /** Exported function name to call */\n  exportName: string;\n  /** Input schema */\n  inputSchema: z.ZodSchema;\n  /** Output schema */\n  outputSchema?: z.ZodSchema;\n  /** Allowed capabilities */\n  capabilities?: WASMCapability[];\n  /** Memory limit in pages (64KB each) */\n  memoryPages?: number;\n  /** Execution timeout in ms */\n  timeoutMs?: number;\n}\n\nexport type WASMCapability =\n  | 'fs_read'\n  | 'fs_write'\n  | 'net_fetch'\n  | 'crypto'\n  | 'time';\n\n/**\n * Create a tool that executes a WASM module.\n */\nexport function createWASMTool(config: WASMToolConfig): Tool {\n  let compiledModule: WebAssembly.Module | null = null;\n\n  return {\n    name: config.name,\n    description: config.description,\n    inputSchema: config.inputSchema,\n    outputSchema: config.outputSchema,\n    computeTarget: 'local' as ComputePreference,\n\n    execute: async (input: unknown, _ctx: ToolContext): Promise<unknown> => {\n      // Compile module on first use\n      if (!compiledModule) {\n        let wasmBytes: ArrayBuffer;\n        if (typeof config.module === 'string') {\n          const response = await fetch(config.module);\n          wasmBytes = await response.arrayBuffer();\n        } else {\n          wasmBytes = config.module;\n        }\n        compiledModule = await WebAssembly.compile(wasmBytes);\n      }\n\n      // Create sandboxed imports\n      const memory = new WebAssembly.Memory({\n        initial: config.memoryPages ?? 16,\n        maximum: config.memoryPages ? config.memoryPages * 2 : 256,\n      });\n\n      const imports: WebAssembly.Imports = {\n        env: {\n          memory,\n          abort: () => {\n            throw new Error('WASM execution aborted');\n          },\n        },\n      };\n\n      // Add capabilities\n      if (config.capabilities?.includes('time')) {\n        (imports.env as Record<string, unknown>)['Date_now'] = () => Date.now();\n      }\n\n      if (config.capabilities?.includes('crypto')) {\n        (imports.env as Record<string, unknown>)['random'] = () =>\n          Math.random();\n      }\n\n      // Instantiate\n      const instance = await WebAssembly.instantiate(compiledModule, imports);\n\n      const exportedFn = instance.exports[config.exportName] as\n        | ((...args: unknown[]) => unknown)\n        | undefined;\n\n      if (!exportedFn) {\n        throw new Error(`WASM module does not export '${config.exportName}'`);\n      }\n\n      // Execute with timeout\n      const timeoutMs = config.timeoutMs ?? 5000;\n      const result = await Promise.race([\n        Promise.resolve(exportedFn(input)),\n        new Promise((_, reject) =>\n          setTimeout(\n            () => reject(new Error('WASM execution timed out')),\n            timeoutMs\n          )\n        ),\n      ]);\n\n      return result;\n    },\n  };\n}\n"]}