mu-agent 0.1.8 → 0.1.10

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.
Files changed (167) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +34 -30
  3. package/dist/bundle/chunks/anthropic-messages-4PAJY4R6.js +6 -0
  4. package/dist/bundle/chunks/anthropic.js +1 -1
  5. package/dist/bundle/chunks/azure-openai-responses-Y4BBWQ3N.js +2 -0
  6. package/dist/bundle/chunks/bedrock-converse-stream.js +12 -9
  7. package/dist/bundle/chunks/{chunk-TRDNDS6A.js → chunk-3V45WARH.js} +6 -3
  8. package/dist/bundle/chunks/{chunk-S3GGRYIO.js → chunk-5AGIVGSV.js} +1 -1
  9. package/dist/bundle/chunks/chunk-6QGV3IWD.js +6 -0
  10. package/dist/bundle/chunks/{chunk-F5ZABL6Z.js → chunk-7CBJINYJ.js} +2 -2
  11. package/dist/bundle/chunks/{chunk-DRQDKNXA.js → chunk-7DDKXS2Q.js} +1 -1
  12. package/dist/bundle/chunks/chunk-BSS6T6KQ.js +2 -0
  13. package/dist/bundle/chunks/{chunk-H3QXYIF7.js → chunk-CF5GWZHW.js} +1 -1
  14. package/dist/bundle/chunks/{chunk-4OBXYPH4.js → chunk-DNNHZBQR.js} +1 -1
  15. package/dist/bundle/chunks/chunk-FN6OEZYR.js +2 -0
  16. package/dist/bundle/chunks/chunk-FTJT2X6E.js +2 -0
  17. package/dist/bundle/chunks/chunk-HZNN636Z.js +130 -0
  18. package/dist/bundle/chunks/{chunk-4L3WN2XY.js → chunk-JXWJOIH4.js} +1 -1
  19. package/dist/bundle/chunks/{chunk-TAOL3JFA.js → chunk-KIDDRTZP.js} +4 -4
  20. package/dist/bundle/chunks/chunk-LMNWTX2L.js +11 -0
  21. package/dist/bundle/chunks/chunk-LPXNMA2W.js +2 -0
  22. package/dist/bundle/chunks/{chunk-6CYCI3EJ.js → chunk-LVVZS2NO.js} +1 -1
  23. package/dist/bundle/chunks/chunk-NN4BEPYX.js +2 -0
  24. package/dist/bundle/chunks/{chunk-NG4PO5FP.js → chunk-O7IPTASE.js} +120 -103
  25. package/dist/bundle/chunks/{chunk-LD2P6SFZ.js → chunk-PMRZO46Y.js} +1 -1
  26. package/dist/bundle/chunks/chunk-QOEEJKS4.js +9 -0
  27. package/dist/bundle/chunks/chunk-R4VPBBDS.js +2 -0
  28. package/dist/bundle/chunks/{chunk-NTSWBG4X.js → chunk-RAQ6TU76.js} +1 -1
  29. package/dist/bundle/chunks/chunk-RDZVAGPR.js +2 -0
  30. package/dist/bundle/chunks/chunk-SGOTYFMT.js +91 -0
  31. package/dist/bundle/chunks/chunk-TMTOQ7H7.js +2 -0
  32. package/dist/bundle/chunks/chunk-UKVNB6C4.js +2 -0
  33. package/dist/bundle/chunks/chunk-VJLOQZKR.js +9 -0
  34. package/dist/bundle/chunks/chunk-WCGU75WO.js +11 -0
  35. package/dist/bundle/chunks/{chunk-RLZVFGW4.js → chunk-X234222Q.js} +29 -92
  36. package/dist/bundle/chunks/{cli-AOVD3SSZ.js → cli-722OL3K5.js} +4 -4
  37. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-MEZHQVNP.js +2 -0
  38. package/dist/bundle/chunks/codemode-worker.js +117 -13
  39. package/dist/bundle/chunks/easter-egg-3d-6H34EDGX.js +2 -0
  40. package/dist/bundle/chunks/execute-KVSEIDWL.js +499 -0
  41. package/dist/bundle/chunks/github-copilot.js +1 -1
  42. package/dist/bundle/chunks/{google-generative-ai-XMFHGQC5.js → google-generative-ai-D2VJQBTK.js} +1 -1
  43. package/dist/bundle/chunks/{google-vertex-4XRRNP74.js → google-vertex-SQG2BO6C.js} +1 -1
  44. package/dist/bundle/chunks/https-proxy-agent-LVOO5TPL.js +13 -0
  45. package/dist/bundle/chunks/image-resize-worker.js +1 -1
  46. package/dist/bundle/chunks/{jiti-loader-C3NU2SDH.js → jiti-loader-GL4HJFAD.js} +1 -1
  47. package/dist/bundle/chunks/{jiti-static-loader-E6ANQD5T.js → jiti-static-loader-2RCDI6B4.js} +1 -1
  48. package/dist/bundle/chunks/{lib-TEDK3E5I.js → lib-4AVRLBHM.js} +1 -1
  49. package/dist/bundle/chunks/{llama-cpp-classify-XT44PI3C.js → llama-cpp-classify-5YHLY3RC.js} +2 -2
  50. package/dist/bundle/chunks/mistral-conversations-BDARVJTT.js +5 -0
  51. package/dist/bundle/chunks/{multipart-parser-SQ6GDJL7.js → multipart-parser-FMGQ7342.js} +1 -1
  52. package/dist/bundle/chunks/{node-TWVVAGPO.js → node-AUOGOBCN.js} +1 -1
  53. package/dist/bundle/chunks/{node-N5BSDOA5.js → node-KCMANYC2.js} +1 -1
  54. package/dist/bundle/chunks/openai-chatgpt.js +1 -1
  55. package/dist/bundle/chunks/openai-codex-responses-CECGTDYD.js +10 -0
  56. package/dist/bundle/chunks/openai-codex.js +1 -1
  57. package/dist/bundle/chunks/openai-completions-UOA7MELD.js +7 -0
  58. package/dist/bundle/chunks/openai-decisions-HLM372N6.js +5 -0
  59. package/dist/bundle/chunks/openai-responses-TII7ZY5X.js +3 -0
  60. package/dist/bundle/chunks/{openrouter-images-ZVXWCSIM.js → openrouter-images-7T452AS5.js} +1 -1
  61. package/dist/bundle/chunks/{pi-messages-TM5SOOIW.js → pi-messages-2UDKLKOO.js} +1 -1
  62. package/dist/bundle/chunks/runtime-O3ELDOM7.js +2 -0
  63. package/dist/bundle/chunks/{src-UK77SYZE.js → src-QKGKDFSU.js} +1 -1
  64. package/dist/bundle/chunks/typesafe-system-one-KNCICMO5.js +2 -0
  65. package/dist/bundle/chunks/virtual-modules-IKEARUOZ.js +2 -0
  66. package/dist/bundle/cli-runtime.js +1 -1
  67. package/dist/bundle/index.js +1 -1
  68. package/dist/bundle/rpc-entry.js +1 -1
  69. package/dist/core/export-html/template.js +21 -16
  70. package/dist/modes/interactive/theme/dark.json +1 -1
  71. package/dist/modes/interactive/theme/light.json +1 -1
  72. package/dist/modes/interactive/theme/theme-schema.d.ts +28 -0
  73. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  74. package/dist/modes/interactive/theme/theme-schema.js +105 -0
  75. package/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  76. package/dist/modes/interactive/theme/theme-tokens.d.ts +257 -0
  77. package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -0
  78. package/dist/modes/interactive/theme/theme-tokens.js +94 -0
  79. package/dist/modes/interactive/theme/theme-tokens.js.map +1 -0
  80. package/dist/modes/interactive/theme/theme.d.ts +13 -16
  81. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  82. package/dist/modes/interactive/theme/theme.js +22 -29
  83. package/dist/modes/interactive/theme/theme.js.map +1 -1
  84. package/docs/cli-integration.md +1 -1
  85. package/docs/cli.md +22 -10
  86. package/docs/codemode.md +29 -6
  87. package/docs/compaction.md +5 -5
  88. package/docs/custom-provider.md +53 -1
  89. package/docs/docs.json +8 -0
  90. package/docs/environment-variables.md +3 -1
  91. package/docs/extensions.md +122 -13
  92. package/docs/json.md +3 -3
  93. package/docs/keybindings.md +5 -4
  94. package/docs/llama-cpp.md +9 -2
  95. package/docs/mcp.md +4 -2
  96. package/docs/message-types.md +22 -4
  97. package/docs/models-configuration.md +187 -0
  98. package/docs/models.md +18 -2
  99. package/docs/nvidia-rtx-llama-cpp.md +96 -0
  100. package/docs/providers.md +47 -0
  101. package/docs/sessions.md +1 -1
  102. package/docs/settings.md +8 -5
  103. package/docs/terminal-setup.md +14 -0
  104. package/docs/themes.md +4 -2
  105. package/docs/tui.md +71 -1
  106. package/docs/usage.md +1 -1
  107. package/examples/README.md +0 -3
  108. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  109. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  110. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  111. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  112. package/examples/extensions/gondolin/package-lock.json +2 -2
  113. package/examples/extensions/gondolin/package.json +1 -1
  114. package/examples/extensions/minimal-mode.ts +4 -5
  115. package/examples/extensions/overlay-test.ts +2 -2
  116. package/examples/extensions/plan-mode/index.ts +6 -2
  117. package/examples/extensions/sandbox/package-lock.json +2 -2
  118. package/examples/extensions/sandbox/package.json +1 -1
  119. package/examples/extensions/subagent/index.ts +4 -6
  120. package/examples/extensions/with-deps/package-lock.json +2 -2
  121. package/examples/extensions/with-deps/package.json +1 -1
  122. package/judge/dist/auth.js +41 -10
  123. package/judge/dist/import.js +26 -21
  124. package/judge/dist/setup.js +124 -120
  125. package/judge/manifest.json +630 -250
  126. package/judge/{dist/kyrn-judge.js → mu/index.js} +1393 -545
  127. package/judge/themes/mu-dark.json +80 -0
  128. package/judge/themes/mu-light.json +80 -0
  129. package/kyrn/bin/kyrn-doctor +17 -17
  130. package/kyrn/bin/kyrn-judge-local +2 -2
  131. package/kyrn/bin/kyrn-ledger +1 -1
  132. package/kyrn/bin/mu.mjs +74 -47
  133. package/package.json +4 -5
  134. package/dist/bundle/chunks/anthropic-messages-MI4QHRXW.js +0 -6
  135. package/dist/bundle/chunks/azure-openai-responses-E3QGN4VN.js +0 -2
  136. package/dist/bundle/chunks/chunk-33KL6IIQ.js +0 -20
  137. package/dist/bundle/chunks/chunk-A3JYRWB6.js +0 -2
  138. package/dist/bundle/chunks/chunk-C47CLQZK.js +0 -2
  139. package/dist/bundle/chunks/chunk-HQHD6PZI.js +0 -2
  140. package/dist/bundle/chunks/chunk-KJUDFE6Y.js +0 -11
  141. package/dist/bundle/chunks/chunk-TE3GUV6H.js +0 -9
  142. package/dist/bundle/chunks/chunk-VIV3CWXG.js +0 -2
  143. package/dist/bundle/chunks/chunk-WE4MXUQS.js +0 -11
  144. package/dist/bundle/chunks/chunk-Y2PP32XV.js +0 -2
  145. package/dist/bundle/chunks/chunk-YLY6CKPK.js +0 -132
  146. package/dist/bundle/chunks/chunk-ZE5FMF3V.js +0 -99
  147. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-NM3JRRWQ.js +0 -2
  148. package/dist/bundle/chunks/easter-egg-3d-G2LUBEMZ.js +0 -2
  149. package/dist/bundle/chunks/execute-MZVUC6BB.js +0 -388
  150. package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +0 -13
  151. package/dist/bundle/chunks/mistral-conversations-Q22M3IBG.js +0 -5
  152. package/dist/bundle/chunks/openai-codex-responses-4MYQSO5E.js +0 -10
  153. package/dist/bundle/chunks/openai-completions-OSRCWAAA.js +0 -7
  154. package/dist/bundle/chunks/openai-responses-UHF3DHNG.js +0 -3
  155. package/dist/bundle/chunks/runtime-VJMMDLVH.js +0 -2
  156. package/dist/bundle/chunks/typesafe-system-one-PRR5K6CI.js +0 -2
  157. package/dist/bundle/chunks/virtual-modules-RJXJGCPI.js +0 -2
  158. package/dist/modes/interactive/theme/theme-json.d.ts +0 -85
  159. package/dist/modes/interactive/theme/theme-json.d.ts.map +0 -1
  160. package/dist/modes/interactive/theme/theme-json.js +0 -132
  161. package/dist/modes/interactive/theme/theme-json.js.map +0 -1
  162. package/dist/modes/interactive/theme/theme-schema.json +0 -361
  163. package/examples/plugins/pi-example-plugin/README.md +0 -38
  164. package/examples/plugins/pi-example-plugin/package.json +0 -10
  165. package/examples/plugins/pi-example-plugin/src/contract.ts +0 -13
  166. package/examples/plugins/pi-example-plugin/src/session.ts +0 -24
  167. package/examples/plugins/pi-example-plugin/src/tui.ts +0 -31
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{McpOAuthCredentialStore,McpServerConnection,McpServerLog,McpSignInCancelledError,createDefaultTransport,signInMcpServer}from"./chunk-TE3GUV6H.js";import{ProjectTrustStore,addMcpServerConfig,loadMcpConfig,openBrowser,removeMcpServerConfig}from"./chunk-4OBXYPH4.js";import{getMcpToolExposure,validateMcpServerConfig}from"./chunk-ZE5FMF3V.js";import"./chunk-33KL6IIQ.js";import{APP_NAME,CONFIG_DIR_NAME,source_default}from"./chunk-YLY6CKPK.js";import"./chunk-S3GGRYIO.js";import"./chunk-4L3WN2XY.js";import{existsSync}from"node:fs";import{join}from"node:path";import{createInterface}from"node:readline/promises";var HELP=`${source_default.bold("Usage:")}
2
+ import{McpOAuthCredentialStore,McpServerConnection,McpServerLog,McpSignInCancelledError,createDefaultTransport,signInMcpServer}from"./chunk-VJLOQZKR.js";import{ProjectTrustStore,addMcpServerConfig,loadMcpConfig,openBrowser,removeMcpServerConfig}from"./chunk-DNNHZBQR.js";import{getMcpToolExposure,validateMcpServerConfig}from"./chunk-SGOTYFMT.js";import"./chunk-QOEEJKS4.js";import{source_default}from"./chunk-6QGV3IWD.js";import{APP_NAME,CONFIG_DIR_NAME}from"./chunk-BSS6T6KQ.js";import"./chunk-JXWJOIH4.js";import{existsSync}from"node:fs";import{join}from"node:path";import{createInterface}from"node:readline/promises";var HELP=`${source_default.bold("Usage:")}
3
3
  ${APP_NAME} mcp add <server> [options] -- <command> [args...]
4
4
  ${APP_NAME} mcp add <server> [options] --url <url>
5
5
  ${APP_NAME} mcp remove <server> [-l]
@@ -39,13 +39,13 @@ Options for add:
39
39
 
40
40
  Other options:
41
41
  --json Print the list as JSON
42
- --timeout <seconds> How long login waits for the browser (default: 300)`,HELP_HINT=source_default.dim(`Use "${APP_NAME} mcp --help" for usage.`),DEFAULT_LOGIN_TIMEOUT_SECONDS=300;function errorMessage(error){return error instanceof Error?error.message:String(error)}function describeTransport(entry){let{config}=entry;return"url"in config?config.url:[config.command,...config.args??[]].join(" ")}function createConnection(entry,options,credentials){return new McpServerConnection({entry,cwd:options.cwd,createTransport:createDefaultTransport,credentials,log:new McpServerLog(join(options.agentDir,"mcp.log")),onTools:()=>{}})}var OPTION_ALIASES=new Map([["-l","--local"]]);function parseOptions(args,known,error,maxPositionals=Number.POSITIVE_INFINITY){let positional=[],values=new Map,lists=new Map;for(let index=0;index<args.length;index++){let arg=OPTION_ALIASES.get(args[index])??args[index];if(arg==="--"||positional.length>=maxPositionals){positional.push(...args.slice(arg==="--"?index+1:index));break}if(!arg.startsWith("--")){positional.push(arg);continue}let name=arg.slice(2),kind=known[name];if(!kind){error(`Unknown option ${arg}.
42
+ --timeout <seconds> Time limit for the whole sign-in (default: 300)`,HELP_HINT=source_default.dim(`Use "${APP_NAME} mcp --help" for usage.`),DEFAULT_LOGIN_TIMEOUT_SECONDS=300;function errorMessage(error){return error instanceof Error?error.message:String(error)}function describeTransport(entry){let{config}=entry;return"url"in config?config.url:[config.command,...config.args??[]].join(" ")}function createConnection(entry,options,credentials){return new McpServerConnection({entry,cwd:options.cwd,createTransport:createDefaultTransport,credentials,log:new McpServerLog(join(options.agentDir,"mcp.log")),onTools:()=>{}})}var OPTION_ALIASES=new Map([["-l","--local"]]);function parseOptions(args,known,error,maxPositionals=Number.POSITIVE_INFINITY){let positional=[],values=new Map,lists=new Map;for(let index=0;index<args.length;index++){let arg=OPTION_ALIASES.get(args[index])??args[index];if(arg==="--"||positional.length>=maxPositionals){positional.push(...args.slice(arg==="--"?index+1:index));break}if(!arg.startsWith("--")){positional.push(arg);continue}let name=arg.slice(2),kind=known[name];if(!kind){error(`Unknown option ${arg}.
43
43
  ${HELP_HINT}`);return}if(kind==="flag"){values.set(name,!0);continue}let value=args[++index];if(value===void 0){error(`${arg} needs a value.`);return}kind==="list"?lists.set(name,[...lists.get(name)??[],value]):values.set(name,value)}return{positional,values,lists}}async function runMcpCommand(args,options){let log=options.log??(line=>console.log(line)),error=options.error??(line=>console.error(line)),[command,...rest]=args;if(command===void 0||command==="help"||args.includes("--help")||args.includes("-h"))return log(HELP),0;let projectConfig=join(options.cwd,CONFIG_DIR_NAME,"mcp.json");if(command==="add"||command==="remove")return command==="add"?add(rest,projectConfig,options,log,error):remove(rest,projectConfig,options,log,error);let projectTrusted=new ProjectTrustStore(options.agentDir).get(options.cwd)===!0,loaded=loadMcpConfig({agentDir:options.agentDir,cwd:options.cwd,projectTrusted}),untrustedNote=!projectTrusted&&existsSync(projectConfig)?`${projectConfig} is ignored because the project is not trusted. Start ${APP_NAME} in the project to trust it.`:void 0,credentials=options.credentials??new McpOAuthCredentialStore;switch(command){case"list":{let parsed=parseOptions(rest,{json:"flag"},error);return parsed?parsed.positional.length>0?(error(`Usage: ${APP_NAME} mcp list [--json]
44
44
  ${HELP_HINT}`),1):list(loaded,parsed.values.has("json"),untrustedNote,options,credentials,log):1}case"login":case"logout":{let parsed=parseOptions(rest,command==="login"?{timeout:"value"}:{},error);if(!parsed)return 1;let[name,...extra]=parsed.positional;if(!name||extra.length>0)return error(`Usage: ${APP_NAME} mcp ${command} <server>
45
45
  ${HELP_HINT}`),1;let entry=loaded.servers.find(server=>server.name===name);if(!entry)return error(`No MCP server named "${name}".${untrustedNote?` ${untrustedNote}`:""} Configured: ${loaded.servers.map(server=>server.name).join(", ")||"none"}.`),1;let connection=createConnection(entry,options,credentials),url=connection.oauthUrl;if(!url)return error(`MCP server "${name}" does not use OAuth. Only HTTP servers without an Authorization header do.`),1;if(command==="logout"){let removed=credentials.remove(name,url);return log(removed?`Signed out of MCP server "${name}".`:`No stored credentials for MCP server "${name}".`),0}let timeout=Number(parsed.values.get("timeout")??DEFAULT_LOGIN_TIMEOUT_SECONDS);if(!Number.isFinite(timeout)||timeout<=0)return error("--timeout must be a positive number of seconds."),1;try{return await login(entry,connection,url,timeout*1e3,options,credentials,log,error)}finally{await connection.close()}}default:return error(`Unknown mcp command "${command}".
46
46
  ${HELP_HINT}`),1}}function parsePairs(option,pairs,error){if(!pairs)return{};let record={};for(let pair of pairs){let separator=pair.indexOf("=");if(separator<=0){error(`--${option} expects KEY=VALUE, got "${pair}".`);return}record[pair.slice(0,separator)]=pair.slice(separator+1)}return record}function add(args,projectConfig,options,log,error){let usage=`Usage: ${APP_NAME} mcp add <server> [options] (--url <url> | -- <command> [args...])
47
47
  ${HELP_HINT}`,parsed=parseOptions(args,{local:"flag",url:"value",env:"list",cwd:"value",header:"list","bearer-token-env-var":"value","oauth-client-id":"value","oauth-client-secret":"value","oauth-callback-port":"value","oauth-client-name":"value",exposure:"value",description:"value"},error,2);if(!parsed)return 1;let{positional,values,lists}=parsed,[name,...command]=positional,url=values.get("url");if(!name||url===void 0==(command.length===0))return error(usage),1;let value=option=>{let found=values.get(option);return typeof found=="string"?found:void 0},exposure=value("exposure"),misplaced=(url===void 0?["header","bearer-token-env-var","oauth-client-id","oauth-client-secret","oauth-callback-port","oauth-client-name"]:["env","cwd"]).find(option=>values.has(option)||lists.has(option));if(misplaced)return error(`--${misplaced} only applies to ${url===void 0?"HTTP servers (--url)":"stdio servers"}.`),1;let config;if(typeof url=="string"){let headers=parsePairs("header",lists.get("header"),error);if(!headers)return 1;let bearer=value("bearer-token-env-var");bearer!==void 0&&(headers.Authorization=`Bearer \${${bearer}}`);let port=value("oauth-callback-port"),oauth={...value("oauth-client-id")===void 0?{}:{clientId:value("oauth-client-id")},...value("oauth-client-secret")===void 0?{}:{clientSecret:value("oauth-client-secret")},...port===void 0?{}:{callbackPort:Number(port)},...value("oauth-client-name")===void 0?{}:{clientName:value("oauth-client-name")}};config={url,...Object.keys(headers).length>0?{headers}:{},...Object.keys(oauth).length>0?{oauth}:{}}}else{let env=parsePairs("env",lists.get("env"),error);if(!env)return 1;let[executable,...commandArgs]=command;config={command:executable,...commandArgs.length>0?{args:commandArgs}:{},...Object.keys(env).length>0?{env}:{},...value("cwd")===void 0?{}:{cwd:value("cwd")}}}exposure!==void 0&&(config.exposure=exposure);let description=value("description");description!==void 0&&(config.description=description);let validated=validateMcpServerConfig(name,config);if(typeof validated=="string")return error(validated),1;let project=values.has("local"),path=project?projectConfig:join(options.agentDir,"mcp.json"),scope=project?"project":"global",replaced;try{replaced=addMcpServerConfig(path,name,validated)}catch(addError){return error(`Could not update ${path}: ${errorMessage(addError)}`),1}log(`${replaced?"Replaced":"Added"} ${scope} MCP server "${name}" in ${path}.`),project&&new ProjectTrustStore(options.agentDir).get(options.cwd)!==!0&&log(`The project is not trusted, so ${path} is ignored until you start ${APP_NAME} in the project and trust it.`);let mayNeedSignIn="url"in validated&&!Object.keys(validated.headers??{}).some(header=>header.toLowerCase()==="authorization");return log(`Check it with: ${APP_NAME} mcp list${mayNeedSignIn?`. If it requires sign-in: ${APP_NAME} mcp login ${name}`:""}`),0}function remove(args,projectConfig,options,log,error){let parsed=parseOptions(args,{local:"flag"},error);if(!parsed)return 1;let[name,...extra]=parsed.positional;if(!name||extra.length>0)return error(`Usage: ${APP_NAME} mcp remove <server> [-l]
48
- ${HELP_HINT}`),1;let project=parsed.values.has("local"),globalConfig=join(options.agentDir,"mcp.json"),path=project?projectConfig:globalConfig,scope=project?"project":"global",removed;try{removed=removeMcpServerConfig(path,name)}catch(removeError){return error(`Could not update ${path}: ${errorMessage(removeError)}`),1}if(removed)return log(`Removed ${scope} MCP server "${name}" from ${path}.`),0;let other=loadMcpConfig({agentDir:options.agentDir,cwd:options.cwd,projectTrusted:!0}).servers.find(server=>server.name===name&&server.scope!==scope);return error(`No ${scope} MCP server named "${name}" in ${path}.${other?` It is defined in ${other.source}${other.scope==="project"?"; use --local":"; omit --local"}.`:""}`),1}async function list(loaded,json,untrustedNote,options,credentials,log){let reports=await Promise.all(loaded.servers.map(async entry=>{let report={name:entry.name,scope:entry.scope??"global",source:entry.source,...entry.override?{override:entry.override}:{},enabled:entry.config.enabled!==!1,exposure:entry.config.exposure??"codemode",transport:describeTransport(entry),state:"disabled",tools:[]};if(!report.enabled)return report;let connection=createConnection(entry,options,credentials);try{await connection.getClient()}catch{}report.state=connection.state,report.tools=connection.tools.map(tool=>tool.name);let overrides=connection.tools.flatMap(tool=>{let exposure=getMcpToolExposure(entry.config,tool.name);return exposure===report.exposure?[]:[[tool.name,exposure]]});return overrides.length>0&&(report.toolExposure=Object.fromEntries(overrides)),connection.hasResources&&(report.resources=connection.resources.length,report.resourceTemplates=connection.resourceTemplates.length),connection.state!=="connected"&&connection.error&&(report.error=connection.error),await connection.close(),report})),failed=loaded.errors.length>0||reports.some(report=>report.enabled&&report.state!=="connected");if(json)return log(JSON.stringify({servers:reports,errors:loaded.errors,...untrustedNote?{note:untrustedNote}:{}},null,2)),failed?1:0;reports.length===0&&loaded.errors.length===0&&log(`No MCP servers configured. Add them to ${join(options.agentDir,"mcp.json")} or .pi/mcp.json.`);for(let report of reports){let state=report.state==="connected"?`connected, ${report.tools.length} tool${report.tools.length===1?"":"s"}`:report.state==="needs-auth"?"needs sign-in":report.state;if(log(`${report.name}: ${state} (${report.exposure}, ${report.scope})`),log(` ${report.transport}`),report.override&&log(` project override: ${report.override}`),report.state==="needs-auth"&&log(` sign in with: ${APP_NAME} mcp login ${report.name}`),report.tools.length>0){let tools=report.tools.map(tool=>{let exposure=report.toolExposure?.[tool];return exposure?`${tool} [${exposure}]`:tool});log(` tools: ${tools.join(", ")}`)}report.resources!==void 0&&log(` resources: ${report.resources}, URI templates: ${report.resourceTemplates??0}`),report.error&&log(` ${report.error.split(`
48
+ ${HELP_HINT}`),1;let project=parsed.values.has("local"),globalConfig=join(options.agentDir,"mcp.json"),path=project?projectConfig:globalConfig,scope=project?"project":"global",removed;try{removed=removeMcpServerConfig(path,name)}catch(removeError){return error(`Could not update ${path}: ${errorMessage(removeError)}`),1}if(removed)return log(`Removed ${scope} MCP server "${name}" from ${path}.`),0;let other=loadMcpConfig({agentDir:options.agentDir,cwd:options.cwd,projectTrusted:!0}).servers.find(server=>server.name===name&&server.scope!==scope);return error(`No ${scope} MCP server named "${name}" in ${path}.${other?` It is defined in ${other.source}${other.scope==="project"?"; use --local":"; omit --local"}.`:""}`),1}async function list(loaded,json,untrustedNote,options,credentials,log){let reports=await Promise.all(loaded.servers.map(async entry=>{let report={name:entry.name,scope:entry.scope??"global",source:entry.source,...entry.override?{override:entry.override}:{},enabled:entry.config.enabled!==!1,exposure:entry.config.exposure??"codemode",transport:describeTransport(entry),state:"disabled",tools:[]};if(!report.enabled)return report;let connection=createConnection(entry,options,credentials);try{await connection.getClient()}catch{}report.state=connection.state,report.tools=connection.tools.map(tool=>tool.name);let overrides=connection.tools.flatMap(tool=>{let exposure=getMcpToolExposure(entry.config,tool.name);return exposure===report.exposure?[]:[[tool.name,exposure]]});return overrides.length>0&&(report.toolExposure=Object.fromEntries(overrides)),connection.hasResources&&(report.resources=!0),connection.state!=="connected"&&connection.error&&(report.error=connection.error),await connection.close(),report})),failed=loaded.errors.length>0||reports.some(report=>report.enabled&&report.state!=="connected");if(json)return log(JSON.stringify({servers:reports,errors:loaded.errors,...untrustedNote?{note:untrustedNote}:{}},null,2)),failed?1:0;reports.length===0&&loaded.errors.length===0&&log(`No MCP servers configured. Add them to ${join(options.agentDir,"mcp.json")} or .pi/mcp.json.`);for(let report of reports){let state=report.state==="connected"?`connected, ${report.tools.length} tool${report.tools.length===1?"":"s"}`:report.state==="needs-auth"?"needs sign-in":report.state;if(log(`${report.name}: ${state} (${report.exposure}, ${report.scope})`),log(` ${report.transport}`),report.override&&log(` project override: ${report.override}`),report.state==="needs-auth"&&log(` sign in with: ${APP_NAME} mcp login ${report.name}`),report.tools.length>0){let tools=report.tools.map(tool=>{let exposure=report.toolExposure?.[tool];return exposure?`${tool} [${exposure}]`:tool});log(` tools: ${tools.join(", ")}`)}report.resources&&log(" offers resources"),report.error&&log(` ${report.error.split(`
49
49
  `).join(`
50
50
  `)}`)}for(let configError of loaded.errors)log(`config error: ${configError}`);return untrustedNote&&log(untrustedNote),failed?1:0}async function login(entry,connection,url,timeoutMs,options,credentials,log,error){let{name}=entry;try{return await connection.getClient(),log(`Already signed in to MCP server "${name}" (${connection.tools.length} tools).`),0}catch{if(connection.state!=="needs-auth")return error(`MCP server "${name}" failed to connect: ${connection.error??"unknown error"}`),1}let openUrl=options.openUrl??openBrowser,interactive=process.stdin.isTTY===!0&&options.openUrl===void 0;try{await signInMcpServer({serverUrl:url,store:credentials.forServer(name,url),settings:connection.oauthSettings(),challenge:connection.challenge,prompt:{showAuthorizationUrl:authorizationUrl=>{log(`Sign in to MCP server "${name}" in your browser:
51
- ${authorizationUrl.href}`),openUrl(authorizationUrl.href)},promptForRedirectUrl:signal=>waitForRedirectUrl(signal,timeoutMs,interactive)}})}catch(signInError){return error(signInError instanceof McpSignInCancelledError?`Sign-in to MCP server "${name}" was cancelled or not completed within ${Math.round(timeoutMs/1e3)} seconds.`:`Sign-in to MCP server "${name}" failed: ${errorMessage(signInError)}`),1}connection.challenge=void 0;try{await connection.reconnect()}catch(connectError){return error(`Signed in, but ${errorMessage(connectError)}`),1}return log(`Signed in to MCP server "${name}" (${connection.tools.length} tools).`),0}async function waitForRedirectUrl(signal,timeoutMs,interactive){let controller=new AbortController,abort=()=>controller.abort();signal.addEventListener("abort",abort,{once:!0});let timer=setTimeout(abort,timeoutMs);try{if(!interactive){await new Promise(resolve=>controller.signal.addEventListener("abort",()=>resolve(),{once:!0}));return}let readline=createInterface({input:process.stdin,output:process.stderr});try{return await readline.question("If the browser cannot reach this machine, paste the URL it was redirected to: ",{signal:controller.signal})}catch{return}finally{readline.close()}}finally{clearTimeout(timer),signal.removeEventListener("abort",abort)}}export{runMcpCommand};
51
+ ${authorizationUrl.href}`),openUrl(authorizationUrl.href)},promptForRedirectUrl:signal=>waitForRedirectUrl(signal,interactive)},signal:AbortSignal.timeout(timeoutMs)})}catch(signInError){return error(signInError instanceof McpSignInCancelledError?`Sign-in to MCP server "${name}" was cancelled or not completed within ${Math.round(timeoutMs/1e3)} seconds.`:`Sign-in to MCP server "${name}" failed: ${errorMessage(signInError)}`),1}connection.challenge=void 0;try{await connection.reconnect()}catch(connectError){return error(`Signed in, but ${errorMessage(connectError)}`),1}return log(`Signed in to MCP server "${name}" (${connection.tools.length} tools).`),0}async function waitForRedirectUrl(signal,interactive){if(!interactive){signal.aborted||await new Promise(resolve=>signal.addEventListener("abort",resolve,{once:!0}));return}let readline=createInterface({input:process.stdin,output:process.stderr});try{return await readline.question("If the browser cannot reach this machine, paste the URL it was redirected to: ",{signal})}catch{return}finally{readline.close()}}export{runMcpCommand};
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{classifySystemOne}from"./chunk-NN4BEPYX.js";import{isRecord}from"./chunk-FTJT2X6E.js";import"./chunk-TEPMHNKQ.js";import"./chunk-PMRZO46Y.js";import"./chunk-UTB4DTYQ.js";import"./chunk-WCGU75WO.js";import"./chunk-LPXNMA2W.js";import"./chunk-JXWJOIH4.js";var LABEL="Cloudflare Workers AI";function cloudflareErrorMessage(errors){if(Array.isArray(errors)){let messages=errors.map(error=>isRecord(error)&&typeof error.message=="string"?error.message:void 0).filter(message=>message!==void 0);if(messages.length>0)return`${LABEL} error: ${messages.join("; ")}`}return`${LABEL} request failed`}var transport={api:"cloudflare-workers-ai-system-one",label:LABEL,url:model=>new URL("run",`${model.baseUrl.replace(/\/+$/u,"")}/`),payload:(model,request)=>({model:model.id,input:request}),output:body=>{if(!isRecord(body))throw new Error(`${LABEL} returned an unexpected response`);if(body.success===!1)throw new Error(cloudflareErrorMessage(body.errors));let result=body.result;if(!isRecord(result))throw new Error(`${LABEL} returned an unexpected response`);if("answers"in result)return result;if(result.state!=="Completed")throw new Error(`${LABEL} run did not complete (state: ${String(result.state)})`);if(!isRecord(result.result))throw new Error(`${LABEL} returned an unexpected response`);return result.result}},classify=(model,context,options)=>classifySystemOne(transport,model,context,options);export{classify};
@@ -1,6 +1,96 @@
1
- import{parentPort,workerData}from"node:worker_threads";function createWasiShim(memoryAccessor){return{clock_time_get(clockId,_precision,resultPtr){let mem=memoryAccessor(),view=new DataView(mem.buffer);if(clockId===0||clockId===1){let timeNs=BigInt(Date.now())*1000000n;return view.setBigUint64(resultPtr,timeNs,!0),0}return 52},fd_write(fd,iovsPtr,iovsLen,nwrittenPtr){let mem=memoryAccessor(),view=new DataView(mem.buffer),bytes=new Uint8Array(mem.buffer),totalWritten=0;if(fd!==1&&fd!==2)return 8;for(let i=0;i<iovsLen;i++){let bufPtr=view.getUint32(iovsPtr+i*8,!0),bufLen=view.getUint32(iovsPtr+i*8+4,!0),chunk=bytes.slice(bufPtr,bufPtr+bufLen),text=new TextDecoder().decode(chunk);fd===1?typeof process<"u"&&process.stdout?process.stdout.write(text):console.log(text):typeof process<"u"&&process.stderr?process.stderr.write(text):console.error(text),totalWritten+=bufLen}return view.setUint32(nwrittenPtr,totalWritten,!0),0},fd_close(_fd){return 52},fd_fdstat_get(fd,statPtr){let mem=memoryAccessor(),view=new DataView(mem.buffer);return fd===1||fd===2?(view.setUint8(statPtr,2),view.setUint16(statPtr+2,0,!0),view.setBigUint64(statPtr+8,0n,!0),view.setBigUint64(statPtr+16,0n,!0),0):8},fd_seek(_fd,_offset,_whence,_resultPtr){return 52},random_get(bufPtr,bufLen){let mem=memoryAccessor(),bytes=new Uint8Array(mem.buffer,bufPtr,bufLen);if(typeof crypto<"u"&&crypto.getRandomValues)crypto.getRandomValues(bytes);else for(let i=0;i<bufLen;i++)bytes[i]=Math.floor(Math.random()*256);return 0}}}var decoder=new TextDecoder;function parseVersionString(memory,ptr){let mem=new Uint8Array(memory.buffer),end=ptr;for(;mem[end]!==0;)end++;if(end===ptr)return{};let str=decoder.decode(mem.slice(ptr,end)),result={};for(let line of str.split(`
2
- `)){let eq=line.indexOf("=");eq>0&&(result[line.slice(0,eq)]=line.slice(eq+1))}return result}function extractExtensionVersions(ext,memory){let versionsFnName=`qjs_ext_${ext.name.replace(/-/g,"_")}_versions`,versionsFn=ext.instance.exports[versionsFnName];if(typeof versionsFn!="function")return;let ptr=versionsFn();if(ptr!==0)return parseVersionString(memory,ptr)}function readULEB128(bytes,offset){let result=0,shift=0;for(;offset.value<bytes.length;){let byte=bytes[offset.value++];if(result|=(byte&127)<<shift,(byte&128)===0)break;shift+=7}return result}function parseDylink(module){let sections=WebAssembly.Module.customSections(module,"dylink.0");if(sections.length===0)return null;let bytes=new Uint8Array(sections[0]),offset={value:0},info={memorySize:0,memoryAlignment:0,tableSize:0,tableAlignment:0,needed:[]};for(;offset.value<bytes.length;){let subsectionType=readULEB128(bytes,offset),subsectionSize=readULEB128(bytes,offset),subsectionEnd=offset.value+subsectionSize;if(subsectionType===1)info.memorySize=readULEB128(bytes,offset),info.memoryAlignment=readULEB128(bytes,offset),info.tableSize=readULEB128(bytes,offset),info.tableAlignment=readULEB128(bytes,offset);else if(subsectionType===2){let count=readULEB128(bytes,offset);for(let i=0;i<count;i++){let len=readULEB128(bytes,offset),name=new TextDecoder().decode(bytes.slice(offset.value,offset.value+len));offset.value+=len,info.needed.push(name)}}offset.value=subsectionEnd}return info}async function loadExtension(descriptor,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy,allocBase){let module;descriptor.wasm instanceof WebAssembly.Module?module=descriptor.wasm:module=await WebAssembly.compile(descriptor.wasm);let dylink=parseDylink(module);if(!dylink)throw new Error(`Extension "${descriptor.name}" is not a WASM shared library (missing dylink.0 section)`);let memory=mainExports.memory,table=mainExports.__indirect_function_table,stackPointer=mainExports.__stack_pointer,mallocFn=mainExports.malloc;if(!memory)throw new Error("Main module does not export memory");if(!table)throw new Error("Main module does not export __indirect_function_table");if(!mallocFn)throw new Error("Main module does not export malloc");let memoryBase,tableBase;if(allocBase)memoryBase=allocBase.memoryBase,tableBase=allocBase.tableBase;else if(dylink.memorySize>0){if(memoryBase=mallocFn(dylink.memorySize),memoryBase===0)throw new Error(`Failed to allocate ${dylink.memorySize} bytes for extension "${descriptor.name}"`);new Uint8Array(memory.buffer,memoryBase,dylink.memorySize).fill(0)}else memoryBase=0;allocBase?(tableBase=allocBase.tableBase,tableBase+dylink.tableSize>table.length&&table.grow(tableBase+dylink.tableSize-table.length)):(tableBase=table.length,dylink.tableSize>0&&table.grow(dylink.tableSize));let extImports=WebAssembly.Module.imports(module),importObj={env:{},"GOT.mem":{},"GOT.func":{}};if(extImports.some(imp=>imp.module==="wasi_snapshot_preview1")){let extWasi=descriptor.wasi&&memoryProxy?descriptor.wasi(memoryProxy):void 0;importObj.wasi_snapshot_preview1={...wasiBuiltins,...extWasi,...wasiUserOverrides}}let extExportNames=new Set(WebAssembly.Module.exports(module).filter(e=>e.kind==="function").map(e=>e.name)),unresolvedFuncs=new Set;for(let imp of extImports)if(imp.module==="env"){if(imp.name==="memory"&&imp.kind==="memory")importObj.env.memory=memory;else if(imp.name==="__indirect_function_table"&&imp.kind==="table")importObj.env.__indirect_function_table=table;else if(imp.name==="__memory_base"&&imp.kind==="global")importObj.env.__memory_base=new WebAssembly.Global({value:"i32",mutable:!1},memoryBase);else if(imp.name==="__table_base"&&imp.kind==="global")importObj.env.__table_base=new WebAssembly.Global({value:"i32",mutable:!1},tableBase);else if(imp.name==="__stack_pointer"&&imp.kind==="global")importObj.env.__stack_pointer=stackPointer;else if(imp.kind==="function"){let resolved=mainExports[imp.name];resolved&&typeof resolved=="function"?importObj.env[imp.name]=resolved:(unresolvedFuncs.add(imp.name),importObj.env[imp.name]=()=>{throw new Error(`Extension "${descriptor.name}" called unresolved symbol: env.${imp.name}`)})}else if(imp.kind==="global"){let resolved=mainExports[imp.name];resolved instanceof WebAssembly.Global?importObj.env[imp.name]=resolved:importObj.env[imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},0)}}else if(imp.module==="GOT.mem"&&imp.kind==="global")importObj["GOT.mem"][imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},0);else if(imp.module==="GOT.func"&&imp.kind==="global"){let resolved=mainExports[imp.name];if(resolved&&typeof resolved=="function"){let idx=table.length;table.grow(1),table.set(idx,resolved),importObj["GOT.func"][imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},idx)}else importObj["GOT.func"][imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},0)}let selfResolvable=[...unresolvedFuncs].filter(name=>extExportNames.has(name)),wrappers={};for(let name of selfResolvable){let wrapper={target:null};wrappers[name]=wrapper,importObj.env[name]=(...args)=>{if(!wrapper.target)throw new Error(`Extension "${descriptor.name}" called unresolved symbol during init: env.${name}`);return wrapper.target(...args)}}let instance=await WebAssembly.instantiate(module,importObj),extExports=instance.exports;for(let name of selfResolvable){let selfExport=extExports[name];typeof selfExport=="function"&&(wrappers[name].target=selfExport)}typeof extExports.__wasm_apply_data_relocs=="function"&&extExports.__wasm_apply_data_relocs(),typeof extExports.__wasm_call_ctors=="function"&&extExports.__wasm_call_ctors();let initFn=descriptor.initFn??`qjs_ext_${descriptor.name.replace(/-/g,"_")}_init`,ext={name:descriptor.name,module,instance,dylink,memoryBase,tableBase,initFn};return ext.versions=extractExtensionVersions(ext,memory),ext}function initExtension(ext,mainExports){let initFunc=ext.instance.exports[ext.initFn];if(typeof initFunc!="function")throw new Error(`Extension "${ext.name}" does not export init function "${ext.initFn}"`);let ctxPtr=mainExports.qjs_get_context_ptr(),rtPtr=mainExports.qjs_get_runtime_ptr(),result=initFunc(ctxPtr,rtPtr);if(result!==0)throw new Error(`Extension "${ext.name}" init function returned error code ${result}`)}async function restoreExtensions(descriptors,extensionMeta,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy){let loaded=[];for(let meta of extensionMeta){let descriptor=descriptors.find(d=>d.name===meta.name);if(!descriptor)throw new Error(`Extension "${meta.name}" required by snapshot but not provided`);let ext=await loadExtension(descriptor,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy,{memoryBase:meta.memoryBase,tableBase:meta.tableBase});ext.initFn=meta.initFn,loaded.push(ext)}return loaded}var VERSION="3.6.2";var __addDisposableResource=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose=value[Symbol.asyncDispose]}if(dispose===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose=value[Symbol.dispose],async&&(inner=dispose)}if(typeof dispose!="function")throw new TypeError("Object not disposable.");inner&&(dispose=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose,async})}else async&&env.stack.push({async:!0});return value},__disposeResources=(function(SuppressedError2){return function(env){function fail(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail(e),next()})}else s|=1}catch(e){fail(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error,e.suppressed=suppressed,e}),MAX_STACK_SIZE=512*1024;var SNAPSHOT_MAGIC=1363825491,SNAPSHOT_VERSION=2,SNAPSHOT_HEADER_SIZE=24,QuickJS=class _QuickJS{exports;module;instance;encoder=new TextEncoder;decoder=new TextDecoder;disposed=!1;hostCallbacks=new Map;nextInternalId=1;interruptHandler=null;unhandledRejectionHandler=null;moduleNormalizeHandler=null;moduleLoadHandler=null;timezoneOffsetHandler=null;_global=null;_versions=null;_undefined=null;_null=null;_true=null;_false=null;_ownedHandles=new Set;_activeScope=null;loadedExtensions=[];constructor(module){this.module=module,this.instance=null,this.exports=null}setInstance(instance){this.instance=instance,this.exports=instance.exports}get versions(){if(this.assertNotDisposed(),!this._versions){let result={"quickjs-wasi":VERSION,quickjs:this.readCString(this.exports.qjs_get_quickjs_version())};for(let ext of this.loadedExtensions)ext.versions&&Object.assign(result,ext.versions);this._versions=result}return this._versions}get global(){return this._global||(this._global=new JSValueHandle(this,this.exports.qjs_get_global(),!0)),this._global}get undefined(){return this._undefined||(this._undefined=new JSValueHandle(this,this.exports.qjs_get_undefined(),!0)),this._undefined}get null(){return this._null||(this._null=new JSValueHandle(this,this.exports.qjs_get_null(),!0)),this._null}get true(){return this._true||(this._true=new JSValueHandle(this,this.exports.qjs_get_true(),!0)),this._true}get false(){return this._false||(this._false=new JSValueHandle(this,this.exports.qjs_get_false(),!0)),this._false}static async create(options){let opts=_QuickJS.normalizeOptions(options),module=await _QuickJS.resolveModule(opts.wasm),vm=new _QuickJS(module),{instance,wasiBuiltins,wasiUserOverrides,memoryProxy}=await _QuickJS.instantiate(module,vm,opts.wasi);if(vm.setInstance(instance),vm.exports._initialize(),(opts.intrinsics!==void 0?vm.exports.qjs_init2(opts.intrinsics):vm.exports.qjs_init())!==0)throw new Error("Failed to initialize QuickJS runtime");if(opts.extensions){let mainExports=instance.exports;for(let desc of opts.extensions){let ext=await loadExtension(desc,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy);vm.loadedExtensions.push(ext),initExtension(ext,mainExports)}}return _QuickJS.applyLimits(vm,opts),vm}static async restore(snapshot,options){let opts=_QuickJS.normalizeOptions(options),module=await _QuickJS.resolveModule(opts.wasm),vm=new _QuickJS(module),{instance,wasiBuiltins,wasiUserOverrides,memoryProxy}=await _QuickJS.instantiate(module,vm,opts.wasi);vm.setInstance(instance);let mainExports=instance.exports,exportedMemory=vm.exports.memory,currentPages=exportedMemory.buffer.byteLength/65536,neededPages=Math.ceil(snapshot.memory.byteLength/65536);if(neededPages>currentPages&&exportedMemory.grow(neededPages-currentPages),snapshot.extensions.length>0){let descriptors=opts.extensions??[];vm.loadedExtensions=await restoreExtensions(descriptors,snapshot.extensions,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy)}return new Uint8Array(exportedMemory.buffer).set(snapshot.memory),vm.exports.qjs_set_runtime_and_context(snapshot.runtimePtr,snapshot.contextPtr),vm.exports.__stack_pointer.value=snapshot.stackPointer,_QuickJS.applyLimits(vm,opts),vm}static serializeSnapshot(snapshot){let textEncoder=new TextEncoder,extMetaSize=4,extEncodedNames=[],extEncodedInitFns=[];for(let ext of snapshot.extensions){let nameBytes=textEncoder.encode(ext.name),initFnBytes=textEncoder.encode(ext.initFn);extEncodedNames.push(nameBytes),extEncodedInitFns.push(initFnBytes),extMetaSize+=4+nameBytes.length+4+4+4+initFnBytes.length}let totalSize=SNAPSHOT_HEADER_SIZE+extMetaSize+snapshot.memory.byteLength,buffer=new ArrayBuffer(totalSize),view=new DataView(buffer),bytes=new Uint8Array(buffer);view.setUint32(0,SNAPSHOT_MAGIC,!1),view.setUint8(4,SNAPSHOT_VERSION),view.setUint32(8,snapshot.memory.byteLength,!0),view.setUint32(12,snapshot.stackPointer,!0),view.setUint32(16,snapshot.runtimePtr,!0),view.setUint32(20,snapshot.contextPtr,!0);let offset=SNAPSHOT_HEADER_SIZE;view.setUint32(offset,snapshot.extensions.length,!0),offset+=4;for(let i=0;i<snapshot.extensions.length;i++){let ext=snapshot.extensions[i],nameBytes=extEncodedNames[i],initFnBytes=extEncodedInitFns[i];view.setUint32(offset,nameBytes.length,!0),offset+=4,bytes.set(nameBytes,offset),offset+=nameBytes.length,view.setUint32(offset,ext.memoryBase,!0),offset+=4,view.setUint32(offset,ext.tableBase,!0),offset+=4,view.setUint32(offset,initFnBytes.length,!0),offset+=4,bytes.set(initFnBytes,offset),offset+=initFnBytes.length}return bytes.set(snapshot.memory,offset),bytes}static deserializeSnapshot(data){if(data.length<SNAPSHOT_HEADER_SIZE)throw new Error("Invalid snapshot: too small");let view=new DataView(data.buffer,data.byteOffset,data.byteLength),magic=view.getUint32(0,!1);if(magic!==SNAPSHOT_MAGIC)throw new Error(`Invalid snapshot: bad magic (expected 0x${SNAPSHOT_MAGIC.toString(16)}, got 0x${magic.toString(16)})`);let version=view.getUint8(4);if(version!==SNAPSHOT_VERSION&&version!==1)throw new Error(`Unsupported snapshot version: ${version} (expected ${SNAPSHOT_VERSION})`);let memorySize=view.getUint32(8,!0),stackPointer=view.getUint32(12,!0),runtimePtr=view.getUint32(16,!0),contextPtr=view.getUint32(20,!0),extensions=[],memoryOffset=SNAPSHOT_HEADER_SIZE;if(version>=2){let extCount=view.getUint32(24,!0),offset=28,textDecoder=new TextDecoder;for(let i=0;i<extCount;i++){let nameLen=view.getUint32(offset,!0);offset+=4;let name=textDecoder.decode(data.slice(offset,offset+nameLen));offset+=nameLen;let memBase=view.getUint32(offset,!0);offset+=4;let tblBase=view.getUint32(offset,!0);offset+=4;let initFnLen=view.getUint32(offset,!0);offset+=4;let initFn=textDecoder.decode(data.slice(offset,offset+initFnLen));offset+=initFnLen,extensions.push({name,memoryBase:memBase,tableBase:tblBase,initFn})}memoryOffset=offset}let expectedSize=memoryOffset+memorySize;if(data.length<expectedSize)throw new Error(`Invalid snapshot: expected ${expectedSize} bytes, got ${data.length}`);return{memory:data.slice(memoryOffset,memoryOffset+memorySize),stackPointer,runtimePtr,contextPtr,extensions}}static normalizeOptions(options){if(!options)return{wasm:void 0};if(options instanceof WebAssembly.Module)return{wasm:options};if(typeof options=="object"&&("wasm"in options||"wasi"in options||"memoryLimit"in options||"maxStackSize"in options||"interruptHandler"in options||"onUnhandledRejection"in options||"moduleLoader"in options||"intrinsics"in options||"extensions"in options||"timezoneOffset"in options)){let opts=options;if(opts.maxStackSize!==void 0&&(!Number.isInteger(opts.maxStackSize)||opts.maxStackSize<0||opts.maxStackSize>MAX_STACK_SIZE))throw new RangeError(`maxStackSize must be an integer between 0 and ${MAX_STACK_SIZE}`);return opts}return{wasm:options}}static applyLimits(vm,opts){opts.memoryLimit!==void 0&&vm.exports.qjs_set_memory_limit(opts.memoryLimit),opts.maxStackSize!==void 0&&vm.exports.qjs_set_max_stack_size(opts.maxStackSize),opts.interruptHandler&&(vm.interruptHandler=opts.interruptHandler,vm.exports.qjs_set_interrupt_handler(1)),opts.onUnhandledRejection&&(vm.unhandledRejectionHandler=opts.onUnhandledRejection,vm.exports.qjs_set_promise_rejection_handler(1)),opts.moduleLoader&&(vm.moduleLoadHandler=opts.moduleLoader.load,vm.moduleNormalizeHandler=opts.moduleLoader.normalize??null,vm.exports.qjs_set_module_loader(1));let tz=opts.timezoneOffset;if(typeof tz=="function")vm.timezoneOffsetHandler=timeSecs=>-tz(timeSecs)*60;else if(typeof tz=="number"){let offsetSecs=-tz*60;vm.timezoneOffsetHandler=()=>offsetSecs}else vm.timezoneOffsetHandler=timeSecs=>-new Date(timeSecs*1e3).getTimezoneOffset()*60}static async resolveModule(wasmInput){if(wasmInput instanceof WebAssembly.Module)return wasmInput;if(wasmInput)return WebAssembly.compile(wasmInput);throw new TypeError("QuickJS: `wasm` option is required. Provide WASM bytes or a compiled `WebAssembly.Module`. The binary is shipped at `quickjs-wasi/quickjs.wasm` and can be loaded via your environment's preferred mechanism (e.g. `fetch()`, `node:fs/promises`, or a bundler import like Vite's `?url`).")}static async instantiate(module,vm,wasiOptions){let memory=null,memoryProxy=new Proxy({},{get(_target,prop){return memory[prop]}}),wasiBuiltins=createWasiShim(()=>memory),wasiUserOverrides=wasiOptions?wasiOptions(memoryProxy):void 0,wasiShim={...wasiBuiltins,...wasiUserOverrides},hostCall=(namePtr,nameLen,thisPtr,argc,argvPtr)=>vm.handleHostCall(namePtr,nameLen,thisPtr,argc,argvPtr),hostInterrupt=()=>vm.interruptHandler&&vm.interruptHandler()?1:0,hostPromiseRejection=(promisePtr,reasonPtr,isHandled)=>{if(!vm.unhandledRejectionHandler){vm.exports.qjs_free_value(promisePtr),vm.exports.qjs_free_value(reasonPtr);return}let promise=new JSValueHandle(vm,promisePtr),reason=new JSValueHandle(vm,reasonPtr);try{vm.unhandledRejectionHandler(promise,reason,isHandled!==0)}finally{promise.dispose(),reason.dispose()}},throwIntoContext=err=>{let errHandle=vm.newError(err instanceof Error?err:String(err));vm.exports.qjs_throw(errHandle.ptr),errHandle.dispose()},assertSyncString=(value,callbackName)=>{if(typeof value=="string")return value;let got=value!==null&&typeof value=="object"&&typeof value.then=="function"?"a Promise":`type ${typeof value}`;throw new TypeError(`moduleLoader.${callbackName} must synchronously return a string (got ${got}). Async module loading is not supported. Pre-fetch module sources instead (see the "ES Modules" section of the quickjs-wasi README).`)},hostModuleNormalize=(baseNamePtr,namePtr)=>{if(!vm.moduleNormalizeHandler){let name=vm.readCString(namePtr);return vm.writeString(name).ptr}let baseName=vm.readCString(baseNamePtr),specifier=vm.readCString(namePtr);try{let normalized=assertSyncString(vm.moduleNormalizeHandler(baseName,specifier),"normalize");return vm.writeString(normalized).ptr}catch(err){return throwIntoContext(err),0}},hostModuleLoad=(namePtr,outLenPtr)=>{if(!vm.moduleLoadHandler)return 0;let name=vm.readCString(namePtr);try{let source=assertSyncString(vm.moduleLoadHandler(name),"load"),{ptr,len}=vm.writeString(source);return new Uint32Array(vm.exports.memory.buffer,outLenPtr,1)[0]=len,ptr}catch(err){return throwIntoContext(err),0}},hostGetTimezoneOffset=(hi,lo)=>{let timeSecs=Number(BigInt(hi)<<32n|BigInt(lo>>>0));return vm.timezoneOffsetHandler?vm.timezoneOffsetHandler(timeSecs):0},instance=await WebAssembly.instantiate(module,{env:{host_call:hostCall,host_interrupt:hostInterrupt,host_promise_rejection:hostPromiseRejection,host_module_normalize:hostModuleNormalize,host_module_load:hostModuleLoad,host_get_timezone_offset:hostGetTimezoneOffset},wasi_snapshot_preview1:wasiShim});return memory=instance.exports.memory,{instance,wasiBuiltins,wasiUserOverrides,memoryProxy}}handleHostCall(namePtr,nameLen,thisPtr,argc,argvPtr){let name=this.decoder.decode(new Uint8Array(this.exports.memory.buffer,namePtr,nameLen)),callback=this.hostCallbacks.get(name);if(!callback){let errHandle=this.newError(`Host callback "${name}" is not registered: it was unregistered, its ephemeral function handle was disposed, or it was never re-registered after a snapshot restore.`);return this.exports.qjs_throw(errHandle.ptr),errHandle.dispose(),0}let thisHandle=new JSValueHandle(this,thisPtr,!1,!0),args=[];if(argc>0&&argvPtr!==0){let view=new DataView(this.exports.memory.buffer);for(let i=0;i<argc;i++){let argPtr=view.getUint32(argvPtr+i*4,!0);args.push(new JSValueHandle(this,argPtr,!1,!0))}}try{let result=callback.call(thisHandle,...args);return this.exports.qjs_dup_value(result.ptr)}catch(err){let errHandle=this.newError(err instanceof Error?err:String(err));return this.exports.qjs_throw(errHandle.ptr),errHandle.dispose(),0}}writeString(str){let encoded=encodeWtf8(str),ptr=this.exports.wasm_malloc(encoded.length+1);if(ptr===0)throw new Error("wasm_malloc failed");let mem=new Uint8Array(this.exports.memory.buffer);return mem.set(encoded,ptr),mem[ptr+encoded.length]=0,{ptr,len:encoded.length}}readCString(ptr){let mem=new Uint8Array(this.exports.memory.buffer),end=ptr;for(;mem[end]!==0;)end++;return this.decoder.decode(mem.slice(ptr,end))}throwIfException(result){if(this.exports.qjs_is_exception(result.ptr)!==0){let exc=this.getException();throw result.dispose(),this._ownedHandles.add(exc),new JSException(exc)}return result}evalCode(code,filename="<eval>",flags=0){this.assertNotDisposed();let codeStr=this.writeString(code),fnStr=this.writeString(filename),resultPtr=this.exports.qjs_eval(codeStr.ptr,codeStr.len,fnStr.ptr,flags);return this.exports.wasm_free(codeStr.ptr),this.exports.wasm_free(fnStr.ptr),this.throwIfException(new JSValueHandle(this,resultPtr))}compile(code,filename="<compile>",evalFlags=0,compileFlags=0){this.assertNotDisposed();let codeStr=this.writeString(code),fnStr=this.writeString(filename),outLenPtr=this.exports.wasm_malloc(4),bufPtr=this.exports.qjs_compile(codeStr.ptr,codeStr.len,fnStr.ptr,evalFlags,compileFlags,outLenPtr);if(this.exports.wasm_free(codeStr.ptr),this.exports.wasm_free(fnStr.ptr),bufPtr===0){this.exports.wasm_free(outLenPtr);let exc=this.getException();throw new Error(`Compilation error: ${exc.toString()}`)}let outLen=new Uint32Array(this.exports.memory.buffer,outLenPtr,1)[0];this.exports.wasm_free(outLenPtr);let bytecode=new Uint8Array(this.exports.memory.buffer,bufPtr,outLen).slice();return this.exports.wasm_free(bufPtr),bytecode}evalBytecode(bytecode){this.assertNotDisposed();let bufPtr=this.exports.wasm_malloc(bytecode.byteLength);new Uint8Array(this.exports.memory.buffer,bufPtr,bytecode.byteLength).set(bytecode);let resultPtr=this.exports.qjs_eval_bytecode(bufPtr,bytecode.byteLength);return this.exports.wasm_free(bufPtr),this.throwIfException(new JSValueHandle(this,resultPtr))}executePendingJobs(){this.assertNotDisposed();let count=0;for(;this.exports.qjs_is_job_pending();){if(this.exports.qjs_execute_pending_job()<0){let exc=this.getException();throw new Error(`Job execution error: ${exc.toString()}`)}count++}return count}runGC(){this.assertNotDisposed(),this.exports.qjs_run_gc()}get gcThreshold(){return this.assertNotDisposed(),this.exports.qjs_get_gc_threshold()}set gcThreshold(threshold){this.assertNotDisposed(),this.exports.qjs_set_gc_threshold(threshold)}getMemoryUsage(){this.assertNotDisposed();let bufPtr=this.exports.wasm_malloc(208);this.exports.qjs_compute_memory_usage(bufPtr);let view=new BigInt64Array(this.exports.memory.buffer,bufPtr,26),result={mallocSize:Number(view[0]),mallocLimit:Number(view[1]),memoryUsedSize:Number(view[2]),mallocCount:Number(view[3]),memoryUsedCount:Number(view[4]),atomCount:Number(view[5]),atomSize:Number(view[6]),strCount:Number(view[7]),strSize:Number(view[8]),objCount:Number(view[9]),objSize:Number(view[10]),propCount:Number(view[11]),propSize:Number(view[12]),shapeCount:Number(view[13]),shapeSize:Number(view[14]),jsFuncCount:Number(view[15]),jsFuncSize:Number(view[16]),jsFuncCodeSize:Number(view[17]),jsFuncPc2lineCount:Number(view[18]),jsFuncPc2lineSize:Number(view[19]),cFuncCount:Number(view[20]),arrayCount:Number(view[21]),fastArrayCount:Number(view[22]),fastArrayElements:Number(view[23]),binaryObjectCount:Number(view[24]),binaryObjectSize:Number(view[25])};return this.exports.wasm_free(bufPtr),result}getGlobal(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_global())}newString(str){this.assertNotDisposed();let{ptr,len}=this.writeString(str),resultPtr=this.exports.qjs_new_string(ptr,len);return this.exports.wasm_free(ptr),new JSValueHandle(this,resultPtr)}newNumber(num){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_new_number(num))}newBigInt(val){this.assertNotDisposed();let lo=Number(val&0xffffffffn),hi=Number(val>>32n&0xffffffffn);return new JSValueHandle(this,this.exports.qjs_new_big_int64(lo,hi))}newObject(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_new_object())}newArray(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_new_array())}newSymbolFor(description){this.assertNotDisposed();let{ptr,len}=this.writeString(description),result=new JSValueHandle(this,this.exports.qjs_new_symbol(ptr,len,1));return this.exports.wasm_free(ptr),result}newArrayBuffer(data){this.assertNotDisposed();let bytes=data instanceof ArrayBuffer?new Uint8Array(data):data,ptr=this.exports.wasm_malloc(bytes.length);if(ptr===0)throw new Error("wasm_malloc failed");new Uint8Array(this.exports.memory.buffer).set(bytes,ptr);let result=new JSValueHandle(this,this.exports.qjs_new_array_buffer(ptr,bytes.length));return this.exports.wasm_free(ptr),result}newUint8Array(data){this.assertNotDisposed();let ptr=this.exports.wasm_malloc(data.length);if(ptr===0)throw new Error("wasm_malloc failed");new Uint8Array(this.exports.memory.buffer).set(data,ptr);let result=new JSValueHandle(this,this.exports.qjs_new_uint8_array(ptr,data.length));return this.exports.wasm_free(ptr),result}getUndefined(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_undefined())}getNull(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_null())}getTrue(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_true())}getFalse(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_false())}newFunction(name,fn){if(this.assertNotDisposed(),this.hostCallbacks.has(name))throw new Error(`Host callback with name "${name}" is already registered`);this.hostCallbacks.set(name,fn);let{ptr:namePtr,len:nameLen}=this.writeString(name),resultPtr=this.exports.qjs_new_host_function(namePtr,nameLen,0);return this.exports.wasm_free(namePtr),new JSValueHandle(this,resultPtr)}withScope(fn){this.assertNotDisposed();let enclosing=this._activeScope,tracked=new Set;this._activeScope=tracked;let scope={escape:handle=>(tracked.delete(handle),enclosing?.add(handle),handle)};try{return fn(scope)}finally{this._activeScope=enclosing;for(let handle of tracked)handle.dispose()}}exportHandle(handle){if(this.assertNotDisposed(),handle.vm!==this)throw new Error("exportHandle: handle belongs to a different VM");if(handle.disposed)throw new Error("exportHandle: handle is disposed");if(handle._isBorrowed)throw new Error("exportHandle: cannot export a borrowed handle (host-callback this/argument); its box is freed when the callback returns. dup() it and export the duplicate.");return handle.ptr}importHandle(token){if(this.assertNotDisposed(),!Number.isInteger(token)||token<=0||token>=this.exports.memory.buffer.byteLength)throw new Error(`importHandle: invalid token ${token}`);return new JSValueHandle(this,this.exports.qjs_dup_value(token))}newEphemeralFunction(fn){this.assertNotDisposed();let name=`__ephemeral:${this.nextInternalId++}`;this.hostCallbacks.set(name,fn);let{ptr:namePtr,len:nameLen}=this.writeString(name),resultPtr=this.exports.qjs_new_host_function(namePtr,nameLen,0);this.exports.wasm_free(namePtr);let handle=new JSValueHandle(this,resultPtr);return handle._onDispose=()=>{this.hostCallbacks.delete(name)},handle}unregisterHostCallback(name){return this.hostCallbacks.delete(name)}newInternalFunction(name,fn){this.hostCallbacks.set(name,fn);let{ptr:namePtr,len:nameLen}=this.writeString(name),resultPtr=this.exports.qjs_new_host_function(namePtr,nameLen,0);return this.exports.wasm_free(namePtr),new JSValueHandle(this,resultPtr)}newPromise(){this.assertNotDisposed();let resolveOutPtr=this.exports.wasm_malloc(4),rejectOutPtr=this.exports.wasm_malloc(4),promisePtr=this.exports.qjs_new_promise(resolveOutPtr,rejectOutPtr),view=new DataView(this.exports.memory.buffer),resolvePtr=view.getUint32(resolveOutPtr,!0),rejectPtr=view.getUint32(rejectOutPtr,!0);this.exports.wasm_free(resolveOutPtr),this.exports.wasm_free(rejectOutPtr);let promiseHandle=new JSValueHandle(this,promisePtr),resolveHandle=new JSValueHandle(this,resolvePtr),rejectHandle=new JSValueHandle(this,rejectPtr),vm=this;vm._ownedHandles.add(resolveHandle),vm._ownedHandles.add(rejectHandle);let _settled=null;return{handle:promiseHandle,get settled(){if(!_settled){let settledResolve;_settled=new Promise(res=>{settledResolve=res});let settleName=`__settle:${vm.nextInternalId++}`,onSettleFn=vm.newInternalFunction(settleName,()=>(settledResolve(),vm.hostCallbacks.delete(settleName),vm.undefined));vm.promiseThenRaw(promiseHandle,onSettleFn,onSettleFn).dispose(),onSettleFn.dispose()}return _settled},resolve(value){vm.callFunctionRaw(resolveHandle,vm.undefined,value).dispose(),vm._ownedHandles.delete(resolveHandle),resolveHandle.dispose()},reject(value){vm.callFunctionRaw(rejectHandle,vm.undefined,value).dispose(),vm._ownedHandles.delete(rejectHandle),rejectHandle.dispose()}}}resolvePromise(promiseHandle){if(this.assertNotDisposed(),!this.exports.qjs_is_promise(promiseHandle.ptr))return Promise.resolve({value:promiseHandle.dup()});let state=this.exports.qjs_promise_state(promiseHandle.ptr);return state===1?Promise.resolve({value:new JSValueHandle(this,this.exports.qjs_promise_result(promiseHandle.ptr))}):state===2?Promise.resolve({error:new JSValueHandle(this,this.exports.qjs_promise_result(promiseHandle.ptr))}):new Promise(hostResolve=>{let id=this.nextInternalId++,fulfilledName=`__onFulfilled:${id}`,rejectedName=`__onRejected:${id}`,onFulfilled=this.newInternalFunction(fulfilledName,(...args)=>{let val=args[0]?.dup()??this.undefined;return this.hostCallbacks.delete(fulfilledName),this.hostCallbacks.delete(rejectedName),hostResolve({value:val}),this.undefined}),onRejected=this.newInternalFunction(rejectedName,(...args)=>{let val=args[0]?.dup()??this.undefined;return this.hostCallbacks.delete(fulfilledName),this.hostCallbacks.delete(rejectedName),hostResolve({error:val}),this.undefined});this.promiseThenRaw(promiseHandle,onFulfilled,onRejected).dispose(),onFulfilled.dispose(),onRejected.dispose()})}promiseThenRaw(promise,onFulfilled,onRejected){return new JSValueHandle(this,this.exports.qjs_promise_then(promise.ptr,onFulfilled.ptr,onRejected.ptr))}markPromiseHandled(promise){this.assertNotDisposed(),this.exports.qjs_promise_mark_as_handled(promise.ptr)}callFunction(func,thisVal,...args){return this.throwIfException(this.callFunctionRaw(func,thisVal,...args))}construct(ctor,...args){this.assertNotDisposed();let argc=args.length,argvPtr=0;if(argc>0){argvPtr=this.exports.wasm_malloc(argc*4);let view=new DataView(this.exports.memory.buffer);for(let i=0;i<argc;i++)view.setUint32(argvPtr+i*4,args[i].ptr,!0)}let resultPtr=this.exports.qjs_call_constructor(ctor.ptr,argc,argvPtr);return argvPtr&&this.exports.wasm_free(argvPtr),this.throwIfException(new JSValueHandle(this,resultPtr))}callFunctionRaw(func,thisVal,...args){this.assertNotDisposed();let argc=args.length,argvPtr=0;if(argc>0){argvPtr=this.exports.wasm_malloc(argc*4);let view=new DataView(this.exports.memory.buffer);for(let i=0;i<argc;i++)view.setUint32(argvPtr+i*4,args[i].ptr,!0)}let resultPtr=this.exports.qjs_call(func.ptr,thisVal.ptr,argc,argvPtr);return argvPtr&&this.exports.wasm_free(argvPtr),new JSValueHandle(this,resultPtr)}setProp(obj,key,value){if(this.assertNotDisposed(),typeof key=="string"){let{ptr:namePtr}=this.writeString(key);this.exports.qjs_set_prop_string(obj.ptr,namePtr,value.ptr),this.exports.wasm_free(namePtr)}else this.exports.qjs_set_prop_value(obj.ptr,key.ptr,value.ptr)}defineProp(obj,key,value,descriptor){this.assertNotDisposed();let flags=0;if(descriptor?.configurable&&(flags|=1),descriptor?.writable&&(flags|=2),descriptor?.enumerable&&(flags|=4),typeof key=="string"){let{ptr:namePtr}=this.writeString(key);this.exports.qjs_define_prop_string(obj.ptr,namePtr,value.ptr,flags),this.exports.wasm_free(namePtr)}else this.exports.qjs_define_prop_value(obj.ptr,key.ptr,value.ptr,flags)}getProp(obj,key){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_prop_value(obj.ptr,key.ptr))}getException(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_exception())}newError(messageOrError){this.assertNotDisposed();let errPtr=this.exports.qjs_new_error(),errHandle=new JSValueHandle(this,errPtr);if(typeof messageOrError=="string"){let msgHandle=this.newString(messageOrError);errHandle.setProp("message",msgHandle),msgHandle.dispose()}else{let msgHandle=this.newString(messageOrError.message);if(errHandle.setProp("message",msgHandle),msgHandle.dispose(),messageOrError.name){let nameHandle=this.newString(messageOrError.name);errHandle.setProp("name",nameHandle),nameHandle.dispose()}if(messageOrError.stack){let stackHandle=this.newString(messageOrError.stack);errHandle.setProp("stack",stackHandle),stackHandle.dispose()}}return errHandle}typeof(handle){this.assertNotDisposed();let e=this.exports;return e.qjs_is_undefined(handle.ptr)?"undefined":e.qjs_is_null(handle.ptr)?"object":e.qjs_is_bool(handle.ptr)?"boolean":e.qjs_is_number(handle.ptr)?"number":e.qjs_is_big_int(handle.ptr)?"bigint":e.qjs_is_string(handle.ptr)?"string":e.qjs_is_symbol(handle.ptr)?"symbol":e.qjs_is_function(handle.ptr)?"function":e.qjs_is_object(handle.ptr)?"object":"unknown"}dump(handle){return this.assertNotDisposed(),this._dump(handle,new Map)}_dump(handle,visited){let e=this.exports;if(!e.qjs_is_undefined(handle.ptr)){if(e.qjs_is_null(handle.ptr))return null;if(e.qjs_is_bool(handle.ptr))return e.qjs_get_bool(handle.ptr)!==0;if(e.qjs_is_number(handle.ptr))return e.qjs_get_float64(handle.ptr);if(e.qjs_is_string(handle.ptr))return handle.toString();if(e.qjs_is_big_int(handle.ptr))return handle.toBigInt();if(e.qjs_is_symbol(handle.ptr)){let descOutPtr=e.wasm_malloc(4),kind=e.qjs_get_symbol_description(handle.ptr,descOutPtr),descPtr=new DataView(e.memory.buffer).getUint32(descOutPtr,!0);if(e.wasm_free(descOutPtr),kind===1){let descHandle=new JSValueHandle(this,descPtr),description=descHandle.toString();return descHandle.dispose(),Symbol.for(description)}else if(kind===2){new JSValueHandle(this,descPtr).dispose();return}return}if(e.qjs_is_array_buffer(handle.ptr))return handle.toArrayBuffer();if(e.qjs_is_exception(handle.ptr)){let exc=this.getException(),msg=exc.toString();return exc.dispose(),new Error(msg)}if(!e.qjs_is_function(handle.ptr)){if(e.qjs_is_object(handle.ptr)){let objPtr=e.qjs_get_value_ptr(handle.ptr);if(objPtr){let existing=visited.get(objPtr);if(existing!==void 0)return existing}}if(e.qjs_is_object(handle.ptr)){let byteOffsetPtr=e.wasm_malloc(4),byteLengthPtr=e.wasm_malloc(4),bytesPerElemPtr=e.wasm_malloc(4),abPtr=e.qjs_get_typed_array_buffer(handle.ptr,byteOffsetPtr,byteLengthPtr,bytesPerElemPtr),abHandle=new JSValueHandle(this,abPtr);if(e.qjs_is_exception(abHandle.ptr)===0){let view=new DataView(e.memory.buffer),byteOffset=view.getUint32(byteOffsetPtr,!0),byteLength=view.getUint32(byteLengthPtr,!0),bytesPerElement=view.getUint32(bytesPerElemPtr,!0);e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr);let abLenPtr=e.wasm_malloc(4),abDataPtr=e.qjs_get_array_buffer(abHandle.ptr,abLenPtr);if(e.wasm_free(abLenPtr),abHandle.dispose(),abDataPtr!==0){let rawBytes=new Uint8Array(e.memory.buffer,abDataPtr+byteOffset,byteLength).slice();switch(bytesPerElement){case 1:return rawBytes;case 2:return new Uint16Array(rawBytes.buffer);case 4:return new Uint32Array(rawBytes.buffer);case 8:return new Float64Array(rawBytes.buffer);default:return rawBytes}}}else abHandle.dispose(),e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr)}if(e.qjs_is_array(handle.ptr)){let lenHandle=handle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let arr=[],objPtr=e.qjs_get_value_ptr(handle.ptr);objPtr&&visited.set(objPtr,arr);for(let i=0;i<len;i++){let elemPtr=e.qjs_get_prop_uint32(handle.ptr,i),elemHandle=new JSValueHandle(this,elemPtr);arr.push(this._dump(elemHandle,visited)),elemHandle.dispose()}return arr}if(e.qjs_is_error(handle.ptr)){let nameHandle=handle.getProp("name"),msgHandle=handle.getProp("message"),stackHandle=handle.getProp("stack"),name=nameHandle.isUndefined?"Error":nameHandle.toString(),message=msgHandle.isUndefined?"":msgHandle.toString(),stack=stackHandle.isUndefined?void 0:stackHandle.toString();nameHandle.dispose(),msgHandle.dispose(),stackHandle.dispose();let err=new Error(message);return err.name=name,stack!==void 0&&(err.stack=stack),err}if(e.qjs_is_object(handle.ptr)){let keysPtr=e.qjs_get_own_property_names(handle.ptr),keysHandle=new JSValueHandle(this,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),{};let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let obj={},objPtr=e.qjs_get_value_ptr(handle.ptr);objPtr&&visited.set(objPtr,obj);for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new JSValueHandle(this,keyPtr),key=keyHandle.toString();keyHandle.dispose();let valHandle=handle.getProp(key);obj[key]=this._dump(valHandle,visited),valHandle.dispose()}return keysHandle.dispose(),obj}}}}hostToHandle(value){if(this.assertNotDisposed(),value===void 0)return this.undefined;if(value===null)return this.null;if(value===!0)return this.true;if(value===!1)return this.false;if(typeof value=="number")return this.newNumber(value);if(typeof value=="string")return this.newString(value);if(typeof value=="bigint")return this.newBigInt(value);if(typeof value=="symbol"){let key=Symbol.keyFor(value);if(key!==void 0)return this.newSymbolFor(key);throw new Error("Cannot convert local symbol to QuickJS handle. Use Symbol.for() for cross-boundary symbols.")}if(value instanceof Promise){let deferred=this.newPromise();return value.then(r=>{deferred.resolve(this.hostToHandle(r)),this.executePendingJobs()},err=>{deferred.reject(this.hostToHandle(err)),this.executePendingJobs()}),deferred.handle}if(value instanceof Error)return this.newError(value);if(value instanceof ArrayBuffer)return this.newArrayBuffer(value);if(value instanceof Uint8Array)return this.newUint8Array(value);if(ArrayBuffer.isView(value))return this.newArrayBuffer(new Uint8Array(value.buffer,value.byteOffset,value.byteLength));if(Array.isArray(value)){let arr=this.newArray();for(let i=0;i<value.length;i++){let elemHandle=this.hostToHandle(value[i]);this.exports.qjs_set_prop_uint32(arr.ptr,i,elemHandle.ptr),elemHandle.dispose()}return arr}if(typeof value=="object"&&value!==null){let obj=this.newObject();for(let[key,val]of Object.entries(value)){let valHandle=this.hostToHandle(val);obj.setProp(key,valHandle),valHandle.dispose()}return obj}return this.undefined}snapshot(){return this.assertNotDisposed(),{memory:new Uint8Array(this.exports.memory.buffer).slice(),stackPointer:this.exports.__stack_pointer.value,runtimePtr:this.exports.qjs_get_runtime_ptr(),contextPtr:this.exports.qjs_get_context_ptr(),extensions:this.loadedExtensions.map(ext=>({name:ext.name,memoryBase:ext.memoryBase,tableBase:ext.tableBase,initFn:ext.initFn}))}}registerHostCallback(name,fn){this.hostCallbacks.set(name,fn)}dispose(){this.disposed||(this.disposed=!0,this._global=null,this._undefined=null,this._null=null,this._true=null,this._false=null,this._ownedHandles.clear(),this.hostCallbacks.clear(),this._activeScope=null,this.exports=null,this.instance=null,this.module=null)}[Symbol.dispose](){this.dispose()}assertNotDisposed(){if(this.disposed)throw new Error("QuickJS instance has been disposed")}_getExports(){return this.exports}_getMemory(){return this.exports.memory}_writeString(str){return this.writeString(str)}_readCString(ptr){return this.readCString(ptr)}};function stringKeyNeedsValuePath(key){return key.includes("\0")||LONE_SURROGATE_RE.test(key)}var wtf8Decoder=new TextDecoder,wtf8Encoder=new TextEncoder,LONE_SURROGATE_RE=/(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF]))|(?:(?<![\uD800-\uDBFF])[\uDC00-\uDFFF])/;function encodeWtf8(str){if(!LONE_SURROGATE_RE.test(str))return wtf8Encoder.encode(str);let bytes=[];for(let i=0;i<str.length;i++){let code=str.charCodeAt(i);if(code<128)bytes.push(code);else if(code<2048)bytes.push(192|code>>6,128|code&63);else if(code>=55296&&code<=56319&&i+1<str.length){let next=str.charCodeAt(i+1);if(next>=56320&&next<=57343){let cp=65536+(code-55296<<10)+(next-56320);bytes.push(240|cp>>18,128|cp>>12&63,128|cp>>6&63,128|cp&63),i++;continue}bytes.push(224|code>>12,128|code>>6&63,128|code&63)}else bytes.push(224|code>>12,128|code>>6&63,128|code&63)}return new Uint8Array(bytes)}function decodeWtf8(bytes){let hasSurrogateSequence=!1;for(let i2=0;i2<bytes.length-1;i2++)if(bytes[i2]===237&&bytes[i2+1]>=160&&bytes[i2+1]<=191){hasSurrogateSequence=!0;break}if(!hasSurrogateSequence)return wtf8Decoder.decode(bytes);let out="",i=0;for(;i<bytes.length;){let b0=bytes[i];if(b0<128)out+=String.fromCharCode(b0),i+=1;else if(b0<224)out+=String.fromCharCode((b0&31)<<6|bytes[i+1]&63),i+=2;else if(b0<240)out+=String.fromCharCode((b0&15)<<12|(bytes[i+1]&63)<<6|bytes[i+2]&63),i+=3;else{let cp=(b0&7)<<18|(bytes[i+1]&63)<<12|(bytes[i+2]&63)<<6|bytes[i+3]&63;out+=String.fromCodePoint(cp),i+=4}}return out}var JSException=class extends Error{handle;#name;#message;#stack;constructor(handle){let env_1={stack:[],error:void 0,hasError:!1};try{super(),this.handle=handle,delete this.stack;let msgHandle=__addDisposableResource(env_1,handle.getProp("message"),!1);this.#name=handle.getProp("name").consume(h=>h.isUndefined?"Error":h.toString()),this.#message=msgHandle.isUndefined?handle.toString():msgHandle.toString(),this.#stack=handle.getProp("stack").consume(h=>h.isUndefined?void 0:h.toString())}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources(env_1)}}get name(){return this.#name}set name(v){this.#name=v}get message(){return this.#message}set message(v){this.#message=v}get stack(){return this.#stack}set stack(v){this.#stack=v}dispose(){this.handle.dispose()}[Symbol.dispose](){this.handle.dispose()}},JSValueHandle=class _JSValueHandle{vm;ptr;disposed_=!1;singleton;borrowed;_onDispose;constructor(vm,ptr,singleton=!1,borrowed=!1){this.vm=vm,this.ptr=ptr,this.singleton=singleton,this.borrowed=borrowed,!singleton&&!borrowed&&vm._activeScope?.add(this)}get _isBorrowed(){return this.borrowed}get disposed(){return this.disposed_}get isUndefined(){return this.vm._getExports().qjs_is_undefined(this.ptr)!==0}get isNull(){return this.vm._getExports().qjs_is_null(this.ptr)!==0}get isBool(){return this.vm._getExports().qjs_is_bool(this.ptr)!==0}get isNumber(){return this.vm._getExports().qjs_is_number(this.ptr)!==0}get isString(){return this.vm._getExports().qjs_is_string(this.ptr)!==0}get isSymbol(){return this.vm._getExports().qjs_is_symbol(this.ptr)!==0}get isBigInt(){return this.vm._getExports().qjs_is_big_int(this.ptr)!==0}get isObject(){return this.vm._getExports().qjs_is_object(this.ptr)!==0}get isArray(){return this.vm._getExports().qjs_is_array(this.ptr)!==0}get isFunction(){return this.vm._getExports().qjs_is_function(this.ptr)!==0}get isError(){return this.vm._getExports().qjs_is_error(this.ptr)!==0}get isPromise(){return this.vm._getExports().qjs_is_promise(this.ptr)!==0}get isArrayBuffer(){return this.vm._getExports().qjs_is_array_buffer(this.ptr)!==0}get isProxy(){return this.vm._getExports().qjs_is_proxy(this.ptr)!==0}get isMap(){return this.vm._getExports().qjs_is_map(this.ptr)!==0}get isSet(){return this.vm._getExports().qjs_is_set(this.ptr)!==0}get isDate(){return this.vm._getExports().qjs_is_date(this.ptr)!==0}get isRegExp(){return this.vm._getExports().qjs_is_regexp(this.ptr)!==0}get isWeakRef(){return this.vm._getExports().qjs_is_weak_ref(this.ptr)!==0}get isWeakMap(){return this.vm._getExports().qjs_is_weak_map(this.ptr)!==0}get isWeakSet(){return this.vm._getExports().qjs_is_weak_set(this.ptr)!==0}get isDataView(){return this.vm._getExports().qjs_is_data_view(this.ptr)!==0}get identity(){return this.vm._getExports().qjs_get_value_ptr(this.ptr)}toBoolean(){return this.vm._getExports().qjs_get_bool(this.ptr)!==0}get classId(){return this.vm._getExports().qjs_get_class_id(this.ptr)}get className(){let h=new _JSValueHandle(this.vm,this.vm._getExports().qjs_get_class_name(this.ptr));if(this.vm._getExports().qjs_is_exception(h.ptr)!==0)throw h.dispose(),new JSException(this.vm.getException());try{return h.isUndefined?void 0:h.toString()}finally{h.dispose()}}get promiseState(){return this.vm._getExports().qjs_promise_state(this.ptr)}get typeof(){return this.vm.typeof(this)}get length(){let h=this.getProp("length"),n=h.toNumber();return h.dispose(),n}get constructorName(){let ctor=this.getProp("constructor");if(ctor.isUndefined||ctor.isNull){ctor.dispose();return}let name=ctor.getProp("name");if(ctor.dispose(),name.isUndefined||name.isNull){name.dispose();return}let result=name.toString();return name.dispose(),result}keys(){let e=this.vm._getExports(),keysPtr=e.qjs_get_own_property_names(this.ptr),keysHandle=new _JSValueHandle(this.vm,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),[];let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let result=[];for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new _JSValueHandle(this.vm,keyPtr);result.push(keyHandle.toString()),keyHandle.dispose()}return keysHandle.dispose(),result}getOwnPropertyNames(){let e=this.vm._getExports(),keysPtr=e.qjs_get_own_property_names_all(this.ptr),keysHandle=new _JSValueHandle(this.vm,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),[];let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let result=[];for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new _JSValueHandle(this.vm,keyPtr);result.push(keyHandle.toString()),keyHandle.dispose()}return keysHandle.dispose(),result}getOwnPropertyKeys(){let e=this.vm._getExports(),keysPtr=e.qjs_get_own_property_keys(this.ptr),keysHandle=new _JSValueHandle(this.vm,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),[];let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let result=[];for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new _JSValueHandle(this.vm,keyPtr);keyHandle.isSymbol?result.push(keyHandle):(result.push(keyHandle.toString()),keyHandle.dispose())}return keysHandle.dispose(),result}getOwnPropertyDescriptor(key){let env_2={stack:[],error:void 0,hasError:!1};try{let e=this.vm._getExports(),keyHandle,keyPtr;typeof key=="string"?(keyHandle=this.vm.newString(key),keyPtr=keyHandle.ptr):keyPtr=key.ptr;let descPtr=e.qjs_get_own_property_descriptor(this.ptr,keyPtr);if(keyHandle?.dispose(),descPtr===0)return;let descHandle=__addDisposableResource(env_2,new _JSValueHandle(this.vm,descPtr),!1);if(e.qjs_is_exception(descHandle.ptr)!==0)throw new JSException(this.vm.getException());let enumerable=descHandle.getProp("enumerable").consume(h=>e.qjs_get_bool(h.ptr)!==0),configurable=descHandle.getProp("configurable").consume(h=>e.qjs_get_bool(h.ptr)!==0);return descHandle.hasOwnProperty("value")?{value:descHandle.getProp("value"),writable:descHandle.getProp("writable").consume(h=>e.qjs_get_bool(h.ptr)!==0),enumerable,configurable}:{get:descHandle.getProp("get"),set:descHandle.getProp("set"),enumerable,configurable}}catch(e_2){env_2.error=e_2,env_2.hasError=!0}finally{__disposeResources(env_2)}}hasOwnProperty(name){if(stringKeyNeedsValuePath(name)){let env_3={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_3,this.vm.newString(name),!1);return this.vm._getExports().qjs_has_own_property_value(this.ptr,keyHandle.ptr)===1}catch(e_3){env_3.error=e_3,env_3.hasError=!0}finally{__disposeResources(env_3)}}let{ptr:namePtr}=this.vm._writeString(name),result=this.vm._getExports().qjs_has_own_property(this.ptr,namePtr);return this.vm._getExports().wasm_free(namePtr),result===1}propertyIsEnumerable(name){if(stringKeyNeedsValuePath(name)){let env_4={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_4,this.vm.newString(name),!1);return this.vm._getExports().qjs_property_is_enumerable_value(this.ptr,keyHandle.ptr)===1}catch(e_4){env_4.error=e_4,env_4.hasError=!0}finally{__disposeResources(env_4)}}let{ptr:namePtr}=this.vm._writeString(name),result=this.vm._getExports().qjs_property_is_enumerable(this.ptr,namePtr);return this.vm._getExports().wasm_free(namePtr),result===1}getPrototypeOf(){let protoPtr=this.vm._getExports().qjs_get_prototype_of(this.ptr);return new _JSValueHandle(this.vm,protoPtr)}getProxyTarget(){let ptr=this.vm._getExports().qjs_get_proxy_target(this.ptr),handle=new _JSValueHandle(this.vm,ptr);if(this.vm._getExports().qjs_is_exception(handle.ptr)!==0)throw handle.dispose(),new JSException(this.vm.getException());return handle}getProxyHandler(){let ptr=this.vm._getExports().qjs_get_proxy_handler(this.ptr),handle=new _JSValueHandle(this.vm,ptr);if(this.vm._getExports().qjs_is_exception(handle.ptr)!==0)throw handle.dispose(),new JSException(this.vm.getException());return handle}getProp(name){if(stringKeyNeedsValuePath(name)){let env_5={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_5,this.vm.newString(name),!1);return this.vm.getProp(this,keyHandle)}catch(e_5){env_5.error=e_5,env_5.hasError=!0}finally{__disposeResources(env_5)}}let{ptr:namePtr}=this.vm._writeString(name),resultPtr=this.vm._getExports().qjs_get_prop_string(this.ptr,namePtr);return this.vm._getExports().wasm_free(namePtr),new _JSValueHandle(this.vm,resultPtr)}setProp(name,value){if(stringKeyNeedsValuePath(name)){let env_6={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_6,this.vm.newString(name),!1);this.vm.setProp(this,keyHandle,value);return}catch(e_6){env_6.error=e_6,env_6.hasError=!0}finally{__disposeResources(env_6)}}let{ptr:namePtr}=this.vm._writeString(name);this.vm._getExports().qjs_set_prop_string(this.ptr,namePtr,value.ptr),this.vm._getExports().wasm_free(namePtr)}defineProp(key,value,descriptor){let flags=0;if(descriptor?.configurable&&(flags|=1),descriptor?.writable&&(flags|=2),descriptor?.enumerable&&(flags|=4),typeof key=="string"){if(stringKeyNeedsValuePath(key)){let env_7={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_7,this.vm.newString(key),!1);this.vm._getExports().qjs_define_prop_value(this.ptr,keyHandle.ptr,value.ptr,flags);return}catch(e_7){env_7.error=e_7,env_7.hasError=!0}finally{__disposeResources(env_7)}}let{ptr:namePtr}=this.vm._writeString(key);this.vm._getExports().qjs_define_prop_string(this.ptr,namePtr,value.ptr,flags),this.vm._getExports().wasm_free(namePtr)}else this.vm._getExports().qjs_define_prop_value(this.ptr,key.ptr,value.ptr,flags)}toNumber(){return this.vm._getExports().qjs_get_float64(this.ptr)}toBigInt(){let e=this.vm._getExports(),loPtr=e.wasm_malloc(4),hiPtr=e.wasm_malloc(4);if(e.qjs_get_big_int64(this.ptr,loPtr,hiPtr)!==0)throw e.wasm_free(loPtr),e.wasm_free(hiPtr),new Error("Failed to convert value to BigInt");let view=new DataView(e.memory.buffer),lo=view.getUint32(loPtr,!0),hi=view.getInt32(hiPtr,!0);return e.wasm_free(loPtr),e.wasm_free(hiPtr),BigInt(hi)<<32n|BigInt(lo)}toArrayBuffer(){let e=this.vm._getExports(),lenOutPtr=e.wasm_malloc(4);if(e.qjs_is_array_buffer(this.ptr)){let dataPtr=e.qjs_get_array_buffer(this.ptr,lenOutPtr);if(dataPtr===0)throw e.wasm_free(lenOutPtr),new Error("Failed to get ArrayBuffer data");let len=new DataView(e.memory.buffer).getUint32(lenOutPtr,!0);return e.wasm_free(lenOutPtr),new Uint8Array(e.memory.buffer,dataPtr,len).slice().buffer}e.wasm_free(lenOutPtr);let byteOffsetPtr=e.wasm_malloc(4),byteLengthPtr=e.wasm_malloc(4),bytesPerElemPtr=e.wasm_malloc(4),abPtr=e.qjs_get_typed_array_buffer(this.ptr,byteOffsetPtr,byteLengthPtr,bytesPerElemPtr),abHandle=new _JSValueHandle(this.vm,abPtr);if(this.vm._getExports().qjs_is_exception(abHandle.ptr)!==0)throw abHandle.dispose(),e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr),new Error("Value is not an ArrayBuffer or typed array");let view=new DataView(e.memory.buffer),byteOffset=view.getUint32(byteOffsetPtr,!0),byteLength=view.getUint32(byteLengthPtr,!0);e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr);let abLenPtr=e.wasm_malloc(4),abDataPtr=e.qjs_get_array_buffer(abHandle.ptr,abLenPtr);if(e.wasm_free(abLenPtr),abHandle.dispose(),abDataPtr===0)throw new Error("Failed to get ArrayBuffer data from typed array");return new Uint8Array(e.memory.buffer,abDataPtr+byteOffset,byteLength).slice().buffer}toUint8Array(){return new Uint8Array(this.toArrayBuffer())}toString(){let e=this.vm._getExports(),lenPtr=e.wasm_malloc(4);if(lenPtr===0)throw new Error("wasm_malloc failed");try{let cstrPtr=e.qjs_get_string_len(this.ptr,lenPtr);if(cstrPtr===0)return"<null>";let len=new DataView(e.memory.buffer).getUint32(lenPtr,!0),bytes=new Uint8Array(e.memory.buffer,cstrPtr,len),str=decodeWtf8(bytes);return e.qjs_free_cstring(cstrPtr),str}finally{e.wasm_free(lenPtr)}}consume(fn){try{return fn(this)}finally{this.dispose()}}dup(){return new _JSValueHandle(this.vm,this.vm._getExports().qjs_dup_value(this.ptr))}dispose(){if(!(this.singleton||this.borrowed)&&!this.disposed_){this.disposed_=!0,this._onDispose?.(),this._onDispose=void 0;let exports=this.vm._getExports();exports&&exports.qjs_free_value(this.ptr)}}[Symbol.dispose](){this.dispose()}};var IMAGE_HELPER_EXPECTS="image expects a non-empty image URL string, an object with image_url, or a raw MCP image block",PRELUDE_SOURCE=`(function (bridge, toolsJson, globalsJson, storeJson) {
1
+ import{parentPort,workerData}from"node:worker_threads";function isHostToWorkerMessage(value){return typeof value=="object"&&value!==null&&value.type==="result"}function createWasiShim(memoryAccessor){return{clock_time_get(clockId,_precision,resultPtr){let mem=memoryAccessor(),view=new DataView(mem.buffer);if(clockId===0||clockId===1){let timeNs=BigInt(Date.now())*1000000n;return view.setBigUint64(resultPtr,timeNs,!0),0}return 52},fd_write(fd,iovsPtr,iovsLen,nwrittenPtr){let mem=memoryAccessor(),view=new DataView(mem.buffer),bytes=new Uint8Array(mem.buffer),totalWritten=0;if(fd!==1&&fd!==2)return 8;for(let i=0;i<iovsLen;i++){let bufPtr=view.getUint32(iovsPtr+i*8,!0),bufLen=view.getUint32(iovsPtr+i*8+4,!0),chunk=bytes.slice(bufPtr,bufPtr+bufLen),text=new TextDecoder().decode(chunk);fd===1?typeof process<"u"&&process.stdout?process.stdout.write(text):console.log(text):typeof process<"u"&&process.stderr?process.stderr.write(text):console.error(text),totalWritten+=bufLen}return view.setUint32(nwrittenPtr,totalWritten,!0),0},fd_close(_fd){return 52},fd_fdstat_get(fd,statPtr){let mem=memoryAccessor(),view=new DataView(mem.buffer);return fd===1||fd===2?(view.setUint8(statPtr,2),view.setUint16(statPtr+2,0,!0),view.setBigUint64(statPtr+8,0n,!0),view.setBigUint64(statPtr+16,0n,!0),0):8},fd_seek(_fd,_offset,_whence,_resultPtr){return 52},random_get(bufPtr,bufLen){let mem=memoryAccessor(),bytes=new Uint8Array(mem.buffer,bufPtr,bufLen);if(typeof crypto<"u"&&crypto.getRandomValues)crypto.getRandomValues(bytes);else for(let i=0;i<bufLen;i++)bytes[i]=Math.floor(Math.random()*256);return 0}}}var decoder=new TextDecoder;function parseVersionString(memory,ptr){let mem=new Uint8Array(memory.buffer),end=ptr;for(;mem[end]!==0;)end++;if(end===ptr)return{};let str=decoder.decode(mem.slice(ptr,end)),result={};for(let line of str.split(`
2
+ `)){let eq=line.indexOf("=");eq>0&&(result[line.slice(0,eq)]=line.slice(eq+1))}return result}function extractExtensionVersions(ext,memory){let versionsFnName=`qjs_ext_${ext.name.replace(/-/g,"_")}_versions`,versionsFn=ext.instance.exports[versionsFnName];if(typeof versionsFn!="function")return;let ptr=versionsFn();if(ptr!==0)return parseVersionString(memory,ptr)}function readULEB128(bytes,offset){let result=0,shift=0;for(;offset.value<bytes.length;){let byte=bytes[offset.value++];if(result|=(byte&127)<<shift,(byte&128)===0)break;shift+=7}return result}function parseDylink(module){let sections=WebAssembly.Module.customSections(module,"dylink.0");if(sections.length===0)return null;let bytes=new Uint8Array(sections[0]),offset={value:0},info={memorySize:0,memoryAlignment:0,tableSize:0,tableAlignment:0,needed:[]};for(;offset.value<bytes.length;){let subsectionType=readULEB128(bytes,offset),subsectionSize=readULEB128(bytes,offset),subsectionEnd=offset.value+subsectionSize;if(subsectionType===1)info.memorySize=readULEB128(bytes,offset),info.memoryAlignment=readULEB128(bytes,offset),info.tableSize=readULEB128(bytes,offset),info.tableAlignment=readULEB128(bytes,offset);else if(subsectionType===2){let count=readULEB128(bytes,offset);for(let i=0;i<count;i++){let len=readULEB128(bytes,offset),name=new TextDecoder().decode(bytes.slice(offset.value,offset.value+len));offset.value+=len,info.needed.push(name)}}offset.value=subsectionEnd}return info}async function loadExtension(descriptor,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy,allocBase){let module;descriptor.wasm instanceof WebAssembly.Module?module=descriptor.wasm:module=await WebAssembly.compile(descriptor.wasm);let dylink=parseDylink(module);if(!dylink)throw new Error(`Extension "${descriptor.name}" is not a WASM shared library (missing dylink.0 section)`);let memory=mainExports.memory,table=mainExports.__indirect_function_table,stackPointer=mainExports.__stack_pointer,mallocFn=mainExports.malloc;if(!memory)throw new Error("Main module does not export memory");if(!table)throw new Error("Main module does not export __indirect_function_table");if(!mallocFn)throw new Error("Main module does not export malloc");let memoryBase,tableBase;if(allocBase)memoryBase=allocBase.memoryBase,tableBase=allocBase.tableBase;else if(dylink.memorySize>0){if(memoryBase=mallocFn(dylink.memorySize),memoryBase===0)throw new Error(`Failed to allocate ${dylink.memorySize} bytes for extension "${descriptor.name}"`);new Uint8Array(memory.buffer,memoryBase,dylink.memorySize).fill(0)}else memoryBase=0;allocBase?(tableBase=allocBase.tableBase,tableBase+dylink.tableSize>table.length&&table.grow(tableBase+dylink.tableSize-table.length)):(tableBase=table.length,dylink.tableSize>0&&table.grow(dylink.tableSize));let extImports=WebAssembly.Module.imports(module),importObj={env:{},"GOT.mem":{},"GOT.func":{}};if(extImports.some(imp=>imp.module==="wasi_snapshot_preview1")){let extWasi=descriptor.wasi&&memoryProxy?descriptor.wasi(memoryProxy):void 0;importObj.wasi_snapshot_preview1={...wasiBuiltins,...extWasi,...wasiUserOverrides}}let extExportNames=new Set(WebAssembly.Module.exports(module).filter(e=>e.kind==="function").map(e=>e.name)),unresolvedFuncs=new Set;for(let imp of extImports)if(imp.module==="env"){if(imp.name==="memory"&&imp.kind==="memory")importObj.env.memory=memory;else if(imp.name==="__indirect_function_table"&&imp.kind==="table")importObj.env.__indirect_function_table=table;else if(imp.name==="__memory_base"&&imp.kind==="global")importObj.env.__memory_base=new WebAssembly.Global({value:"i32",mutable:!1},memoryBase);else if(imp.name==="__table_base"&&imp.kind==="global")importObj.env.__table_base=new WebAssembly.Global({value:"i32",mutable:!1},tableBase);else if(imp.name==="__stack_pointer"&&imp.kind==="global")importObj.env.__stack_pointer=stackPointer;else if(imp.kind==="function"){let resolved=mainExports[imp.name];resolved&&typeof resolved=="function"?importObj.env[imp.name]=resolved:(unresolvedFuncs.add(imp.name),importObj.env[imp.name]=()=>{throw new Error(`Extension "${descriptor.name}" called unresolved symbol: env.${imp.name}`)})}else if(imp.kind==="global"){let resolved=mainExports[imp.name];resolved instanceof WebAssembly.Global?importObj.env[imp.name]=resolved:importObj.env[imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},0)}}else if(imp.module==="GOT.mem"&&imp.kind==="global")importObj["GOT.mem"][imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},0);else if(imp.module==="GOT.func"&&imp.kind==="global"){let resolved=mainExports[imp.name];if(resolved&&typeof resolved=="function"){let idx=table.length;table.grow(1),table.set(idx,resolved),importObj["GOT.func"][imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},idx)}else importObj["GOT.func"][imp.name]=new WebAssembly.Global({value:"i32",mutable:!0},0)}let selfResolvable=[...unresolvedFuncs].filter(name=>extExportNames.has(name)),wrappers={};for(let name of selfResolvable){let wrapper={target:null};wrappers[name]=wrapper,importObj.env[name]=(...args)=>{if(!wrapper.target)throw new Error(`Extension "${descriptor.name}" called unresolved symbol during init: env.${name}`);return wrapper.target(...args)}}let instance=await WebAssembly.instantiate(module,importObj),extExports=instance.exports;for(let name of selfResolvable){let selfExport=extExports[name];typeof selfExport=="function"&&(wrappers[name].target=selfExport)}typeof extExports.__wasm_apply_data_relocs=="function"&&extExports.__wasm_apply_data_relocs(),typeof extExports.__wasm_call_ctors=="function"&&extExports.__wasm_call_ctors();let initFn=descriptor.initFn??`qjs_ext_${descriptor.name.replace(/-/g,"_")}_init`,ext={name:descriptor.name,module,instance,dylink,memoryBase,tableBase,initFn};return ext.versions=extractExtensionVersions(ext,memory),ext}function initExtension(ext,mainExports){let initFunc=ext.instance.exports[ext.initFn];if(typeof initFunc!="function")throw new Error(`Extension "${ext.name}" does not export init function "${ext.initFn}"`);let ctxPtr=mainExports.qjs_get_context_ptr(),rtPtr=mainExports.qjs_get_runtime_ptr(),result=initFunc(ctxPtr,rtPtr);if(result!==0)throw new Error(`Extension "${ext.name}" init function returned error code ${result}`)}async function restoreExtensions(descriptors,extensionMeta,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy){let loaded=[];for(let meta of extensionMeta){let descriptor=descriptors.find(d=>d.name===meta.name);if(!descriptor)throw new Error(`Extension "${meta.name}" required by snapshot but not provided`);let ext=await loadExtension(descriptor,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy,{memoryBase:meta.memoryBase,tableBase:meta.tableBase});ext.initFn=meta.initFn,loaded.push(ext)}return loaded}var VERSION="3.6.2";var __addDisposableResource=function(env,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose=value[Symbol.asyncDispose]}if(dispose===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose=value[Symbol.dispose],async&&(inner=dispose)}if(typeof dispose!="function")throw new TypeError("Object not disposable.");inner&&(dispose=function(){try{inner.call(this)}catch(e){return Promise.reject(e)}}),env.stack.push({value,dispose,async})}else async&&env.stack.push({async:!0});return value},__disposeResources=(function(SuppressedError2){return function(env){function fail(e){env.error=env.hasError?new SuppressedError2(e,env.error,"An error was suppressed during disposal."):e,env.hasError=!0}var r,s=0;function next(){for(;r=env.stack.pop();)try{if(!r.async&&s===1)return s=0,env.stack.push(r),Promise.resolve().then(next);if(r.dispose){var result=r.dispose.call(r.value);if(r.async)return s|=2,Promise.resolve(result).then(next,function(e){return fail(e),next()})}else s|=1}catch(e){fail(e)}if(s===1)return env.hasError?Promise.reject(env.error):Promise.resolve();if(env.hasError)throw env.error}return next()}})(typeof SuppressedError=="function"?SuppressedError:function(error,suppressed,message){var e=new Error(message);return e.name="SuppressedError",e.error=error,e.suppressed=suppressed,e}),MAX_STACK_SIZE=512*1024;var Intrinsics={DATE:1,EVAL:2,REGEXP:4,JSON:8,PROXY:16,MAP_SET:32,TYPED_ARRAYS:64,PROMISE:128,BIG_INT:256,WEAK_REF:512,PERFORMANCE:1024,DOM_EXCEPTION:2048,ATOB_BTOA:4096,ALL:4294967295},SNAPSHOT_MAGIC=1363825491,SNAPSHOT_VERSION=2,SNAPSHOT_HEADER_SIZE=24,QuickJS=class _QuickJS{exports;module;instance;encoder=new TextEncoder;decoder=new TextDecoder;disposed=!1;hostCallbacks=new Map;nextInternalId=1;interruptHandler=null;unhandledRejectionHandler=null;moduleNormalizeHandler=null;moduleLoadHandler=null;timezoneOffsetHandler=null;_global=null;_versions=null;_undefined=null;_null=null;_true=null;_false=null;_ownedHandles=new Set;_activeScope=null;loadedExtensions=[];constructor(module){this.module=module,this.instance=null,this.exports=null}setInstance(instance){this.instance=instance,this.exports=instance.exports}get versions(){if(this.assertNotDisposed(),!this._versions){let result={"quickjs-wasi":VERSION,quickjs:this.readCString(this.exports.qjs_get_quickjs_version())};for(let ext of this.loadedExtensions)ext.versions&&Object.assign(result,ext.versions);this._versions=result}return this._versions}get global(){return this._global||(this._global=new JSValueHandle(this,this.exports.qjs_get_global(),!0)),this._global}get undefined(){return this._undefined||(this._undefined=new JSValueHandle(this,this.exports.qjs_get_undefined(),!0)),this._undefined}get null(){return this._null||(this._null=new JSValueHandle(this,this.exports.qjs_get_null(),!0)),this._null}get true(){return this._true||(this._true=new JSValueHandle(this,this.exports.qjs_get_true(),!0)),this._true}get false(){return this._false||(this._false=new JSValueHandle(this,this.exports.qjs_get_false(),!0)),this._false}static async create(options){let opts=_QuickJS.normalizeOptions(options),module=await _QuickJS.resolveModule(opts.wasm),vm=new _QuickJS(module),{instance,wasiBuiltins,wasiUserOverrides,memoryProxy}=await _QuickJS.instantiate(module,vm,opts.wasi);if(vm.setInstance(instance),vm.exports._initialize(),(opts.intrinsics!==void 0?vm.exports.qjs_init2(opts.intrinsics):vm.exports.qjs_init())!==0)throw new Error("Failed to initialize QuickJS runtime");if(opts.extensions){let mainExports=instance.exports;for(let desc of opts.extensions){let ext=await loadExtension(desc,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy);vm.loadedExtensions.push(ext),initExtension(ext,mainExports)}}return _QuickJS.applyLimits(vm,opts),vm}static async restore(snapshot,options){let opts=_QuickJS.normalizeOptions(options),module=await _QuickJS.resolveModule(opts.wasm),vm=new _QuickJS(module),{instance,wasiBuiltins,wasiUserOverrides,memoryProxy}=await _QuickJS.instantiate(module,vm,opts.wasi);vm.setInstance(instance);let mainExports=instance.exports,exportedMemory=vm.exports.memory,currentPages=exportedMemory.buffer.byteLength/65536,neededPages=Math.ceil(snapshot.memory.byteLength/65536);if(neededPages>currentPages&&exportedMemory.grow(neededPages-currentPages),snapshot.extensions.length>0){let descriptors=opts.extensions??[];vm.loadedExtensions=await restoreExtensions(descriptors,snapshot.extensions,mainExports,wasiBuiltins,wasiUserOverrides,memoryProxy)}return new Uint8Array(exportedMemory.buffer).set(snapshot.memory),vm.exports.qjs_set_runtime_and_context(snapshot.runtimePtr,snapshot.contextPtr),vm.exports.__stack_pointer.value=snapshot.stackPointer,_QuickJS.applyLimits(vm,opts),vm}static serializeSnapshot(snapshot){let textEncoder=new TextEncoder,extMetaSize=4,extEncodedNames=[],extEncodedInitFns=[];for(let ext of snapshot.extensions){let nameBytes=textEncoder.encode(ext.name),initFnBytes=textEncoder.encode(ext.initFn);extEncodedNames.push(nameBytes),extEncodedInitFns.push(initFnBytes),extMetaSize+=4+nameBytes.length+4+4+4+initFnBytes.length}let totalSize=SNAPSHOT_HEADER_SIZE+extMetaSize+snapshot.memory.byteLength,buffer=new ArrayBuffer(totalSize),view=new DataView(buffer),bytes=new Uint8Array(buffer);view.setUint32(0,SNAPSHOT_MAGIC,!1),view.setUint8(4,SNAPSHOT_VERSION),view.setUint32(8,snapshot.memory.byteLength,!0),view.setUint32(12,snapshot.stackPointer,!0),view.setUint32(16,snapshot.runtimePtr,!0),view.setUint32(20,snapshot.contextPtr,!0);let offset=SNAPSHOT_HEADER_SIZE;view.setUint32(offset,snapshot.extensions.length,!0),offset+=4;for(let i=0;i<snapshot.extensions.length;i++){let ext=snapshot.extensions[i],nameBytes=extEncodedNames[i],initFnBytes=extEncodedInitFns[i];view.setUint32(offset,nameBytes.length,!0),offset+=4,bytes.set(nameBytes,offset),offset+=nameBytes.length,view.setUint32(offset,ext.memoryBase,!0),offset+=4,view.setUint32(offset,ext.tableBase,!0),offset+=4,view.setUint32(offset,initFnBytes.length,!0),offset+=4,bytes.set(initFnBytes,offset),offset+=initFnBytes.length}return bytes.set(snapshot.memory,offset),bytes}static deserializeSnapshot(data){if(data.length<SNAPSHOT_HEADER_SIZE)throw new Error("Invalid snapshot: too small");let view=new DataView(data.buffer,data.byteOffset,data.byteLength),magic=view.getUint32(0,!1);if(magic!==SNAPSHOT_MAGIC)throw new Error(`Invalid snapshot: bad magic (expected 0x${SNAPSHOT_MAGIC.toString(16)}, got 0x${magic.toString(16)})`);let version=view.getUint8(4);if(version!==SNAPSHOT_VERSION&&version!==1)throw new Error(`Unsupported snapshot version: ${version} (expected ${SNAPSHOT_VERSION})`);let memorySize=view.getUint32(8,!0),stackPointer=view.getUint32(12,!0),runtimePtr=view.getUint32(16,!0),contextPtr=view.getUint32(20,!0),extensions=[],memoryOffset=SNAPSHOT_HEADER_SIZE;if(version>=2){let extCount=view.getUint32(24,!0),offset=28,textDecoder=new TextDecoder;for(let i=0;i<extCount;i++){let nameLen=view.getUint32(offset,!0);offset+=4;let name=textDecoder.decode(data.slice(offset,offset+nameLen));offset+=nameLen;let memBase=view.getUint32(offset,!0);offset+=4;let tblBase=view.getUint32(offset,!0);offset+=4;let initFnLen=view.getUint32(offset,!0);offset+=4;let initFn=textDecoder.decode(data.slice(offset,offset+initFnLen));offset+=initFnLen,extensions.push({name,memoryBase:memBase,tableBase:tblBase,initFn})}memoryOffset=offset}let expectedSize=memoryOffset+memorySize;if(data.length<expectedSize)throw new Error(`Invalid snapshot: expected ${expectedSize} bytes, got ${data.length}`);return{memory:data.slice(memoryOffset,memoryOffset+memorySize),stackPointer,runtimePtr,contextPtr,extensions}}static normalizeOptions(options){if(!options)return{wasm:void 0};if(options instanceof WebAssembly.Module)return{wasm:options};if(typeof options=="object"&&("wasm"in options||"wasi"in options||"memoryLimit"in options||"maxStackSize"in options||"interruptHandler"in options||"onUnhandledRejection"in options||"moduleLoader"in options||"intrinsics"in options||"extensions"in options||"timezoneOffset"in options)){let opts=options;if(opts.maxStackSize!==void 0&&(!Number.isInteger(opts.maxStackSize)||opts.maxStackSize<0||opts.maxStackSize>MAX_STACK_SIZE))throw new RangeError(`maxStackSize must be an integer between 0 and ${MAX_STACK_SIZE}`);return opts}return{wasm:options}}static applyLimits(vm,opts){opts.memoryLimit!==void 0&&vm.exports.qjs_set_memory_limit(opts.memoryLimit),opts.maxStackSize!==void 0&&vm.exports.qjs_set_max_stack_size(opts.maxStackSize),opts.interruptHandler&&(vm.interruptHandler=opts.interruptHandler,vm.exports.qjs_set_interrupt_handler(1)),opts.onUnhandledRejection&&(vm.unhandledRejectionHandler=opts.onUnhandledRejection,vm.exports.qjs_set_promise_rejection_handler(1)),opts.moduleLoader&&(vm.moduleLoadHandler=opts.moduleLoader.load,vm.moduleNormalizeHandler=opts.moduleLoader.normalize??null,vm.exports.qjs_set_module_loader(1));let tz=opts.timezoneOffset;if(typeof tz=="function")vm.timezoneOffsetHandler=timeSecs=>-tz(timeSecs)*60;else if(typeof tz=="number"){let offsetSecs=-tz*60;vm.timezoneOffsetHandler=()=>offsetSecs}else vm.timezoneOffsetHandler=timeSecs=>-new Date(timeSecs*1e3).getTimezoneOffset()*60}static async resolveModule(wasmInput){if(wasmInput instanceof WebAssembly.Module)return wasmInput;if(wasmInput)return WebAssembly.compile(wasmInput);throw new TypeError("QuickJS: `wasm` option is required. Provide WASM bytes or a compiled `WebAssembly.Module`. The binary is shipped at `quickjs-wasi/quickjs.wasm` and can be loaded via your environment's preferred mechanism (e.g. `fetch()`, `node:fs/promises`, or a bundler import like Vite's `?url`).")}static async instantiate(module,vm,wasiOptions){let memory=null,memoryProxy=new Proxy({},{get(_target,prop){return memory[prop]}}),wasiBuiltins=createWasiShim(()=>memory),wasiUserOverrides=wasiOptions?wasiOptions(memoryProxy):void 0,wasiShim={...wasiBuiltins,...wasiUserOverrides},hostCall=(namePtr,nameLen,thisPtr,argc,argvPtr)=>vm.handleHostCall(namePtr,nameLen,thisPtr,argc,argvPtr),hostInterrupt=()=>vm.interruptHandler&&vm.interruptHandler()?1:0,hostPromiseRejection=(promisePtr,reasonPtr,isHandled)=>{if(!vm.unhandledRejectionHandler){vm.exports.qjs_free_value(promisePtr),vm.exports.qjs_free_value(reasonPtr);return}let promise=new JSValueHandle(vm,promisePtr),reason=new JSValueHandle(vm,reasonPtr);try{vm.unhandledRejectionHandler(promise,reason,isHandled!==0)}finally{promise.dispose(),reason.dispose()}},throwIntoContext=err=>{let errHandle=vm.newError(err instanceof Error?err:String(err));vm.exports.qjs_throw(errHandle.ptr),errHandle.dispose()},assertSyncString=(value,callbackName)=>{if(typeof value=="string")return value;let got=value!==null&&typeof value=="object"&&typeof value.then=="function"?"a Promise":`type ${typeof value}`;throw new TypeError(`moduleLoader.${callbackName} must synchronously return a string (got ${got}). Async module loading is not supported. Pre-fetch module sources instead (see the "ES Modules" section of the quickjs-wasi README).`)},hostModuleNormalize=(baseNamePtr,namePtr)=>{if(!vm.moduleNormalizeHandler){let name=vm.readCString(namePtr);return vm.writeString(name).ptr}let baseName=vm.readCString(baseNamePtr),specifier=vm.readCString(namePtr);try{let normalized=assertSyncString(vm.moduleNormalizeHandler(baseName,specifier),"normalize");return vm.writeString(normalized).ptr}catch(err){return throwIntoContext(err),0}},hostModuleLoad=(namePtr,outLenPtr)=>{if(!vm.moduleLoadHandler)return 0;let name=vm.readCString(namePtr);try{let source=assertSyncString(vm.moduleLoadHandler(name),"load"),{ptr,len}=vm.writeString(source);return new Uint32Array(vm.exports.memory.buffer,outLenPtr,1)[0]=len,ptr}catch(err){return throwIntoContext(err),0}},hostGetTimezoneOffset=(hi,lo)=>{let timeSecs=Number(BigInt(hi)<<32n|BigInt(lo>>>0));return vm.timezoneOffsetHandler?vm.timezoneOffsetHandler(timeSecs):0},instance=await WebAssembly.instantiate(module,{env:{host_call:hostCall,host_interrupt:hostInterrupt,host_promise_rejection:hostPromiseRejection,host_module_normalize:hostModuleNormalize,host_module_load:hostModuleLoad,host_get_timezone_offset:hostGetTimezoneOffset},wasi_snapshot_preview1:wasiShim});return memory=instance.exports.memory,{instance,wasiBuiltins,wasiUserOverrides,memoryProxy}}handleHostCall(namePtr,nameLen,thisPtr,argc,argvPtr){let name=this.decoder.decode(new Uint8Array(this.exports.memory.buffer,namePtr,nameLen)),callback=this.hostCallbacks.get(name);if(!callback){let errHandle=this.newError(`Host callback "${name}" is not registered: it was unregistered, its ephemeral function handle was disposed, or it was never re-registered after a snapshot restore.`);return this.exports.qjs_throw(errHandle.ptr),errHandle.dispose(),0}let thisHandle=new JSValueHandle(this,thisPtr,!1,!0),args=[];if(argc>0&&argvPtr!==0){let view=new DataView(this.exports.memory.buffer);for(let i=0;i<argc;i++){let argPtr=view.getUint32(argvPtr+i*4,!0);args.push(new JSValueHandle(this,argPtr,!1,!0))}}try{let result=callback.call(thisHandle,...args);return this.exports.qjs_dup_value(result.ptr)}catch(err){let errHandle=this.newError(err instanceof Error?err:String(err));return this.exports.qjs_throw(errHandle.ptr),errHandle.dispose(),0}}writeString(str){let encoded=encodeWtf8(str),ptr=this.exports.wasm_malloc(encoded.length+1);if(ptr===0)throw new Error("wasm_malloc failed");let mem=new Uint8Array(this.exports.memory.buffer);return mem.set(encoded,ptr),mem[ptr+encoded.length]=0,{ptr,len:encoded.length}}readCString(ptr){let mem=new Uint8Array(this.exports.memory.buffer),end=ptr;for(;mem[end]!==0;)end++;return this.decoder.decode(mem.slice(ptr,end))}throwIfException(result){if(this.exports.qjs_is_exception(result.ptr)!==0){let exc=this.getException();throw result.dispose(),this._ownedHandles.add(exc),new JSException(exc)}return result}evalCode(code,filename="<eval>",flags=0){this.assertNotDisposed();let codeStr=this.writeString(code),fnStr=this.writeString(filename),resultPtr=this.exports.qjs_eval(codeStr.ptr,codeStr.len,fnStr.ptr,flags);return this.exports.wasm_free(codeStr.ptr),this.exports.wasm_free(fnStr.ptr),this.throwIfException(new JSValueHandle(this,resultPtr))}compile(code,filename="<compile>",evalFlags=0,compileFlags=0){this.assertNotDisposed();let codeStr=this.writeString(code),fnStr=this.writeString(filename),outLenPtr=this.exports.wasm_malloc(4),bufPtr=this.exports.qjs_compile(codeStr.ptr,codeStr.len,fnStr.ptr,evalFlags,compileFlags,outLenPtr);if(this.exports.wasm_free(codeStr.ptr),this.exports.wasm_free(fnStr.ptr),bufPtr===0){this.exports.wasm_free(outLenPtr);let exc=this.getException();throw new Error(`Compilation error: ${exc.toString()}`)}let outLen=new Uint32Array(this.exports.memory.buffer,outLenPtr,1)[0];this.exports.wasm_free(outLenPtr);let bytecode=new Uint8Array(this.exports.memory.buffer,bufPtr,outLen).slice();return this.exports.wasm_free(bufPtr),bytecode}evalBytecode(bytecode){this.assertNotDisposed();let bufPtr=this.exports.wasm_malloc(bytecode.byteLength);new Uint8Array(this.exports.memory.buffer,bufPtr,bytecode.byteLength).set(bytecode);let resultPtr=this.exports.qjs_eval_bytecode(bufPtr,bytecode.byteLength);return this.exports.wasm_free(bufPtr),this.throwIfException(new JSValueHandle(this,resultPtr))}executePendingJobs(){this.assertNotDisposed();let count=0;for(;this.exports.qjs_is_job_pending();){if(this.exports.qjs_execute_pending_job()<0){let exc=this.getException();throw new Error(`Job execution error: ${exc.toString()}`)}count++}return count}runGC(){this.assertNotDisposed(),this.exports.qjs_run_gc()}get gcThreshold(){return this.assertNotDisposed(),this.exports.qjs_get_gc_threshold()}set gcThreshold(threshold){this.assertNotDisposed(),this.exports.qjs_set_gc_threshold(threshold)}getMemoryUsage(){this.assertNotDisposed();let bufPtr=this.exports.wasm_malloc(208);this.exports.qjs_compute_memory_usage(bufPtr);let view=new BigInt64Array(this.exports.memory.buffer,bufPtr,26),result={mallocSize:Number(view[0]),mallocLimit:Number(view[1]),memoryUsedSize:Number(view[2]),mallocCount:Number(view[3]),memoryUsedCount:Number(view[4]),atomCount:Number(view[5]),atomSize:Number(view[6]),strCount:Number(view[7]),strSize:Number(view[8]),objCount:Number(view[9]),objSize:Number(view[10]),propCount:Number(view[11]),propSize:Number(view[12]),shapeCount:Number(view[13]),shapeSize:Number(view[14]),jsFuncCount:Number(view[15]),jsFuncSize:Number(view[16]),jsFuncCodeSize:Number(view[17]),jsFuncPc2lineCount:Number(view[18]),jsFuncPc2lineSize:Number(view[19]),cFuncCount:Number(view[20]),arrayCount:Number(view[21]),fastArrayCount:Number(view[22]),fastArrayElements:Number(view[23]),binaryObjectCount:Number(view[24]),binaryObjectSize:Number(view[25])};return this.exports.wasm_free(bufPtr),result}getGlobal(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_global())}newString(str){this.assertNotDisposed();let{ptr,len}=this.writeString(str),resultPtr=this.exports.qjs_new_string(ptr,len);return this.exports.wasm_free(ptr),new JSValueHandle(this,resultPtr)}newNumber(num){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_new_number(num))}newBigInt(val){this.assertNotDisposed();let lo=Number(val&0xffffffffn),hi=Number(val>>32n&0xffffffffn);return new JSValueHandle(this,this.exports.qjs_new_big_int64(lo,hi))}newObject(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_new_object())}newArray(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_new_array())}newSymbolFor(description){this.assertNotDisposed();let{ptr,len}=this.writeString(description),result=new JSValueHandle(this,this.exports.qjs_new_symbol(ptr,len,1));return this.exports.wasm_free(ptr),result}newArrayBuffer(data){this.assertNotDisposed();let bytes=data instanceof ArrayBuffer?new Uint8Array(data):data,ptr=this.exports.wasm_malloc(bytes.length);if(ptr===0)throw new Error("wasm_malloc failed");new Uint8Array(this.exports.memory.buffer).set(bytes,ptr);let result=new JSValueHandle(this,this.exports.qjs_new_array_buffer(ptr,bytes.length));return this.exports.wasm_free(ptr),result}newUint8Array(data){this.assertNotDisposed();let ptr=this.exports.wasm_malloc(data.length);if(ptr===0)throw new Error("wasm_malloc failed");new Uint8Array(this.exports.memory.buffer).set(data,ptr);let result=new JSValueHandle(this,this.exports.qjs_new_uint8_array(ptr,data.length));return this.exports.wasm_free(ptr),result}getUndefined(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_undefined())}getNull(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_null())}getTrue(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_true())}getFalse(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_false())}newFunction(name,fn){if(this.assertNotDisposed(),this.hostCallbacks.has(name))throw new Error(`Host callback with name "${name}" is already registered`);this.hostCallbacks.set(name,fn);let{ptr:namePtr,len:nameLen}=this.writeString(name),resultPtr=this.exports.qjs_new_host_function(namePtr,nameLen,0);return this.exports.wasm_free(namePtr),new JSValueHandle(this,resultPtr)}withScope(fn){this.assertNotDisposed();let enclosing=this._activeScope,tracked=new Set;this._activeScope=tracked;let scope={escape:handle=>(tracked.delete(handle),enclosing?.add(handle),handle)};try{return fn(scope)}finally{this._activeScope=enclosing;for(let handle of tracked)handle.dispose()}}exportHandle(handle){if(this.assertNotDisposed(),handle.vm!==this)throw new Error("exportHandle: handle belongs to a different VM");if(handle.disposed)throw new Error("exportHandle: handle is disposed");if(handle._isBorrowed)throw new Error("exportHandle: cannot export a borrowed handle (host-callback this/argument); its box is freed when the callback returns. dup() it and export the duplicate.");return handle.ptr}importHandle(token){if(this.assertNotDisposed(),!Number.isInteger(token)||token<=0||token>=this.exports.memory.buffer.byteLength)throw new Error(`importHandle: invalid token ${token}`);return new JSValueHandle(this,this.exports.qjs_dup_value(token))}newEphemeralFunction(fn){this.assertNotDisposed();let name=`__ephemeral:${this.nextInternalId++}`;this.hostCallbacks.set(name,fn);let{ptr:namePtr,len:nameLen}=this.writeString(name),resultPtr=this.exports.qjs_new_host_function(namePtr,nameLen,0);this.exports.wasm_free(namePtr);let handle=new JSValueHandle(this,resultPtr);return handle._onDispose=()=>{this.hostCallbacks.delete(name)},handle}unregisterHostCallback(name){return this.hostCallbacks.delete(name)}newInternalFunction(name,fn){this.hostCallbacks.set(name,fn);let{ptr:namePtr,len:nameLen}=this.writeString(name),resultPtr=this.exports.qjs_new_host_function(namePtr,nameLen,0);return this.exports.wasm_free(namePtr),new JSValueHandle(this,resultPtr)}newPromise(){this.assertNotDisposed();let resolveOutPtr=this.exports.wasm_malloc(4),rejectOutPtr=this.exports.wasm_malloc(4),promisePtr=this.exports.qjs_new_promise(resolveOutPtr,rejectOutPtr),view=new DataView(this.exports.memory.buffer),resolvePtr=view.getUint32(resolveOutPtr,!0),rejectPtr=view.getUint32(rejectOutPtr,!0);this.exports.wasm_free(resolveOutPtr),this.exports.wasm_free(rejectOutPtr);let promiseHandle=new JSValueHandle(this,promisePtr),resolveHandle=new JSValueHandle(this,resolvePtr),rejectHandle=new JSValueHandle(this,rejectPtr),vm=this;vm._ownedHandles.add(resolveHandle),vm._ownedHandles.add(rejectHandle);let _settled=null;return{handle:promiseHandle,get settled(){if(!_settled){let settledResolve;_settled=new Promise(res=>{settledResolve=res});let settleName=`__settle:${vm.nextInternalId++}`,onSettleFn=vm.newInternalFunction(settleName,()=>(settledResolve(),vm.hostCallbacks.delete(settleName),vm.undefined));vm.promiseThenRaw(promiseHandle,onSettleFn,onSettleFn).dispose(),onSettleFn.dispose()}return _settled},resolve(value){vm.callFunctionRaw(resolveHandle,vm.undefined,value).dispose(),vm._ownedHandles.delete(resolveHandle),resolveHandle.dispose()},reject(value){vm.callFunctionRaw(rejectHandle,vm.undefined,value).dispose(),vm._ownedHandles.delete(rejectHandle),rejectHandle.dispose()}}}resolvePromise(promiseHandle){if(this.assertNotDisposed(),!this.exports.qjs_is_promise(promiseHandle.ptr))return Promise.resolve({value:promiseHandle.dup()});let state=this.exports.qjs_promise_state(promiseHandle.ptr);return state===1?Promise.resolve({value:new JSValueHandle(this,this.exports.qjs_promise_result(promiseHandle.ptr))}):state===2?Promise.resolve({error:new JSValueHandle(this,this.exports.qjs_promise_result(promiseHandle.ptr))}):new Promise(hostResolve=>{let id=this.nextInternalId++,fulfilledName=`__onFulfilled:${id}`,rejectedName=`__onRejected:${id}`,onFulfilled=this.newInternalFunction(fulfilledName,(...args)=>{let val=args[0]?.dup()??this.undefined;return this.hostCallbacks.delete(fulfilledName),this.hostCallbacks.delete(rejectedName),hostResolve({value:val}),this.undefined}),onRejected=this.newInternalFunction(rejectedName,(...args)=>{let val=args[0]?.dup()??this.undefined;return this.hostCallbacks.delete(fulfilledName),this.hostCallbacks.delete(rejectedName),hostResolve({error:val}),this.undefined});this.promiseThenRaw(promiseHandle,onFulfilled,onRejected).dispose(),onFulfilled.dispose(),onRejected.dispose()})}promiseThenRaw(promise,onFulfilled,onRejected){return new JSValueHandle(this,this.exports.qjs_promise_then(promise.ptr,onFulfilled.ptr,onRejected.ptr))}markPromiseHandled(promise){this.assertNotDisposed(),this.exports.qjs_promise_mark_as_handled(promise.ptr)}callFunction(func,thisVal,...args){return this.throwIfException(this.callFunctionRaw(func,thisVal,...args))}construct(ctor,...args){this.assertNotDisposed();let argc=args.length,argvPtr=0;if(argc>0){argvPtr=this.exports.wasm_malloc(argc*4);let view=new DataView(this.exports.memory.buffer);for(let i=0;i<argc;i++)view.setUint32(argvPtr+i*4,args[i].ptr,!0)}let resultPtr=this.exports.qjs_call_constructor(ctor.ptr,argc,argvPtr);return argvPtr&&this.exports.wasm_free(argvPtr),this.throwIfException(new JSValueHandle(this,resultPtr))}callFunctionRaw(func,thisVal,...args){this.assertNotDisposed();let argc=args.length,argvPtr=0;if(argc>0){argvPtr=this.exports.wasm_malloc(argc*4);let view=new DataView(this.exports.memory.buffer);for(let i=0;i<argc;i++)view.setUint32(argvPtr+i*4,args[i].ptr,!0)}let resultPtr=this.exports.qjs_call(func.ptr,thisVal.ptr,argc,argvPtr);return argvPtr&&this.exports.wasm_free(argvPtr),new JSValueHandle(this,resultPtr)}setProp(obj,key,value){if(this.assertNotDisposed(),typeof key=="string"){let{ptr:namePtr}=this.writeString(key);this.exports.qjs_set_prop_string(obj.ptr,namePtr,value.ptr),this.exports.wasm_free(namePtr)}else this.exports.qjs_set_prop_value(obj.ptr,key.ptr,value.ptr)}defineProp(obj,key,value,descriptor){this.assertNotDisposed();let flags=0;if(descriptor?.configurable&&(flags|=1),descriptor?.writable&&(flags|=2),descriptor?.enumerable&&(flags|=4),typeof key=="string"){let{ptr:namePtr}=this.writeString(key);this.exports.qjs_define_prop_string(obj.ptr,namePtr,value.ptr,flags),this.exports.wasm_free(namePtr)}else this.exports.qjs_define_prop_value(obj.ptr,key.ptr,value.ptr,flags)}getProp(obj,key){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_prop_value(obj.ptr,key.ptr))}getException(){return this.assertNotDisposed(),new JSValueHandle(this,this.exports.qjs_get_exception())}newError(messageOrError){this.assertNotDisposed();let errPtr=this.exports.qjs_new_error(),errHandle=new JSValueHandle(this,errPtr);if(typeof messageOrError=="string"){let msgHandle=this.newString(messageOrError);errHandle.setProp("message",msgHandle),msgHandle.dispose()}else{let msgHandle=this.newString(messageOrError.message);if(errHandle.setProp("message",msgHandle),msgHandle.dispose(),messageOrError.name){let nameHandle=this.newString(messageOrError.name);errHandle.setProp("name",nameHandle),nameHandle.dispose()}if(messageOrError.stack){let stackHandle=this.newString(messageOrError.stack);errHandle.setProp("stack",stackHandle),stackHandle.dispose()}}return errHandle}typeof(handle){this.assertNotDisposed();let e=this.exports;return e.qjs_is_undefined(handle.ptr)?"undefined":e.qjs_is_null(handle.ptr)?"object":e.qjs_is_bool(handle.ptr)?"boolean":e.qjs_is_number(handle.ptr)?"number":e.qjs_is_big_int(handle.ptr)?"bigint":e.qjs_is_string(handle.ptr)?"string":e.qjs_is_symbol(handle.ptr)?"symbol":e.qjs_is_function(handle.ptr)?"function":e.qjs_is_object(handle.ptr)?"object":"unknown"}dump(handle){return this.assertNotDisposed(),this._dump(handle,new Map)}_dump(handle,visited){let e=this.exports;if(!e.qjs_is_undefined(handle.ptr)){if(e.qjs_is_null(handle.ptr))return null;if(e.qjs_is_bool(handle.ptr))return e.qjs_get_bool(handle.ptr)!==0;if(e.qjs_is_number(handle.ptr))return e.qjs_get_float64(handle.ptr);if(e.qjs_is_string(handle.ptr))return handle.toString();if(e.qjs_is_big_int(handle.ptr))return handle.toBigInt();if(e.qjs_is_symbol(handle.ptr)){let descOutPtr=e.wasm_malloc(4),kind=e.qjs_get_symbol_description(handle.ptr,descOutPtr),descPtr=new DataView(e.memory.buffer).getUint32(descOutPtr,!0);if(e.wasm_free(descOutPtr),kind===1){let descHandle=new JSValueHandle(this,descPtr),description=descHandle.toString();return descHandle.dispose(),Symbol.for(description)}else if(kind===2){new JSValueHandle(this,descPtr).dispose();return}return}if(e.qjs_is_array_buffer(handle.ptr))return handle.toArrayBuffer();if(e.qjs_is_exception(handle.ptr)){let exc=this.getException(),msg=exc.toString();return exc.dispose(),new Error(msg)}if(!e.qjs_is_function(handle.ptr)){if(e.qjs_is_object(handle.ptr)){let objPtr=e.qjs_get_value_ptr(handle.ptr);if(objPtr){let existing=visited.get(objPtr);if(existing!==void 0)return existing}}if(e.qjs_is_object(handle.ptr)){let byteOffsetPtr=e.wasm_malloc(4),byteLengthPtr=e.wasm_malloc(4),bytesPerElemPtr=e.wasm_malloc(4),abPtr=e.qjs_get_typed_array_buffer(handle.ptr,byteOffsetPtr,byteLengthPtr,bytesPerElemPtr),abHandle=new JSValueHandle(this,abPtr);if(e.qjs_is_exception(abHandle.ptr)===0){let view=new DataView(e.memory.buffer),byteOffset=view.getUint32(byteOffsetPtr,!0),byteLength=view.getUint32(byteLengthPtr,!0),bytesPerElement=view.getUint32(bytesPerElemPtr,!0);e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr);let abLenPtr=e.wasm_malloc(4),abDataPtr=e.qjs_get_array_buffer(abHandle.ptr,abLenPtr);if(e.wasm_free(abLenPtr),abHandle.dispose(),abDataPtr!==0){let rawBytes=new Uint8Array(e.memory.buffer,abDataPtr+byteOffset,byteLength).slice();switch(bytesPerElement){case 1:return rawBytes;case 2:return new Uint16Array(rawBytes.buffer);case 4:return new Uint32Array(rawBytes.buffer);case 8:return new Float64Array(rawBytes.buffer);default:return rawBytes}}}else abHandle.dispose(),e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr)}if(e.qjs_is_array(handle.ptr)){let lenHandle=handle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let arr=[],objPtr=e.qjs_get_value_ptr(handle.ptr);objPtr&&visited.set(objPtr,arr);for(let i=0;i<len;i++){let elemPtr=e.qjs_get_prop_uint32(handle.ptr,i),elemHandle=new JSValueHandle(this,elemPtr);arr.push(this._dump(elemHandle,visited)),elemHandle.dispose()}return arr}if(e.qjs_is_error(handle.ptr)){let nameHandle=handle.getProp("name"),msgHandle=handle.getProp("message"),stackHandle=handle.getProp("stack"),name=nameHandle.isUndefined?"Error":nameHandle.toString(),message=msgHandle.isUndefined?"":msgHandle.toString(),stack=stackHandle.isUndefined?void 0:stackHandle.toString();nameHandle.dispose(),msgHandle.dispose(),stackHandle.dispose();let err=new Error(message);return err.name=name,stack!==void 0&&(err.stack=stack),err}if(e.qjs_is_object(handle.ptr)){let keysPtr=e.qjs_get_own_property_names(handle.ptr),keysHandle=new JSValueHandle(this,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),{};let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let obj={},objPtr=e.qjs_get_value_ptr(handle.ptr);objPtr&&visited.set(objPtr,obj);for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new JSValueHandle(this,keyPtr),key=keyHandle.toString();keyHandle.dispose();let valHandle=handle.getProp(key);obj[key]=this._dump(valHandle,visited),valHandle.dispose()}return keysHandle.dispose(),obj}}}}hostToHandle(value){if(this.assertNotDisposed(),value===void 0)return this.undefined;if(value===null)return this.null;if(value===!0)return this.true;if(value===!1)return this.false;if(typeof value=="number")return this.newNumber(value);if(typeof value=="string")return this.newString(value);if(typeof value=="bigint")return this.newBigInt(value);if(typeof value=="symbol"){let key=Symbol.keyFor(value);if(key!==void 0)return this.newSymbolFor(key);throw new Error("Cannot convert local symbol to QuickJS handle. Use Symbol.for() for cross-boundary symbols.")}if(value instanceof Promise){let deferred=this.newPromise();return value.then(r=>{deferred.resolve(this.hostToHandle(r)),this.executePendingJobs()},err=>{deferred.reject(this.hostToHandle(err)),this.executePendingJobs()}),deferred.handle}if(value instanceof Error)return this.newError(value);if(value instanceof ArrayBuffer)return this.newArrayBuffer(value);if(value instanceof Uint8Array)return this.newUint8Array(value);if(ArrayBuffer.isView(value))return this.newArrayBuffer(new Uint8Array(value.buffer,value.byteOffset,value.byteLength));if(Array.isArray(value)){let arr=this.newArray();for(let i=0;i<value.length;i++){let elemHandle=this.hostToHandle(value[i]);this.exports.qjs_set_prop_uint32(arr.ptr,i,elemHandle.ptr),elemHandle.dispose()}return arr}if(typeof value=="object"&&value!==null){let obj=this.newObject();for(let[key,val]of Object.entries(value)){let valHandle=this.hostToHandle(val);obj.setProp(key,valHandle),valHandle.dispose()}return obj}return this.undefined}snapshot(){return this.assertNotDisposed(),{memory:new Uint8Array(this.exports.memory.buffer).slice(),stackPointer:this.exports.__stack_pointer.value,runtimePtr:this.exports.qjs_get_runtime_ptr(),contextPtr:this.exports.qjs_get_context_ptr(),extensions:this.loadedExtensions.map(ext=>({name:ext.name,memoryBase:ext.memoryBase,tableBase:ext.tableBase,initFn:ext.initFn}))}}registerHostCallback(name,fn){this.hostCallbacks.set(name,fn)}dispose(){this.disposed||(this.disposed=!0,this._global=null,this._undefined=null,this._null=null,this._true=null,this._false=null,this._ownedHandles.clear(),this.hostCallbacks.clear(),this._activeScope=null,this.exports=null,this.instance=null,this.module=null)}[Symbol.dispose](){this.dispose()}assertNotDisposed(){if(this.disposed)throw new Error("QuickJS instance has been disposed")}_getExports(){return this.exports}_getMemory(){return this.exports.memory}_writeString(str){return this.writeString(str)}_readCString(ptr){return this.readCString(ptr)}};function stringKeyNeedsValuePath(key){return key.includes("\0")||LONE_SURROGATE_RE.test(key)}var wtf8Decoder=new TextDecoder,wtf8Encoder=new TextEncoder,LONE_SURROGATE_RE=/(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF]))|(?:(?<![\uD800-\uDBFF])[\uDC00-\uDFFF])/;function encodeWtf8(str){if(!LONE_SURROGATE_RE.test(str))return wtf8Encoder.encode(str);let bytes=[];for(let i=0;i<str.length;i++){let code=str.charCodeAt(i);if(code<128)bytes.push(code);else if(code<2048)bytes.push(192|code>>6,128|code&63);else if(code>=55296&&code<=56319&&i+1<str.length){let next=str.charCodeAt(i+1);if(next>=56320&&next<=57343){let cp=65536+(code-55296<<10)+(next-56320);bytes.push(240|cp>>18,128|cp>>12&63,128|cp>>6&63,128|cp&63),i++;continue}bytes.push(224|code>>12,128|code>>6&63,128|code&63)}else bytes.push(224|code>>12,128|code>>6&63,128|code&63)}return new Uint8Array(bytes)}function decodeWtf8(bytes){let hasSurrogateSequence=!1;for(let i2=0;i2<bytes.length-1;i2++)if(bytes[i2]===237&&bytes[i2+1]>=160&&bytes[i2+1]<=191){hasSurrogateSequence=!0;break}if(!hasSurrogateSequence)return wtf8Decoder.decode(bytes);let out="",i=0;for(;i<bytes.length;){let b0=bytes[i];if(b0<128)out+=String.fromCharCode(b0),i+=1;else if(b0<224)out+=String.fromCharCode((b0&31)<<6|bytes[i+1]&63),i+=2;else if(b0<240)out+=String.fromCharCode((b0&15)<<12|(bytes[i+1]&63)<<6|bytes[i+2]&63),i+=3;else{let cp=(b0&7)<<18|(bytes[i+1]&63)<<12|(bytes[i+2]&63)<<6|bytes[i+3]&63;out+=String.fromCodePoint(cp),i+=4}}return out}var JSException=class extends Error{handle;#name;#message;#stack;constructor(handle){let env_1={stack:[],error:void 0,hasError:!1};try{super(),this.handle=handle,delete this.stack;let msgHandle=__addDisposableResource(env_1,handle.getProp("message"),!1);this.#name=handle.getProp("name").consume(h=>h.isUndefined?"Error":h.toString()),this.#message=msgHandle.isUndefined?handle.toString():msgHandle.toString(),this.#stack=handle.getProp("stack").consume(h=>h.isUndefined?void 0:h.toString())}catch(e_1){env_1.error=e_1,env_1.hasError=!0}finally{__disposeResources(env_1)}}get name(){return this.#name}set name(v){this.#name=v}get message(){return this.#message}set message(v){this.#message=v}get stack(){return this.#stack}set stack(v){this.#stack=v}dispose(){this.handle.dispose()}[Symbol.dispose](){this.handle.dispose()}},JSValueHandle=class _JSValueHandle{vm;ptr;disposed_=!1;singleton;borrowed;_onDispose;constructor(vm,ptr,singleton=!1,borrowed=!1){this.vm=vm,this.ptr=ptr,this.singleton=singleton,this.borrowed=borrowed,!singleton&&!borrowed&&vm._activeScope?.add(this)}get _isBorrowed(){return this.borrowed}get disposed(){return this.disposed_}get isUndefined(){return this.vm._getExports().qjs_is_undefined(this.ptr)!==0}get isNull(){return this.vm._getExports().qjs_is_null(this.ptr)!==0}get isBool(){return this.vm._getExports().qjs_is_bool(this.ptr)!==0}get isNumber(){return this.vm._getExports().qjs_is_number(this.ptr)!==0}get isString(){return this.vm._getExports().qjs_is_string(this.ptr)!==0}get isSymbol(){return this.vm._getExports().qjs_is_symbol(this.ptr)!==0}get isBigInt(){return this.vm._getExports().qjs_is_big_int(this.ptr)!==0}get isObject(){return this.vm._getExports().qjs_is_object(this.ptr)!==0}get isArray(){return this.vm._getExports().qjs_is_array(this.ptr)!==0}get isFunction(){return this.vm._getExports().qjs_is_function(this.ptr)!==0}get isError(){return this.vm._getExports().qjs_is_error(this.ptr)!==0}get isPromise(){return this.vm._getExports().qjs_is_promise(this.ptr)!==0}get isArrayBuffer(){return this.vm._getExports().qjs_is_array_buffer(this.ptr)!==0}get isProxy(){return this.vm._getExports().qjs_is_proxy(this.ptr)!==0}get isMap(){return this.vm._getExports().qjs_is_map(this.ptr)!==0}get isSet(){return this.vm._getExports().qjs_is_set(this.ptr)!==0}get isDate(){return this.vm._getExports().qjs_is_date(this.ptr)!==0}get isRegExp(){return this.vm._getExports().qjs_is_regexp(this.ptr)!==0}get isWeakRef(){return this.vm._getExports().qjs_is_weak_ref(this.ptr)!==0}get isWeakMap(){return this.vm._getExports().qjs_is_weak_map(this.ptr)!==0}get isWeakSet(){return this.vm._getExports().qjs_is_weak_set(this.ptr)!==0}get isDataView(){return this.vm._getExports().qjs_is_data_view(this.ptr)!==0}get identity(){return this.vm._getExports().qjs_get_value_ptr(this.ptr)}toBoolean(){return this.vm._getExports().qjs_get_bool(this.ptr)!==0}get classId(){return this.vm._getExports().qjs_get_class_id(this.ptr)}get className(){let h=new _JSValueHandle(this.vm,this.vm._getExports().qjs_get_class_name(this.ptr));if(this.vm._getExports().qjs_is_exception(h.ptr)!==0)throw h.dispose(),new JSException(this.vm.getException());try{return h.isUndefined?void 0:h.toString()}finally{h.dispose()}}get promiseState(){return this.vm._getExports().qjs_promise_state(this.ptr)}get typeof(){return this.vm.typeof(this)}get length(){let h=this.getProp("length"),n=h.toNumber();return h.dispose(),n}get constructorName(){let ctor=this.getProp("constructor");if(ctor.isUndefined||ctor.isNull){ctor.dispose();return}let name=ctor.getProp("name");if(ctor.dispose(),name.isUndefined||name.isNull){name.dispose();return}let result=name.toString();return name.dispose(),result}keys(){let e=this.vm._getExports(),keysPtr=e.qjs_get_own_property_names(this.ptr),keysHandle=new _JSValueHandle(this.vm,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),[];let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let result=[];for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new _JSValueHandle(this.vm,keyPtr);result.push(keyHandle.toString()),keyHandle.dispose()}return keysHandle.dispose(),result}getOwnPropertyNames(){let e=this.vm._getExports(),keysPtr=e.qjs_get_own_property_names_all(this.ptr),keysHandle=new _JSValueHandle(this.vm,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),[];let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let result=[];for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new _JSValueHandle(this.vm,keyPtr);result.push(keyHandle.toString()),keyHandle.dispose()}return keysHandle.dispose(),result}getOwnPropertyKeys(){let e=this.vm._getExports(),keysPtr=e.qjs_get_own_property_keys(this.ptr),keysHandle=new _JSValueHandle(this.vm,keysPtr);if(e.qjs_is_exception(keysHandle.ptr)!==0)return keysHandle.dispose(),[];let lenHandle=keysHandle.getProp("length"),len=e.qjs_get_float64(lenHandle.ptr);lenHandle.dispose();let result=[];for(let i=0;i<len;i++){let keyPtr=e.qjs_get_prop_uint32(keysHandle.ptr,i),keyHandle=new _JSValueHandle(this.vm,keyPtr);keyHandle.isSymbol?result.push(keyHandle):(result.push(keyHandle.toString()),keyHandle.dispose())}return keysHandle.dispose(),result}getOwnPropertyDescriptor(key){let env_2={stack:[],error:void 0,hasError:!1};try{let e=this.vm._getExports(),keyHandle,keyPtr;typeof key=="string"?(keyHandle=this.vm.newString(key),keyPtr=keyHandle.ptr):keyPtr=key.ptr;let descPtr=e.qjs_get_own_property_descriptor(this.ptr,keyPtr);if(keyHandle?.dispose(),descPtr===0)return;let descHandle=__addDisposableResource(env_2,new _JSValueHandle(this.vm,descPtr),!1);if(e.qjs_is_exception(descHandle.ptr)!==0)throw new JSException(this.vm.getException());let enumerable=descHandle.getProp("enumerable").consume(h=>e.qjs_get_bool(h.ptr)!==0),configurable=descHandle.getProp("configurable").consume(h=>e.qjs_get_bool(h.ptr)!==0);return descHandle.hasOwnProperty("value")?{value:descHandle.getProp("value"),writable:descHandle.getProp("writable").consume(h=>e.qjs_get_bool(h.ptr)!==0),enumerable,configurable}:{get:descHandle.getProp("get"),set:descHandle.getProp("set"),enumerable,configurable}}catch(e_2){env_2.error=e_2,env_2.hasError=!0}finally{__disposeResources(env_2)}}hasOwnProperty(name){if(stringKeyNeedsValuePath(name)){let env_3={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_3,this.vm.newString(name),!1);return this.vm._getExports().qjs_has_own_property_value(this.ptr,keyHandle.ptr)===1}catch(e_3){env_3.error=e_3,env_3.hasError=!0}finally{__disposeResources(env_3)}}let{ptr:namePtr}=this.vm._writeString(name),result=this.vm._getExports().qjs_has_own_property(this.ptr,namePtr);return this.vm._getExports().wasm_free(namePtr),result===1}propertyIsEnumerable(name){if(stringKeyNeedsValuePath(name)){let env_4={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_4,this.vm.newString(name),!1);return this.vm._getExports().qjs_property_is_enumerable_value(this.ptr,keyHandle.ptr)===1}catch(e_4){env_4.error=e_4,env_4.hasError=!0}finally{__disposeResources(env_4)}}let{ptr:namePtr}=this.vm._writeString(name),result=this.vm._getExports().qjs_property_is_enumerable(this.ptr,namePtr);return this.vm._getExports().wasm_free(namePtr),result===1}getPrototypeOf(){let protoPtr=this.vm._getExports().qjs_get_prototype_of(this.ptr);return new _JSValueHandle(this.vm,protoPtr)}getProxyTarget(){let ptr=this.vm._getExports().qjs_get_proxy_target(this.ptr),handle=new _JSValueHandle(this.vm,ptr);if(this.vm._getExports().qjs_is_exception(handle.ptr)!==0)throw handle.dispose(),new JSException(this.vm.getException());return handle}getProxyHandler(){let ptr=this.vm._getExports().qjs_get_proxy_handler(this.ptr),handle=new _JSValueHandle(this.vm,ptr);if(this.vm._getExports().qjs_is_exception(handle.ptr)!==0)throw handle.dispose(),new JSException(this.vm.getException());return handle}getProp(name){if(stringKeyNeedsValuePath(name)){let env_5={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_5,this.vm.newString(name),!1);return this.vm.getProp(this,keyHandle)}catch(e_5){env_5.error=e_5,env_5.hasError=!0}finally{__disposeResources(env_5)}}let{ptr:namePtr}=this.vm._writeString(name),resultPtr=this.vm._getExports().qjs_get_prop_string(this.ptr,namePtr);return this.vm._getExports().wasm_free(namePtr),new _JSValueHandle(this.vm,resultPtr)}setProp(name,value){if(stringKeyNeedsValuePath(name)){let env_6={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_6,this.vm.newString(name),!1);this.vm.setProp(this,keyHandle,value);return}catch(e_6){env_6.error=e_6,env_6.hasError=!0}finally{__disposeResources(env_6)}}let{ptr:namePtr}=this.vm._writeString(name);this.vm._getExports().qjs_set_prop_string(this.ptr,namePtr,value.ptr),this.vm._getExports().wasm_free(namePtr)}defineProp(key,value,descriptor){let flags=0;if(descriptor?.configurable&&(flags|=1),descriptor?.writable&&(flags|=2),descriptor?.enumerable&&(flags|=4),typeof key=="string"){if(stringKeyNeedsValuePath(key)){let env_7={stack:[],error:void 0,hasError:!1};try{let keyHandle=__addDisposableResource(env_7,this.vm.newString(key),!1);this.vm._getExports().qjs_define_prop_value(this.ptr,keyHandle.ptr,value.ptr,flags);return}catch(e_7){env_7.error=e_7,env_7.hasError=!0}finally{__disposeResources(env_7)}}let{ptr:namePtr}=this.vm._writeString(key);this.vm._getExports().qjs_define_prop_string(this.ptr,namePtr,value.ptr,flags),this.vm._getExports().wasm_free(namePtr)}else this.vm._getExports().qjs_define_prop_value(this.ptr,key.ptr,value.ptr,flags)}toNumber(){return this.vm._getExports().qjs_get_float64(this.ptr)}toBigInt(){let e=this.vm._getExports(),loPtr=e.wasm_malloc(4),hiPtr=e.wasm_malloc(4);if(e.qjs_get_big_int64(this.ptr,loPtr,hiPtr)!==0)throw e.wasm_free(loPtr),e.wasm_free(hiPtr),new Error("Failed to convert value to BigInt");let view=new DataView(e.memory.buffer),lo=view.getUint32(loPtr,!0),hi=view.getInt32(hiPtr,!0);return e.wasm_free(loPtr),e.wasm_free(hiPtr),BigInt(hi)<<32n|BigInt(lo)}toArrayBuffer(){let e=this.vm._getExports(),lenOutPtr=e.wasm_malloc(4);if(e.qjs_is_array_buffer(this.ptr)){let dataPtr=e.qjs_get_array_buffer(this.ptr,lenOutPtr);if(dataPtr===0)throw e.wasm_free(lenOutPtr),new Error("Failed to get ArrayBuffer data");let len=new DataView(e.memory.buffer).getUint32(lenOutPtr,!0);return e.wasm_free(lenOutPtr),new Uint8Array(e.memory.buffer,dataPtr,len).slice().buffer}e.wasm_free(lenOutPtr);let byteOffsetPtr=e.wasm_malloc(4),byteLengthPtr=e.wasm_malloc(4),bytesPerElemPtr=e.wasm_malloc(4),abPtr=e.qjs_get_typed_array_buffer(this.ptr,byteOffsetPtr,byteLengthPtr,bytesPerElemPtr),abHandle=new _JSValueHandle(this.vm,abPtr);if(this.vm._getExports().qjs_is_exception(abHandle.ptr)!==0)throw abHandle.dispose(),e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr),new Error("Value is not an ArrayBuffer or typed array");let view=new DataView(e.memory.buffer),byteOffset=view.getUint32(byteOffsetPtr,!0),byteLength=view.getUint32(byteLengthPtr,!0);e.wasm_free(byteOffsetPtr),e.wasm_free(byteLengthPtr),e.wasm_free(bytesPerElemPtr);let abLenPtr=e.wasm_malloc(4),abDataPtr=e.qjs_get_array_buffer(abHandle.ptr,abLenPtr);if(e.wasm_free(abLenPtr),abHandle.dispose(),abDataPtr===0)throw new Error("Failed to get ArrayBuffer data from typed array");return new Uint8Array(e.memory.buffer,abDataPtr+byteOffset,byteLength).slice().buffer}toUint8Array(){return new Uint8Array(this.toArrayBuffer())}toString(){let e=this.vm._getExports(),lenPtr=e.wasm_malloc(4);if(lenPtr===0)throw new Error("wasm_malloc failed");try{let cstrPtr=e.qjs_get_string_len(this.ptr,lenPtr);if(cstrPtr===0)return"<null>";let len=new DataView(e.memory.buffer).getUint32(lenPtr,!0),bytes=new Uint8Array(e.memory.buffer,cstrPtr,len),str=decodeWtf8(bytes);return e.qjs_free_cstring(cstrPtr),str}finally{e.wasm_free(lenPtr)}}consume(fn){try{return fn(this)}finally{this.dispose()}}dup(){return new _JSValueHandle(this.vm,this.vm._getExports().qjs_dup_value(this.ptr))}dispose(){if(!(this.singleton||this.borrowed)&&!this.disposed_){this.disposed_=!0,this._onDispose?.(),this._onDispose=void 0;let exports=this.vm._getExports();exports&&exports.qjs_free_value(this.ptr)}}[Symbol.dispose](){this.dispose()}};var IMAGE_HELPER_EXPECTS='image expects a non-empty image URL string, an object with image_url, or an image block { type: "image", data, mimeType }',PRELUDE_SOURCE=`(function (bridge, toolsJson, globalsJson, storeJson) {
3
3
  "use strict";
4
+
5
+ // Freeze every object reachable from the built-in globals, plus the intrinsics that are only
6
+ // reachable from instances (iterator and generator prototypes, %TypedArray%).
7
+ //
8
+ // Freezing alone breaks ordinary code through the "override mistake": a data property that is
9
+ // read-only on a prototype cannot be assigned on an instance either, so
10
+ // this.name = "MyError" in an Error subclass would throw. Commonly overridden properties
11
+ // become accessors whose setter defines an own property on the instance instead.
12
+ (function lockdown() {
13
+ const OVERRIDABLE = new Set(["constructor", "name", "message", "toString", "toLocaleString", "valueOf", "toJSON"]);
14
+ const seen = new Set([globalThis]);
15
+ const queue = [];
16
+ const add = (value) => {
17
+ if ((typeof value === "object" && value !== null) || typeof value === "function") {
18
+ if (!seen.has(value)) {
19
+ seen.add(value);
20
+ queue.push(value);
21
+ }
22
+ }
23
+ };
24
+
25
+ // Accessors from an object literal have no own prototype object, unlike function expressions,
26
+ // whose prototype.constructor would be converted again without end.
27
+ function allowOverride(object, key, value, enumerable) {
28
+ const { get, set } = Object.getOwnPropertyDescriptor(
29
+ {
30
+ get accessor() {
31
+ return value;
32
+ },
33
+ set accessor(next) {
34
+ if (this === object) {
35
+ throw new TypeError("Cannot assign to read only property '" + String(key) + "' of a built-in");
36
+ }
37
+ if ((typeof this !== "object" || this === null) && typeof this !== "function") return;
38
+ Object.defineProperty(this, key, { value: next, writable: true, enumerable: true, configurable: true });
39
+ },
40
+ },
41
+ "accessor",
42
+ );
43
+ Object.defineProperty(object, key, { get, set, enumerable, configurable: false });
44
+ add(get);
45
+ add(set);
46
+ }
47
+
48
+ for (const key of Reflect.ownKeys(globalThis)) {
49
+ const descriptor = Object.getOwnPropertyDescriptor(globalThis, key);
50
+ add(descriptor.value);
51
+ add(descriptor.get);
52
+ add(descriptor.set);
53
+ if ("value" in descriptor && descriptor.configurable) {
54
+ Object.defineProperty(globalThis, key, { writable: false, configurable: false });
55
+ }
56
+ }
57
+ add(Object.getPrototypeOf(function* () {}));
58
+ add(Object.getPrototypeOf(async function () {}));
59
+ add(Object.getPrototypeOf(async function* () {}));
60
+ add(Object.getPrototypeOf(Int8Array));
61
+ add(Object.getPrototypeOf([][Symbol.iterator]()));
62
+ add(Object.getPrototypeOf(new Map()[Symbol.iterator]()));
63
+ add(Object.getPrototypeOf(new Set()[Symbol.iterator]()));
64
+ add(Object.getPrototypeOf(""[Symbol.iterator]()));
65
+ add(Object.getPrototypeOf(/a/[Symbol.matchAll]("")));
66
+ if (typeof Iterator === "function") {
67
+ if (typeof Iterator.prototype.map === "function") add(Object.getPrototypeOf([].values().map((x) => x)));
68
+ if (typeof Iterator.from === "function") add(Object.getPrototypeOf(Iterator.from({ next() {} })));
69
+ }
70
+
71
+ while (queue.length > 0) {
72
+ const object = queue.pop();
73
+ add(Object.getPrototypeOf(object));
74
+ const descriptors = Object.getOwnPropertyDescriptors(object);
75
+ for (const key of Reflect.ownKeys(descriptors)) {
76
+ const descriptor = descriptors[key];
77
+ if ("value" in descriptor) {
78
+ add(descriptor.value);
79
+ if (
80
+ descriptor.writable &&
81
+ descriptor.configurable &&
82
+ (object === Object.prototype || OVERRIDABLE.has(key))
83
+ ) {
84
+ allowOverride(object, key, descriptor.value, descriptor.enumerable);
85
+ }
86
+ } else {
87
+ add(descriptor.get);
88
+ add(descriptor.set);
89
+ }
90
+ }
91
+ Object.freeze(object);
92
+ }
93
+ })();
4
94
  const stringify = JSON.stringify;
5
95
  const parse = JSON.parse;
6
96
  const promiseThen = Promise.prototype.then;
@@ -45,11 +135,17 @@ import{parentPort,workerData}from"node:worker_threads";function createWasiShim(m
45
135
  }
46
136
  }
47
137
 
138
+ // The host requires string fields. A script can set an error's name or message to anything, so
139
+ // they are coerced, and a value whose coercion throws gets a placeholder.
48
140
  function describeError(error) {
49
- if (error instanceof ErrorCtor) {
50
- return stringify({ name: error.name, message: error.message, stack: errorText(error) });
141
+ try {
142
+ if (error instanceof ErrorCtor) {
143
+ return stringify({ name: String(error.name), message: String(error.message), stack: errorText(error) });
144
+ }
145
+ return stringify({ message: String(format(error)) });
146
+ } catch {
147
+ return stringify({ message: "The script threw a value that cannot be described" });
51
148
  }
52
- return stringify({ message: format(error) });
53
149
  }
54
150
 
55
151
  function caller(kind, name, spread) {
@@ -242,9 +338,9 @@ import{parentPort,workerData}from"node:worker_threads";function createWasiShim(m
242
338
  }
243
339
  if (typeof value.type !== "string") throw new TypeErrorCtor(${JSON.stringify(IMAGE_HELPER_EXPECTS)});
244
340
  if (value.type !== "image") {
245
- throw new TypeErrorCtor('image only accepts MCP image blocks, got "' + value.type + '"');
341
+ throw new TypeErrorCtor('image only accepts image blocks, got "' + value.type + '"');
246
342
  }
247
- if (typeof value.data !== "string" || value.data === "") throw new TypeErrorCtor("image expected MCP image data");
343
+ if (typeof value.data !== "string" || value.data === "") throw new TypeErrorCtor("image expected image block data");
248
344
  if (value.data.toLowerCase().startsWith("data:")) return value.data;
249
345
  return "data:;base64," + value.data;
250
346
  }
@@ -301,7 +397,7 @@ import{parentPort,workerData}from"node:worker_threads";function createWasiShim(m
301
397
  const console = {};
302
398
  for (const level of ["log", "info", "warn", "error", "debug"]) {
303
399
  console[level] = (...args) => {
304
- output("text", args.map(format).join(" "));
400
+ output("console", args.map(format).join(" "));
305
401
  };
306
402
  }
307
403
  Object.freeze(console);
@@ -314,12 +410,20 @@ import{parentPort,workerData}from"node:worker_threads";function createWasiShim(m
314
410
  Object.defineProperty(globalThis, "exit", { value: exit, enumerable: true });
315
411
 
316
412
  return {
317
- settle(id, ok, payload) {
413
+ settle(id, ok, payload, propertiesJson) {
318
414
  const entry = pending.get(id);
319
415
  if (!entry) return;
320
416
  pending.delete(id);
321
417
  if (!ok) {
322
- entry.reject(new ErrorCtor(payload));
418
+ const error = new ErrorCtor(payload);
419
+ if (propertiesJson !== undefined) {
420
+ const properties = parse(propertiesJson);
421
+ for (const key of Object.keys(properties)) {
422
+ if (key === "name" || key === "message" || key === "stack") continue;
423
+ Object.defineProperty(error, key, { value: properties[key], writable: true, enumerable: true, configurable: true });
424
+ }
425
+ }
426
+ entry.reject(error);
323
427
  return;
324
428
  }
325
429
  let value;
@@ -369,6 +473,6 @@ import{parentPort,workerData}from"node:worker_threads";function createWasiShim(m
369
473
  return true;
370
474
  },
371
475
  };
372
- })`;function isHostToWorkerMessage(value){return typeof value=="object"&&value!==null&&value.type==="result"}function post(message){parentPort?.postMessage(message)}function crash(error){post({type:"crash",message:error instanceof Error?`${error.name}: ${error.message}`:String(error)})}function discardOutput(memory){return{fd_write(_fd,iovsPtr,iovsLen,nwrittenPtr){let view=new DataView(memory.buffer),written=0;for(let i=0;i<iovsLen;i++)written+=view.getUint32(iovsPtr+i*8+4,!0);return view.setUint32(nwrittenPtr,written,!0),0}}}function describeException(error){let head=error.message?`${error.name}: ${error.message}`:error.name,stack=error.stack?.trimEnd();return JSON.stringify({name:error.name,message:error.message,stack:stack?`${head}
373
- ${stack}`:head})}async function main(data){let interrupt=new Int32Array(data.interrupt),vm=await QuickJS.create({wasm:data.wasm,memoryLimit:data.memoryLimitBytes,maxStackSize:MAX_STACK_SIZE,interruptHandler:()=>Atomics.load(interrupt,0)!==0,wasi:discardOutput}),bridge=vm.newFunction("bridge",(kind,a,b,c)=>{switch(kind.toString()){case"call":case"global":post({type:"call",id:a.toNumber(),target:kind.toString()==="call"?"tool":"global",name:b.toString(),args:c===void 0||c.isUndefined?void 0:c.toString()});break;case"output":post({type:"output",item:a.toString()==="image"?{type:"image",data:b.toString(),mimeType:c.toString()}:{type:"text",text:b.toString()}});break;case"done":a.toBoolean()?post({type:"done",ok:!0,value:b===void 0||b.isUndefined?void 0:b.toString(),writes:c.toString()}):post({type:"done",ok:!1,error:b.toString()});break}return vm.undefined}),api=vm.withScope(scope=>scope.escape(vm.callFunction(vm.evalCode(PRELUDE_SOURCE,"codemode-prelude.js"),vm.undefined,bridge,vm.newString(JSON.stringify(data.tools)),vm.newString(JSON.stringify(data.globals)),vm.newString(JSON.stringify(data.store))))),settle=api.getProp("settle"),run=api.getProp("run"),stalled=api.getProp("stalled"),drain=()=>{vm.executePendingJobs(),vm.callFunction(stalled,api).dispose()};parentPort?.on("message",message=>{if(isHostToWorkerMessage(message))try{vm.withScope(()=>{vm.callFunction(settle,api,vm.newNumber(message.id),message.ok?vm.true:vm.false,message.payload===void 0?vm.undefined:vm.newString(message.payload))}),drain()}catch(error){crash(error)}});let fn;try{fn=vm.evalCode(`(async (tools, console) => {${data.code}
374
- })`,"codemode.js")}catch(error){if(!(error instanceof JSException))throw error;post({type:"done",ok:!1,error:describeException(error)});return}vm.callFunction(run,api,fn).dispose(),fn.dispose(),drain()}parentPort&&main(workerData).catch(crash);
476
+ })`;var DETERMINISTIC_VERSION=1;function fnv1a(text){let hash=2166136261;for(let index=0;index<text.length;index++)hash^=text.charCodeAt(index),hash=Math.imul(hash,16777619);return(hash>>>0).toString(16).padStart(8,"0")}var PRELUDE_HASH=fnv1a(PRELUDE_SOURCE);function prng(seed){let state=seed>>>0;return()=>{state=state+1831565813>>>0;let value=Math.imul(state^state>>>15,1|state);return value=value+Math.imul(value^value>>>7,61|value)^value,(value^value>>>14)>>>0}}function deterministicWasi(clock){let random=prng(clock.seed^2654435769);return memory=>({...discardOutput(memory),clock_time_get(clockId,_precision,resultPtr){let nanoseconds;return clock.creating?nanoseconds=clockId===0?BigInt(clock.seed+1)*1000n:0n:clockId===0?nanoseconds=BigInt(Math.round(clock.now))*1000000n:nanoseconds=BigInt(Math.round(clock.now-clock.startedAt))*1000000n,new DataView(memory.buffer).setBigUint64(resultPtr,nanoseconds,!0),0},random_get(bufPtr,bufLen){let bytes=new Uint8Array(memory.buffer,bufPtr,bufLen);for(let index=0;index<bufLen;index+=4){let value=random();for(let byte=0;byte<4&&index+byte<bufLen;byte++)bytes[index+byte]=value>>>byte*8}return 0}})}function discardOutput(memory){return{fd_write(_fd,iovsPtr,iovsLen,nwrittenPtr){let view=new DataView(memory.buffer),written=0;for(let i=0;i<iovsLen;i++)written+=view.getUint32(iovsPtr+i*8+4,!0);return view.setUint32(nwrittenPtr,written,!0),0}}}function describeException(error){let head=error.message?`${error.name}: ${error.message}`:error.name,stack=error.stack?.trimEnd();return JSON.stringify({name:error.name,message:error.message,stack:stack?`${head}
477
+ ${stack}`:head})}var JOBS_PER_POLL=50;function crashMessage(error){return{type:"crash",message:error instanceof Error?`${error.name}: ${error.message}`:String(error)}}async function startVm(options){let{data,post:post2}=options,maxStackSize=options.maxStackSize??MAX_STACK_SIZE,deterministic=data.deterministic,clock=deterministic&&{creating:!0,startedAt:deterministic.startedAt,now:deterministic.startedAt,seed:deterministic.seed>>>0},vm=await QuickJS.create({wasm:options.wasm,memoryLimit:data.memoryLimitBytes,maxStackSize,interruptHandler:options.shouldInterrupt,wasi:clock?deterministicWasi(clock):discardOutput,...clock?{timezoneOffset:0,intrinsics:Intrinsics.ALL&~Intrinsics.WEAK_REF}:{}});clock&&(clock.creating=!1);let disposed=!1,issued=0,nextSeq=1,current=0,early=new Map,apply=message=>{vm.withScope(()=>{vm.callFunction(settle,api,vm.newNumber(message.id),message.ok?vm.true:vm.false,message.payload===void 0?vm.undefined:vm.newString(message.payload),message.properties===void 0?vm.undefined:vm.newString(message.properties))}),drain()},session={deliver(message){if(!disposed)try{if(!clock){apply(message);return}let{seq}=message;if(seq===void 0||!Number.isInteger(seq)||seq<nextSeq||early.has(seq))throw new Error(`Result ${message.id} has sequence number ${seq}, expected ${nextSeq} or later, once`);early.set(seq,message);for(let next=early.get(nextSeq);next!==void 0;next=early.get(nextSeq))early.delete(nextSeq),next.now!==void 0&&Number.isFinite(next.now)&&(clock.now=Math.max(clock.now,next.now)),current=nextSeq,apply(next),post2({type:"idle",seq:nextSeq,issued}),nextSeq++}catch(error){post2(crashMessage(error))}},dispose(){disposed||(disposed=!0,vm.dispose())}},api,settle,stalled,exports=vm._getExports(),drain=()=>{let jobs=0;for(;exports.qjs_is_job_pending();){if(exports.qjs_execute_pending_job()<0)throw new Error("Promise job failed");if(++jobs%JOBS_PER_POLL===0&&options.shouldInterrupt())throw new Error("Execution interrupted")}vm.callFunction(stalled,api).dispose()};try{let bridge=vm.newFunction("bridge",(kind,a,b,c)=>{switch(kind.toString()){case"call":case"global":issued++,post2({type:"call",id:a.toNumber(),target:kind.toString()==="call"?"tool":"global",name:b.toString(),args:c===void 0||c.isUndefined?void 0:c.toString()});break;case"output":post2({type:"output",item:a.toString()==="image"?{type:"image",data:b.toString(),mimeType:c.toString()}:a.toString()==="console"?{type:"text",text:b.toString(),console:!0}:{type:"text",text:b.toString()}});break;case"done":{let during=clock?{during:{seq:current,issued}}:{};a.toBoolean()?post2({type:"done",ok:!0,value:b===void 0||b.isUndefined?void 0:b.toString(),writes:c.toString(),...during}):post2({type:"done",ok:!1,error:b.toString(),...during});break}}return vm.undefined});api=vm.withScope(scope=>scope.escape(vm.callFunction(vm.evalCode(PRELUDE_SOURCE,"codemode-prelude.js"),vm.undefined,bridge,vm.newString(JSON.stringify(data.tools)),vm.newString(JSON.stringify(data.globals)),vm.newString(JSON.stringify(data.store))))),settle=api.getProp("settle");let run=api.getProp("run");if(stalled=api.getProp("stalled"),clock){let versions=vm.versions,budget=options.interruptBudget??"none";post2({type:"started",fingerprint:`quickjs-wasi ${versions["quickjs-wasi"]}, quickjs ${versions.quickjs}, prelude ${PRELUDE_HASH}, deterministic ${DETERMINISTIC_VERSION}, stack ${maxStackSize}, heap ${data.memoryLimitBytes??"none"}, budget ${budget}`})}let fn;try{fn=vm.evalCode(`(async (tools, console) => {${data.code}
478
+ })`,"codemode.js")}catch(error){if(!(error instanceof JSException))throw error;return post2({type:"done",ok:!1,error:describeException(error)}),session}vm.callFunction(run,api,fn).dispose(),fn.dispose(),drain(),clock&&post2({type:"idle",seq:0,issued})}catch(error){post2(crashMessage(error))}return session}function post(message){parentPort?.postMessage(message)}async function main(data){let interrupt=new Int32Array(data.interrupt),session=await startVm({data,wasm:data.wasm,post,shouldInterrupt:()=>Atomics.load(interrupt,0)!==0});parentPort?.on("message",message=>{isHostToWorkerMessage(message)&&session.deliver(message)})}parentPort&&main(workerData).catch(error=>{post({type:"crash",message:error instanceof Error?`${error.name}: ${error.message}`:String(error)})});
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{ARMIN_HEIGHT,ARMIN_WIDTH,isArminPixel}from"./chunk-RAQ6TU76.js";import{backgroundAnsi,colorToRgb,foregroundAnsi,formatKeyText,getKeybindings,indexedColor,rgbColor,theme,visibleWidth}from"./chunk-HZNN636Z.js";import"./chunk-6QGV3IWD.js";import"./chunk-BSS6T6KQ.js";import"./chunk-5AGIVGSV.js";import"./chunk-JXWJOIH4.js";var DEPTH=.7,FLY_START=.1,FLY_DURATION=1.3,START_SCALE=.1;function createModel(columns,rows,pixel,options){let blocks=[];for(let row=0;row<rows;row++)for(let column=0;column<columns;column++){let color=pixel(column,row);color&&blocks.push({home:[column,row,0],color})}return{columns,rows,blocks,cameraDistance:options.cameraDistance,radius:Math.hypot(columns/2,rows/2,1+DEPTH/2),widthShare:options.widthShare,puzzleMoves:random=>options.puzzleMoves(random,blocks.length),origin:options.origin}}var CORAL=[228,138,122],BLUE=[79,142,179],YELLOW=[234,182,93],PI_LOGO_PIXELS=["ccc.","b.c.","bb.y","b..y"],PI_LOGO_COLORS={c:CORAL,b:BLUE,y:YELLOW};function piLogoModel(origin){return createModel(4,4,(column,row)=>PI_LOGO_COLORS[PI_LOGO_PIXELS[row][column]],{cameraDistance:10,widthShare:.35,puzzleMoves:random=>random<.4?2:1,origin})}function arminModel(color){return createModel(ARMIN_WIDTH,ARMIN_HEIGHT,(column,row)=>isArminPixel(column,row)?color:void 0,{cameraDistance:80,widthShare:.45,puzzleMoves:(random,blockCount)=>Math.round(blockCount*(.03+random*.04)),origin:void 0})}var PUZZLE_START=FLY_START+FLY_DURATION+3,PUZZLE_STEP=.3,PUZZLE_STEPS=12,PUZZLE_RETURN=1,PUZZLE_HOLD=.6,PUZZLE_CYCLE=PUZZLE_STEP*PUZZLE_STEPS+PUZZLE_RETURN+PUZZLE_HOLD,PUZZLE_MOVES=[[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]];function shuffleSteps(model,cycle){let{columns,rows}=model,positions=model.blocks.map(block=>block.home),steps=[positions],lastMoved=new Set,random=cycle*7919+1,next=()=>hash(random++),key=([x,y,z])=>((z+1)*rows+y)*columns+x;for(let step=0;step<PUZZLE_STEPS;step++){let occupied=new Set(positions.map(key)),nextPositions=[...positions],moved=new Set,moveCount=model.puzzleMoves(next());for(let move=0;move<moveCount;move++){let candidates=[];for(let block=0;block<positions.length;block++){if(moved.has(block))continue;let[x,y,z]=positions[block];for(let[dx,dy,dz]of PUZZLE_MOVES){let target=[x+dx,y+dy,z+dz];target[0]<0||target[0]>=columns||target[1]<0||target[1]>=rows||target[2]<-1||target[2]>1||occupied.has(key(target))||candidates.push({block,target})}}let fresh=candidates.filter(candidate=>!lastMoved.has(candidate.block)),pool=fresh.length>0?fresh:candidates,choice=pool[Math.floor(next()*pool.length)];if(!choice)break;occupied.add(key(choice.target)),nextPositions[choice.block]=choice.target,moved.add(choice.block)}lastMoved.clear();for(let block of moved)lastMoved.add(block);positions=nextPositions,steps.push(positions)}return steps}var FRAME_MS=1e3/30,DUST_DURATION=.35,WAVE_SPREAD=.55,WAVE_JITTER=.12,DISSOLVE_END=FLY_START+WAVE_SPREAD+WAVE_JITTER+DUST_DURATION,BACKGROUND_FADE=.5,EXIT_DURATION=1.1,STARS_START=2.5,STARS_FADE=2,STAR_DENSITY=.018,STAR_TINTS=[[255,255,255],[170,195,255],[255,225,170],[255,190,205]],LOGO_COLOR_STEP=5,LIGHT_HALO_STRENGTH=.3,HALO_RADIUS_X=6,HALO_RADIUS_Y=3,HALO_LEVELS=32,STAR_ALPHA_LEVELS=8,STAR_FLICKER_LEVELS=3,HINT_FADE=.5,DOT_BITS=[1,8,2,16,4,32,64,128],BRAILLE=Array.from({length:256},(_,bits)=>String.fromCharCode(10240+bits)),LIGHT=normalize([-.45,-.6,.75]),HALF_VECTOR=normalize([LIGHT[0],LIGHT[1],LIGHT[2]+1]);function normalize(v){let length=Math.hypot(v[0],v[1],v[2]);return[v[0]/length,v[1]/length,v[2]/length]}function clamp01(value){return value<0?0:value>1?1:value}function smooth(value){let t=clamp01(value);return t*t*t*(t*(t*6-15)+10)}function easeOut(value){let t=1-clamp01(value);return 1-t*t*t}function mix(a,b,amount){return[a[0]+(b[0]-a[0])*amount,a[1]+(b[1]-a[1])*amount,a[2]+(b[2]-a[2])*amount]}function hash(value){let x=Math.imul(value^2654435769,2246822507);return x^=x>>>13,x=Math.imul(x,3266489909),x^=x>>>16,(x>>>0)/4294967296}function isLight([r,g,b]){return .2126*r+.7152*g+.0722*b>128}function toRgb(color){let{r,g,b}=colorToRgb(color);return[r,g,b]}function glyphInk(text,seed){return text.trim()===""?0:/^[.,:;'`\-_·]$/.test(text)?2:/^[\u2500-\u257f]$/.test(text)?3:4+Math.floor(seed*3)}var segmenter=new Intl.Segmenter;function parseScreen(lines,width,foreground,background){let palette=index=>toRgb(indexedColor(index));return lines.map(line=>{let cells=[],fg,bg,dim=!1,inverse=!1,applySgr=params=>{let codes=params===""?["0"]:params.split(";");for(let i2=0;i2<codes.length;i2++){let parts=codes[i2].split(":").map(part=>Number.parseInt(part,10)),code=parts[0]??0;if(code===38||code===48){let args;if(parts.length>1)args=parts.slice(1).filter(part=>!Number.isNaN(part));else{let kind=Number.parseInt(codes[i2+1]??"",10),count=kind===5?2:kind===2?4:1;args=codes.slice(i2+1,i2+1+count).map(part=>Number.parseInt(part,10)),i2+=count}let color;args[0]===5&&args[1]!==void 0?color=palette(args[1]):args[0]===2&&args.length>=4&&(color=[args[1],args[2],args[3]]),color&&(code===38?fg=color:bg=color)}else code===0?(fg=void 0,bg=void 0,dim=!1,inverse=!1):code===2?dim=!0:code===22?dim=!1:code===7?inverse=!0:code===27?inverse=!1:code>=30&&code<=37?fg=palette(code-30):code>=90&&code<=97?fg=palette(code-90+8):code===39?fg=void 0:code>=40&&code<=47?bg=palette(code-40):code>=100&&code<=107?bg=palette(code-100+8):code===49&&(bg=void 0)}},pushText=text=>{for(let{segment}of segmenter.segment(text)){let glyphWidth=visibleWidth(segment);if(glyphWidth===0||cells.length+glyphWidth>width)continue;let cellFg=fg??foreground,cellBg=bg;inverse&&(cellFg=bg??background,cellBg=fg??foreground),dim&&(cellFg=mix(cellFg,cellBg??background,.4));let cell={text:segment,width:glyphWidth,fg:cellFg,bg:cellBg,delay:0,ink:0,seed:0};cells.push(cell),glyphWidth===2&&cells.push({...cell,text:"",width:0})}},i=0;for(;i<line.length;){let sequenceStart=line.indexOf("\x1B",i);if(sequenceStart===-1){pushText(line.slice(i));break}sequenceStart>i&&pushText(line.slice(i,sequenceStart));let kind=line[sequenceStart+1];if(kind==="["){let end=sequenceStart+2;for(;end<line.length&&(line.charCodeAt(end)<64||line.charCodeAt(end)>126);)end++;line[end]==="m"&&applySgr(line.slice(sequenceStart+2,end)),i=end+1}else if(kind==="]"||kind==="_"||kind==="P"||kind==="^"){let bell=line.indexOf("\x07",sequenceStart+2),st=line.indexOf("\x1B\\",sequenceStart+2);if(bell===-1&&st===-1)break;i=bell!==-1&&(st===-1||bell<st)?bell+1:st+2}else i=sequenceStart+2}return cells})}function rotation(yaw,pitch,roll){let[sy,cy,sx,cx,sz,cz]=[Math.sin(yaw),Math.cos(yaw),Math.sin(pitch),Math.cos(pitch),Math.sin(roll),Math.cos(roll)],ry=[cy,0,sy,0,1,0,-sy,0,cy],rx=[1,0,0,0,cx,-sx,0,sx,cx],rz=[cz,-sz,0,sz,cz,0,0,0,1];return multiply(rz,multiply(rx,ry))}function multiply(a,b){let result=new Array(9);for(let row=0;row<3;row++)for(let column=0;column<3;column++)result[row*3+column]=a[row*3]*b[column]+a[row*3+1]*b[3+column]+a[row*3+2]*b[6+column];return result}var SPIN_RAMP=1.4,SPIN_SPEED=Math.PI*2/PUZZLE_CYCLE,SPIN_LINGER=.6,FIRST_FRONT_VIEW=PUZZLE_START+PUZZLE_STEP*PUZZLE_STEPS+PUZZLE_RETURN+PUZZLE_HOLD/2;function baseSpinPhase(time){let elapsed=time-FLY_START;if(elapsed<=0)return 0;let u=elapsed/SPIN_RAMP;return u<1?SPIN_SPEED*SPIN_RAMP*(u**6-3*u**5+2.5*u**4):SPIN_SPEED*(SPIN_RAMP*.5+elapsed-SPIN_RAMP)}var SPIN_ALIGNMENT=Math.PI*2-baseSpinPhase(FIRST_FRONT_VIEW)%(Math.PI*2);function spinPhase(time){return baseSpinPhase(time)+SPIN_ALIGNMENT*smooth((time-FLY_START)/FLY_DURATION)}function spinAngle(time){let phase=spinPhase(time);return phase-SPIN_LINGER*Math.sin(phase)}var BlockRaster=class{bits=new Uint8Array(0);counts=new Uint8Array(0);rgb=new Float32Array(0);haloAmount=new Float32Array(0);haloRgb=new Float32Array(0);width=0;height=0;depth=new Float32Array(0);faceIds=new Uint16Array(0);dirty;haloDirty;cameraDistance;constructor(cameraDistance){this.cameraDistance=cameraDistance}render(width,height,pose,boxes,background,haloStrength){let dotWidth=width*2,dotHeight=height*4;if(width!==this.width||height!==this.height)this.width=width,this.height=height,this.bits=new Uint8Array(width*height),this.counts=new Uint8Array(width*height),this.rgb=new Float32Array(width*height*3),this.haloAmount=new Float32Array(width*height),this.haloRgb=new Float32Array(width*height*3),this.haloDirty=void 0,this.depth=new Float32Array(dotWidth*dotHeight).fill(1/0),this.faceIds=new Uint16Array(dotWidth*dotHeight),this.dirty=void 0;else if(this.dirty){let{minX:minX2,minY:minY2,maxX:maxX2,maxY:maxY2}=this.dirty;for(let row=minY2;row<=maxY2;row++)this.bits.fill(0,row*width+minX2,row*width+maxX2+1),this.counts.fill(0,row*width+minX2,row*width+maxX2+1),this.rgb.fill(0,(row*width+minX2)*3,(row*width+maxX2+1)*3);this.dirty=void 0}if(this.haloDirty){let{minX:minX2,minY:minY2,maxX:maxX2,maxY:maxY2}=this.haloDirty;for(let row=minY2;row<=maxY2;row++)this.haloAmount.fill(0,row*width+minX2,row*width+maxX2+1),this.haloRgb.fill(0,(row*width+minX2)*3,(row*width+maxX2+1)*3);this.haloDirty=void 0}let m=rotation(pose.yaw,pose.pitch,pose.roll),{centerX,centerY,scale}=pose,cameraDistance=this.cameraDistance,origin=[m[6]*cameraDistance,m[7]*cameraDistance,m[8]*cameraDistance],light=isLight(background),faces=this.visibleFaces(m,origin,pose,boxes,dotWidth,dotHeight,light);if(faces.length===0)return;let minX=dotWidth,minY=dotHeight,maxX=-1,maxY=-1;for(let face of faces)minX=Math.min(minX,face.minX),minY=Math.min(minY,face.minY),maxX=Math.max(maxX,face.maxX),maxY=Math.max(maxY,face.maxY);if(maxX<minX||maxY<minY)return;let depth=this.depth,faceIds=this.faceIds;for(let faceIndex=0;faceIndex<faces.length;faceIndex++){let face=faces[faceIndex],a=face.axis,u=(a+1)%3,v=(a+2)%3,originA=origin[a],originU=origin[u],originV=origin[v],stepA=m[a]/scale,stepU=m[u]/scale,stepV=m[v]/scale,sx=(face.minX+.5-centerX)/scale;for(let dotY=face.minY;dotY<=face.maxY;dotY++){let sy=(dotY+.5-centerY)/scale,directionA=m[a]*sx+m[3+a]*sy-m[6+a]*cameraDistance,directionU=m[u]*sx+m[3+u]*sy-m[6+u]*cameraDistance,directionV=m[v]*sx+m[3+v]*sy-m[6+v]*cameraDistance,index=dotY*dotWidth+face.minX;for(let dotX=face.minX;dotX<=face.maxX;dotX++,index++){let t=(face.plane-originA)/directionA;if(t>0&&t<depth[index]){let hitU=originU+t*directionU,hitV=originV+t*directionV;hitU>=face.uMin&&hitU<=face.uMax&&hitV>=face.vMin&&hitV<=face.vMax&&(depth[index]=t,faceIds[index]=faceIndex+1)}directionA+=stepA,directionU+=stepU,directionV+=stepV}}}let bits=this.bits,counts=this.counts,rgb=this.rgb,cellMinX=width,cellMinY=height,cellMaxX=-1,cellMaxY=-1;for(let dotY=minY;dotY<=maxY;dotY++){let index=dotY*dotWidth+minX;for(let dotX=minX;dotX<=maxX;dotX++,index++){let id=faceIds[index];if(id===0)continue;let face=faces[id-1],fog=clamp01(.15-cameraDistance*(1-depth[index])*.12)*(light?.5:1);faceIds[index]=0,depth[index]=1/0;let cellX=dotX>>1,cellY=dotY>>2,cell=cellY*width+cellX;bits[cell]|=DOT_BITS[(dotY&3)*2+(dotX&1)],counts[cell]++,rgb[cell*3]+=face.red+(background[0]-face.red)*fog,rgb[cell*3+1]+=face.green+(background[1]-face.green)*fog,rgb[cell*3+2]+=face.blue+(background[2]-face.blue)*fog,cellX<cellMinX&&(cellMinX=cellX),cellX>cellMaxX&&(cellMaxX=cellX),cellY<cellMinY&&(cellMinY=cellY),cellY>cellMaxY&&(cellMaxY=cellY)}}cellMaxX>=0&&(this.dirty={minX:cellMinX,minY:cellMinY,maxX:cellMaxX,maxY:cellMaxY}),haloStrength>0&&this.renderHalo(haloStrength)}renderHalo(strength){let cells=this.dirty;if(!cells)return;let{width,height,counts,rgb}=this,minX=Math.max(0,cells.minX-HALO_RADIUS_X),maxX=Math.min(width-1,cells.maxX+HALO_RADIUS_X),minY=Math.max(0,cells.minY-HALO_RADIUS_Y),maxY=Math.min(height-1,cells.maxY+HALO_RADIUS_Y),regionWidth=maxX-minX+1,tent=radius=>{let weights=Array.from({length:radius*2+1},(_,i)=>radius+1-Math.abs(i-radius)),total=weights.reduce((sum,weight)=>sum+weight,0);return weights.map(weight=>weight/total)},weightsX=tent(HALO_RADIUS_X),weightsY=tent(HALO_RADIUS_Y),rows=cells.maxY-cells.minY+1,horizontal=new Float32Array(rows*regionWidth*4);for(let y=cells.minY;y<=cells.maxY;y++)for(let x=minX;x<=maxX;x++){let coverage=0,red=0,green=0,blue=0;for(let dx=-HALO_RADIUS_X;dx<=HALO_RADIUS_X;dx++){let sourceX=x+dx;if(sourceX<cells.minX||sourceX>cells.maxX)continue;let source=y*width+sourceX,count=counts[source];if(count===0)continue;let weight=weightsX[dx+HALO_RADIUS_X]/8;coverage+=count*weight,red+=rgb[source*3]*weight,green+=rgb[source*3+1]*weight,blue+=rgb[source*3+2]*weight}let target=((y-cells.minY)*regionWidth+(x-minX))*4;horizontal[target]=coverage,horizontal[target+1]=red,horizontal[target+2]=green,horizontal[target+3]=blue}for(let y=minY;y<=maxY;y++)for(let x=minX;x<=maxX;x++){let coverage=0,red=0,green=0,blue=0;for(let dy=-HALO_RADIUS_Y;dy<=HALO_RADIUS_Y;dy++){let sourceY=y+dy;if(sourceY<cells.minY||sourceY>cells.maxY)continue;let weight=weightsY[dy+HALO_RADIUS_Y],source=((sourceY-cells.minY)*regionWidth+(x-minX))*4;coverage+=horizontal[source]*weight,red+=horizontal[source+1]*weight,green+=horizontal[source+2]*weight,blue+=horizontal[source+3]*weight}let target=y*width+x,count=counts[target];if(count>0&&count/8>coverage&&(coverage=count/8,red=rgb[target*3]/count*coverage,green=rgb[target*3+1]/count*coverage,blue=rgb[target*3+2]/count*coverage),coverage<=0)continue;let amount=Math.round(strength*Math.min(1,coverage)**.7*HALO_LEVELS)/HALO_LEVELS;amount<=0||(this.haloAmount[target]=amount,this.haloRgb[target*3]=Math.round(red/coverage/LOGO_COLOR_STEP)*LOGO_COLOR_STEP,this.haloRgb[target*3+1]=Math.round(green/coverage/LOGO_COLOR_STEP)*LOGO_COLOR_STEP,this.haloRgb[target*3+2]=Math.round(blue/coverage/LOGO_COLOR_STEP)*LOGO_COLOR_STEP)}this.haloDirty={minX,minY,maxX,maxY}}visibleFaces(m,origin,pose,boxes,dotWidth,dotHeight,lightBackground){let faces=[],cameraDistance=this.cameraDistance;for(let box of boxes)for(let a=0;a<3;a++){let u=(a+1)%3,v=(a+2)%3;for(let side of[-1,1]){let plane=side>0?box.max[a]:box.min[a];if((origin[a]-plane)*side<=0||boxes.some(other=>other!==box&&(side>0?other.min[a]:other.max[a])===plane&&other.min[u]<=box.min[u]&&other.max[u]>=box.max[u]&&other.min[v]<=box.min[v]&&other.max[v]>=box.max[v]))continue;let minX=1/0,minY=1/0,maxX=-1/0,maxY=-1/0,corner=[0,0,0];for(let cornerU of[box.min[u],box.max[u]])for(let cornerV of[box.min[v],box.max[v]]){corner[a]=plane,corner[u]=cornerU,corner[v]=cornerV;let x=m[0]*corner[0]+m[1]*corner[1]+m[2]*corner[2],y=m[3]*corner[0]+m[4]*corner[1]+m[5]*corner[2],z=m[6]*corner[0]+m[7]*corner[1]+m[8]*corner[2],perspective=pose.scale*cameraDistance/(cameraDistance-z),screenX=pose.centerX+x*perspective,screenY=pose.centerY+y*perspective;minX=Math.min(minX,screenX),minY=Math.min(minY,screenY),maxX=Math.max(maxX,screenX),maxY=Math.max(maxY,screenY)}let face={minX:Math.max(0,Math.floor(minX)),minY:Math.max(0,Math.floor(minY)),maxX:Math.min(dotWidth-1,Math.ceil(maxX)),maxY:Math.min(dotHeight-1,Math.ceil(maxY))};if(face.maxX<face.minX||face.maxY<face.minY)continue;let nx=m[a]*side,ny=m[3+a]*side,nz=m[6+a]*side,diffuse=Math.max(0,nx*LIGHT[0]+ny*LIGHT[1]+nz*LIGHT[2]),rim=Math.max(0,nx*.8-nz*.3),specular=lightBackground?0:Math.max(0,nx*HALF_VECTOR[0]+ny*HALF_VECTOR[1]+nz*HALF_VECTOR[2])**24*.6*255,light=lightBackground?Math.min(1,.55+diffuse*.45+rim*.1):.45+diffuse*.78+rim*.25;faces.push({axis:a,plane,uMin:box.min[u],uMax:box.max[u],vMin:box.min[v],vMax:box.max[v],...face,red:Math.min(255,box.color[0]*light+specular),green:Math.min(255,box.color[1]*light+specular),blue:Math.min(255,box.color[2]*light+specular)})}}return faces}},playing=!1;async function playEasterEgg3d(tui,screen,egg){if(playing)return;playing=!0;let reported=await tui.queryTerminalColors({timeoutMs:100}),dark=theme.appearance==="dark",toRgbTuple=(rgb,fallback)=>rgb?[rgb.r,rgb.g,rgb.b]:fallback,colors={foreground:toRgbTuple(reported.foreground,toRgb(theme.colors.text)),background:toRgbTuple(reported.background,dark?[0,0,0]:[255,255,255])};if(tui.hasOverlay()){playing=!1;return}let model=egg.kind==="armin"?arminModel(toRgb(theme.colors.accent)):piLogoModel({column:egg.column,row:egg.row}),animation=new EasterEgg3dAnimation(tui,screen,model,colors,()=>{playing=!1,overlay.hide()}),overlay=tui.showOverlay(animation,{anchor:"top-left",width:"100%",maxHeight:"100%"})}var EasterEgg3dAnimation=class{tui;screen;model;foreground;background;onDone;startTime=performance.now();lastRender=performance.now();timer;exit;shuffle;screenWidth=-1;screenHeight=-1;stars=[];cells=[];ansiCache=new Map;raster;constructor(tui,screen,model,colors,onDone){this.tui=tui,this.screen=screen,this.model=model,this.raster=new BlockRaster(model.cameraDistance),this.foreground=colors.foreground,this.background=colors.background,this.onDone=onDone,this.timer=setInterval(()=>{this.exit&&this.exitProgress()>=1||performance.now()-this.lastRender>1e3?this.finish():this.tui.requestRender()},FRAME_MS),this.timer.unref?.()}close(){if(this.exit){this.finish();return}let time=this.elapsed(),yaw=spinAngle(time),turn=Math.PI*2;this.exit={start:performance.now(),time,yaw,targetYaw:Math.ceil(yaw/turn)*turn,offsets:this.blockOffsets(time)}}handleInput(data){let keybindings=getKeybindings();(keybindings.matches(data,"tui.select.cancel")||keybindings.matches(data,"app.clear"))&&this.close()}handleMouse(event){return event.type==="click"&&this.close(),{handled:!0,render:!1}}invalidate(){this.screenWidth=-1,this.screenHeight=-1,this.ansiCache.clear()}render(width){let height=Math.max(1,this.tui.terminal.rows),foreground=this.foreground,background=this.background;this.lastRender=performance.now(),(width!==this.screenWidth||height!==this.screenHeight)&&(this.screenWidth=width,this.screenHeight=height,this.cells=this.prepareCells(width,foreground),this.stars=this.prepareStars(width,height));let dissolveTime,pose,hintAlpha,starAlpha,offsets;if(this.exit){let progress=this.exitProgress(),landing=clamp01(progress/.8),settle=1-smooth(landing);dissolveTime=Math.min(this.exit.time,DISSOLVE_END)*(1-progress),pose=this.pose(width,height,this.flyProgress(this.exit.time)*settle,this.exit.time),pose.yaw=this.exit.yaw+(this.exit.targetYaw-this.exit.yaw)*easeOut(landing),pose.pitch*=settle,pose.roll*=settle,hintAlpha=this.hintAlpha(this.exit.time)*(1-smooth(progress/.2)),starAlpha=this.starAlpha(this.exit.time)*(1-smooth(progress/.3));let gather=1-smooth(progress/.5);offsets=this.exit.offsets.map(([x,y,z])=>[x*gather,y*gather,z*gather])}else{let time=this.elapsed();dissolveTime=time,pose=this.pose(width,height,this.flyProgress(time),time),hintAlpha=this.hintAlpha(time),starAlpha=this.starAlpha(time),offsets=this.blockOffsets(time)}let{columns,rows}=this.model,boxes=this.model.blocks.map((block,index)=>{let[dx,dy,dz]=offsets[index],x=block.home[0]-columns/2+dx,y=block.home[1]-rows/2+dy;return{min:[x,y,dz-DEPTH/2],max:[x+1,y+1,dz+DEPTH/2],color:block.color}}),raster=this.raster;raster.render(width,height,pose,boxes,background,isLight(background)?LIGHT_HALO_STRENGTH:0);let halo=(index,base)=>{let amount=raster.haloAmount[index];if(amount<=0)return base;let color=raster.haloRgb;return mix(base??background,[color[index*3],color[index*3+1],color[index*3+2]],amount)},backgroundFade=smooth(dissolveTime/BACKGROUND_FADE),textFade=smooth(dissolveTime/.6)*.3,textActive=dissolveTime<DISSOLVE_END||backgroundFade<1,hint=this.hint(width,height,hintAlpha,background),frame=Math.floor(dissolveTime*14),now=this.elapsed(),starLevel=Math.round(starAlpha*STAR_ALPHA_LEVELS)/STAR_ALPHA_LEVELS,starfield=index=>{if(starLevel<=0)return;let star=this.stars[index];if(!star)return;let flicker=Math.round((.5+.5*Math.sin(now*star.speed+star.phase))*STAR_FLICKER_LEVELS)/STAR_FLICKER_LEVELS;return{text:star.glyph,fg:mix(background,mix(foreground,star.tint,.5),star.strength*(.7+.3*flicker)*starLevel)}},lines=[];for(let row=0;row<height;row++){let cells=this.cells[row]??[],line="",currentFg=-1,currentBg=-1,emit=(text,fg,bg)=>{let fgKey=fg?this.pack(fg):-1,bgKey=bg?this.pack(bg):-1;fgKey!==currentFg&&text!==" "&&(line+=fg?this.ansi(fgKey,!1):"\x1B[39m",currentFg=fgKey),bgKey!==currentBg&&(line+=bg?this.ansi(bgKey,!0):"\x1B[49m",currentBg=bgKey),line+=text};for(let column=0;column<width;column++){let index=row*width+column,cell=textActive?cells[column]:void 0,cellBg=halo(index,cell?.bg&&backgroundFade<1?mix(cell.bg,background,backgroundFade):void 0);if(hint&&row===hint.row&&column>=hint.start&&column<hint.start+hint.text.length){let offset=column-hint.start;emit(hint.text[offset],offset<hint.keyLength?hint.keyColor:hint.color,cellBg);continue}let dots=raster.bits[index];if(dots){let step=LOGO_COLOR_STEP*raster.counts[index],rgb=raster.rgb,color=[Math.round(rgb[index*3]/step)*LOGO_COLOR_STEP,Math.round(rgb[index*3+1]/step)*LOGO_COLOR_STEP,Math.round(rgb[index*3+2]/step)*LOGO_COLOR_STEP];emit(BRAILLE[dots],color,cellBg);continue}if(!cell){let star=starfield(index);emit(star?.text??" ",star?.fg,cellBg);continue}let dust=(dissolveTime-cell.delay)/DUST_DURATION;if(dust<0&&cell.width===2&&!raster.bits[index+1]){emit(cell.text,mix(cell.fg,background,textFade),cellBg),column++;continue}if(dust<0&&cell.width===1){emit(cell.text,mix(cell.fg,background,textFade),cellBg);continue}let dotCount=dust<0?cell.ink:Math.round(cell.ink*(1-clamp01(dust)));if(dotCount<=0){let star=starfield(index);emit(star?.text??" ",star?.fg,cellBg);continue}let bits=0,placed=0;for(let attempt=0;placed<dotCount&&attempt<32;attempt++){let bit=DOT_BITS[Math.floor(hash(cell.seed*7919+frame*131+attempt)*8)];bits&bit||(bits|=bit,placed++)}let fade=textFade+(1-textFade)*clamp01(dust)**.8;emit(BRAILLE[bits],mix(cell.fg,background,fade),cellBg)}lines.push(`${line}\x1B[0m`)}return lines}elapsed(){return(performance.now()-this.startTime)/1e3}exitProgress(){return this.exit?clamp01((performance.now()-this.exit.start)/1e3/EXIT_DURATION):0}finish(){this.timer&&(clearInterval(this.timer),this.timer=void 0,this.onDone())}blockOffsets(time){let blocks=this.model.blocks,home=()=>blocks.map(()=>[0,0,0]);if(time<PUZZLE_START)return home();let cycle=Math.floor((time-PUZZLE_START)/PUZZLE_CYCLE),local=time-PUZZLE_START-cycle*PUZZLE_CYCLE;this.shuffle?.cycle!==cycle&&(this.shuffle={cycle,steps:shuffleSteps(this.model,cycle)});let steps=this.shuffle.steps,offset=(position,index)=>{let block=blocks[index].home;return[position[0]-block[0],position[1]-block[1],position[2]-block[2]]},shuffleEnd=PUZZLE_STEP*PUZZLE_STEPS;if(local<shuffleEnd){let step=Math.floor(local/PUZZLE_STEP),progress=smooth((local-step*PUZZLE_STEP)/PUZZLE_STEP);return steps[step].map((from,index)=>{let a=offset(from,index),b=offset(steps[step+1][index],index);return[a[0]+(b[0]-a[0])*progress,a[1]+(b[1]-a[1])*progress,a[2]+(b[2]-a[2])*progress]})}if(local<shuffleEnd+PUZZLE_RETURN){let u=(local-shuffleEnd)/PUZZLE_RETURN,remaining=1-smooth(u),arc=Math.sin(Math.PI*clamp01(u))*.8;return steps[PUZZLE_STEPS].map((position,index)=>{let[x,y,z]=offset(position,index);return[x*remaining,y*remaining,z*remaining+(index%2===0?arc:-arc)]})}return home()}flyProgress(time){return smooth((time-FLY_START)/FLY_DURATION)}starAlpha(time){return smooth((time-STARS_START)/STARS_FADE)}hintAlpha(time){return smooth((time-FLY_START-FLY_DURATION)/HINT_FADE)}pose(width,height,progress,time){let{columns,rows,cameraDistance,radius,widthShare,origin}=this.model,reach=radius*(cameraDistance/(cameraDistance-radius)),startScale=origin?2*(cameraDistance-DEPTH/2)/cameraDistance:START_SCALE,endScale=Math.max(startScale,Math.min(width*2*widthShare,(height*4-8)*.48)/reach),endX=width,endY=height*2-2,startX=origin?origin.column*2+columns:endX,startY=origin?origin.row*4+rows:endY;return{centerX:startX+(endX-startX)*progress,centerY:startY+(endY-startY)*progress,scale:startScale*(endScale/startScale)**progress,yaw:spinAngle(time),pitch:.3*Math.sin(spinPhase(time))*progress,roll:.06*Math.sin(2*spinPhase(time))*progress}}hint(width,height,alpha,background){if(alpha<=0)return;let key=formatKeyText(getKeybindings().getKeys("tui.select.cancel")[0]??"escape"),text=`${key} to return`;if(!(text.length>width))return{row:height-2,start:Math.floor((width-text.length)/2),text,keyLength:key.length,keyColor:mix(background,toRgb(theme.colors.muted),alpha),color:mix(background,toRgb(theme.colors.dim),alpha)}}prepareStars(width,height){let stars=new Array(width*height);for(let index=0;index<width*height;index++){if(hash(index*3+20973)>=STAR_DENSITY)continue;let random=salt=>hash(index*7+salt*40503);stars[index]={glyph:BRAILLE[DOT_BITS[Math.floor(random(1)*8)]],tint:STAR_TINTS[Math.floor(random(2)*STAR_TINTS.length)],strength:.1+random(3)*.12,phase:random(4)*Math.PI*2,speed:.4+random(5)*.8}}return stars}prepareCells(width,foreground){let cells=parseScreen(this.screen,width,foreground,this.background),height=Math.max(1,this.tui.terminal.rows),{columns,rows,origin}=this.model,centerX=origin?origin.column+columns/2:width/2,centerY=origin?origin.row+rows/4:height/2,farthest=Math.hypot(Math.max(centerX,width-centerX),Math.max(centerY,height-centerY)*2);for(let row=0;row<cells.length;row++){let line=cells[row];for(let column=0;column<line.length;column++){let cell=line[column],owner=cell.width===0?line[column-1]:cell,seed=hash(row*65537+column);if(cell.width!==0){let distance=Math.hypot(column-centerX,(row-centerY)*2)/farthest;cell.delay=FLY_START+distance*WAVE_SPREAD+seed*WAVE_JITTER}else cell.delay=owner.delay;cell.seed=row*65537+column,cell.ink=glyphInk(owner.text,seed)}}if(origin)for(let row=origin.row;row<origin.row+Math.ceil(rows/2);row++){let line=cells[row];if(line)for(let column=origin.column;column<origin.column+columns;column++){let cell=line[column];cell&&(cell.text=" ",cell.width=1,cell.ink=0,cell.bg=void 0)}}return cells}pack(color){return Math.round(color[0])<<16|Math.round(color[1])<<8|Math.round(color[2])}ansi(key,isBackground){let cacheKey=key*2+(isBackground?1:0),value=this.ansiCache.get(cacheKey);if(value===void 0){let color=rgbColor(key>>16&255,key>>8&255,key&255),mode=theme.getColorMode();value=isBackground?backgroundAnsi(color,mode):foregroundAnsi(color,mode),this.ansiCache.set(cacheKey,value)}return value}};export{EasterEgg3dAnimation,playEasterEgg3d};