{"version":3,"sources":["../src/tools/npm.ts"],"names":["tool","z"],"mappings":"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","file":"chunk-YW23RTN6.cjs","sourcesContent":["/**\n * npm.ts — Use any npm package from the browser.\n *\n * Two paths, unified:\n *   1. Browser-compatible packages (pure JS, no Node APIs) → dynamic ESM import\n *      from esm.sh. Works for lodash, date-fns, uuid, marked, mathjs, zod, ramda,\n *      nanoid, js-yaml, papaparse, chroma-js, fuse.js, and thousands more.\n *\n *   2. Node-only packages (fs, child_process, native bindings) → install + run\n *      inside the WebContainer (in-browser Node.js runtime). Works for sharp,\n *      sqlite3, express, puppeteer-core, whatever.\n *\n * Design:\n *   - pkg_load / pkg_call / pkg_eval: browser ESM path\n *   - pkg_node_run: WebContainer path\n *   - pkg_load tries browser first, reports clearly if it fails (with hint to use\n *     pkg_node_run if it's a Node package)\n *   - Modules cached by spec+version; repeat calls are free\n *\n * Runtime security note: this executes arbitrary code from a public CDN (esm.sh).\n * No worse than javascript_eval, but worth explicit consent for paranoid setups.\n */\nimport { tool } from '@strands-agents/sdk'\nimport { z } from 'zod'\n\n// ---------------------------------------------------------------------------\n// CDN resolver\n// ---------------------------------------------------------------------------\n\ntype CDN = 'esm.sh' | 'jspm.io' | 'skypack' | 'unpkg'\n\nfunction cdnUrl(cdn: CDN, spec: string): string {\n  // spec forms:  \"lodash\"  \"lodash@4.17.21\"  \"lodash/chunk\"  \"@scope/pkg\"  \"@scope/pkg@1.2/sub/path\"\n  const encodedSpec = encodeURI(spec).replace(/%40/g, '@')\n  switch (cdn) {\n    case 'esm.sh':    return `https://esm.sh/${encodedSpec}`\n    case 'jspm.io':   return `https://jspm.dev/${encodedSpec}`\n    case 'skypack':   return `https://cdn.skypack.dev/${encodedSpec}`\n    case 'unpkg':     return `https://unpkg.com/${encodedSpec}?module`\n  }\n}\n\n// Parse a spec into { name, version, subpath }.\nfunction parseSpec(spec: string) {\n  // Handle scoped packages: @scope/name[@version][/subpath]\n  let name = '', version = 'latest', subpath = ''\n  if (spec.startsWith('@')) {\n    const firstSlash = spec.indexOf('/')\n    if (firstSlash === -1) return { name: spec, version: 'latest', subpath: '' }\n    const scope = spec.slice(0, firstSlash)\n    const rest = spec.slice(firstSlash + 1)\n    const atIdx = rest.indexOf('@')\n    if (atIdx === -1) {\n      const slashIdx = rest.indexOf('/')\n      if (slashIdx === -1) { name = `${scope}/${rest}` }\n      else { name = `${scope}/${rest.slice(0, slashIdx)}`; subpath = rest.slice(slashIdx) }\n    } else {\n      name = `${scope}/${rest.slice(0, atIdx)}`\n      const after = rest.slice(atIdx + 1)\n      const slashIdx = after.indexOf('/')\n      if (slashIdx === -1) version = after\n      else { version = after.slice(0, slashIdx); subpath = after.slice(slashIdx) }\n    }\n  } else {\n    const atIdx = spec.indexOf('@')\n    if (atIdx === -1) {\n      const slashIdx = spec.indexOf('/')\n      if (slashIdx === -1) name = spec\n      else { name = spec.slice(0, slashIdx); subpath = spec.slice(slashIdx) }\n    } else {\n      name = spec.slice(0, atIdx)\n      const after = spec.slice(atIdx + 1)\n      const slashIdx = after.indexOf('/')\n      if (slashIdx === -1) version = after\n      else { version = after.slice(0, slashIdx); subpath = after.slice(slashIdx) }\n    }\n  }\n  return { name, version, subpath }\n}\n\n// ---------------------------------------------------------------------------\n// Module cache\n// ---------------------------------------------------------------------------\n\ntype LoadedModule = {\n  spec: string\n  cdn: CDN\n  url: string\n  module: any\n  loadedAt: number\n  loadTimeMs: number\n  resolvedVersion?: string\n}\n\nconst _modules = new Map<string, LoadedModule>()\n\nasync function loadFromCDNOnce(spec: string, cdn: CDN, timeoutMs: number): Promise<{ entry: LoadedModule; fromCache: boolean }> {\n  const cacheKey = `${cdn}::${spec}`\n  const hit = _modules.get(cacheKey)\n  if (hit) return { entry: hit, fromCache: true }\n\n  const url = cdnUrl(cdn, spec)\n  const start = performance.now()\n\n  // Use dynamic import with a timeout race.\n  const importPromise = import(/* @vite-ignore */ url)\n  const module = await Promise.race([\n    importPromise,\n    new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout loading ${url} after ${timeoutMs}ms`)), timeoutMs)),\n  ])\n\n  const loadTimeMs = performance.now() - start\n  // Try to derive version from module (many packages expose .VERSION, .version, or default.VERSION).\n  let resolvedVersion: string | undefined\n  try {\n    const m: any = module\n    resolvedVersion = m?.VERSION || m?.version || m?.default?.VERSION || m?.default?.version\n    if (typeof resolvedVersion !== 'string') resolvedVersion = undefined\n  } catch {}\n  const entry: LoadedModule = { spec, cdn, url, module, loadedAt: Date.now(), loadTimeMs, resolvedVersion }\n  _modules.set(cacheKey, entry)\n  return { entry, fromCache: false }\n}\n\n\n// Public wrapper: transparent fallback from esm.sh → jspm.io on network errors (not 404s).\nasync function loadFromCDN(spec: string, cdn: CDN, timeoutMs: number): Promise<{ entry: LoadedModule; fromCache: boolean }> {\n  try {\n    return await loadFromCDNOnce(spec, cdn, timeoutMs)\n  } catch (err: any) {\n    const msg = String(err?.message || err)\n    // Only auto-fallback from esm.sh on network/5xx errors. 404 = real \"not found\", don't retry.\n    const retryable = cdn === 'esm.sh' && !/\\b404\\b|not found/i.test(msg)\n    if (!retryable) throw err\n    try {\n      const result = await loadFromCDNOnce(spec, 'jspm.io', timeoutMs)\n      // Annotate that we fell back.\n      result.entry.url = `[fallback:jspm.io] ${result.entry.url}`\n      return result\n    } catch {\n      throw err // keep the original error message\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Inspection — safe listing of exports without serializing functions\n// ---------------------------------------------------------------------------\n\nfunction inspectModule(mod: any, maxDepth: number = 1) {\n  const seen = new WeakSet()\n  const describe = (val: any, depth: number): any => {\n    if (val === null) return { type: 'null' }\n    if (val === undefined) return { type: 'undefined' }\n    const t = typeof val\n    if (t === 'function') {\n      return {\n        type: 'function',\n        name: val.name || '<anonymous>',\n        length: val.length, // arity\n        is_async: val.constructor?.name === 'AsyncFunction',\n        is_class: /^class\\s/.test(val.toString?.().slice(0, 64) || ''),\n      }\n    }\n    if (t === 'string') return val.length > 80 ? { type: 'string', preview: val.slice(0, 80) + '…', length: val.length } : val\n    if (t === 'number' || t === 'boolean' || t === 'bigint' || t === 'symbol') return val\n    if (t === 'object') {\n      if (seen.has(val)) return '<circular>'\n      seen.add(val)\n      if (Array.isArray(val)) {\n        if (depth >= maxDepth) return { type: 'array', length: val.length }\n        return { type: 'array', length: val.length, items: val.slice(0, 5).map((v) => describe(v, depth + 1)) }\n      }\n      if (depth >= maxDepth) {\n        const keys = Object.keys(val).slice(0, 30)\n        return { type: 'object', keys, key_count: Object.keys(val).length }\n      }\n      const out: Record<string, any> = {}\n      for (const k of Object.keys(val).slice(0, 40)) {\n        try { out[k] = describe(val[k], depth + 1) }\n        catch { out[k] = '<getter-threw>' }\n      }\n      return out\n    }\n    return { type: t }\n  }\n  return describe(mod, 0)\n}\n\n// ---------------------------------------------------------------------------\n// Dot-path resolver for pkg_call\n// ---------------------------------------------------------------------------\n\nfunction resolvePath(obj: any, path: string): { target: any; thisArg: any } | null {\n  if (!path) return { target: obj, thisArg: null }\n  const parts = path.split('.')\n  let cur: any = obj\n  let parent: any = null\n  for (const p of parts) {\n    if (cur == null) return null\n    parent = cur\n    cur = cur[p]\n  }\n  if (cur === undefined) return null\n  return { target: cur, thisArg: parent }\n}\n\n// ---------------------------------------------------------------------------\n// Tools\n// ---------------------------------------------------------------------------\n\nexport const pkgLoadTool = tool({\n  name: 'pkg_load',\n  description:\n    'Load an npm package via an ESM CDN (esm.sh by default). ' +\n    'Returns an inspection of the exports so you can see what\\'s available. ' +\n    'Examples: \"lodash\", \"date-fns@4\", \"uuid\", \"@scope/pkg@1.2.3\", \"lodash/chunk\". ' +\n    'If the package needs Node APIs (fs, child_process, native bindings), this will fail — use pkg_node_run instead.',\n  inputSchema: z.object({\n    spec: z.string().describe('npm spec: \"pkg\", \"pkg@version\", \"pkg/subpath\"'),\n    cdn: z.enum(['esm.sh', 'jspm.io', 'skypack', 'unpkg']).optional().describe('Default esm.sh'),\n    timeout_ms: z.number().optional().describe('Default 15000'),\n    inspect_depth: z.number().optional().describe('How deep to walk exports when describing (default 1)'),\n  }),\n  callback: async (input) => {\n    const cdn = input.cdn ?? 'esm.sh'\n    const timeout = input.timeout_ms ?? 15000\n    try {\n      const parsed = parseSpec(input.spec)\n      const { entry: loaded, fromCache } = await loadFromCDN(input.spec, cdn, timeout)\n      const inspection = inspectModule(loaded.module, input.inspect_depth ?? 1)\n\n      // Suggest call paths: walk exports to depth 2, find functions, emit agent-friendly hints.\n      const suggestions: Array<{ path: string; arity: number; is_async: boolean }> = []\n      try {\n        const walk = (val: any, pathParts: string[]) => {\n          if (pathParts.length > 2) return\n          if (typeof val === 'function') {\n            suggestions.push({\n              path: pathParts.join('.'),\n              arity: val.length,\n              is_async: val.constructor?.name === 'AsyncFunction',\n            })\n            return\n          }\n          if (val && typeof val === 'object') {\n            for (const k of Object.keys(val).slice(0, 30)) {\n              try { walk(val[k], [...pathParts, k]) } catch {}\n            }\n          }\n        }\n        for (const k of Object.keys(loaded.module || {}).slice(0, 30)) {\n          walk(loaded.module[k], [k])\n        }\n      } catch {}\n\n      return JSON.stringify({\n        status: 'success',\n        spec: input.spec,\n        parsed,\n        cdn,\n        url: loaded.url,\n        load_time_ms: Number(loaded.loadTimeMs.toFixed(2)),\n        cached: fromCache,\n        resolved_version: loaded.resolvedVersion,\n        exports: Object.keys(loaded.module || {}),\n        has_default: 'default' in (loaded.module || {}),\n        suggested_call_paths: suggestions.slice(0, 40),\n        shape: inspection,\n      })\n    } catch (err: unknown) {\n      const msg = (err as Error).message || String(err)\n      // Heuristic: detect \"needs Node\" patterns\n      const looksLikeNode = /require\\s*\\(|node:|process\\.|Buffer|__dirname|module\\.exports/.test(msg)\n        || /Cannot find module 'fs|child_process|path|crypto|stream'/.test(msg)\n      return JSON.stringify({\n        status: 'error',\n        spec: input.spec,\n        cdn,\n        error: msg,\n        likely_needs_node: looksLikeNode,\n        hint: looksLikeNode\n          ? 'This package seems to need a Node runtime. Try pkg_node_run instead (runs in WebContainer).'\n          : `Try a different CDN (jspm.io, skypack, unpkg) or check the package name + version.`,\n      })\n    }\n  },\n})\n\nexport const pkgCallTool = tool({\n  name: 'pkg_call',\n  description:\n    'Call a function from a previously loaded package. Use dot-path to navigate: ' +\n    '\"default.parse\", \"chunk\", \"utils.format\". Args are passed positionally. ' +\n    'If the pkg isn\\'t loaded, auto-loads it first.',\n  inputSchema: z.object({\n    spec: z.string().describe('Same spec used with pkg_load'),\n    path: z.string().optional().describe('Dot-path to function. Omit to return the whole module as a value.'),\n    args: z.array(z.any()).optional().describe('Positional args (default [])'),\n    cdn: z.enum(['esm.sh', 'jspm.io', 'skypack', 'unpkg']).optional(),\n    timeout_ms: z.number().optional().describe('Max time for the initial import if not cached (default 15000)'),\n    await_result: z.boolean().optional().describe('If true, await the result (for async fns). Auto-detected when possible.'),\n    return_as: z.enum(['json', 'string', 'inspect']).optional().describe('How to encode the return value. Default \"json\" (falls back to inspect for unserializable).'),\n  }),\n  callback: async (input) => {\n    const cdn = input.cdn ?? 'esm.sh'\n    try {\n      const { entry: loaded } = await loadFromCDN(input.spec, cdn, input.timeout_ms ?? 15000)\n      const resolved = resolvePath(loaded.module, input.path || '')\n      if (!resolved) {\n        return JSON.stringify({\n          status: 'error',\n          error: `path \"${input.path}\" not found in module`,\n          available_exports: Object.keys(loaded.module || {}),\n        })\n      }\n      const { target, thisArg } = resolved\n      let result: any\n      if (typeof target === 'function') {\n        const args = input.args || []\n        let called = target.apply(thisArg, args)\n        if (input.await_result || (called && typeof called.then === 'function')) {\n          called = await called\n        }\n        result = called\n      } else {\n        result = target\n      }\n\n      const returnAs = input.return_as ?? 'json'\n      if (returnAs === 'string') {\n        return JSON.stringify({ status: 'success', result: String(result) })\n      }\n      if (returnAs === 'inspect') {\n        return JSON.stringify({ status: 'success', inspect: inspectModule(result, 2) })\n      }\n      // try JSON, fall back to inspect\n      try {\n        // Test JSON-serializability\n        const asJson = JSON.parse(JSON.stringify(result))\n        return JSON.stringify({ status: 'success', result: asJson })\n      } catch {\n        return JSON.stringify({\n          status: 'success',\n          result_type: typeof result,\n          note: 'result was not JSON-serializable; returning inspection',\n          inspect: inspectModule(result, 2),\n        })\n      }\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const pkgEvalTool = tool({\n  name: 'pkg_eval',\n  description:\n    'Evaluate arbitrary JS code with one or more loaded packages bound as identifiers. ' +\n    'Escape hatch for when pkg_call isn\\'t expressive enough (e.g. chained calls, custom logic). ' +\n    'The code runs as an async function body — you can use await freely.',\n  inputSchema: z.object({\n    specs: z.array(z.object({\n      spec: z.string(),\n      as: z.string().describe('Identifier to bind in the eval scope (e.g. \"_\" for lodash)'),\n      cdn: z.enum(['esm.sh', 'jspm.io', 'skypack', 'unpkg']).optional(),\n    })).describe('Packages to load and bind'),\n    code: z.string().describe('JS code. Use `return value` to get a result. Can use await.'),\n  }),\n  callback: async (input) => {\n    try {\n      // Validate binding identifiers — must be valid JS identifiers, not reserved words.\n      const ID_RE = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/\n      const RESERVED = new Set(['arguments', 'eval', 'await', 'async', 'yield', 'return', 'this',\n        'default', 'new', 'class', 'function', 'var', 'let', 'const', 'if', 'else', 'for', 'while',\n        'break', 'continue', 'do', 'switch', 'case', 'throw', 'try', 'catch', 'finally', 'typeof',\n        'instanceof', 'in', 'of', 'void', 'null', 'true', 'false', 'undefined'])\n      for (const s of input.specs) {\n        if (!ID_RE.test(s.as)) {\n          return JSON.stringify({ status: 'error', error: `Invalid binding identifier \"${s.as}\" — must match /^[a-zA-Z_$][a-zA-Z0-9_$]*$/` })\n        }\n        if (RESERVED.has(s.as)) {\n          return JSON.stringify({ status: 'error', error: `Cannot bind reserved word \"${s.as}\"` })\n        }\n      }\n      const bindings: Record<string, any> = {}\n      for (const s of input.specs) {\n        const { entry: loaded } = await loadFromCDN(s.spec, s.cdn ?? \"esm.sh\", 15000)\n        // Smart default binding: if module has .default and lots of methods live on it, prefer default.\n        // Heuristic: if mod.default is a function or has more own keys than the namespace.\n        let bound: any = loaded.module\n        const def = loaded.module?.default\n        if (def !== undefined && (typeof def === 'function' ||\n            (typeof def === 'object' && def !== null && Object.keys(def).length > Object.keys(loaded.module).length - 2))) {\n          // Still expose the full namespace as .__ns for access to named exports.\n          bound = def\n          try { (bound as any).__ns = loaded.module } catch {}\n        }\n        bindings[s.as] = bound\n      }\n      // Build async function with bindings as args\n      const argNames = Object.keys(bindings)\n      const argValues = argNames.map((k) => bindings[k])\n      const fn = new Function(...argNames, `\"use strict\"; return (async () => { ${input.code} })();`)\n      const result = await fn(...argValues)\n      try {\n        return JSON.stringify({ status: 'success', result: JSON.parse(JSON.stringify(result ?? null)) })\n      } catch {\n        return JSON.stringify({\n          status: 'success',\n          result_type: typeof result,\n          note: 'not JSON-serializable; returning inspection',\n          inspect: inspectModule(result, 2),\n        })\n      }\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const pkgListTool = tool({\n  name: 'pkg_list',\n  description: 'List all packages currently loaded in the browser module cache.',\n  inputSchema: z.object({}),\n  callback: async () => {\n    const entries = Array.from(_modules.values())\n    return JSON.stringify({\n      status: 'success',\n      count: entries.length,\n      modules: entries.map((e) => ({\n        spec: e.spec,\n        cdn: e.cdn,\n        url: e.url,\n        resolved_version: e.resolvedVersion,\n        loaded_at: new Date(e.loadedAt).toISOString(),\n        load_time_ms: Number(e.loadTimeMs.toFixed(2)),\n        exports: Object.keys(e.module || {}),\n      })),\n    })\n  },\n})\n\nexport const pkgUnloadTool = tool({\n  name: 'pkg_unload',\n  description: 'Drop a package from the cache. Note: this does NOT evict the browser\\'s module-graph cache — only forces a re-inspect next call.',\n  inputSchema: z.object({\n    spec: z.string(),\n    cdn: z.enum(['esm.sh', 'jspm.io', 'skypack', 'unpkg']).optional(),\n  }),\n  callback: async (input) => {\n    const cdn = input.cdn ?? 'esm.sh'\n    const key = `${cdn}::${input.spec}`\n    const existed = _modules.delete(key)\n    return JSON.stringify({ status: 'success', removed: existed })\n  },\n})\n\nexport const pkgSearchTool = tool({\n  name: 'pkg_search',\n  description: 'Search the npm registry. Returns top N matching packages with summary info.',\n  inputSchema: z.object({\n    query: z.string(),\n    size: z.number().optional().describe('Default 10, max 25'),\n  }),\n  callback: async (input) => {\n    try {\n      if (!input.query || !input.query.trim()) {\n        return JSON.stringify({ status: 'error', error: 'query is required and cannot be empty' })\n      }\n      const size = Math.min(Math.max(input.size ?? 10, 1), 25)\n      const url = `https://registry.npmjs.com/-/v1/search?text=${encodeURIComponent(input.query.trim())}&size=${size}`\n      const resp = await fetch(url)\n      if (!resp.ok) throw new Error(`npm registry ${resp.status}`)\n      const data: any = await resp.json()\n      return JSON.stringify({\n        status: 'success',\n        total: data.total,\n        returned: data.objects?.length || 0,\n        packages: (data.objects || []).map((o: any) => ({\n          name: o.package.name,\n          version: o.package.version,\n          description: o.package.description,\n          keywords: o.package.keywords,\n          publisher: o.package.publisher?.username,\n          date: o.package.date,\n          links: o.package.links,\n          score: o.score?.final,\n        })),\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const pkgInfoTool = tool({\n  name: 'pkg_info',\n  description: 'Fetch metadata for a package from the npm registry — latest version, deps, description, types, etc.',\n  inputSchema: z.object({\n    name: z.string(),\n    version: z.string().optional().describe('Specific version. Default \"latest\".'),\n  }),\n  callback: async (input) => {\n    try {\n      const version = input.version || 'latest'\n      const url = `https://registry.npmjs.com/${input.name}/${version}`\n      const resp = await fetch(url)\n      if (!resp.ok) throw new Error(`npm registry ${resp.status}: ${input.name}@${version}`)\n      const data: any = await resp.json()\n      return JSON.stringify({\n        status: 'success',\n        name: data.name,\n        version: data.version,\n        description: data.description,\n        main: data.main,\n        module: data.module,\n        types: data.types || data.typings,\n        exports: data.exports,\n        dependencies: data.dependencies,\n        peerDependencies: data.peerDependencies,\n        keywords: data.keywords,\n        license: data.license,\n        homepage: data.homepage,\n        repository: data.repository,\n        dist: data.dist ? {\n          tarball: data.dist.tarball,\n          unpackedSize: data.dist.unpackedSize,\n        } : undefined,\n        browser_compatible_hint: {\n          has_browser_field: !!data.browser,\n          has_module_field: !!data.module,\n          has_exports_field: !!data.exports,\n          has_native_binding: !!(data.gypfile || data.binary || (data.scripts?.install && /gyp|prebuild|node-gyp/.test(JSON.stringify(data.scripts)))),\n          looks_node_only: /\\b(fs|child_process|cluster|dgram|net|tls|http[s]?|dns|os|process|stream|util|zlib|v8|worker_threads)\\b/.test(\n            JSON.stringify(data.dependencies || {}) + JSON.stringify(data.peerDependencies || {}),\n          ),\n        },\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\n// ---------------------------------------------------------------------------\n// Node path via WebContainer\n// ---------------------------------------------------------------------------\n\nexport const pkgNodeRunTool = tool({\n  name: 'pkg_node_run',\n  description:\n    'Install an npm package in the WebContainer and run a Node.js script that uses it. ' +\n    'Use this for Node-only packages (sharp, sqlite3, express, puppeteer-core, etc.) that cannot run directly in the browser. ' +\n    'By default this FIRST probes browser compatibility via esm.sh — if all packages load there, returns a hint to use pkg_call instead (saves ~30-60s install). Pass force=true to skip the probe. ' +\n    'Dirs are hashed per package set, so repeat calls with the same deps skip the npm install. ' +\n    'Auto-boots WebContainer if needed. Flow: write package.json + index.mjs → npm install (or reuse) → node index.mjs → capture stdout.',\n  inputSchema: z.object({\n    packages: z.array(z.string()).describe('npm specs to install (e.g. [\"lodash@4\", \"date-fns\"])'),\n    code: z.string().describe('Node.js ESM code. Use import statements referencing the installed packages.'),\n    type: z.enum(['module', 'commonjs']).optional().describe('Default \"module\" (ESM). Use \"commonjs\" for packages that only export CJS.'),\n    install_timeout_ms: z.number().optional().describe('Default 180000 (3 min)'),\n    run_timeout_ms: z.number().optional().describe('Default 60000 (1 min)'),\n    force: z.boolean().optional().describe('Skip the browser-compatibility probe. By default we quickly check if ALL packages load via esm.sh and suggest pkg_call if they do (saves ~30-60s install).'),\n    reuse_dir: z.string().optional().describe('Reuse a specific working directory (saves re-install). Default: stable hash of package list.'),\n  }),\n  callback: async (input) => {\n    try {\n      // Lazy import so this file doesn't hard-fail if WebContainer isn't available.\n      const wcModule: any = await import('@webcontainer/api').catch(() => null)\n      if (!wcModule) {\n        return JSON.stringify({\n          status: 'error',\n          error: '@webcontainer/api not available in this build',\n        })\n      }\n\n      // Optional browser-path probe: if ALL packages load via esm.sh, skip the slow install.\n      if (!input.force) {\n        const results = await Promise.all(input.packages.map(async (spec) => {\n          try {\n            await loadFromCDN(spec, 'esm.sh', 8000)\n            return { spec, browser_ok: true }\n          } catch (e: any) {\n            const msg = String(e?.message || e)\n            return { spec, browser_ok: false, error: msg.slice(0, 200) }\n          }\n        }))\n        if (results.every((r) => r.browser_ok)) {\n          return JSON.stringify({\n            status: 'skip',\n            message: 'All packages load in the browser — no WebContainer needed.',\n            probe: results,\n            hint: 'Use pkg_call or pkg_eval instead. If you specifically want a Node-only runtime, pass force=true.',\n          })\n        }\n      }\n\n      // Get/boot WebContainer. We reuse the same singleton pattern as webcontainer.ts.\n      // We can't import from webcontainer.ts directly without coupling, so we boot our own\n      // reference if needed — WebContainer API is a per-page singleton, so the same instance\n      // is returned by boot() or throws if another boot already happened.\n      let wc: any\n      try {\n        wc = await wcModule.WebContainer.boot()\n      } catch (err: any) {\n        // If it errors because \"another instance already booted\", we need to cheat —\n        // the user should have booted via webcontainer_boot. Surface that clearly.\n        if (String(err?.message).includes('already booted') || String(err?.message).includes('another')) {\n          return JSON.stringify({\n            status: 'error',\n            error: 'WebContainer already booted elsewhere. Run pkg_node_run AFTER webcontainer_boot (they share the page singleton).',\n            original: String(err?.message),\n          })\n        }\n        throw err\n      }\n\n      const ext = input.type === 'commonjs' ? 'cjs' : 'mjs'\n      // Stable dir per package set → avoid re-installing same deps across calls.\n      const stableHash = (() => {\n        const key = [...input.packages].sort().join('|') + '::' + (input.type ?? 'module')\n        let h = 0\n        for (let i = 0; i < key.length; i++) h = ((h << 5) - h + key.charCodeAt(i)) | 0\n        return Math.abs(h).toString(36)\n      })()\n      const dir = input.reuse_dir ?? `pkg_run_${stableHash}`\n      const packageJson = {\n        name: 'pkg-run',\n        version: '1.0.0',\n        type: input.type ?? 'module',\n        dependencies: Object.fromEntries(input.packages.map((spec) => {\n          const atIdx = spec.lastIndexOf('@')\n          if (atIdx <= 0) return [spec, 'latest'] // starts-with-@ (scoped) or no version\n          if (spec.startsWith('@') && spec.indexOf('@', 1) === -1) return [spec, 'latest']\n          return [spec.slice(0, atIdx > 0 ? atIdx : spec.length), atIdx > 0 ? spec.slice(atIdx + 1) : 'latest']\n        })),\n      }\n\n      // Mount files\n      await wc.fs.mkdir(dir, { recursive: true })\n      await wc.fs.writeFile(`${dir}/package.json`, JSON.stringify(packageJson, null, 2))\n      await wc.fs.writeFile(`${dir}/index.${ext}`, input.code)\n\n      // npm install\n      const installTimeout = input.install_timeout_ms ?? 180_000\n      const runTimeout = input.run_timeout_ms ?? 60_000\n\n      const runProc = async (cmd: string, args: string[], timeoutMs: number) => {\n        const proc = await wc.spawn(cmd, args, { cwd: dir })\n        let out = ''\n        const reader = proc.output.getReader()\n        let killed = false\n        const killTimer = setTimeout(() => { killed = true; try { proc.kill() } catch {} }, timeoutMs)\n        const drain = (async () => {\n          try {\n            while (true) {\n              const { value, done } = await reader.read()\n              if (done) break\n              out += typeof value === 'string' ? value : String(value ?? '')\n            }\n          } catch {}\n        })()\n        const code: number = await Promise.race([\n          proc.exit,\n          new Promise<number>((r) => setTimeout(() => { try { proc.kill() } catch {}; r(-1) }, timeoutMs)),\n        ])\n        clearTimeout(killTimer)\n        await Promise.race([drain, new Promise((r) => setTimeout(r, 150))])\n        return { code, out, killed }\n      }\n\n      // Skip npm install if node_modules exists in this dir (dep set hasn't changed).\n      let needsInstall = true\n      try {\n        const entries = await wc.fs.readdir(`${dir}/node_modules`)\n        if (Array.isArray(entries) && entries.length > 0) needsInstall = false\n      } catch {}\n      const install = needsInstall\n        ? await runProc('npm', ['install'], installTimeout)\n        : { code: 0, out: '[cached: node_modules exists, skipped install]', killed: false }\n      if (install.code !== 0) {\n        return JSON.stringify({\n          status: 'error',\n          phase: 'install',\n          exitCode: install.code,\n          timed_out: install.code === -1,\n          output: install.out.slice(-4000),\n          packages: input.packages,\n        })\n      }\n\n      const run = await runProc('node', [`index.${ext}`], runTimeout)\n      return JSON.stringify({\n        status: run.code === 0 ? 'success' : 'error',\n        phase: 'run',\n        exitCode: run.code,\n        timed_out: run.code === -1,\n        output: run.out.slice(-4000),\n        output_length: run.out.length,\n        truncated: run.out.length > 4000,\n        packages: input.packages,\n        install_output_preview: install.out.slice(-1500),\n        cached_install: !needsInstall,\n        working_dir: dir,\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const pkgGuideTool = tool({\n  name: 'pkg_guide',\n  description:\n    'Quick decision guide: tells you whether to use the browser path or WebContainer for a given package, with concrete examples.',\n  inputSchema: z.object({\n    package_name: z.string().optional(),\n  }),\n  callback: async (input) => {\n    const guide = {\n      status: 'success',\n      decision_tree: [\n        '1. pkg_info({ name }) — inspect metadata; browser_compatible_hint.looks_node_only gives a fast signal',\n        '2. Try pkg_load({ spec }) — esm.sh transforms most things; if it works, use pkg_call / pkg_eval',\n        '3. If pkg_load fails with likely_needs_node=true → pkg_node_run',\n        '4. For native bindings (sharp, better-sqlite3, canvas-native) → pkg_node_run',\n      ],\n      browser_safe_examples: [\n        { pkg: 'lodash',        use: \"pkg_call({ spec: 'lodash', path: 'chunk', args: [[1,2,3,4,5], 2] })\" },\n        { pkg: 'date-fns',      use: \"pkg_call({ spec: 'date-fns', path: 'formatDistanceToNow', args: [new Date('2026-01-01')] })\" },\n        { pkg: 'uuid',          use: \"pkg_call({ spec: 'uuid', path: 'v4' })\" },\n        { pkg: 'marked',        use: \"pkg_call({ spec: 'marked', path: 'parse', args: ['# hi'] })\" },\n        { pkg: 'js-yaml',       use: \"pkg_call({ spec: 'js-yaml', path: 'load', args: ['foo: bar'] })\" },\n        { pkg: 'mathjs',        use: \"pkg_call({ spec: 'mathjs', path: 'evaluate', args: ['sqrt(2)'] })\" },\n        { pkg: 'nanoid',        use: \"pkg_call({ spec: 'nanoid', path: 'nanoid' })\" },\n        { pkg: 'zod',           use: \"pkg_eval({ specs: [{spec:'zod', as:'z'}], code: 'return z.string().min(3).safeParse(\\\"hi\\\")' })\" },\n      ],\n      node_required_examples: [\n        { pkg: 'sharp',          why: 'native image processing via libvips' },\n        { pkg: 'better-sqlite3', why: 'native SQLite binding' },\n        { pkg: 'bcrypt',         why: 'native crypto binding' },\n        { pkg: 'express',        why: 'needs node http/net' },\n        { pkg: 'puppeteer',      why: 'launches Chromium (downloads in-container is iffy; try puppeteer-core + remote WS)' },\n      ],\n      notes: [\n        \"esm.sh auto-shims require() and bundles deps, so even many CJS-only packages work in the browser.\",\n        \"Subpaths work: lodash/chunk resolves correctly via any of the CDNs.\",\n        \"Version pinning: use 'pkg@1.2.3' in the spec.\",\n        \"Cached by spec+cdn for the page lifetime — repeat calls are free.\",\n      ],\n    }\n    if (input.package_name) {\n      // Best-effort hint for a specific package\n      const name = input.package_name.toLowerCase()\n      const nodeOnlyList = ['sharp', 'better-sqlite3', 'sqlite3', 'bcrypt', 'canvas-native', 'express', 'koa', 'fastify', 'puppeteer', 'playwright', 'fs-extra', 'glob', 'chokidar']\n      const browserSafeList = ['lodash', 'date-fns', 'uuid', 'nanoid', 'marked', 'mathjs', 'zod', 'js-yaml', 'papaparse', 'chroma-js', 'chalk', 'ramda', 'fuse.js', 'dayjs']\n      const suggestion = nodeOnlyList.some((n) => name.includes(n))\n        ? 'likely_node_only: use pkg_node_run'\n        : browserSafeList.some((n) => name.includes(n))\n          ? 'likely_browser_safe: use pkg_load + pkg_call'\n          : 'unknown: try pkg_load first; if it fails with likely_needs_node, fall through to pkg_node_run'\n      return JSON.stringify({ ...guide, package_name: input.package_name, suggestion })\n    }\n    return JSON.stringify(guide)\n  },\n})\n\nexport const NPM_TOOLS = [\n  pkgGuideTool,          // START HERE when exploring\n  pkgSearchTool,         // find a package\n  pkgInfoTool,           // read registry metadata\n  pkgLoadTool,           // bring it into the browser\n  pkgCallTool,           // call one of its functions\n  pkgEvalTool,           // escape hatch: arbitrary JS with packages bound\n  pkgListTool,           // what's loaded\n  pkgUnloadTool,         // drop from cache\n  pkgNodeRunTool,        // fallback for Node-only packages\n]\n"]}