@doubao-dev/cli 0.0.19 → 0.0.20

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 (99) hide show
  1. package/dist/2514.js +8 -8
  2. package/dist/2932.js +1 -1
  3. package/dist/318.js +1 -1
  4. package/dist/3494.js +284 -0
  5. package/dist/{1122.js.LICENSE.txt → 3494.js.LICENSE.txt} +6 -0
  6. package/dist/4931.js +1 -1
  7. package/dist/7410.js +1 -1
  8. package/dist/{1664.js → 8713.js} +3 -3
  9. package/dist/@byted-doubao-apps/create.js +1 -1
  10. package/dist/@byted-doubao-apps/login.js +1 -1
  11. package/dist/@byted-doubao-apps/login~1.js +1 -1
  12. package/dist/@byted-doubao-apps/template-empty/README.md +0 -2
  13. package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
  14. package/dist/@byted-doubao-apps/template-starter/README.md +1 -1
  15. package/dist/@byted-doubao-apps/template-starter/package.json +3 -3
  16. package/dist/@byted-hdt/cli.js +1 -1
  17. package/dist/@inquirer/select.js +1 -1
  18. package/dist/@lynx-js/web-core-canary.js +2 -13
  19. package/dist/@lynx-js/web-core-canary~1.js +2 -0
  20. package/dist/app.js +1 -1
  21. package/dist/assets/web-sdk-debugger/chrome-devtools/entrypoints/devtools_app/devtools_app.js +9 -7
  22. package/dist/assets/web-sdk-debugger/chrome-devtools/panels/wsd-debug/WsdDebug.js +9 -7
  23. package/dist/assets/web-sdk-debugger/chrome-devtools/panels/wsd-debug/WsdDebugMeta.js +79 -77
  24. package/dist/assets/web-sdk-debugger/index.html +1 -1
  25. package/dist/assets/web-sdk-debugger/static/css/index.9952f4197c.css +1 -0
  26. package/dist/assets/web-sdk-debugger/static/js/{741.ece428827e.js → 48.8c158322ee.js} +60 -67
  27. package/dist/assets/web-sdk-debugger/static/js/48.8c158322ee.js.LICENSE.txt +5 -0
  28. package/dist/assets/web-sdk-debugger/static/js/async/257.4d55bd5ce8.js +1 -0
  29. package/dist/assets/web-sdk-debugger/static/js/async/{web-core-template-loader-thread.f9f3ef68b1.js → web-core-template-loader-thread.20d5b2a451.js} +2 -2
  30. package/dist/assets/web-sdk-debugger/static/js/async/{web-core-worker-chunk.002a4f7b9d.js → web-core-worker-chunk.71b9323071.js} +1 -1
  31. package/dist/assets/web-sdk-debugger/static/js/index.e5bc5f1bbd.js +26 -0
  32. package/dist/assets/web-sdk-debugger/static/js/{lib-polyfill.8cf763c414.js → lib-polyfill.4f00df8f2a.js} +1 -1
  33. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-api.template.js +0 -0
  34. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-framework.template.js +0 -0
  35. package/dist/auth.js +1 -1
  36. package/dist/browser.js +1 -1
  37. package/dist/csstree.esm.js +12 -0
  38. package/dist/dbx-demo.js +1 -1
  39. package/dist/dbx.js +1 -1
  40. package/dist/demo-server.js +1 -1
  41. package/dist/dev-config.js +1 -1
  42. package/dist/dev-service-client.js +6 -6
  43. package/dist/dev-shell.js +1 -1
  44. package/dist/dev.js +7 -7
  45. package/dist/eval.js +1 -1
  46. package/dist/gen-explore.js +1 -1
  47. package/dist/gen-trajectory.js +1 -1
  48. package/dist/get.js +1 -1
  49. package/dist/init.js +2 -2
  50. package/dist/ink.js +1 -1
  51. package/dist/json-file.js +1 -1
  52. package/dist/login.js +1 -1
  53. package/dist/main.js +1 -1
  54. package/dist/manifest-mcp-config.js +1 -1
  55. package/dist/ora.js +1 -1
  56. package/dist/portal.js +1 -1
  57. package/dist/project-layout.js +1 -1
  58. package/dist/prompt.js +1 -1
  59. package/dist/prompts.js +1 -1
  60. package/dist/report.js +1 -1
  61. package/dist/run-registry.js +1 -1
  62. package/dist/run.js +1 -1
  63. package/dist/sandbox.js +1 -1
  64. package/dist/sdk.js +67 -133
  65. package/dist/sdk~1.js +67 -133
  66. package/dist/server.js +1 -1
  67. package/dist/shared.js +1 -1
  68. package/dist/simulator-client.js +1 -1
  69. package/dist/skill.js +1 -1
  70. package/dist/skills~1.js +1 -1
  71. package/dist/static/assets/web-view-proxy-page-client.js +1 -0
  72. package/dist/static/assets/web-view-proxy-service-worker.js +1 -0
  73. package/dist/status.js +1 -1
  74. package/dist/status~1.js +1 -1
  75. package/dist/stop.js +1 -1
  76. package/dist/update.js +1 -1
  77. package/dist/upgrade.js +1 -1
  78. package/dist/upload.js +1 -1
  79. package/dist/validate.js +1 -1
  80. package/dist/workspace.js +1 -1
  81. package/dist/yaml.js +1 -1
  82. package/package.json +2 -2
  83. package/skills/doubao-agentic-service-development/references/dev-debug.md +6 -6
  84. package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +105 -25
  85. package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +118 -6
  86. package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/06-/344/272/244/344/272/222.md +18 -8
  87. package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/quick-reference.md +3 -3
  88. package/skills/doubao-agentic-service-development/references/frontend/examples/page-widget-basics.md +2 -3
  89. package/skills/doubao-agentic-service-development/references/frontend/guides/component-development.md +2 -1
  90. package/skills/doubao-agentic-service-development/references/frontend/guides/debugger-mcp.md +7 -1
  91. package/skills/doubao-agentic-service-development/references/frontend/rules/dos-and-donts.md +4 -7
  92. package/skills/doubao-agentic-service-development/references/frontend-dev.md +0 -1
  93. package/skills/doubao-agentic-service-development/references/manifest-guide.md +5 -4
  94. package/skills/doubao-agentic-service-development/references/mcp-protocol.md +4 -3
  95. package/dist/1122.js +0 -277
  96. package/dist/assets/web-sdk-debugger/static/css/index.fe34ed7927.css +0 -1
  97. package/dist/assets/web-sdk-debugger/static/js/index.da81c37197.js +0 -26
  98. package/dist/push-page.js +0 -1
  99. package/dist/push-widget.js +0 -1
package/dist/sdk.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*! LICENSE: sdk.js.LICENSE.txt */
2
- let e,t,n,r,i,a,s;import"node:module";import{LAYERS as o,pluginReactLynx as l}from"@lynx-js/react-rsbuild-plugin";import{createRspeedy as p,mergeRspeedyConfig as d,rspack as c}from"@lynx-js/rspeedy";import{pluginLess as u}from"@rsbuild/plugin-less";import{pluginSass as h}from"@rsbuild/plugin-sass";import m from"tinypool";import{__webpack_require__ as g}from"./rslib-runtime.js";import{external_node_stream_promises_namespaceObject as f,external_node_tty_namespaceObject as y,external_node_https_namespaceObject as b,external_jiti_namespaceObject as _,external_node_process_namespaceObject as w,promises_namespaceObject as v,external_rsbuild_core_namespaceObject as E,chalk_source as S}from"./1664.js";import{external_node_module_namespaceObject as x}from"./3551.js";import{schemas_number as A,schemas_enum as C,StreamableHTTPServerTransport as T,unknown as O,TokenExpiredError as I,AUTH_META as P,normalizeWidgetSourceEntry as k,prepareCloudBuildSource as N,schemas_boolean as $,withAuth as D,RenderType as R,lodash_es_get as L,TitleType as M,schemas_record as j,resolveDebugSceneVariables as B,getWebSdkDebuggerDistPath as U,eraseLines as F,NotLoggedInError as W,lodash_es_mergeWith as H,isRecord as G,pluginExternalBundle as V,getDebugSceneVariableEntries as q,McpServer as J,getUnresolvedDebugSceneVariables as K,dist_esm as z,schemas_string as Y,replaceDebugSceneUrlVariables as X,execaCommand as Z,inquirer_dist as Q,APP_DEVELOPER_ORIGIN as ee,normalizeHttpEndpoint as et,pluginReactAlias as en,schemas_array as er,lodash_es_merge as ei,BoxType as ea,resolveDebugSceneInput as es,APP_DEVELOPER_DOMAIN as eo}from"./1122.js";import{walk_simple as el}from"./7526.js";import"./180.js";import"./ora.js";import{create as ep}from"./@byted-doubao-apps/create.js";g.add({"../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.0.42-rc.5_@emnapi+core@1.11.3_@emnapi+runtime@1.11.3_@lynx-js+_d49e44f9770b66b1cf11cfb4321860a5/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"(e,t,n){e.exports=n.p+"static/assets/encode-worker.js"}});let ed=g("node:async_hooks"),ec=Math.max(...["cli","auth","config","security","build","deploy","dev-server","simulator"].map(e=>`[${e}]`.length)),eu=/authorization|cookie|token|secret|password|credential|private_?key|\bdek\b/i,eh=new ed.AsyncLocalStorage,em=[];function eg(e){return e.replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_").toLowerCase()}function ef(e,t=new WeakSet){if(null==e)return String(e);if("string"==typeof e)return/^[\w./:@-]+$/.test(e)&&e.length>0?e:JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);if(e instanceof Error)return ef(e.message,t);if("object"!=typeof e)return String(e);if(t.has(e))return'"[Circular]"';t.add(e);let n=Array.isArray(e)?`[${e.map(e=>ef(e,t)).join(",")}]`:`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,n])=>{let r=eu.test(eg(e))?'"[REDACTED]"':ef(n,t);return`${JSON.stringify(e)}:${r}`}).join(",")}}`;return t.delete(e),n}function ey(e){return S.cyan(`[${e}]`.padEnd(ec))}function eb(e={}){let t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t])),n=t["x-tt-env"],r=t["x-use-ppe"],i=Array.isArray(n)?n.join(","):n;return r&&i?String(i):void 0}function e_(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[eg(e),t]).sort(([e],[t])=>e.localeCompare(t));return 0===t.length?"":t.map(([e,t])=>{let n=eu.test(e)?"[REDACTED]":ef(t);return S.dim(`${e}=${n}`)}).join(" ")}let ew=new class e{constructor(e={}){this.sink=e.sink??E.logger,this.tag=e.tag,this.context=e.context??{},this.isDebugEnabled=e.isDebug??(()=>"applet0930"===process.env.DEBUG)}child(t,n={}){return new e({sink:this.sink,tag:t,context:{...this.context,...n},isDebug:this.isDebugEnabled})}withContext(t){return new e({sink:this.sink,tag:this.tag,context:{...this.context,...t},isDebug:this.isDebugEnabled})}info(e,t){this.emit("info",e,t)&&this.sink.info(this.formatMessage(e,t))}success(e,t){this.emit("info",e,t)&&this.sink.success(this.formatMessage(e,t))}start(e,t){this.emit("info",e,t)&&this.sink.start(this.formatMessage(e,t))}ready(e,t){this.emit("info",e,t)&&this.sink.ready(this.formatMessage(e,t))}warn(e,t){this.emit("warn",e,t)&&this.sink.warn(this.formatMessage(e,t))}debug(e,t){this.isDebugEnabled()&&this.emit("debug",e,t)&&this.sink.debug(this.formatMessage(e,t))}error(e,t={}){let n,{error:r,...i}=t,a=this.tag?`${ey(this.tag)} `:"",s=e instanceof Error?e.message:String(e),o=`${a}${s}`;if(void 0!==r)o+=`: ${r instanceof Error?r.message:ef(r)}`,this.isDebugEnabled()&&r instanceof Error&&r.stack&&(n=r.stack);else e instanceof Error&&this.isDebugEnabled()&&e.stack&&(n=e.stack);let l=e_({...this.context,...i});l&&(o+=` ${l}`),n&&(o+=`
3
- ${n}`),this.emit("error",s,{...i,...void 0!==r?{error:r}:{}})&&this.sink.error(o)}greet(e){this.emit("info",e)&&this.sink.greet(e)}request(e){var t;let n,r,i,a,s,o,l,p=e.timestamp??new Date,d=S.gray(`[${(n=p.getFullYear(),r=String(p.getMonth()+1).padStart(2,"0"),i=String(p.getDate()).padStart(2,"0"),a=String(p.getHours()).padStart(2,"0"),s=String(p.getMinutes()).padStart(2,"0"),o=String(p.getSeconds()).padStart(2,"0"),l=String(p.getMilliseconds()).padStart(3,"0"),`${n}-${r}-${i} ${a}:${s}:${o}.${l}`)}]`),c=S.bold(e.method),u=void 0===e.durationMs?"":` ${S.dim(`${e.durationMs.toFixed(1)}ms`)}`,h=eb(e.headers),m=Array.isArray(e.logId)?e.logId.join(","):e.logId,g=[h?e_({ppe:h}):"",m?e_({logid:m}):"",e_({...this.context,...e.context})].filter(Boolean).join(" "),f=`${this.tag?`${ey(this.tag)} `:""}${d} ${c} ${e.url} ${((t=e.statusCode)>=500?S.red:t>=400?S.yellow:S.green)(String(t))}${u}${g?` ${g}`:""}`,y=e.statusCode>=500?"error":e.statusCode>=400?"warn":"info";this.emit(y,`${e.method} ${e.url} ${e.statusCode}`,{...e.context,durationMs:e.durationMs,logId:m,ppe:h},p.getTime())&&("error"===y?this.sink.error(f):"warn"===y?this.sink.warn(f):this.sink.info(f))}formatMessage(e,t={}){let n=e_({...this.context,...t}),r=this.tag?`${ey(this.tag)} `:"",i=e instanceof Error?e.message:String(e);return`${r}${i}${n?` ${n}`:""}`}emit(e,t,n={},r=Date.now()){let i=eh.getStore()??em[em.length-1],a=i?.onLog;if(a)try{a({timestamp:r,level:e,scope:this.tag,message:t instanceof Error?t.message:String(t),context:function(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[eg(e),t]).sort(([e],[t])=>e.localeCompare(t));if(0!==t.length)return Object.fromEntries(t.map(([e,t])=>[e,eu.test(e)?"[REDACTED]":function e(t,n=new WeakSet){if(t instanceof Error)return t.message;if(null===t||"object"!=typeof t)return"bigint"==typeof t?String(t):t;if(n.has(t))return"[Circular]";n.add(t);let r=Array.isArray(t)?t.map(t=>e(t,n)):Object.fromEntries(Object.entries(t).map(([t,r])=>[t,eu.test(eg(t))?"[REDACTED]":e(r,n)]));return n.delete(t),r}(t)]))}({...this.context,...n})})}catch{}return i?.printLogs!==!1}},ev=ew.child("build");var eE,eS,ex,eA,eC,eT,eO,eI,eP,ek,eN,e$,eD,eR,eL,eM,ej,eB,eU,eF,eW,eH,eG,eV=((e$={}).Adb="adb",e$.Hdt="hdt",e$.DevTools="devtools",e$);let eq=["adb","hdt","devtools"],eJ=g("path"),eK="./node_modules/.doubao",ez="./node_modules/.injected.js",eY="./node_modules/.injected.css",eX=".doubao-apps-style-anchor{display:none}",eZ="widgets";eJ.sep;let eQ=`base${eJ.sep}manifest.json`,e0=`base${eJ.sep}manifest.sign`,e1="mcp-privacy-login-card",e2="__doubao_apps__expired-widget",e3="bundle.keystore",e4={"@byted-lynx/react":"React","@lynx-js/react":"React","@lynx-js/react/internal":"ReactInternal","@lynx-js/react/jsx-dev-runtime":"ReactJSXDevRuntime","@lynx-js/react/jsx-runtime":"ReactJSXRuntime","@lynx-js/react/lepus/jsx-dev-runtime":"ReactJSXLepusDevRuntime","@lynx-js/react/lepus/jsx-runtime":"ReactJSXLepusRuntime","@lynx-js/react/experimental/lazy/import":"ReactLazyImport","@lynx-js/react/legacy-react-runtime":"ReactLegacyRuntime","@lynx-js/react/runtime-components":"ReactComponents","@lynx-js/react/worklet-runtime/bindings":"ReactWorkletRuntime","@lynx-js/react/debug":"ReactDebug",preact:"Preact",react:"React"},e9=e=>e===e1||e===e2,e5="app.config",e8=[".js",".ts",".mjs"],e6="com.larus.nova";class e7{}let te=g("node:fs"),tt=g("node:path"),tn="@byted-doubao-apps/framework",tr="@doubao-dev/framework",ti=[tn,tr];function ta(e){return`${e}/components`}function ts(e){let t=tt.resolve(e,"package.json");if(te.existsSync(t))try{let e=JSON.parse(te.readFileSync(t,"utf8")),n={...e.dependencies,...e.devDependencies,...e.peerDependencies};if(n[tr])return tr;if(n[tn])return tn}catch{}}function to(e){return ts(e)??tn}let tl=e=>void 0!==process.env[e],tp=()=>(process.env.DEBUG??"").toLocaleLowerCase().split(",").includes("applet0930"),td=()=>tl("DISABLE_EXTERNAL")||"1"===process.env.ENABLE_SELF_CONTAINED||tl("LEGACY_FRAMEWORK"),tc=()=>tl("DISABLE_APP_TEMPLATE_JS")||tl("LEGACY_FRAMEWORK");function tu({mcpEndpoint:e}={}){let t=e?.trim();return t||(process.env.DOUBAO_SIMULATOR_MCP_ENDPOINT?.trim()??"")}function th(e,t=3e3){return Z(e,{timeout:t}).catch(()=>({stdout:"",stderr:""}))}async function tm(e,t){return th(`adb -s ${e} ${t}`)}async function tg(e){let t=(await th(`adb -s ${e} shell dumpsys activity activities | grep -E 'topResumedActivity|mResumedActivity' | tail -n 1`)).stdout.match(/\su\d+\s+([^\s\/]+)\//);return t?.[1]}async function tf(e,t){let n=(await tm(e,`shell pidof ${t}`)).stdout.trim();return n?n.split(/\s+/)[0]:void 0}async function ty(e){let t=await tg(e);return(t===e6||"com.flow.aisdk.example"===t)&&(await th(`adb -s ${e} shell am force-stop ${t}`),await th(`adb -s ${e} shell monkey -p ${t} -c android.intent.category.LAUNCHER 1`),!0)}async function tb(){return(await th("adb devices")).stdout.split("\n").slice(1).map(e=>e.split(" ")[0].trim()).filter(Boolean)}async function t_(){let e=await tb();if(e.length>1){let{device:t}=await Q.prompt([{type:"search",name:"device",message:"检测到多个设备,请选择用于调试的设备(可按设备 ID 搜索):",source:t=>e.filter(e=>e.toLowerCase().includes(t?.toLowerCase()??""))}]);return t}return e[0]}class tw extends e7{deviceId;latestLoadParams;lastAppProcessId;isWatchingAppProcess=!1;isAutoReloading=!1;constructor(e,t={}){if(super(),this.deviceId=e,t.skipForegroundAppWatch)return;let n=setInterval(()=>{this.watchAppProcess()},500);process.once("exit",()=>clearInterval(n))}async watchAppProcess(){if(!this.isWatchingAppProcess){this.isWatchingAppProcess=!0;try{let e=await tf(this.deviceId,e6);void 0!==this.lastAppProcessId&&void 0!==e&&this.lastAppProcessId!==e&&await this.reloadOnAppRestart(e),void 0!==e&&(this.lastAppProcessId=e)}finally{this.isWatchingAppProcess=!1}}}async reloadOnAppRestart(e){if(void 0!==this.latestLoadParams&&!this.isAutoReloading){this.isAutoReloading=!0;try{if(await new Promise(e=>setTimeout(e,5e3)),await tf(this.deviceId,e6)!==e)return;await this.load(this.latestLoadParams)}finally{this.isAutoReloading=!1}}}async load(e){this.latestLoadParams=e;let{appletUrl:t,appId:n,isSigned:r}=e,i=`shell am broadcast -a com.bytedance.applet.SET_APPLET_DEBUG_HOST --es appletName ${n} --es appletHost ${t} --es appletType 1 --es isSigned ${r}`;tp()&&console.log(S.dim(`adb -s ${this.deviceId} ${i}`)),await tm(this.deviceId,i)}async openPage(e){let{appId:t,pageId:n,pageData:r,pageSettings:i,mode:a}=e,s=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageName ${n} --es appletPageData '${r}' --es appletPageSettings '${i}' --es mode '${a}'`;tp()&&console.log(S.dim(`adb -s ${this.deviceId} ${s}`)),await tm(this.deviceId,s)}async openPageUrl(e){let{appId:t,url:n}=e,r=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageUrl '${n}'`;tp()&&console.log(S.dim(`adb -s ${this.deviceId} ${r}`)),await tm(this.deviceId,r)}async pushWidget(e){let{appId:t,widgetId:n,widgetData:r,botId:i}=e,a=`shell am broadcast -a com.bytedance.applet.START_APPLET_WIDGET --es appletName ${t} --es widgetName ${n} --es widgetData '${r}' --es botId ${i||process.env.DEBUG_BOT_ID}`;tp()&&console.log(S.dim(`adb -s ${this.deviceId} ${a}`)),await tm(this.deviceId,a)}async callTool(e){let{appId:t,toolId:n,toolData:r}=e,i=`shell am broadcast -a com.bytedance.applet.CALL_TOOL --es appletName ${t} --es toolName '${n}' --es toolData '${r}'`;tp()&&console.log(S.dim(`adb -s ${this.deviceId} ${i}`)),await tm(this.deviceId,i)}}class tv extends e7{async load(e){}async openPage(e){}async openPageUrl(e){}async pushWidget(e){}async callTool(e){}}ew.child("cli");let tE=ew.child("config"),tS=ew.child("security"),tx=ew.child("build"),tA=tx.withContext({mode:"cloud"}),tC=ew.child("deploy"),tT=ew.child("dev-server");class tO{options;currentUrl=null;debugDriver=null;appId=null;constructor(e){this.options=e}async start(e,t,n){if(null!==this.currentUrl){this.currentUrl=e,this.debugDriver?.getAllAppClients().forEach(e=>this.onConnect(e,n));return}this.currentUrl=e,this.appId=t;let{getDebugDriver:r,toolkitExecutor:i}=await import("./@byted-hdt/cli.js").then(g.bind(g,"../../../node_modules/.pnpm/@byted-hdt+cli@0.0.71_debug@4.4.3/node_modules/@byted-hdt/cli/dist/es/index.js"));await i({runType:"rspeedy",openWebview:this.options.devtool});let a=r();this.debugDriver=a,a.getAllAppClients().forEach(e=>this.onConnect(e,n)),a.on("app-client-connected",this.onConnect)}stop(){this.currentUrl=null,this.debugDriver?.off("app-client-connected",this.onConnect)}sendMessage(e){this.debugDriver?.getAllAppClients().forEach(t=>{try{t.sendCustomizedMessage(e.method,e.params,-1,"CDP")}catch(e){tT.error("向 HDT 客户端发送消息失败",{error:e})}})}onConnect=(e,t)=>{null!==this.currentUrl&&null!==this.debugDriver&&null!==this.appId&&this.sendMessage({method:"Applet_AppReload",params:{appletName:this.appId,appletHost:this.currentUrl,appletType:1,isSigned:t}})}}class tI extends e7{server;constructor(){super(),this.server=new tO({devtool:!0,open:!0})}async load(e){let{appletUrl:t,appId:n,isSigned:r}=e;this.server.start(t,n,r)}async openPage(e){let{appId:t,pageId:n,pageData:r,pageSettings:i,mode:a}=e;this.server.sendMessage({method:"Applet_OpenPage",params:{appletName:t,appletPageName:n,appletPageData:r,appletPageSettings:i,mode:a}})}async openPageUrl(e){let{appId:t,url:n}=e;this.server.sendMessage({method:"Applet_OpenPageUrl",params:{appletName:t,url:n}})}async pushWidget(e){let{appId:t,widgetId:n,widgetData:r,botId:i}=e;this.server.sendMessage({method:"Applet_OpenWidget",params:{appletName:t,widgetName:n,widgetData:r,botId:i||process.env.DEBUG_BOT_ID}})}async callTool(e){let{appId:t,toolId:n,toolData:r}=e;this.server.sendMessage({method:"Applet_CallTool",params:{appletName:t,toolName:n,toolData:r}})}}async function tP(t={}){if(!e){let n=t.debugDriver??eV.Adb;if(!eq.includes(n))throw Error(`无效的调试驱动 "${n}",可选值:${eq.join(", ")}。`);switch(n){case eV.Hdt:e=new tI;break;case eV.DevTools:e=new tv;break;case eV.Adb:{let n=t.deviceId??await t_();n&&(e=new tw(n,{skipForegroundAppWatch:t.skipAdbForegroundAppWatch}));break}default:throw Error(`无效的调试驱动 "${n}",可选值:${eq.join(", ")}。`)}}return e}let tk=g("node:fs/promises");function tN(e,t){if(void 0!==e&&"string"!=typeof e)throw Error(`字段 ${t} 必须是字符串`)}async function t$(e){let t=(0,tt.join)(e,"debug-scene");try{return(await (0,tk.readdir)(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>({name:e.name.slice(0,-5),path:(0,tt.join)(t,e.name)}))}catch{return[]}}async function tD(e){try{var t=JSON.parse(await (0,tk.readFile)(e,"utf8"));if(!G(t))throw Error("Scene 内容必须是 JSON 对象");if("page"!==t.type&&"widget"!==t.type&&"tool"!==t.type)throw Error("字段 type 必须是 page、widget 或 tool");if(tN(t.id,"id"),tN(t.url,"url"),tN(t.botId,"botId"),"page"===t.type){let e=void 0!==t.id,n=void 0!==t.url;if(e&&n)throw Error("Page Scene 的 id 和 url 不能同时配置");if(!t.id?.trim()&&!t.url?.trim())throw Error("Page Scene 必须配置 id 或 url")}else if(!t.id?.trim())throw Error(`${"widget"===t.type?"Widget":"Tool"} Scene 必须配置 id`);if(void 0!==t.input&&!G(t.input))throw Error("字段 input 必须是 JSON 对象");if(void 0!==t.variables){if(!G(t.variables))throw Error("字段 variables 必须是 JSON 对象");for(let[e,n]of Object.entries(t.variables))if(null!==n&&"string"!=typeof n)throw Error(`变量 ${e} 的默认值必须是字符串或 null`)}if(void 0!==t.settings&&"string"!=typeof t.settings&&!G(t.settings))throw Error("字段 settings 必须是字符串或 JSON 对象");return t}catch(t){return tp()&&console.warn(`[DoubaoApps] 加载调试场景 "${e}" 失败:${t instanceof Error?t.message:String(t)}`),null}}async function tR(e,t){let{matchedScene:n,appId:r,driver:i,variables:a}=e,s=t??await tD(n.path);if(!s)return;let o=B(s,a);if("page"===s.type){var l,p,d;if(s.url){let e=X(s.url,o);l=n.name,0!==(p=K(e)).length&&console.warn(`[DoubaoApps] 调试场景 "${l}" 存在未解析的变量占位符:${p.map(e=>`{{${e}}}`).join(", ")}`),await i.openPageUrl({appId:r,url:e});return}let e=JSON.stringify(es(s,a)),t="string"==typeof(d=s.settings)?d:Object.entries(d||{}).map(([e,t])=>`${e}=${String(t)}`).join("&"),c={appId:r,pageId:s.id||"",pageData:e,pageSettings:t,mode:"full"};await i.openPage(c)}else if("widget"===s.type){let e=JSON.stringify(es(s,a)),t={appId:r,widgetId:s.id,widgetData:e,botId:s.botId};await i.pushWidget(t)}else if("tool"===s.type){let e=JSON.stringify({...s.input||{},...o}),t={appId:r,toolId:s.id,toolData:e};await i.callTool(t)}}let tL="https://lf3-static.bytednsdoc.com/obj/eden-cn/777eh7nuptpfnuhd/default.svg";function tM(e){if("string"==typeof e){let t=e.length>0?e:tL;return{"1x":t,"2x":t,"3x":t}}return{"1x":e?.["1x"]||tL,"2x":e?.["2x"]||tL,"3x":e?.["3x"]||tL}}(eE=eD||(eD={})).DEV="dev",eE.BUILD="build",eE.PERF="perf",eE.DEPLOY="deploy",eE.ANALYZE="analyze";let tj={DEV:eD.DEV,BUILD:eD.BUILD,PERF:eD.PERF,DEPLOY:eD.DEPLOY,ANALYZE:eD.ANALYZE};function tB(e){let t=Object.keys(e);return t.sort(),t.reduce((t,n)=>(t[n]=e[n],t),{})}class tU{get metadata(){return this._metadata}toString(){return JSON.stringify(this._metadata,null,2)}}class tF extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,n){let r=this._metadata;return{id:r.id,name:r.name,path:r.path,description:r.description,keywords:r.keywords,digest:t,prop:r.prop,entry:e,renderType:n,title:r.title}}}class tW extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,n,r=[]){let i=this._metadata;return{widgetId:i.id,name:i.name,description:i.description,keywords:i.keywords,digest:t,prop:i.prop,entry:e,renderType:n,border:i.border,appSettings:r,boxType:"full_box"===i.boxType?ea.FULL_BOX:ea.INBOX,titleType:i.titleType?tW.TITLE_TYPE_MAP[i.titleType]:void 0}}}tW.TITLE_TYPE_MAP={none:2,normal:0,float:1};class tH extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(){let e=this._metadata;return{id:e.id,name:e.name,description:e.description,timeout:e.timeout}}}class tG extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest({toolsMetadata:e,hashCode:t,appRuntimeEntry:n,appRuntimeType:r}){return{name:this._metadata.name,description:this._metadata.description,appletId:this._metadata.appId,appletEntry:"index",pages:[],darkMode:this._metadata.darkMode,keywords:this._metadata.keywords,icons:tM(this._metadata.icons),digest:t,prop:"",tools:Object.values(e).map(e=>e.toManifest()),appRuntimeEntry:n,appRuntimeType:r}}}class tV{constructor(){this.metadata={app:{},widgets:{},pages:{},tools:{}}}get app(){return this.metadata.app.metadata??{}}get appId(){return this.app.appId}addAppMeta(e){this.metadata.app.metadata?this.metadata.app.assign(e):this.metadata.app=new tG(e)}addToolMeta(e,t){this.metadata.tools[e]?this.metadata.tools[e].assign(t):this.metadata.tools[e]=new tH(t)}addPageMeta(e,t){this.metadata.pages[e]?this.metadata.pages[e].assign(t):this.metadata.pages[e]=new tF(t)}addWidgetMeta(e,t){this.metadata.widgets[e]?this.metadata.widgets[e].assign(t):this.metadata.widgets[e]=new tW(t)}getData(){let{tools:e,pages:t,widgets:n,app:r}=this.metadata;return{app:r.metadata??{},tools:tB(Object.fromEntries(Object.keys(e).map(t=>[t,e[t].metadata]))),pages:tB(Object.fromEntries(Object.keys(t).map(e=>[e,t[e].metadata]))),widgets:tB(Object.fromEntries(Object.keys(n).map(e=>[e,n[e].metadata])))}}getInstance(){let{tools:e,pages:t,widgets:n,app:r}=this.metadata;return{app:r,tools:tB(e),pages:tB(t),widgets:tB(n)}}clearData(){this.metadata={app:{},pages:{},tools:{},widgets:{}}}}let tq={MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE:1e3,MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY:2e3,MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE:3e3},tJ={BEFORE_BUILD_STAGE_CREATE_CONFIG:1e3,BEFORE_BUILD_STAGE_MODIFY_BUILD_CONFIG:2e3,BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG:3e3},tK={COLLECT_METADATA_STAGE_START:1e3,COLLECT_METADATA_STAGE_PROCESS_METADATA:2e3,COLLECT_METADATA_STAGE_OPTIMIZE:3e3,COLLECT_METADATA_STAGE_FINISH:4e3},tz={...tq,...tJ,...tK},tY={...tq,...tJ,...tK};(eS=eR||(eR={}))[eS.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS=1e3]="BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS",eS[eS.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS=2e3]="BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS",eS[eS.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=3e3]="BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS",eS[eS.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS=3999]="BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS",eS[eS.AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS=4e3]="AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS",eS[eS.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS=5e3]="AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS",eS[eS.AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=6e3]="AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS";let tX=g("../../../node_modules/.pnpm/tapable@2.2.1/node_modules/tapable/lib/index.js");function tZ(){return{modifyEnvironment:new tX.FU(["arg0"]),modifyEntryOption:new tX.BD(["arg0"]),beforeBuild:new tX.FU(["arg0"]),collectMetaData:new tX.FU(["arg0"]),build:new tX.FU(["arg0"]),afterBuild:new tX.FU(["arg0"])}}function tQ({hooks:e,stages:t}){return{hooks:e,...t}}class t0{constructor(e,t=[]){this.plugins=[],this.api={...{worker:tQ({hooks:tZ(),stages:tY}),view:tQ({hooks:tZ(),stages:tz}),assets:tQ({hooks:{beforeEmit:new tX.FU(["arg0"]),afterEmit:new tX.FU(["arg0"])},stages:eR}),deploy:tQ({hooks:{beforeDeploy:new tX.FU(["arg0"]),deploy:new tX.FU(["arg0"]),afterDeploy:new tX.FU(["arg0"])},stages:{}})},context:e},this.addPlugins(t)}getScopeHooks(e){return this.api[e].hooks}addPlugins(e){this.plugins.push(...e)}async bootstrap(){for await(let e of this.plugins)await e.setup(this.api)}async callScopeHooks(e,t,...n){let r=L(this.getScopeHooks(e),t);return await r.promise(...n)}async callWorkerHooks(e,...t){return this.callScopeHooks("worker",e,...t)}async callViewHooks(e,...t){return this.callScopeHooks("view",e,...t)}async callAssetsHooks(e,...t){return this.callScopeHooks("assets",e,...t)}async callDeployHooks(e,...t){return this.callScopeHooks("deploy",e,...t)}}let t1=g("fs"),t2=g("../../../node_modules/.pnpm/archiver@7.0.1/node_modules/archiver/index.js");function t3(e,t,n,r){return new Promise((i,a)=>{let s=t1.createWriteStream(e),o=t2("zip",{zlib:{level:9}});o.pipe(s),o.directory(t,n??!1),s.on("close",()=>{r?.deleteResource&&t1.rmSync(t,{recursive:!0}),ev.success("Compiled artifacts packaged",{file:eJ.basename(e)}),i("")}),o.on("error",e=>{ev.error("An error occurred during packaging",{error:e}),a(e)}),o.finalize()})}async function t4({channelName:e,manifest:t,rootPath:n}){let r=eJ.resolve(n),i=eJ.resolve(n,"doubao_app_output"),a=eJ.resolve(i,t.packageName),s={outputFolder:i,transformFolder:a,manifest:t};t1.existsSync(i)&&t1.rmSync(i,{recursive:!0}),t1.mkdirSync(i),t1.mkdirSync(a),function(e,t){let{transformFolder:n,manifest:r}=t,{applet:i,widgets:a}=r,s=eJ.resolve(e,"base"),o=eJ.resolve(n,"base");t1.mkdirSync(o),t1.cpSync(s,o,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0});let l=eJ.resolve(e,i.appletId),p=eJ.resolve(n,i.appletId);t1.mkdirSync(p),i.pages.length>0&&t1.cpSync(l,p,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0}),a.forEach(t=>{let r=eJ.resolve(e,t.widgetId),i=eJ.resolve(n,t.widgetId);t1.mkdirSync(i),t1.cpSync(r,i,{filter:e=>null===e.match(/(.)*\.map$/),recursive:!0})})}(r,s);let o=await t9(e,s);return ev.debug("Package resource created",{packageResource:o}),{packageResource:o}}async function t9(e,t){if(!/([a-z0-9_-]+)/.test(e))throw Error("Channel name is invalid, only support /[a-z0-9_-]+/. archive gecko package failed. ");let{manifest:n,outputFolder:r,transformFolder:i}=t,{applet:a,widgets:s,packageName:o,versionCode:l}=n,p=eJ.resolve(r,"deploy-package"),d=eJ.resolve(p,e),c=eJ.resolve(d,o);t1.mkdirSync(p),t1.mkdirSync(d),t1.mkdirSync(c),t1.cpSync(i,c,{recursive:!0});let u={},h=t1.readdirSync(c).filter(e=>t1.statSync(eJ.resolve(c,e)).isDirectory()),m=eJ.resolve(p,`${e}.zip`);try{if(await Promise.all(h.map(e=>{if("base"===e)return t3(eJ.resolve(c,`${e}_${l}.zip`),eJ.resolve(c,e),e,{deleteResource:!0});if(e===a.appletId){let t=`${e}_${a.digest}.zip`;return u[a.appletId]=t,t3(eJ.resolve(c,t),eJ.resolve(c,e),e,{deleteResource:!0})}let t=s.find(t=>t.widgetId===e);if(t){let n=`${e}_${t.digest}.zip`;return u[t.widgetId]=n,t3(eJ.resolve(c,n),eJ.resolve(c,e),e,{deleteResource:!0})}return ev.error("Invalid package directory",{directory:e}),Promise.resolve()})),await t3(m,d,e),process.env.BUILD_VERSION){let e=eJ.resolve(r,"scm-deploy-package"),t=eJ.resolve(e,o);t1.mkdirSync(e),t1.mkdirSync(t),t1.cpSync(c,t,{recursive:!0})}return ev.success("Deploy package archived",{destination:m}),{resource:m,fileNames:u}}catch(e){throw Error(`ERROR: Archive the deploy-package failed. ${e}`)}}(ex=eL||(eL={})).NORMAL="normal",ex.SELF_BUILT_CREATE="selfBuiltCreate",ex.SELF_BUILT_PUBLISH="selfBuiltPublish",ex.SELF_BUILT_CHECK_STATUS="selfBuiltCheckStatus",ex.SELF_BUILT_STOP="selfBuiltStop",ex.SELF_BUILT_ROLLBACK="selfBuiltRollback";let t5={NORMAL:eL.NORMAL,SELF_BUILT_CREATE:eL.SELF_BUILT_CREATE,SELF_BUILT_PUBLISH:eL.SELF_BUILT_PUBLISH,SELF_BUILT_CHECK_STATUS:eL.SELF_BUILT_CHECK_STATUS,SELF_BUILT_STOP:eL.SELF_BUILT_STOP,SELF_BUILT_ROLLBACK:eL.SELF_BUILT_ROLLBACK};function t8(e,t){let n=(t||e).replace(/^\/+/,"").split("/").filter(Boolean);return n.length>1&&"index"===n[n.length-1]?n[n.length-2]||"index":n[n.length-1]||"index"}function t6(e,t){let n=(t??e).replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"");return n?`/${n}`:"/"}function t7(e,...t){return H(e,...t,(e,t,n)=>Array.isArray(e)?e.concat(t):Buffer.isBuffer(t)?t:void 0)}let ne=(e,t)=>tt.relative(e,t).replaceAll(tt.sep,"/");class nt{constructor(e,t=""){this.imports=[],this.contents=[],this._filename=e,t&&this.appendContent(t)}appendImports(...e){this.imports.push(...e)}appendContent(...e){this.contents.push(...e)}unshiftContent(...e){this.contents.unshift(...e)}get filename(){return this._filename}toString(){return[this.imports.map(e=>{if(e.importSpecifiers&&e.importSpecifiers.length>0){let t="",n=e.importSpecifiers.find(e=>"default"===e.propertyName),r=e.importSpecifiers.filter(e=>"default"!==e.propertyName);return n&&(t+=`${n.name}`),r.length&&(n&&(t+=", "),t+=`{ ${r.map(e=>e.name===e.propertyName?e.name:`${e.propertyName} as ${e.name}`).join(", ")} }`),`import ${t} from "${e.moduleSpecifier}";`}return`import "${e.moduleSpecifier}";`}).join("\n"),...this.contents].join("\n").trim()}write(e){if(this._filename){let t=eJ.dirname(this._filename);(0,t1.existsSync)(t)||(0,t1.mkdirSync)(t,{recursive:!0}),(0,t1.writeFileSync)(this._filename,this.toString(),e)}return this._filename}}function nn(e,t,n=!1,r=!1){return Object.keys(e).reduce((i,a)=>{let{filename:s,isVirtualFile:o,isSpecial:l}=e[a];if(o||l)return i;let p=`${eK}${tt.sep}${a}${tt.extname(s)}`,d=ne(tt.join(t,p,".."),s),c=to(t),u=n?"defineWidget":"definePage";return i[a]=new nt(p),i[a].appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:c,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"getViewData",name:"getViewData"},{propertyName:u,name:u}]},{moduleSpecifier:d,importSpecifiers:[{propertyName:"default",name:"TaroView"}]}),i[a].appendContent(`
2
+ let e,t,n,r,o,i,a;import"node:module";import{LAYERS as s,pluginReactLynx as l}from"@lynx-js/react-rsbuild-plugin";import{createRspeedy as p,mergeRspeedyConfig as c,rspack as d}from"@lynx-js/rspeedy";import{pluginLess as u}from"@rsbuild/plugin-less";import{pluginSass as m}from"@rsbuild/plugin-sass";import h from"tinypool";import{__webpack_require__ as f}from"./rslib-runtime.js";import{external_node_stream_promises_namespaceObject as g,external_node_tty_namespaceObject as y,external_node_https_namespaceObject as b,external_jiti_namespaceObject as _,external_node_process_namespaceObject as w,promises_namespaceObject as v,external_rsbuild_core_namespaceObject as E,chalk_source as S}from"./8713.js";import{external_node_module_namespaceObject as x}from"./3551.js";import{parseDebugScene as A,schemas_enum as T,schemas_number as C,unknown as O,TokenExpiredError as P,AUTH_META as I,normalizeWidgetSourceEntry as k,resolveDebugScene as D,schemas_object as $,createMcpHandler as R,prepareCloudBuildSource as N,schemas_boolean as L,withAuth as M,RenderType as j,lodash_es_get as B,TitleType as U,schemas_record as F,getWebSdkDebuggerDistPath as W,eraseLines as H,NotLoggedInError as G,pluginExternalBundle as V,lodash_es_mergeWith as q,getDebugSceneVariableEntries as J,McpServer as K,dist_esm as z,schemas_string as Y,inquirer_dist as X,APP_DEVELOPER_ORIGIN as Z,execaCommand as Q,normalizeHttpEndpoint as ee,pluginReactAlias as et,toNodeHandler as en,schemas_array as er,lodash_es_merge as eo,TeaUploader as ei,BoxType as ea,APP_DEVELOPER_DOMAIN as es}from"./3494.js";import{walk_simple as el}from"./7526.js";import"./180.js";import"./yaml.js";import"./ora.js";import{create as ep}from"./@byted-doubao-apps/create.js";f.add({"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.0.42-rc.10_@emnapi+core@1.11.3_@emnapi+runtime@1.1_20b2ab4c2ed5d84bd875033d6bad8b60/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-page-client.js"(e,t,n){e.exports=n.p+"static/assets/web-view-proxy-page-client.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.0.42-rc.10_@emnapi+core@1.11.3_@emnapi+runtime@1.1_20b2ab4c2ed5d84bd875033d6bad8b60/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-service-worker.js"(e,t,n){e.exports=n.p+"static/assets/web-view-proxy-service-worker.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.0.42-rc.10_@emnapi+core@1.11.3_@emnapi+runtime@1.11.3_@lynx-js_f5de924f569728557c959fd61505c789/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"(e,t,n){e.exports=n.p+"static/assets/encode-worker.js"}});let ec=f("node:async_hooks"),ed=Math.max(...["cli","auth","config","security","build","deploy","dev-server","simulator"].map(e=>`[${e}]`.length)),eu=/authorization|cookie|token|secret|password|credential|private_?key|\bdek\b/i,em=new ec.AsyncLocalStorage,eh=[];function ef(e){return e.replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_").toLowerCase()}function eg(e,t=new WeakSet){if(null==e)return String(e);if("string"==typeof e)return/^[\w./:@-]+$/.test(e)&&e.length>0?e:JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);if(e instanceof Error)return eg(e.message,t);if("object"!=typeof e)return String(e);if(t.has(e))return'"[Circular]"';t.add(e);let n=Array.isArray(e)?`[${e.map(e=>eg(e,t)).join(",")}]`:`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,n])=>{let r=eu.test(ef(e))?'"[REDACTED]"':eg(n,t);return`${JSON.stringify(e)}:${r}`}).join(",")}}`;return t.delete(e),n}function ey(e){return S.cyan(`[${e}]`.padEnd(ed))}function eb(e={}){let t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t])),n=t["x-tt-env"],r=t["x-use-ppe"],o=Array.isArray(n)?n.join(","):n;return r&&o?String(o):void 0}function e_(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[ef(e),t]).sort(([e],[t])=>e.localeCompare(t));return 0===t.length?"":t.map(([e,t])=>{let n=eu.test(e)?"[REDACTED]":eg(t);return S.dim(`${e}=${n}`)}).join(" ")}let ew=new class e{constructor(e={}){this.sink=e.sink??E.logger,this.tag=e.tag,this.context=e.context??{},this.isDebugEnabled=e.isDebug??(()=>"applet0930"===process.env.DEBUG)}child(t,n={}){return new e({sink:this.sink,tag:t,context:{...this.context,...n},isDebug:this.isDebugEnabled})}withContext(t){return new e({sink:this.sink,tag:this.tag,context:{...this.context,...t},isDebug:this.isDebugEnabled})}info(e,t){this.emit("info",e,t)&&this.sink.info(this.formatMessage(e,t))}success(e,t){this.emit("info",e,t)&&this.sink.success(this.formatMessage(e,t))}start(e,t){this.emit("info",e,t)&&this.sink.start(this.formatMessage(e,t))}ready(e,t){this.emit("info",e,t)&&this.sink.ready(this.formatMessage(e,t))}warn(e,t){this.emit("warn",e,t)&&this.sink.warn(this.formatMessage(e,t))}debug(e,t){this.isDebugEnabled()&&this.emit("debug",e,t)&&this.sink.debug(this.formatMessage(e,t))}error(e,t={}){let n,{error:r,...o}=t,i=this.tag?`${ey(this.tag)} `:"",a=e instanceof Error?e.message:String(e),s=`${i}${a}`;if(void 0!==r)s+=`: ${r instanceof Error?r.message:eg(r)}`,this.isDebugEnabled()&&r instanceof Error&&r.stack&&(n=r.stack);else e instanceof Error&&this.isDebugEnabled()&&e.stack&&(n=e.stack);let l=e_({...this.context,...o});l&&(s+=` ${l}`),n&&(s+=`
3
+ ${n}`),this.emit("error",a,{...o,...void 0!==r?{error:r}:{}})&&this.sink.error(s)}greet(e){this.emit("info",e)&&this.sink.greet(e)}request(e){var t;let n,r,o,i,a,s,l,p=e.timestamp??new Date,c=S.gray(`[${(n=p.getFullYear(),r=String(p.getMonth()+1).padStart(2,"0"),o=String(p.getDate()).padStart(2,"0"),i=String(p.getHours()).padStart(2,"0"),a=String(p.getMinutes()).padStart(2,"0"),s=String(p.getSeconds()).padStart(2,"0"),l=String(p.getMilliseconds()).padStart(3,"0"),`${n}-${r}-${o} ${i}:${a}:${s}.${l}`)}]`),d=S.bold(e.method),u=void 0===e.durationMs?"":` ${S.dim(`${e.durationMs.toFixed(1)}ms`)}`,m=eb(e.headers),h=Array.isArray(e.logId)?e.logId.join(","):e.logId,f=[m?e_({ppe:m}):"",h?e_({logid:h}):"",e_({...this.context,...e.context})].filter(Boolean).join(" "),g=`${this.tag?`${ey(this.tag)} `:""}${c} ${d} ${e.url} ${((t=e.statusCode)>=500?S.red:t>=400?S.yellow:S.green)(String(t))}${u}${f?` ${f}`:""}`,y=e.statusCode>=500?"error":e.statusCode>=400?"warn":"info";this.emit(y,`${e.method} ${e.url} ${e.statusCode}`,{...e.context,durationMs:e.durationMs,logId:h,ppe:m},p.getTime())&&("error"===y?this.sink.error(g):"warn"===y?this.sink.warn(g):this.sink.info(g))}formatMessage(e,t={}){let n=e_({...this.context,...t}),r=this.tag?`${ey(this.tag)} `:"",o=e instanceof Error?e.message:String(e);return`${r}${o}${n?` ${n}`:""}`}emit(e,t,n={},r=Date.now()){let o=em.getStore()??eh[eh.length-1],i=o?.onLog;if(i)try{i({timestamp:r,level:e,scope:this.tag,message:t instanceof Error?t.message:String(t),context:function(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[ef(e),t]).sort(([e],[t])=>e.localeCompare(t));if(0!==t.length)return Object.fromEntries(t.map(([e,t])=>[e,eu.test(e)?"[REDACTED]":function e(t,n=new WeakSet){if(t instanceof Error)return t.message;if(null===t||"object"!=typeof t)return"bigint"==typeof t?String(t):t;if(n.has(t))return"[Circular]";n.add(t);let r=Array.isArray(t)?t.map(t=>e(t,n)):Object.fromEntries(Object.entries(t).map(([t,r])=>[t,eu.test(ef(t))?"[REDACTED]":e(r,n)]));return n.delete(t),r}(t)]))}({...this.context,...n})})}catch{}return o?.printLogs!==!1}},ev=ew.child("build");var eE,eS,ex,eA,eT,eC,eO,eP,eI,ek,eD,e$,eR,eN,eL,eM,ej,eB,eU,eF,eW,eH,eG,eV=((e$={}).Adb="adb",e$.Hdt="hdt",e$.DevTools="devtools",e$);let eq=["adb","hdt","devtools"],eJ=f("path"),eK="./node_modules/.doubao",ez="./node_modules/.injected.js",eY="./node_modules/.injected.css",eX=".doubao-apps-style-anchor{display:none}",eZ="widgets";eJ.sep;let eQ=`base${eJ.sep}manifest.json`,e0=`base${eJ.sep}manifest.sign`,e1="mcp-privacy-login-card",e2="__doubao_apps__expired-widget",e3="bundle.keystore",e4={"@byted-lynx/react":"React","@lynx-js/react":"React","@lynx-js/react/internal":"ReactInternal","@lynx-js/react/jsx-dev-runtime":"ReactJSXDevRuntime","@lynx-js/react/jsx-runtime":"ReactJSXRuntime","@lynx-js/react/lepus/jsx-dev-runtime":"ReactJSXLepusDevRuntime","@lynx-js/react/lepus/jsx-runtime":"ReactJSXLepusRuntime","@lynx-js/react/experimental/lazy/import":"ReactLazyImport","@lynx-js/react/legacy-react-runtime":"ReactLegacyRuntime","@lynx-js/react/runtime-components":"ReactComponents","@lynx-js/react/worklet-runtime/bindings":"ReactWorkletRuntime","@lynx-js/react/debug":"ReactDebug",preact:"Preact",react:"React"},e5="client-tool",e9=e=>e===e1||e===e2,e8="app.config",e6=[".js",".ts",".mjs"],e7="com.larus.nova";class te{}let tt=f("node:fs"),tn=f("node:path"),tr="@byted-doubao-apps/framework",to="@doubao-dev/framework",ti=[tr,to];function ta(e){return`${e}/components`}function ts(e){let t=tn.resolve(e,"package.json");if(tt.existsSync(t))try{let e=JSON.parse(tt.readFileSync(t,"utf8")),n={...e.dependencies,...e.devDependencies,...e.peerDependencies};if(n[to])return to;if(n[tr])return tr}catch{}}function tl(e){return ts(e)??tr}let tp=e=>void 0!==process.env[e],tc=()=>(process.env.DEBUG??"").toLocaleLowerCase().split(",").includes("applet0930"),td=()=>tp("DISABLE_EXTERNAL")||"1"===process.env.ENABLE_SELF_CONTAINED||tp("LEGACY_FRAMEWORK"),tu=()=>tp("DISABLE_APP_TEMPLATE_JS")||tp("LEGACY_FRAMEWORK");function tm({mcpEndpoint:e}={}){let t=e?.trim();return t||(process.env.DOUBAO_SIMULATOR_MCP_ENDPOINT?.trim()??"")}function th(e,t=3e3){return Q(e,{timeout:t}).catch(()=>({stdout:"",stderr:""}))}async function tf(e,t){return th(`adb -s ${e} ${t}`)}async function tg(e){let t=(await th(`adb -s ${e} shell dumpsys activity activities | grep -E 'topResumedActivity|mResumedActivity' | tail -n 1`)).stdout.match(/\su\d+\s+([^\s\/]+)\//);return t?.[1]}async function ty(e,t){let n=(await tf(e,`shell pidof ${t}`)).stdout.trim();return n?n.split(/\s+/)[0]:void 0}async function tb(e){let t=await tg(e);return(t===e7||"com.flow.aisdk.example"===t)&&(await th(`adb -s ${e} shell am force-stop ${t}`),await th(`adb -s ${e} shell monkey -p ${t} -c android.intent.category.LAUNCHER 1`),!0)}async function t_(){return(await th("adb devices")).stdout.split("\n").slice(1).map(e=>e.split(" ")[0].trim()).filter(Boolean)}async function tw(){let e=await t_();if(e.length>1){let{device:t}=await X.prompt([{type:"search",name:"device",message:"检测到多个设备,请选择用于调试的设备(可按设备 ID 搜索):",source:t=>e.filter(e=>e.toLowerCase().includes(t?.toLowerCase()??""))}]);return t}return e[0]}class tv extends te{deviceId;latestLoadParams;lastAppProcessId;isWatchingAppProcess=!1;isAutoReloading=!1;constructor(e,t={}){if(super(),this.deviceId=e,t.skipForegroundAppWatch)return;let n=setInterval(()=>{this.watchAppProcess()},500);process.once("exit",()=>clearInterval(n))}async watchAppProcess(){if(!this.isWatchingAppProcess){this.isWatchingAppProcess=!0;try{let e=await ty(this.deviceId,e7);void 0!==this.lastAppProcessId&&void 0!==e&&this.lastAppProcessId!==e&&await this.reloadOnAppRestart(e),void 0!==e&&(this.lastAppProcessId=e)}finally{this.isWatchingAppProcess=!1}}}async reloadOnAppRestart(e){if(void 0!==this.latestLoadParams&&!this.isAutoReloading){this.isAutoReloading=!0;try{if(await new Promise(e=>setTimeout(e,5e3)),await ty(this.deviceId,e7)!==e)return;await this.load(this.latestLoadParams)}finally{this.isAutoReloading=!1}}}async load(e){this.latestLoadParams=e;let{appletUrl:t,appId:n,isSigned:r}=e,o=`shell am broadcast -a com.bytedance.applet.SET_APPLET_DEBUG_HOST --es appletName ${n} --es appletHost ${t} --es appletType 1 --es isSigned ${r}`;tc()&&console.log(S.dim(`adb -s ${this.deviceId} ${o}`)),await tf(this.deviceId,o)}async openPage(e){let{appId:t,pageId:n,pageData:r,pageSettings:o,mode:i}=e,a=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageName ${n} --es appletPageData '${r}' --es appletPageSettings '${o}' --es mode '${i}'`;tc()&&console.log(S.dim(`adb -s ${this.deviceId} ${a}`)),await tf(this.deviceId,a)}async openPageUrl(e){let{appId:t,url:n}=e,r=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageUrl '${n}'`;tc()&&console.log(S.dim(`adb -s ${this.deviceId} ${r}`)),await tf(this.deviceId,r)}async pushWidget(e){let{appId:t,widgetId:n,widgetData:r,botId:o}=e,i=`shell am broadcast -a com.bytedance.applet.START_APPLET_WIDGET --es appletName ${t} --es widgetName ${n} --es widgetData '${r}' --es botId ${o||process.env.DEBUG_BOT_ID}`;tc()&&console.log(S.dim(`adb -s ${this.deviceId} ${i}`)),await tf(this.deviceId,i)}async callTool(e){let{appId:t,toolId:n,toolData:r}=e,o=`shell am broadcast -a com.bytedance.applet.CALL_TOOL --es appletName ${t} --es toolName '${n}' --es toolData '${r}'`;tc()&&console.log(S.dim(`adb -s ${this.deviceId} ${o}`)),await tf(this.deviceId,o)}}class tE extends te{async load(e){}async openPage(e){}async openPageUrl(e){}async pushWidget(e){}async callTool(e){}}ew.child("cli");let tS=ew.child("config"),tx=ew.child("security"),tA=ew.child("build"),tT=tA.withContext({mode:"cloud"}),tC=ew.child("deploy"),tO=ew.child("dev-server");class tP{options;currentUrl=null;debugDriver=null;appId=null;constructor(e){this.options=e}async start(e,t,n){if(null!==this.currentUrl){this.currentUrl=e,this.debugDriver?.getAllAppClients().forEach(e=>this.onConnect(e,n));return}this.currentUrl=e,this.appId=t;let{getDebugDriver:r,toolkitExecutor:o}=await import("./@byted-hdt/cli.js").then(f.bind(f,"../../../node_modules/.pnpm/@byted-hdt+cli@0.0.71_debug@4.4.3/node_modules/@byted-hdt/cli/dist/es/index.js"));await o({runType:"rspeedy",openWebview:this.options.devtool});let i=r();this.debugDriver=i,i.getAllAppClients().forEach(e=>this.onConnect(e,n)),i.on("app-client-connected",this.onConnect)}stop(){this.currentUrl=null,this.debugDriver?.off("app-client-connected",this.onConnect)}sendMessage(e){this.debugDriver?.getAllAppClients().forEach(t=>{try{t.sendCustomizedMessage(e.method,e.params,-1,"CDP")}catch(e){tO.error("向 HDT 客户端发送消息失败",{error:e})}})}onConnect=(e,t)=>{null!==this.currentUrl&&null!==this.debugDriver&&null!==this.appId&&this.sendMessage({method:"Applet_AppReload",params:{appletName:this.appId,appletHost:this.currentUrl,appletType:1,isSigned:t}})}}class tI extends te{server;constructor(){super(),this.server=new tP({devtool:!0,open:!0})}async load(e){let{appletUrl:t,appId:n,isSigned:r}=e;this.server.start(t,n,r)}async openPage(e){let{appId:t,pageId:n,pageData:r,pageSettings:o,mode:i}=e;this.server.sendMessage({method:"Applet_OpenPage",params:{appletName:t,appletPageName:n,appletPageData:r,appletPageSettings:o,mode:i}})}async openPageUrl(e){let{appId:t,url:n}=e;this.server.sendMessage({method:"Applet_OpenPageUrl",params:{appletName:t,url:n}})}async pushWidget(e){let{appId:t,widgetId:n,widgetData:r,botId:o}=e;this.server.sendMessage({method:"Applet_OpenWidget",params:{appletName:t,widgetName:n,widgetData:r,botId:o||process.env.DEBUG_BOT_ID}})}async callTool(e){let{appId:t,toolId:n,toolData:r}=e;this.server.sendMessage({method:"Applet_CallTool",params:{appletName:t,toolName:n,toolData:r}})}}async function tk(t={}){if(!e){let n=t.debugDriver??eV.Adb;if(!eq.includes(n))throw Error(`无效的调试驱动 "${n}",可选值:${eq.join(", ")}。`);switch(n){case eV.Hdt:e=new tI;break;case eV.DevTools:e=new tE;break;case eV.Adb:{let n=t.deviceId??await tw();n&&(e=new tv(n,{skipForegroundAppWatch:t.skipAdbForegroundAppWatch}));break}default:throw Error(`无效的调试驱动 "${n}",可选值:${eq.join(", ")}。`)}}return e}let tD=f("node:fs/promises");async function t$(e){let t=(0,tn.join)(e,"debug-scene");try{return(await (0,tD.readdir)(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>({name:e.name.slice(0,-5),path:(0,tn.join)(t,e.name)}))}catch{return[]}}async function tR(e){try{return A(JSON.parse(await (0,tD.readFile)(e,"utf8")))}catch(t){return tc()&&console.warn(`[DoubaoApps] 加载调试场景 "${e}" 失败:${t instanceof Error?t.message:String(t)}`),null}}async function tN(e,t){let{matchedScene:n,appId:r,driver:o,variables:i}=e,a=t??await tR(n.path);if(!a)return;let s=D(a,i);if("page"===s.type){var l,p;l=n.name,0!==(p=s.unresolvedVariables).length&&console.warn(`[DoubaoApps] 调试场景 "${l}" 存在未解析的变量占位符:${p.map(e=>`{{${e}}}`).join(", ")}`),await o.openPageUrl({appId:r,url:s.url})}else if("widget"===s.type){let e=JSON.stringify(s.resolvedInput),t={appId:r,widgetId:s.id,widgetData:e,botId:s.botId};await o.pushWidget(t)}else{let e=JSON.stringify(s.resolvedInput),t={appId:r,toolId:s.id,toolData:e};await o.callTool(t)}}let tL="https://lf3-static.bytednsdoc.com/obj/eden-cn/777eh7nuptpfnuhd/default.svg";function tM(e){if("string"==typeof e){let t=e.length>0?e:tL;return{"1x":t,"2x":t,"3x":t}}return{"1x":e?.["1x"]||tL,"2x":e?.["2x"]||tL,"3x":e?.["3x"]||tL}}(eE=eR||(eR={})).DEV="dev",eE.BUILD="build",eE.PERF="perf",eE.DEPLOY="deploy",eE.ANALYZE="analyze";let tj={DEV:eR.DEV,BUILD:eR.BUILD,PERF:eR.PERF,DEPLOY:eR.DEPLOY,ANALYZE:eR.ANALYZE};function tB(e){let t=Object.keys(e);return t.sort(),t.reduce((t,n)=>(t[n]=e[n],t),{})}class tU{get metadata(){return this._metadata}toString(){return JSON.stringify(this._metadata,null,2)}}class tF extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,n){let r=this._metadata;return{id:r.id,name:r.name,path:r.path,description:r.description,keywords:r.keywords,digest:t,prop:r.prop,entry:e,renderType:n,title:r.title}}}class tW extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,n,r=[]){let o=this._metadata;return{widgetId:o.id,name:o.name,description:o.description,keywords:o.keywords,digest:t,prop:o.prop,entry:e,renderType:n,border:o.border,appSettings:r,boxType:"full_box"===o.boxType?ea.FULL_BOX:ea.INBOX,titleType:o.titleType?tW.TITLE_TYPE_MAP[o.titleType]:void 0}}}tW.TITLE_TYPE_MAP={none:2,normal:0,float:1};class tH extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(){let e=this._metadata;return{id:e.id,name:e.name,description:e.description,timeout:e.timeout}}}class tG extends tU{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest({toolsMetadata:e,hashCode:t,appRuntimeEntry:n,appRuntimeType:r}){return{name:this._metadata.name,description:this._metadata.description,appletId:this._metadata.appId,appletEntry:"index",pages:[],darkMode:this._metadata.darkMode,keywords:this._metadata.keywords,icons:tM(this._metadata.icons),digest:t,prop:"",tools:Object.values(e).map(e=>e.toManifest()),appRuntimeEntry:n,appRuntimeType:r}}}class tV{constructor(){this.metadata={app:{},widgets:{},pages:{},tools:{}}}get app(){return this.metadata.app.metadata??{}}get appId(){return this.app.appId}addAppMeta(e){this.metadata.app.metadata?this.metadata.app.assign(e):this.metadata.app=new tG(e)}addToolMeta(e,t){this.metadata.tools[e]?this.metadata.tools[e].assign(t):this.metadata.tools[e]=new tH(t)}addPageMeta(e,t){this.metadata.pages[e]?this.metadata.pages[e].assign(t):this.metadata.pages[e]=new tF(t)}addWidgetMeta(e,t){this.metadata.widgets[e]?this.metadata.widgets[e].assign(t):this.metadata.widgets[e]=new tW(t)}getData(){let{tools:e,pages:t,widgets:n,app:r}=this.metadata;return{app:r.metadata??{},tools:tB(Object.fromEntries(Object.keys(e).map(t=>[t,e[t].metadata]))),pages:tB(Object.fromEntries(Object.keys(t).map(e=>[e,t[e].metadata]))),widgets:tB(Object.fromEntries(Object.keys(n).map(e=>[e,n[e].metadata])))}}getInstance(){let{tools:e,pages:t,widgets:n,app:r}=this.metadata;return{app:r,tools:tB(e),pages:tB(t),widgets:tB(n)}}clearData(){this.metadata={app:{},pages:{},tools:{},widgets:{}}}}let tq={MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE:1e3,MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY:2e3,MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE:3e3},tJ={BEFORE_BUILD_STAGE_CREATE_CONFIG:1e3,BEFORE_BUILD_STAGE_MODIFY_BUILD_CONFIG:2e3,BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG:3e3},tK={COLLECT_METADATA_STAGE_START:1e3,COLLECT_METADATA_STAGE_PROCESS_METADATA:2e3,COLLECT_METADATA_STAGE_OPTIMIZE:3e3,COLLECT_METADATA_STAGE_FINISH:4e3},tz={...tq,...tJ,...tK},tY={...tq,...tJ,...tK};(eS=eN||(eN={}))[eS.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS=1e3]="BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS",eS[eS.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS=2e3]="BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS",eS[eS.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=3e3]="BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS",eS[eS.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS=3999]="BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS",eS[eS.AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS=4e3]="AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS",eS[eS.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS=5e3]="AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS",eS[eS.AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=6e3]="AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS";let tX=f("../../../node_modules/.pnpm/tapable@2.2.1/node_modules/tapable/lib/index.js");function tZ(){return{modifyEnvironment:new tX.FU(["arg0"]),modifyEntryOption:new tX.BD(["arg0"]),beforeBuild:new tX.FU(["arg0"]),collectMetaData:new tX.FU(["arg0"]),build:new tX.FU(["arg0"]),afterBuild:new tX.FU(["arg0"])}}function tQ({hooks:e,stages:t}){return{hooks:e,...t}}class t0{constructor(e,t=[]){this.plugins=[],this.api={...{worker:tQ({hooks:tZ(),stages:tY}),view:tQ({hooks:tZ(),stages:tz}),assets:tQ({hooks:{beforeEmit:new tX.FU(["arg0"]),afterEmit:new tX.FU(["arg0"])},stages:eN}),deploy:tQ({hooks:{beforeDeploy:new tX.FU(["arg0"]),deploy:new tX.FU(["arg0"]),afterDeploy:new tX.FU(["arg0"])},stages:{}})},context:e},this.addPlugins(t)}getScopeHooks(e){return this.api[e].hooks}addPlugins(e){this.plugins.push(...e)}async bootstrap(){for await(let e of this.plugins)await e.setup(this.api)}async callScopeHooks(e,t,...n){let r=B(this.getScopeHooks(e),t);return await r.promise(...n)}async callWorkerHooks(e,...t){return this.callScopeHooks("worker",e,...t)}async callViewHooks(e,...t){return this.callScopeHooks("view",e,...t)}async callAssetsHooks(e,...t){return this.callScopeHooks("assets",e,...t)}async callDeployHooks(e,...t){return this.callScopeHooks("deploy",e,...t)}}let t1=f("fs"),t2=f("../../../node_modules/.pnpm/archiver@7.0.1/node_modules/archiver/index.js");function t3(e,t,n,r){return new Promise((o,i)=>{let a=t1.createWriteStream(e),s=t2("zip",{zlib:{level:9}});s.pipe(a),s.directory(t,n??!1),a.on("close",()=>{r?.deleteResource&&t1.rmSync(t,{recursive:!0}),ev.success("Compiled artifacts packaged",{file:eJ.basename(e)}),o("")}),s.on("error",e=>{ev.error("An error occurred during packaging",{error:e}),i(e)}),s.finalize()})}async function t4({channelName:e,manifest:t,rootPath:n}){let r=eJ.resolve(n),o=eJ.resolve(n,"doubao_app_output"),i=eJ.resolve(o,t.packageName),a={outputFolder:o,transformFolder:i,manifest:t};t1.existsSync(o)&&t1.rmSync(o,{recursive:!0}),t1.mkdirSync(o),t1.mkdirSync(i),function(e,t){let{transformFolder:n,manifest:r}=t,{applet:o,widgets:i}=r,a=eJ.resolve(e,"base"),s=eJ.resolve(n,"base");t1.mkdirSync(s),t1.cpSync(a,s,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0});let l=eJ.resolve(e,o.appletId),p=eJ.resolve(n,o.appletId);t1.mkdirSync(p),o.pages.length>0&&t1.cpSync(l,p,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0}),i.forEach(t=>{let r=eJ.resolve(e,t.widgetId),o=eJ.resolve(n,t.widgetId);t1.mkdirSync(o),t1.cpSync(r,o,{filter:e=>null===e.match(/(.)*\.map$/),recursive:!0})})}(r,a);let s=await t5(e,a);return ev.debug("Package resource created",{packageResource:s}),{packageResource:s}}async function t5(e,t){if(!/([a-z0-9_-]+)/.test(e))throw Error("Channel name is invalid, only support /[a-z0-9_-]+/. archive gecko package failed. ");let{manifest:n,outputFolder:r,transformFolder:o}=t,{applet:i,widgets:a,packageName:s,versionCode:l}=n,p=eJ.resolve(r,"deploy-package"),c=eJ.resolve(p,e),d=eJ.resolve(c,s);t1.mkdirSync(p),t1.mkdirSync(c),t1.mkdirSync(d),t1.cpSync(o,d,{recursive:!0});let u={},m=t1.readdirSync(d).filter(e=>t1.statSync(eJ.resolve(d,e)).isDirectory()),h=eJ.resolve(p,`${e}.zip`);try{if(await Promise.all(m.map(e=>{if("base"===e)return t3(eJ.resolve(d,`${e}_${l}.zip`),eJ.resolve(d,e),e,{deleteResource:!0});if(e===i.appletId){let t=`${e}_${i.digest}.zip`;return u[i.appletId]=t,t3(eJ.resolve(d,t),eJ.resolve(d,e),e,{deleteResource:!0})}let t=a.find(t=>t.widgetId===e);if(t){let n=`${e}_${t.digest}.zip`;return u[t.widgetId]=n,t3(eJ.resolve(d,n),eJ.resolve(d,e),e,{deleteResource:!0})}return ev.error("Invalid package directory",{directory:e}),Promise.resolve()})),await t3(h,c,e),process.env.BUILD_VERSION){let e=eJ.resolve(r,"scm-deploy-package"),t=eJ.resolve(e,s);t1.mkdirSync(e),t1.mkdirSync(t),t1.cpSync(d,t,{recursive:!0})}return ev.success("Deploy package archived",{destination:h}),{resource:h,fileNames:u}}catch(e){throw Error(`ERROR: Archive the deploy-package failed. ${e}`)}}(ex=eL||(eL={})).NORMAL="normal",ex.SELF_BUILT_CREATE="selfBuiltCreate",ex.SELF_BUILT_PUBLISH="selfBuiltPublish",ex.SELF_BUILT_CHECK_STATUS="selfBuiltCheckStatus",ex.SELF_BUILT_STOP="selfBuiltStop",ex.SELF_BUILT_ROLLBACK="selfBuiltRollback";let t9={NORMAL:eL.NORMAL,SELF_BUILT_CREATE:eL.SELF_BUILT_CREATE,SELF_BUILT_PUBLISH:eL.SELF_BUILT_PUBLISH,SELF_BUILT_CHECK_STATUS:eL.SELF_BUILT_CHECK_STATUS,SELF_BUILT_STOP:eL.SELF_BUILT_STOP,SELF_BUILT_ROLLBACK:eL.SELF_BUILT_ROLLBACK};function t8(e,t){let n=(t||e).replace(/^\/+/,"").split("/").filter(Boolean);return n.length>1&&"index"===n[n.length-1]?n[n.length-2]||"index":n[n.length-1]||"index"}function t6(e,t){let[n]=(t??e).split(/[?#]/,1),r=n.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"");return r?`/${r}`:"/"}function t7(e,t,n){let r=t6(t).slice(1);return`${e}/${r}/${n}`}function ne(e,...t){return q(e,...t,(e,t,n)=>Array.isArray(e)?e.concat(t):Buffer.isBuffer(t)?t:void 0)}let nt=(e,t)=>tn.relative(e,t).replaceAll(tn.sep,"/");class nn{constructor(e,t=""){this.imports=[],this.contents=[],this._filename=e,t&&this.appendContent(t)}appendImports(...e){this.imports.push(...e)}appendContent(...e){this.contents.push(...e)}unshiftContent(...e){this.contents.unshift(...e)}get filename(){return this._filename}toString(){return[this.imports.map(e=>{if(e.importSpecifiers&&e.importSpecifiers.length>0){let t="",n=e.importSpecifiers.find(e=>"default"===e.propertyName),r=e.importSpecifiers.filter(e=>"default"!==e.propertyName);return n&&(t+=`${n.name}`),r.length&&(n&&(t+=", "),t+=`{ ${r.map(e=>e.name===e.propertyName?e.name:`${e.propertyName} as ${e.name}`).join(", ")} }`),`import ${t} from "${e.moduleSpecifier}";`}return`import "${e.moduleSpecifier}";`}).join("\n"),...this.contents].join("\n").trim()}write(e){if(this._filename){let t=eJ.dirname(this._filename);(0,t1.existsSync)(t)||(0,t1.mkdirSync)(t,{recursive:!0}),(0,t1.writeFileSync)(this._filename,this.toString(),e)}return this._filename}}function nr(e,t,n=!1,r=!1){return Object.keys(e).reduce((o,i)=>{let{filename:a,isVirtualFile:s,isSpecial:l}=e[i];if(s||l)return o;let p=`${eK}${tn.sep}${i}${tn.extname(a)}`,c=nt(tn.join(t,p,".."),a),d=tl(t),u=n?"defineWidget":"definePage";return o[i]=new nn(p),o[i].appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:d,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"getViewData",name:"getViewData"},{propertyName:u,name:u}]},{moduleSpecifier:c,importSpecifiers:[{propertyName:"default",name:"TaroView"}]}),o[i].appendContent(`
4
4
  const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
5
5
 
6
6
  const View = ${u}({
@@ -15,137 +15,61 @@ root.render(<FC />);`,r?`
15
15
  if (import.meta.webpackHot) {
16
16
  import.meta.webpackHot.accept()
17
17
  }
18
- `:""),i},{})}let nr=g("module"),ni="doubao:plugin:taro";class na extends nt{toString(){return this.contents.join("\n").trim()}}async function ns({config:e,pluginSystem:t}){let n=e.context.environment;await t.callWorkerHooks("modifyEnvironment",{environment:n}),e.context.setEnvironment(n);let{entry:r}=await t.callWorkerHooks("modifyEntryOption",{entry:{app:new na(`.${tt.sep}app.js`,"")}});return e.web&&e.context.app&&r.app?.unshiftContent(`
19
- import { hookConsole } from "${to(e.context.appDirectory)}";
18
+ `:""),o},{})}let no=f("module"),ni="doubao:plugin:taro";class na extends nn{toString(){return this.contents.join("\n").trim()}}async function ns({config:e,pluginSystem:t}){let n=e.context.environment;await t.callWorkerHooks("modifyEnvironment",{environment:n}),e.context.setEnvironment(n);let{entry:r}=await t.callWorkerHooks("modifyEntryOption",{entry:{app:new na(`.${tn.sep}app.js`,"")}});return e.web&&e.context.app&&r.app?.unshiftContent(`
19
+ import { hookConsole } from "${tl(e.context.appDirectory)}";
20
20
 
21
21
  if (__DOUBAO_APPS_WEB__ && typeof __BACKGROUND__ === 'boolean' && __BACKGROUND__) {
22
22
  hookConsole();
23
23
  }
24
- `),{entry:r}}async function no({compiler:e,compilation:t,assets:n,metadata:r,resolveAppInfo:i,shouldInjectAsset:a}){let s=Object.keys(n).reduce((e,n)=>{if(!a(n))return e;let r=t.getAsset(n);return r&&e.push(r),e},[]);if(0===s.length)return;let o=r.app,l=await i?.(),p=`globalThis.__AI_MANIFEST__ = ${JSON.stringify({package:l?.appKey||o.appId,appId:l?.appKey||o.appId,name:l?.appName||o.name,icons:l?.iconUrl?tM(l.iconUrl):o.icons})};
25
- `;s.forEach(n=>{if(n.source.source().toString().startsWith(p))return;let r=new e.webpack.sources.ReplaceSource(n.source,n.name);r.insert(0,p),t.updateAsset(n.name,r,n.info)})}function nl(e){let t=eJ.posix.basename(e);return"background.js"===t||"main-thread.js"===t||/^background\.[^/]+\.js$/.test(t)||/^main-thread\.[^/]+\.js$/.test(t)}function np(e){let t=e.replaceAll("\\","/");return t.startsWith("__doubao_web__")&&"template.js"===eJ.posix.basename(t)}class nd{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(nd.name,t=>{t.hooks.processAssets.tapPromise({name:nd.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{await no({compiler:e,compilation:t,assets:n,...this.options})})})}}let nc="base/app.web.bundle";function nu(e,t,n){if("pages"===e&&!n)throw Error("appId is required to resolve Web page entry path");return`${"pages"===e?`${n}/`:""}${t}/index.web.bundle`}function nh(e){return`__doubao_web__${e.replaceAll("\\","/").replaceAll("/","__")}`}function nm(e,t,n){return t[n]?.id??t8(n,e[n]?.folderName)}function ng(e={},t={},n="configured"){return"all"===n?e:function(e={},t={}){return Object.fromEntries(Object.entries(e).filter(([e])=>t[e]?.web===!0))}(e,t)}function nf(e){return"mixed-all"===e||"web-only-all"===e?"all":"configured"}function ny(e){return"web-only-all"===e||"web-only-configured"===e}class nb{apply(e){e.hooks.thisCompilation.tap(nb.name,t=>{t.hooks.processAssets.tapPromise({name:nb.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{let n=n_(t),r=n?t.getAsset(n):void 0;if(!n||!r)throw Error("Worker entry asset was not emitted.");t.emitAsset(nc,new e.webpack.sources.RawSource(await nw(r.source.source().toString())));let i=t.getAsset(`${n}.map`);i&&t.emitAsset(`${nc}.map`,i.source,i.info),t.deleteAsset(n)})})}}function n_(e){let t=e.entrypoints.get("app")?.getEntrypointChunk();return[...t?.files??[]].find(e=>e.endsWith(".js"))}async function nw(e){let{encode:t}=await import("./@lynx-js/web-core-canary.js");return Buffer.from(t({styleInfo:{},manifest:{"/app-service.js":e},cardType:"react",appType:"card",pageConfig:{enableFiberArch:!0,useLepusNG:!0,enableReuseContext:!0,bundleModuleMode:"ReturnByFunction",targetSdkVersion:"3.2"},lepusCode:{root:"void 0;"},customSections:{},elementTemplates:{}}))}class nv{options;recordNativeAppAssetPaths;constructor(e,t){this.options=e,this.recordNativeAppAssetPaths=t}apply(e){new e.webpack.experiments.VirtualModulesPlugin({[ez]:"",[eY]:eX,...Object.fromEntries(Object.entries(this.options.entry).map(([,e])=>[e.filename,e.toString()]))}).apply(e),e.hooks.make.tapPromise(nv.name,async()=>{await this.options.pluginSystem.callWorkerHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(nv.name,t=>{t.hooks.optimizeTree.tapPromise(nv.name,async()=>{await this.options.pluginSystem.callWorkerHooks("build",{metadata:this.options.context.metadata,fileDependencies:t.fileDependencies})}),t.hooks.processAssets.tapPromise({name:nv.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{var r,i,a;let s,o=n_(t);if(!o||!t.getAsset(o))throw Error("Worker entry asset was not emitted.");this.recordNativeAppAssetPaths&&(r=t,i=this.options.context,a=o,i.setAppAssetPath(a),s=`${a}.map`,r.getAsset(s)&&i.setAppMapAssetPath(s)),await no({compiler:e,compilation:t,assets:n,metadata:this.options.context.metadata,resolveAppInfo:()=>this.options.context.resolveAppInfo(),shouldInjectAsset:e=>e===o})})}),e.hooks.done.tapPromise(nv.name,async e=>{await this.options.pluginSystem.callWorkerHooks("afterBuild",{stats:e})})}}let nE=g("node:os"),nS=g("process"),nx=g("../../../node_modules/.pnpm/@lynx-js+type-config@4.1.3/node_modules/@lynx-js/type-config/index.js");var nA={},nC={};function nT(e){var t=nC[e];if(void 0!==t)return t.exports;var n=nC[e]={exports:{}};return nA[e](n,n.exports,nT),n.exports}nT.m=nA,nT.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return nT.d(t,{a:t}),t},nT.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)nT.o(t,r)&&!nT.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},nT.add=function(e){Object.assign(nT.m,e)},nT.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),nT.add({"../../../node_modules/.pnpm/isobject@3.0.1/node_modules/isobject/index.js"(e){e.exports=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)}},"../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js"(e,t,n){var r=n("../../../node_modules/.pnpm/isobject@3.0.1/node_modules/isobject/index.js");e.exports=function(e,t){if(!r(e)&&"function"!=typeof e)return{};var n={};if("string"==typeof t)return t in e&&(n[t]=e[t]),n;for(var i=t.length,a=-1;++a<i;){var s=t[a];s in e&&(n[s]=e[s])}return n}},"../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js"(e){let t=nS||{},n=t.argv||[],r=t.env||{},i=!(r.NO_COLOR||n.includes("--no-color"))&&(!!r.FORCE_COLOR||n.includes("--color")||"win32"===t.platform||(t.stdout||{}).isTTY&&"dumb"!==r.TERM||!!r.CI),a=(e,t,n=e)=>r=>{let i=""+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i="",a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},o=(e=i)=>{let t=e?a:()=>String;return{isColorSupported:e,reset:t("\x1b[0m","\x1b[0m"),bold:t("\x1b[1m","\x1b[22m","\x1b[22m\x1b[1m"),dim:t("\x1b[2m","\x1b[22m","\x1b[22m\x1b[2m"),italic:t("\x1b[3m","\x1b[23m"),underline:t("\x1b[4m","\x1b[24m"),inverse:t("\x1b[7m","\x1b[27m"),hidden:t("\x1b[8m","\x1b[28m"),strikethrough:t("\x1b[9m","\x1b[29m"),black:t("\x1b[30m","\x1b[39m"),red:t("\x1b[31m","\x1b[39m"),green:t("\x1b[32m","\x1b[39m"),yellow:t("\x1b[33m","\x1b[39m"),blue:t("\x1b[34m","\x1b[39m"),magenta:t("\x1b[35m","\x1b[39m"),cyan:t("\x1b[36m","\x1b[39m"),white:t("\x1b[37m","\x1b[39m"),gray:t("\x1b[90m","\x1b[39m"),bgBlack:t("\x1b[40m","\x1b[49m"),bgRed:t("\x1b[41m","\x1b[49m"),bgGreen:t("\x1b[42m","\x1b[49m"),bgYellow:t("\x1b[43m","\x1b[49m"),bgBlue:t("\x1b[44m","\x1b[49m"),bgMagenta:t("\x1b[45m","\x1b[49m"),bgCyan:t("\x1b[46m","\x1b[49m"),bgWhite:t("\x1b[47m","\x1b[49m"),blackBright:t("\x1b[90m","\x1b[39m"),redBright:t("\x1b[91m","\x1b[39m"),greenBright:t("\x1b[92m","\x1b[39m"),yellowBright:t("\x1b[93m","\x1b[39m"),blueBright:t("\x1b[94m","\x1b[39m"),magentaBright:t("\x1b[95m","\x1b[39m"),cyanBright:t("\x1b[96m","\x1b[39m"),whiteBright:t("\x1b[97m","\x1b[39m"),bgBlackBright:t("\x1b[100m","\x1b[49m"),bgRedBright:t("\x1b[101m","\x1b[49m"),bgGreenBright:t("\x1b[102m","\x1b[49m"),bgYellowBright:t("\x1b[103m","\x1b[49m"),bgBlueBright:t("\x1b[104m","\x1b[49m"),bgMagentaBright:t("\x1b[105m","\x1b[49m"),bgCyanBright:t("\x1b[106m","\x1b[49m"),bgWhiteBright:t("\x1b[107m","\x1b[49m")}};e.exports=o(),e.exports.createColors=o}});let nO=globalThis.window?.document!==void 0;globalThis.process?.versions?.node,globalThis.process?.versions?.bun,globalThis.Deno?.version?.deno,globalThis.process?.versions?.electron,globalThis.navigator?.userAgent?.includes("jsdom");let nI=globalThis.navigator?.userAgentData?.platform;function nP(e,t=globalThis.Deno?globalThis.Deno.args:w.argv){let n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),i=t.indexOf("--");return -1!==r&&(-1===i||r<i)}"macOS"===nI||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform,"Windows"===nI||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform,"Linux"===nI||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform,"iOS"===nI||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),"Android"===nI||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform,nO||w.env.TERM_PROGRAM,nO||w.platform,nO||w.cwd;let{env:nk}=w;function nN(e,n={}){var r;return 0!==(r=function(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let i=function(){if(!("FORCE_COLOR"in nk))return;if("true"===nk.FORCE_COLOR)return 1;if("false"===nk.FORCE_COLOR)return 0;if(0===nk.FORCE_COLOR.length)return 1;let e=Math.min(Number.parseInt(nk.FORCE_COLOR,10),3);if([0,1,2,3].includes(e))return e}();void 0!==i&&(t=i);let a=r?t:i;if(0===a)return 0;if(r){if(nP("color=16m")||nP("color=full")||nP("color=truecolor"))return 3;if(nP("color=256"))return 2}if("TF_BUILD"in nk&&"AGENT_NAME"in nk)return 1;if(e&&!n&&void 0===a)return 0;let s=a||0;if("dumb"===nk.TERM)return s;if("win32"===w.platform){let e=nE.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in nk)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(e=>e in nk)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(e=>e in nk)||"codeship"===nk.CI_NAME?1:s;if("TEAMCITY_VERSION"in nk)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(nk.TEAMCITY_VERSION);if("truecolor"===nk.COLORTERM||"xterm-kitty"===nk.TERM||"xterm-ghostty"===nk.TERM||"wezterm"===nk.TERM)return 3;if("TERM_PROGRAM"in nk){let e=Number.parseInt((nk.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(nk.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(nk.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(nk.TERM)||"COLORTERM"in nk?1:s}(e,{streamIsTTY:e&&e.isTTY,...n}))&&{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function n$(e,t=nS.argv){let n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),i=t.indexOf("--");return -1!==r&&(-1===i||r<i)}function nD(e=""){if(/^\d{3,4}$/.test(e)){let t=/(\d{1,2})(\d{2})/.exec(e)??[];return{major:0,minor:Number.parseInt(t[1],10),patch:Number.parseInt(t[2],10)}}let t=(e??"").split(".").map(e=>Number.parseInt(e,10));return{major:t[0],minor:t[1],patch:t[2]}}function nR(e){let{CI:t,CURSOR_TRACE_ID:n,FORCE_HYPERLINK:r,NETLIFY:i,TEAMCITY_VERSION:a,TERM_PROGRAM:s,TERM_PROGRAM_VERSION:o,VTE_VERSION:l,TERM:p}=w.env;if(r)return!(r.length>0&&0===Number.parseInt(r,10));if(n$("no-hyperlink")||n$("no-hyperlinks")||n$("hyperlink=false")||n$("hyperlink=never"))return!1;if(n$("hyperlink=true")||n$("hyperlink=always")||i)return!0;if(!nN(e)||e&&!e.isTTY)return!1;if("WT_SESSION"in w.env)return!0;if("win32"===w.platform||t||a)return!1;if(s){let e=nD(o);switch(s){case"iTerm.app":if(3===e.major)return e.minor>=1;return e.major>3;case"WezTerm":if(/^0-unstable-\d{4}-\d{2}-\d{2}$/.test(o))return o.slice(11)>="2020-06-20";return e.major>=0x1343cac;case"vscode":if(n)return!0;return e.major>1||1===e.major&&e.minor>=72;case"ghostty":case"zed":case"Orca":return!0}}if(l){if("0.50.0"===l)return!1;let e=nD(l);return e.major>0||e.minor>=50}switch(p){case"alacritty":case"xterm-kitty":return!0}return!1}nP("no-color")||nP("no-colors")||nP("color=false")||nP("color=never")?t=0:(nP("color")||nP("colors")||nP("color=true")||nP("color=always"))&&(t=1),nN({isTTY:y.isatty(1)}),nN({isTTY:y.isatty(2)});let nL={stdout:nR(w.stdout),stderr:nR(w.stderr)};function nM(e,t,{target:n="stdout",...r}={}){return nL[n]?["\x1b]","8",";",";",t,"\x07",e,"\x1b]","8",";",";","\x07"].join(""):!1===r.fallback?e:"function"==typeof r.fallback?r.fallback(e,t):`${e} ${t}`}nM.isSupported=nL.stdout,nM.stderr=(e,t,n={})=>nM(e,t,{target:"stderr",...n}),nM.stderr.isSupported=nL.stderr;let nj=nT("../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js");var nB=nT.n(nj);class nU{options;constructor(e){this.options=e}name="LynxConfigWebpackPlugin";apply(e){e.hooks.thisCompilation.tap(this.name,e=>{this.options.LynxTemplatePlugin.getLynxTemplatePluginHooks(e).beforeEncode.tap(this.name,e=>{let{config:t}=this.options;return e.encodeData.compilerOptions={...e.encodeData.compilerOptions,...nB()(t,this.options.compilerOptionsKeys)},e.encodeData.sourceContent.config={...e.encodeData.sourceContent.config,...nB()(t,this.options.configKeys)},e})})}}let nF=e=>nW.has(e),nW=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","import","in","instanceof","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with"]);(eA=eM||(eM={}))[eA.Start=0]="Start",eA[eA.Property=1]="Property",eA[eA.StringKey=2]="StringKey",eA[eA.NumberKey=3]="NumberKey";let nH=nT("../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js");var nG=nT.n(nH);let nV=Object.assign(s=e=>{if(!1===("object"==typeof e&&null!==e&&!1===Array.isArray(e)&&((e,t=!0)=>(void 0===e.alignMouseEventWithW3C||"boolean"==typeof e.alignMouseEventWithW3C)&&(void 0===e.disableLongpressAfterScroll||"boolean"==typeof e.disableLongpressAfterScroll)&&(void 0===e.enableA11y||"boolean"==typeof e.enableA11y)&&(void 0===e.enableAccessibilityElement||"boolean"==typeof e.enableAccessibilityElement)&&(void 0===e.enableCSSInheritance||"boolean"==typeof e.enableCSSInheritance)&&(void 0===e.enableCSSInlineVariables||"boolean"==typeof e.enableCSSInlineVariables)&&(void 0===e.enableCSSRule||"boolean"==typeof e.enableCSSRule)&&(void 0===e.enableEndGestureAtLastFingerUp||"boolean"==typeof e.enableEndGestureAtLastFingerUp)&&(void 0===e.enableEventHandleRefactor||"boolean"==typeof e.enableEventHandleRefactor)&&(void 0===e.enableEventThrough||"boolean"==typeof e.enableEventThrough)&&(void 0===e.enableFetchAPIStandardStreaming||"boolean"==typeof e.enableFetchAPIStandardStreaming)&&(void 0===e.enableFixedNew||"boolean"==typeof e.enableFixedNew)&&(void 0===e.enableFlexBasisZeroPercent||"boolean"==typeof e.enableFlexBasisZeroPercent)&&(void 0===e.enableGridPlacementShorthands||"boolean"==typeof e.enableGridPlacementShorthands)&&(void 0===e.enableJsBindingApiThrowException||"boolean"==typeof e.enableJsBindingApiThrowException)&&(void 0===e.enableListNewArchitecture||"boolean"==typeof e.enableListNewArchitecture)&&(void 0===e.enableMultiTouch||"boolean"==typeof e.enableMultiTouch)&&(void 0===e.enableNativeList||"boolean"==typeof e.enableNativeList)&&(void 0===e.enableNewGesture||"boolean"==typeof e.enableNewGesture)&&(void 0===e.enableNewIntersectionObserver||"boolean"==typeof e.enableNewIntersectionObserver)&&(void 0===e.enableNewTransformOrigin||"boolean"==typeof e.enableNewTransformOrigin)&&(void 0===e.enableParseIntFlex||"boolean"==typeof e.enableParseIntFlex)&&(void 0===e.enableReloadLifecycle||"boolean"==typeof e.enableReloadLifecycle)&&(void 0===e.enableSimultaneousTap||"boolean"==typeof e.enableSimultaneousTap)&&(void 0===e.enableTextOverflow||"boolean"==typeof e.enableTextOverflow)&&(void 0===e.enableTransformedTouchPosition||"boolean"==typeof e.enableTransformedTouchPosition)&&(void 0===e.fontScaleEffectiveOnlyOnSp||"boolean"==typeof e.fontScaleEffectiveOnlyOnSp)&&(void 0===e.includeFontPadding||"boolean"==typeof e.includeFontPadding)&&(void 0===e.keyboardCallbackPassRelativeHeight||"boolean"==typeof e.keyboardCallbackPassRelativeHeight)&&(void 0===e.longPressDuration||"number"==typeof e.longPressDuration)&&(void 0===e.removeDescendantSelectorScope||"boolean"==typeof e.removeDescendantSelectorScope)&&(void 0===e.tapSlop||"string"==typeof e.tapSlop)&&(void 0===e.unifyVWVHBehavior||"boolean"==typeof e.unifyVWVHBehavior)&&(0===Object.keys(e).length||Object.keys(e).every(t=>!!["alignMouseEventWithW3C","disableLongpressAfterScroll","enableA11y","enableAccessibilityElement","enableCSSInheritance","enableCSSInlineVariables","enableCSSRule","enableEndGestureAtLastFingerUp","enableEventHandleRefactor","enableEventThrough","enableFetchAPIStandardStreaming","enableFixedNew","enableFlexBasisZeroPercent","enableGridPlacementShorthands","enableJsBindingApiThrowException","enableListNewArchitecture","enableMultiTouch","enableNativeList","enableNewGesture","enableNewIntersectionObserver","enableNewTransformOrigin","enableParseIntFlex","enableReloadLifecycle","enableSimultaneousTap","enableTextOverflow","enableTransformedTouchPosition","fontScaleEffectiveOnlyOnSp","includeFontPadding","keyboardCallbackPassRelativeHeight","longPressDuration","removeDescendantSelectorScope","tapSlop","unifyVWVHBehavior"].some(e=>t===e)||void 0===e[t])))(e,!0))){var t;t=i=[],a=(e,n)=>(e&&(e=>{if(0===t.length)return!0;let n=t[t.length-1].path;return e.length>n.length||n.substring(0,e.length)!==e})(n.path)&&(void 0===n.value&&(n.description??=`The value at this path is \`undefined\`.
24
+ `),{entry:r}}async function nl({compiler:e,compilation:t,assets:n,metadata:r,resolveAppInfo:o,shouldInjectAsset:i}){let a=Object.keys(n).reduce((e,n)=>{if(!i(n))return e;let r=t.getAsset(n);return r&&e.push(r),e},[]);if(0===a.length)return;let s=r.app,l=await o?.(),p=`globalThis.__AI_MANIFEST__ = ${JSON.stringify({package:l?.appKey||s.appId,appId:l?.appKey||s.appId,name:l?.appName||s.name,icons:l?.iconUrl?tM(l.iconUrl):s.icons})};
25
+ `;a.forEach(n=>{if(n.source.source().toString().startsWith(p))return;let r=new e.webpack.sources.ReplaceSource(n.source,n.name);r.insert(0,p),t.updateAsset(n.name,r,n.info)})}function np(e){let t=eJ.posix.basename(e);return"background.js"===t||"main-thread.js"===t||/^background\.[^/]+\.js$/.test(t)||/^main-thread\.[^/]+\.js$/.test(t)}function nc(e){let t=e.replaceAll("\\","/");return t.startsWith("__doubao_web__")&&"template.js"===eJ.posix.basename(t)}class nd{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(nd.name,t=>{t.hooks.processAssets.tapPromise({name:nd.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{await nl({compiler:e,compilation:t,assets:n,...this.options})})})}}let nu="index.web.bundle",nm="base/app.web.bundle",nh="base/client-tool/index.web.bundle";function nf(e){return`__doubao_web__${e.replaceAll("\\","/").replaceAll("/","__")}`}function ng(e,t,n){return t[n]?.id??t8(n,e[n]?.folderName)}function ny(e){return!!(e?.isVirtualFile||e?.isSpecial)}function nb(e={},t={},n="configured"){return"all"===n?e:function(e={},t={}){return Object.fromEntries(Object.entries(e).filter(([e])=>t[e]?.web===!0))}(e,t)}class n_{apply(e){e.hooks.thisCompilation.tap(n_.name,t=>{t.hooks.processAssets.tapPromise({name:n_.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{let n=nw(t,"app"),r=n?t.getAsset(n):void 0;if(!n||!r)throw Error("Worker entry asset was not emitted.");await nv(t,e,n,nm);let o=nw(t,e5);o&&await nv(t,e,o,nh)})})}}function nw(e,t){let n=e.entrypoints.get(t)?.getEntrypointChunk();return[...n?.files??[]].find(e=>e.endsWith(".js"))}async function nv(e,t,n,r){let o=e.getAsset(n);if(!o)throw Error(`Worker entry asset was not emitted: ${n}`);e.emitAsset(r,new t.webpack.sources.RawSource(await nE(o.source.source().toString())));let i=e.getAsset(`${n}.map`);i&&e.emitAsset(`${r}.map`,i.source,i.info),e.deleteAsset(n)}async function nE(e){let{encode:t}=await import("./@lynx-js/web-core-canary.js");return Buffer.from(t({styleInfo:{},manifest:{"/app-service.js":e},cardType:"react",appType:"card",pageConfig:{enableFiberArch:!0,useLepusNG:!0,enableReuseContext:!0,bundleModuleMode:"ReturnByFunction",targetSdkVersion:"3.2"},lepusCode:{root:"void 0;"},customSections:{},elementTemplates:{}}))}class nS{options;recordNativeAppAssetPaths;constructor(e,t){this.options=e,this.recordNativeAppAssetPaths=t}apply(e){new e.webpack.experiments.VirtualModulesPlugin({[ez]:"",[eY]:eX,...Object.fromEntries(Object.entries(this.options.entry).map(([,e])=>[e.filename,e.toString()]))}).apply(e),e.hooks.make.tapPromise(nS.name,async()=>{await this.options.pluginSystem.callWorkerHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(nS.name,t=>{t.hooks.optimizeTree.tapPromise(nS.name,async()=>{await this.options.pluginSystem.callWorkerHooks("build",{metadata:this.options.context.metadata,fileDependencies:t.fileDependencies})}),t.hooks.processAssets.tapPromise({name:nS.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{var r,o,i;let a,s,l=nw(t,"app");if(!l||!t.getAsset(l))throw Error("Worker entry asset was not emitted.");this.recordNativeAppAssetPaths&&(r=t,o=this.options.context,i=l,o.setAppAssetPath(i),a=`${i}.map`,r.getAsset(a)&&o.setAppMapAssetPath(a),s=r.entrypoints.get(e5)?.getEntrypointChunk(),o.clientToolRuntimeAssetPath=[...s?.files??[]].find(e=>e.endsWith(".js"))),await nl({compiler:e,compilation:t,assets:n,metadata:this.options.context.metadata,resolveAppInfo:()=>this.options.context.resolveAppInfo(),shouldInjectAsset:e=>e===l})})}),e.hooks.done.tapPromise(nS.name,async e=>{await this.options.pluginSystem.callWorkerHooks("afterBuild",{stats:e})})}}let nx=f("node:os"),nA=f("process"),nT=f("../../../node_modules/.pnpm/@lynx-js+type-config@4.1.3/node_modules/@lynx-js/type-config/index.js");var nC={},nO={};function nP(e){var t=nO[e];if(void 0!==t)return t.exports;var n=nO[e]={exports:{}};return nC[e](n,n.exports,nP),n.exports}nP.m=nC,nP.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return nP.d(t,{a:t}),t},nP.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)nP.o(t,r)&&!nP.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},nP.add=function(e){Object.assign(nP.m,e)},nP.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),nP.add({"../../../node_modules/.pnpm/isobject@3.0.1/node_modules/isobject/index.js"(e){e.exports=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)}},"../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js"(e,t,n){var r=n("../../../node_modules/.pnpm/isobject@3.0.1/node_modules/isobject/index.js");e.exports=function(e,t){if(!r(e)&&"function"!=typeof e)return{};var n={};if("string"==typeof t)return t in e&&(n[t]=e[t]),n;for(var o=t.length,i=-1;++i<o;){var a=t[i];a in e&&(n[a]=e[a])}return n}},"../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js"(e){let t=nA||{},n=t.argv||[],r=t.env||{},o=!(r.NO_COLOR||n.includes("--no-color"))&&(!!r.FORCE_COLOR||n.includes("--color")||"win32"===t.platform||(t.stdout||{}).isTTY&&"dumb"!==r.TERM||!!r.CI),i=(e,t,n=e)=>r=>{let o=""+r,i=o.indexOf(t,e.length);return~i?e+a(o,t,n,i)+t:e+o+t},a=(e,t,n,r)=>{let o="",i=0;do o+=e.substring(i,r)+n,i=r+t.length,r=e.indexOf(t,i);while(~r);return o+e.substring(i)},s=(e=o)=>{let t=e?i:()=>String;return{isColorSupported:e,reset:t("\x1b[0m","\x1b[0m"),bold:t("\x1b[1m","\x1b[22m","\x1b[22m\x1b[1m"),dim:t("\x1b[2m","\x1b[22m","\x1b[22m\x1b[2m"),italic:t("\x1b[3m","\x1b[23m"),underline:t("\x1b[4m","\x1b[24m"),inverse:t("\x1b[7m","\x1b[27m"),hidden:t("\x1b[8m","\x1b[28m"),strikethrough:t("\x1b[9m","\x1b[29m"),black:t("\x1b[30m","\x1b[39m"),red:t("\x1b[31m","\x1b[39m"),green:t("\x1b[32m","\x1b[39m"),yellow:t("\x1b[33m","\x1b[39m"),blue:t("\x1b[34m","\x1b[39m"),magenta:t("\x1b[35m","\x1b[39m"),cyan:t("\x1b[36m","\x1b[39m"),white:t("\x1b[37m","\x1b[39m"),gray:t("\x1b[90m","\x1b[39m"),bgBlack:t("\x1b[40m","\x1b[49m"),bgRed:t("\x1b[41m","\x1b[49m"),bgGreen:t("\x1b[42m","\x1b[49m"),bgYellow:t("\x1b[43m","\x1b[49m"),bgBlue:t("\x1b[44m","\x1b[49m"),bgMagenta:t("\x1b[45m","\x1b[49m"),bgCyan:t("\x1b[46m","\x1b[49m"),bgWhite:t("\x1b[47m","\x1b[49m"),blackBright:t("\x1b[90m","\x1b[39m"),redBright:t("\x1b[91m","\x1b[39m"),greenBright:t("\x1b[92m","\x1b[39m"),yellowBright:t("\x1b[93m","\x1b[39m"),blueBright:t("\x1b[94m","\x1b[39m"),magentaBright:t("\x1b[95m","\x1b[39m"),cyanBright:t("\x1b[96m","\x1b[39m"),whiteBright:t("\x1b[97m","\x1b[39m"),bgBlackBright:t("\x1b[100m","\x1b[49m"),bgRedBright:t("\x1b[101m","\x1b[49m"),bgGreenBright:t("\x1b[102m","\x1b[49m"),bgYellowBright:t("\x1b[103m","\x1b[49m"),bgBlueBright:t("\x1b[104m","\x1b[49m"),bgMagentaBright:t("\x1b[105m","\x1b[49m"),bgCyanBright:t("\x1b[106m","\x1b[49m"),bgWhiteBright:t("\x1b[107m","\x1b[49m")}};e.exports=s(),e.exports.createColors=s}});let nI=globalThis.window?.document!==void 0;globalThis.process?.versions?.node,globalThis.process?.versions?.bun,globalThis.Deno?.version?.deno,globalThis.process?.versions?.electron,globalThis.navigator?.userAgent?.includes("jsdom");let nk=globalThis.navigator?.userAgentData?.platform;function nD(e,t=globalThis.Deno?globalThis.Deno.args:w.argv){let n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),o=t.indexOf("--");return -1!==r&&(-1===o||r<o)}"macOS"===nk||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform,"Windows"===nk||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform,"Linux"===nk||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform,"iOS"===nk||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),"Android"===nk||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform,nI||w.env.TERM_PROGRAM,nI||w.platform,nI||w.cwd;let{env:n$}=w;function nR(e,n={}){var r;return 0!==(r=function(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let o=function(){if(!("FORCE_COLOR"in n$))return;if("true"===n$.FORCE_COLOR)return 1;if("false"===n$.FORCE_COLOR)return 0;if(0===n$.FORCE_COLOR.length)return 1;let e=Math.min(Number.parseInt(n$.FORCE_COLOR,10),3);if([0,1,2,3].includes(e))return e}();void 0!==o&&(t=o);let i=r?t:o;if(0===i)return 0;if(r){if(nD("color=16m")||nD("color=full")||nD("color=truecolor"))return 3;if(nD("color=256"))return 2}if("TF_BUILD"in n$&&"AGENT_NAME"in n$)return 1;if(e&&!n&&void 0===i)return 0;let a=i||0;if("dumb"===n$.TERM)return a;if("win32"===w.platform){let e=nx.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in n$)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(e=>e in n$)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(e=>e in n$)||"codeship"===n$.CI_NAME?1:a;if("TEAMCITY_VERSION"in n$)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(n$.TEAMCITY_VERSION);if("truecolor"===n$.COLORTERM||"xterm-kitty"===n$.TERM||"xterm-ghostty"===n$.TERM||"wezterm"===n$.TERM)return 3;if("TERM_PROGRAM"in n$){let e=Number.parseInt((n$.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(n$.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(n$.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(n$.TERM)||"COLORTERM"in n$?1:a}(e,{streamIsTTY:e&&e.isTTY,...n}))&&{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function nN(e,t=nA.argv){let n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),o=t.indexOf("--");return -1!==r&&(-1===o||r<o)}function nL(e=""){if(/^\d{3,4}$/.test(e)){let t=/(\d{1,2})(\d{2})/.exec(e)??[];return{major:0,minor:Number.parseInt(t[1],10),patch:Number.parseInt(t[2],10)}}let t=(e??"").split(".").map(e=>Number.parseInt(e,10));return{major:t[0],minor:t[1],patch:t[2]}}function nM(e){let{CI:t,CURSOR_TRACE_ID:n,FORCE_HYPERLINK:r,NETLIFY:o,TEAMCITY_VERSION:i,TERM_PROGRAM:a,TERM_PROGRAM_VERSION:s,VTE_VERSION:l,TERM:p}=w.env;if(r)return!(r.length>0&&0===Number.parseInt(r,10));if(nN("no-hyperlink")||nN("no-hyperlinks")||nN("hyperlink=false")||nN("hyperlink=never"))return!1;if(nN("hyperlink=true")||nN("hyperlink=always")||o)return!0;if(!nR(e)||e&&!e.isTTY)return!1;if("WT_SESSION"in w.env)return!0;if("win32"===w.platform||t||i)return!1;if(a){let e=nL(s);switch(a){case"iTerm.app":if(3===e.major)return e.minor>=1;return e.major>3;case"WezTerm":if(/^0-unstable-\d{4}-\d{2}-\d{2}$/.test(s))return s.slice(11)>="2020-06-20";return e.major>=0x1343cac;case"vscode":if(n)return!0;return e.major>1||1===e.major&&e.minor>=72;case"ghostty":case"zed":case"Orca":return!0}}if(l){if("0.50.0"===l)return!1;let e=nL(l);return e.major>0||e.minor>=50}switch(p){case"alacritty":case"xterm-kitty":return!0}return!1}nD("no-color")||nD("no-colors")||nD("color=false")||nD("color=never")?t=0:(nD("color")||nD("colors")||nD("color=true")||nD("color=always"))&&(t=1),nR({isTTY:y.isatty(1)}),nR({isTTY:y.isatty(2)});let nj={stdout:nM(w.stdout),stderr:nM(w.stderr)};function nB(e,t,{target:n="stdout",...r}={}){return nj[n]?["\x1b]","8",";",";",t,"\x07",e,"\x1b]","8",";",";","\x07"].join(""):!1===r.fallback?e:"function"==typeof r.fallback?r.fallback(e,t):`${e} ${t}`}nB.isSupported=nj.stdout,nB.stderr=(e,t,n={})=>nB(e,t,{target:"stderr",...n}),nB.stderr.isSupported=nj.stderr;let nU=nP("../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js");var nF=nP.n(nU);class nW{options;constructor(e){this.options=e}name="LynxConfigWebpackPlugin";apply(e){e.hooks.thisCompilation.tap(this.name,e=>{this.options.LynxTemplatePlugin.getLynxTemplatePluginHooks(e).beforeEncode.tap(this.name,e=>{let{config:t}=this.options;return e.encodeData.compilerOptions={...e.encodeData.compilerOptions,...nF()(t,this.options.compilerOptionsKeys)},e.encodeData.sourceContent.config={...e.encodeData.sourceContent.config,...nF()(t,this.options.configKeys)},e})})}}let nH=e=>nG.has(e),nG=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","import","in","instanceof","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with"]);(eA=eM||(eM={}))[eA.Start=0]="Start",eA[eA.Property=1]="Property",eA[eA.StringKey=2]="StringKey",eA[eA.NumberKey=3]="NumberKey";let nV=nP("../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js");var nq=nP.n(nV);let nJ=Object.assign(a=e=>{if(!1===("object"==typeof e&&null!==e&&!1===Array.isArray(e)&&((e,t=!0)=>(void 0===e.alignMouseEventWithW3C||"boolean"==typeof e.alignMouseEventWithW3C)&&(void 0===e.disableLongpressAfterScroll||"boolean"==typeof e.disableLongpressAfterScroll)&&(void 0===e.enableA11y||"boolean"==typeof e.enableA11y)&&(void 0===e.enableAccessibilityElement||"boolean"==typeof e.enableAccessibilityElement)&&(void 0===e.enableCSSInheritance||"boolean"==typeof e.enableCSSInheritance)&&(void 0===e.enableCSSInlineVariables||"boolean"==typeof e.enableCSSInlineVariables)&&(void 0===e.enableCSSRule||"boolean"==typeof e.enableCSSRule)&&(void 0===e.enableEndGestureAtLastFingerUp||"boolean"==typeof e.enableEndGestureAtLastFingerUp)&&(void 0===e.enableEventHandleRefactor||"boolean"==typeof e.enableEventHandleRefactor)&&(void 0===e.enableEventThrough||"boolean"==typeof e.enableEventThrough)&&(void 0===e.enableFetchAPIStandardStreaming||"boolean"==typeof e.enableFetchAPIStandardStreaming)&&(void 0===e.enableFixedNew||"boolean"==typeof e.enableFixedNew)&&(void 0===e.enableFlexBasisZeroPercent||"boolean"==typeof e.enableFlexBasisZeroPercent)&&(void 0===e.enableGridPlacementShorthands||"boolean"==typeof e.enableGridPlacementShorthands)&&(void 0===e.enableJsBindingApiThrowException||"boolean"==typeof e.enableJsBindingApiThrowException)&&(void 0===e.enableListNewArchitecture||"boolean"==typeof e.enableListNewArchitecture)&&(void 0===e.enableMultiTouch||"boolean"==typeof e.enableMultiTouch)&&(void 0===e.enableNativeList||"boolean"==typeof e.enableNativeList)&&(void 0===e.enableNewGesture||"boolean"==typeof e.enableNewGesture)&&(void 0===e.enableNewIntersectionObserver||"boolean"==typeof e.enableNewIntersectionObserver)&&(void 0===e.enableNewTransformOrigin||"boolean"==typeof e.enableNewTransformOrigin)&&(void 0===e.enableParseIntFlex||"boolean"==typeof e.enableParseIntFlex)&&(void 0===e.enableReloadLifecycle||"boolean"==typeof e.enableReloadLifecycle)&&(void 0===e.enableSimultaneousTap||"boolean"==typeof e.enableSimultaneousTap)&&(void 0===e.enableTextOverflow||"boolean"==typeof e.enableTextOverflow)&&(void 0===e.enableTransformedTouchPosition||"boolean"==typeof e.enableTransformedTouchPosition)&&(void 0===e.fontScaleEffectiveOnlyOnSp||"boolean"==typeof e.fontScaleEffectiveOnlyOnSp)&&(void 0===e.includeFontPadding||"boolean"==typeof e.includeFontPadding)&&(void 0===e.keyboardCallbackPassRelativeHeight||"boolean"==typeof e.keyboardCallbackPassRelativeHeight)&&(void 0===e.longPressDuration||"number"==typeof e.longPressDuration)&&(void 0===e.removeDescendantSelectorScope||"boolean"==typeof e.removeDescendantSelectorScope)&&(void 0===e.tapSlop||"string"==typeof e.tapSlop)&&(void 0===e.unifyVWVHBehavior||"boolean"==typeof e.unifyVWVHBehavior)&&(0===Object.keys(e).length||Object.keys(e).every(t=>!!["alignMouseEventWithW3C","disableLongpressAfterScroll","enableA11y","enableAccessibilityElement","enableCSSInheritance","enableCSSInlineVariables","enableCSSRule","enableEndGestureAtLastFingerUp","enableEventHandleRefactor","enableEventThrough","enableFetchAPIStandardStreaming","enableFixedNew","enableFlexBasisZeroPercent","enableGridPlacementShorthands","enableJsBindingApiThrowException","enableListNewArchitecture","enableMultiTouch","enableNativeList","enableNewGesture","enableNewIntersectionObserver","enableNewTransformOrigin","enableParseIntFlex","enableReloadLifecycle","enableSimultaneousTap","enableTextOverflow","enableTransformedTouchPosition","fontScaleEffectiveOnlyOnSp","includeFontPadding","keyboardCallbackPassRelativeHeight","longPressDuration","removeDescendantSelectorScope","tapSlop","unifyVWVHBehavior"].some(e=>t===e)||void 0===e[t])))(e,!0))){var t;t=o=[],i=(e,n)=>(e&&(e=>{if(0===t.length)return!0;let n=t[t.length-1].path;return e.length>n.length||n.substring(0,e.length)!==e})(n.path)&&(void 0===n.value&&(n.description??=`The value at this path is \`undefined\`.
26
26
 
27
- Please fill the \`${n.expected}\` typed value next time.`),t.push(n)),!1),((e,t,n=!0)=>("object"==typeof e&&null!==e&&!1===Array.isArray(e)||a(!0,{path:t+"",expected:"Config",value:e}))&&((e,t,n=!0)=>[void 0===e.alignMouseEventWithW3C||"boolean"==typeof e.alignMouseEventWithW3C||a(n,{path:t+".alignMouseEventWithW3C",expected:"(boolean | undefined)",value:e.alignMouseEventWithW3C}),void 0===e.disableLongpressAfterScroll||"boolean"==typeof e.disableLongpressAfterScroll||a(n,{path:t+".disableLongpressAfterScroll",expected:"(boolean | undefined)",value:e.disableLongpressAfterScroll}),void 0===e.enableA11y||"boolean"==typeof e.enableA11y||a(n,{path:t+".enableA11y",expected:"(boolean | undefined)",value:e.enableA11y}),void 0===e.enableAccessibilityElement||"boolean"==typeof e.enableAccessibilityElement||a(n,{path:t+".enableAccessibilityElement",expected:"(boolean | undefined)",value:e.enableAccessibilityElement}),void 0===e.enableCSSInheritance||"boolean"==typeof e.enableCSSInheritance||a(n,{path:t+".enableCSSInheritance",expected:"(boolean | undefined)",value:e.enableCSSInheritance}),void 0===e.enableCSSInlineVariables||"boolean"==typeof e.enableCSSInlineVariables||a(n,{path:t+".enableCSSInlineVariables",expected:"(boolean | undefined)",value:e.enableCSSInlineVariables}),void 0===e.enableCSSRule||"boolean"==typeof e.enableCSSRule||a(n,{path:t+".enableCSSRule",expected:"(boolean | undefined)",value:e.enableCSSRule}),void 0===e.enableEndGestureAtLastFingerUp||"boolean"==typeof e.enableEndGestureAtLastFingerUp||a(n,{path:t+".enableEndGestureAtLastFingerUp",expected:"(boolean | undefined)",value:e.enableEndGestureAtLastFingerUp}),void 0===e.enableEventHandleRefactor||"boolean"==typeof e.enableEventHandleRefactor||a(n,{path:t+".enableEventHandleRefactor",expected:"(boolean | undefined)",value:e.enableEventHandleRefactor}),void 0===e.enableEventThrough||"boolean"==typeof e.enableEventThrough||a(n,{path:t+".enableEventThrough",expected:"(boolean | undefined)",value:e.enableEventThrough}),void 0===e.enableFetchAPIStandardStreaming||"boolean"==typeof e.enableFetchAPIStandardStreaming||a(n,{path:t+".enableFetchAPIStandardStreaming",expected:"(boolean | undefined)",value:e.enableFetchAPIStandardStreaming}),void 0===e.enableFixedNew||"boolean"==typeof e.enableFixedNew||a(n,{path:t+".enableFixedNew",expected:"(boolean | undefined)",value:e.enableFixedNew}),void 0===e.enableFlexBasisZeroPercent||"boolean"==typeof e.enableFlexBasisZeroPercent||a(n,{path:t+".enableFlexBasisZeroPercent",expected:"(boolean | undefined)",value:e.enableFlexBasisZeroPercent}),void 0===e.enableGridPlacementShorthands||"boolean"==typeof e.enableGridPlacementShorthands||a(n,{path:t+".enableGridPlacementShorthands",expected:"(boolean | undefined)",value:e.enableGridPlacementShorthands}),void 0===e.enableJsBindingApiThrowException||"boolean"==typeof e.enableJsBindingApiThrowException||a(n,{path:t+".enableJsBindingApiThrowException",expected:"(boolean | undefined)",value:e.enableJsBindingApiThrowException}),void 0===e.enableListNewArchitecture||"boolean"==typeof e.enableListNewArchitecture||a(n,{path:t+".enableListNewArchitecture",expected:"(boolean | undefined)",value:e.enableListNewArchitecture}),void 0===e.enableMultiTouch||"boolean"==typeof e.enableMultiTouch||a(n,{path:t+".enableMultiTouch",expected:"(boolean | undefined)",value:e.enableMultiTouch}),void 0===e.enableNativeList||"boolean"==typeof e.enableNativeList||a(n,{path:t+".enableNativeList",expected:"(boolean | undefined)",value:e.enableNativeList}),void 0===e.enableNewGesture||"boolean"==typeof e.enableNewGesture||a(n,{path:t+".enableNewGesture",expected:"(boolean | undefined)",value:e.enableNewGesture}),void 0===e.enableNewIntersectionObserver||"boolean"==typeof e.enableNewIntersectionObserver||a(n,{path:t+".enableNewIntersectionObserver",expected:"(boolean | undefined)",value:e.enableNewIntersectionObserver}),void 0===e.enableNewTransformOrigin||"boolean"==typeof e.enableNewTransformOrigin||a(n,{path:t+".enableNewTransformOrigin",expected:"(boolean | undefined)",value:e.enableNewTransformOrigin}),void 0===e.enableParseIntFlex||"boolean"==typeof e.enableParseIntFlex||a(n,{path:t+".enableParseIntFlex",expected:"(boolean | undefined)",value:e.enableParseIntFlex}),void 0===e.enableReloadLifecycle||"boolean"==typeof e.enableReloadLifecycle||a(n,{path:t+".enableReloadLifecycle",expected:"(boolean | undefined)",value:e.enableReloadLifecycle}),void 0===e.enableSimultaneousTap||"boolean"==typeof e.enableSimultaneousTap||a(n,{path:t+".enableSimultaneousTap",expected:"(boolean | undefined)",value:e.enableSimultaneousTap}),void 0===e.enableTextOverflow||"boolean"==typeof e.enableTextOverflow||a(n,{path:t+".enableTextOverflow",expected:"(boolean | undefined)",value:e.enableTextOverflow}),void 0===e.enableTransformedTouchPosition||"boolean"==typeof e.enableTransformedTouchPosition||a(n,{path:t+".enableTransformedTouchPosition",expected:"(boolean | undefined)",value:e.enableTransformedTouchPosition}),void 0===e.fontScaleEffectiveOnlyOnSp||"boolean"==typeof e.fontScaleEffectiveOnlyOnSp||a(n,{path:t+".fontScaleEffectiveOnlyOnSp",expected:"(boolean | undefined)",value:e.fontScaleEffectiveOnlyOnSp}),void 0===e.includeFontPadding||"boolean"==typeof e.includeFontPadding||a(n,{path:t+".includeFontPadding",expected:"(boolean | undefined)",value:e.includeFontPadding}),void 0===e.keyboardCallbackPassRelativeHeight||"boolean"==typeof e.keyboardCallbackPassRelativeHeight||a(n,{path:t+".keyboardCallbackPassRelativeHeight",expected:"(boolean | undefined)",value:e.keyboardCallbackPassRelativeHeight}),void 0===e.longPressDuration||"number"==typeof e.longPressDuration||a(n,{path:t+".longPressDuration",expected:"(number | undefined)",value:e.longPressDuration}),void 0===e.removeDescendantSelectorScope||"boolean"==typeof e.removeDescendantSelectorScope||a(n,{path:t+".removeDescendantSelectorScope",expected:"(boolean | undefined)",value:e.removeDescendantSelectorScope}),void 0===e.tapSlop||"string"==typeof e.tapSlop||a(n,{path:t+".tapSlop",expected:"(string | undefined)",value:e.tapSlop}),void 0===e.unifyVWVHBehavior||"boolean"==typeof e.unifyVWVHBehavior||a(n,{path:t+".unifyVWVHBehavior",expected:"(boolean | undefined)",value:e.unifyVWVHBehavior}),0===Object.keys(e).length||!1===n||Object.keys(e).map(r=>{let i;if(["alignMouseEventWithW3C","disableLongpressAfterScroll","enableA11y","enableAccessibilityElement","enableCSSInheritance","enableCSSInlineVariables","enableCSSRule","enableEndGestureAtLastFingerUp","enableEventHandleRefactor","enableEventThrough","enableFetchAPIStandardStreaming","enableFixedNew","enableFlexBasisZeroPercent","enableGridPlacementShorthands","enableJsBindingApiThrowException","enableListNewArchitecture","enableMultiTouch","enableNativeList","enableNewGesture","enableNewIntersectionObserver","enableNewTransformOrigin","enableParseIntFlex","enableReloadLifecycle","enableSimultaneousTap","enableTextOverflow","enableTransformedTouchPosition","fontScaleEffectiveOnlyOnSp","includeFontPadding","keyboardCallbackPassRelativeHeight","longPressDuration","removeDescendantSelectorScope","tapSlop","unifyVWVHBehavior"].some(e=>r===e))return!0;let s=e[r];if(void 0===s)return!0;return a(n,{path:t+(!1===nF(i=r)&&/^[a-zA-Z_$][a-zA-Z_$0-9]*$/g.test(i)?`.${r}`:`[${JSON.stringify(r)}]`),expected:"undefined",value:s,description:`The property \`${r}\` is not defined in the object type.
27
+ Please fill the \`${n.expected}\` typed value next time.`),t.push(n)),!1),((e,t,n=!0)=>("object"==typeof e&&null!==e&&!1===Array.isArray(e)||i(!0,{path:t+"",expected:"Config",value:e}))&&((e,t,n=!0)=>[void 0===e.alignMouseEventWithW3C||"boolean"==typeof e.alignMouseEventWithW3C||i(n,{path:t+".alignMouseEventWithW3C",expected:"(boolean | undefined)",value:e.alignMouseEventWithW3C}),void 0===e.disableLongpressAfterScroll||"boolean"==typeof e.disableLongpressAfterScroll||i(n,{path:t+".disableLongpressAfterScroll",expected:"(boolean | undefined)",value:e.disableLongpressAfterScroll}),void 0===e.enableA11y||"boolean"==typeof e.enableA11y||i(n,{path:t+".enableA11y",expected:"(boolean | undefined)",value:e.enableA11y}),void 0===e.enableAccessibilityElement||"boolean"==typeof e.enableAccessibilityElement||i(n,{path:t+".enableAccessibilityElement",expected:"(boolean | undefined)",value:e.enableAccessibilityElement}),void 0===e.enableCSSInheritance||"boolean"==typeof e.enableCSSInheritance||i(n,{path:t+".enableCSSInheritance",expected:"(boolean | undefined)",value:e.enableCSSInheritance}),void 0===e.enableCSSInlineVariables||"boolean"==typeof e.enableCSSInlineVariables||i(n,{path:t+".enableCSSInlineVariables",expected:"(boolean | undefined)",value:e.enableCSSInlineVariables}),void 0===e.enableCSSRule||"boolean"==typeof e.enableCSSRule||i(n,{path:t+".enableCSSRule",expected:"(boolean | undefined)",value:e.enableCSSRule}),void 0===e.enableEndGestureAtLastFingerUp||"boolean"==typeof e.enableEndGestureAtLastFingerUp||i(n,{path:t+".enableEndGestureAtLastFingerUp",expected:"(boolean | undefined)",value:e.enableEndGestureAtLastFingerUp}),void 0===e.enableEventHandleRefactor||"boolean"==typeof e.enableEventHandleRefactor||i(n,{path:t+".enableEventHandleRefactor",expected:"(boolean | undefined)",value:e.enableEventHandleRefactor}),void 0===e.enableEventThrough||"boolean"==typeof e.enableEventThrough||i(n,{path:t+".enableEventThrough",expected:"(boolean | undefined)",value:e.enableEventThrough}),void 0===e.enableFetchAPIStandardStreaming||"boolean"==typeof e.enableFetchAPIStandardStreaming||i(n,{path:t+".enableFetchAPIStandardStreaming",expected:"(boolean | undefined)",value:e.enableFetchAPIStandardStreaming}),void 0===e.enableFixedNew||"boolean"==typeof e.enableFixedNew||i(n,{path:t+".enableFixedNew",expected:"(boolean | undefined)",value:e.enableFixedNew}),void 0===e.enableFlexBasisZeroPercent||"boolean"==typeof e.enableFlexBasisZeroPercent||i(n,{path:t+".enableFlexBasisZeroPercent",expected:"(boolean | undefined)",value:e.enableFlexBasisZeroPercent}),void 0===e.enableGridPlacementShorthands||"boolean"==typeof e.enableGridPlacementShorthands||i(n,{path:t+".enableGridPlacementShorthands",expected:"(boolean | undefined)",value:e.enableGridPlacementShorthands}),void 0===e.enableJsBindingApiThrowException||"boolean"==typeof e.enableJsBindingApiThrowException||i(n,{path:t+".enableJsBindingApiThrowException",expected:"(boolean | undefined)",value:e.enableJsBindingApiThrowException}),void 0===e.enableListNewArchitecture||"boolean"==typeof e.enableListNewArchitecture||i(n,{path:t+".enableListNewArchitecture",expected:"(boolean | undefined)",value:e.enableListNewArchitecture}),void 0===e.enableMultiTouch||"boolean"==typeof e.enableMultiTouch||i(n,{path:t+".enableMultiTouch",expected:"(boolean | undefined)",value:e.enableMultiTouch}),void 0===e.enableNativeList||"boolean"==typeof e.enableNativeList||i(n,{path:t+".enableNativeList",expected:"(boolean | undefined)",value:e.enableNativeList}),void 0===e.enableNewGesture||"boolean"==typeof e.enableNewGesture||i(n,{path:t+".enableNewGesture",expected:"(boolean | undefined)",value:e.enableNewGesture}),void 0===e.enableNewIntersectionObserver||"boolean"==typeof e.enableNewIntersectionObserver||i(n,{path:t+".enableNewIntersectionObserver",expected:"(boolean | undefined)",value:e.enableNewIntersectionObserver}),void 0===e.enableNewTransformOrigin||"boolean"==typeof e.enableNewTransformOrigin||i(n,{path:t+".enableNewTransformOrigin",expected:"(boolean | undefined)",value:e.enableNewTransformOrigin}),void 0===e.enableParseIntFlex||"boolean"==typeof e.enableParseIntFlex||i(n,{path:t+".enableParseIntFlex",expected:"(boolean | undefined)",value:e.enableParseIntFlex}),void 0===e.enableReloadLifecycle||"boolean"==typeof e.enableReloadLifecycle||i(n,{path:t+".enableReloadLifecycle",expected:"(boolean | undefined)",value:e.enableReloadLifecycle}),void 0===e.enableSimultaneousTap||"boolean"==typeof e.enableSimultaneousTap||i(n,{path:t+".enableSimultaneousTap",expected:"(boolean | undefined)",value:e.enableSimultaneousTap}),void 0===e.enableTextOverflow||"boolean"==typeof e.enableTextOverflow||i(n,{path:t+".enableTextOverflow",expected:"(boolean | undefined)",value:e.enableTextOverflow}),void 0===e.enableTransformedTouchPosition||"boolean"==typeof e.enableTransformedTouchPosition||i(n,{path:t+".enableTransformedTouchPosition",expected:"(boolean | undefined)",value:e.enableTransformedTouchPosition}),void 0===e.fontScaleEffectiveOnlyOnSp||"boolean"==typeof e.fontScaleEffectiveOnlyOnSp||i(n,{path:t+".fontScaleEffectiveOnlyOnSp",expected:"(boolean | undefined)",value:e.fontScaleEffectiveOnlyOnSp}),void 0===e.includeFontPadding||"boolean"==typeof e.includeFontPadding||i(n,{path:t+".includeFontPadding",expected:"(boolean | undefined)",value:e.includeFontPadding}),void 0===e.keyboardCallbackPassRelativeHeight||"boolean"==typeof e.keyboardCallbackPassRelativeHeight||i(n,{path:t+".keyboardCallbackPassRelativeHeight",expected:"(boolean | undefined)",value:e.keyboardCallbackPassRelativeHeight}),void 0===e.longPressDuration||"number"==typeof e.longPressDuration||i(n,{path:t+".longPressDuration",expected:"(number | undefined)",value:e.longPressDuration}),void 0===e.removeDescendantSelectorScope||"boolean"==typeof e.removeDescendantSelectorScope||i(n,{path:t+".removeDescendantSelectorScope",expected:"(boolean | undefined)",value:e.removeDescendantSelectorScope}),void 0===e.tapSlop||"string"==typeof e.tapSlop||i(n,{path:t+".tapSlop",expected:"(string | undefined)",value:e.tapSlop}),void 0===e.unifyVWVHBehavior||"boolean"==typeof e.unifyVWVHBehavior||i(n,{path:t+".unifyVWVHBehavior",expected:"(boolean | undefined)",value:e.unifyVWVHBehavior}),0===Object.keys(e).length||!1===n||Object.keys(e).map(r=>{let o;if(["alignMouseEventWithW3C","disableLongpressAfterScroll","enableA11y","enableAccessibilityElement","enableCSSInheritance","enableCSSInlineVariables","enableCSSRule","enableEndGestureAtLastFingerUp","enableEventHandleRefactor","enableEventThrough","enableFetchAPIStandardStreaming","enableFixedNew","enableFlexBasisZeroPercent","enableGridPlacementShorthands","enableJsBindingApiThrowException","enableListNewArchitecture","enableMultiTouch","enableNativeList","enableNewGesture","enableNewIntersectionObserver","enableNewTransformOrigin","enableParseIntFlex","enableReloadLifecycle","enableSimultaneousTap","enableTextOverflow","enableTransformedTouchPosition","fontScaleEffectiveOnlyOnSp","includeFontPadding","keyboardCallbackPassRelativeHeight","longPressDuration","removeDescendantSelectorScope","tapSlop","unifyVWVHBehavior"].some(e=>r===e))return!0;let a=e[r];if(void 0===a)return!0;return i(n,{path:t+(!1===nH(o=r)&&/^[a-zA-Z_$][a-zA-Z_$0-9]*$/g.test(o)?`.${r}`:`[${JSON.stringify(r)}]`),expected:"undefined",value:a,description:`The property \`${r}\` is not defined in the object type.
28
28
 
29
- Please remove the property next time.`})}).every(e=>e)].every(e=>e))(e,t+"",!0)||a(!0,{path:t+"",expected:"Config",value:e}))(e,"$input",!0);let n=0===i.length;return n?{success:n,data:e}:{success:n,errors:i,data:e}}return{success:!0,data:e}},{"~standard":{version:1,vendor:"typia",validate:e=>{let t=s(e);return t.success?{value:t.data}:{issues:t.errors.map(e=>({message:`expected ${e.expected}, got ${e.value}`,path:(e=>{if(!e.startsWith("$input"))throw Error(`Invalid path: ${JSON.stringify(e)}`);let t=[],n="",r=eM.Start,i=5;for(;i<e.length-1;){let a=e[++i];if(r===eM.Property?"."===a||"["===a?(t.push({key:n}),r=eM.Start):i===e.length-1?(n+=a,t.push({key:n}),i++,r=eM.Start):n+=a:r===eM.StringKey?'"'===a?(t.push({key:JSON.parse(n+a)}),i+=2,r=eM.Start):"\\"===a?(n+=e[i],n+=e[++i]):n+=a:r===eM.NumberKey&&("]"===a?(t.push({key:Number.parseInt(n)}),i++,r=eM.Start):n+=a),r===eM.Start&&i<e.length-1){let t=e[i];if(n="","["===t)'"'===e[i+1]?(r=eM.StringKey,i++,n='"'):r=eM.NumberKey;else if("."===t)r=eM.Property;else throw Error("Unreachable: pointer points invalid character")}}if(r!==eM.Start)throw Error(`Failed to parse path: ${JSON.stringify(e)}`);return t})(e.path)}))}}}});function nq(e){let t=nV(e);if(t.success)return t.data;throw Error(["[pluginLynxConfig] Invalid configuration.",""].concat(t.errors.flatMap(({expected:e,path:t,value:n})=>{var r;return"undefined"===e?[` Unsupported configuration: \`${nG().red(t)}\``,""]:[`Invalid config on \`${nG().red(t)}\`.`,` - Expect to be ${nG().green(e)}`,` - Got: ${nG().red((r=n,Object.prototype.toString.call(r).replace(/^\[object\s+([a-z]+)\]$/i,"$1").toLowerCase()))}`,""]})).join("\n"))}let nJ={"lynx:react":"@lynx-js/react-rsbuild-plugin"};function nK(e){return e?.type==="Identifier"}function nz(e){return e?.type==="StringLiteral"}function nY(e){return e?.type==="NumericLiteral"}function nX(e){return e?.type==="BooleanLiteral"}function nZ(e){return e?.type==="ObjectExpression"}function nQ(e){return e?.type==="ArrayExpression"}function n0(e){return e?.type==="KeyValueProperty"}let n1=e=>{if(nZ(e)){let t={};for(let n of e.properties){if(n?.type==="SpreadElement"||!n0(n))return null;let{key:e,value:r}=n;if(!nK(e)&&!nz(e))return null;let i=e.value;nZ(r)||nQ(r)?t[i]=n1(r):nz(r)||nY(r)||nX(r)?t[i]=r.value:nK(r)&&(t[i]=r)}return t}if(nQ(e)){let t=[];for(let n of e.elements){if(!n||n.spread)return null;let e=n.expression;nZ(e)||nQ(e)?t.push(n1(e)):nz(e)||nY(e)||nX(e)?t.push(e.value):nK(e)&&t.push(e)}return t}},n2=g("../../../node_modules/.pnpm/@swc+core@1.15.11_@swc+helpers@0.5.23/node_modules/@swc/core/index.js");function n3(e,t,n){let{widgets:r,pages:i,collector:a,define:s,onDeprecatedAIMeta:o}=n,l=i[t],p=r[t],d=e;return(l||p)&&(s&&Object.keys(s).length>0&&(d=Object.keys(s).reduce((e,t)=>{let n=s[t];if("string"==typeof n)return e.replaceAll(t,n);throw Error(`Define value ${t} is not a string`)},e)),el((0,n2.parseSync)(d,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(nK(e.callee)&&["defineWidget","definePage"].includes(e.callee.value)){let n=e.arguments[0]?.expression;if(nZ(n)){for(let e of n.properties)if(n0(e)&&nK(e.key)&&"aiMeta"===e.key.value){let n=n1(e.value);if(!n)continue;l?(o?.({kind:"page",entryName:l,filename:t}),a.addPageMeta(l,n)):p&&(o?.({kind:"widget",entryName:p,filename:t}),a.addWidgetMeta(p,n))}}}nK(e.callee)&&e.callee.value in P&&(p&&a.addWidgetMeta(p,P[e.callee.value]),l&&a.addPageMeta(l,P[e.callee.value]))}})),e}let n4=/[/\\]/;function n9(e,t){t.forEach(([t,{id:n}])=>{if(n&&n4.test(n))throw Error(`Invalid ${e} id "${n}" for "${t}": a ${e} id cannot contain a path separator. Set an "id" without one in src/app.config.ts, or drop it to derive the id from the entry.`)})}async function n5({pages:e,widgets:t,entries:n,collector:r,normalizedAppConfig:i,define:a}){let s=new tV,o=new Set,l={collector:s,widgets:Object.fromEntries(Object.entries(t).map(([e,t])=>[t.filename,e])),pages:Object.fromEntries(Object.entries(e).map(([e,t])=>[t.filename,e])),define:a,onDeprecatedAIMeta({kind:e,entryName:t,filename:n}){let r=`${e}:${t}:${n}`;o.has(r)||(o.add(r),tE.warn(`define${"page"===e?"Page":"Widget"}({ aiMeta }) is deprecated for ${t}. Configure this ${e} metadata in src/app.config.ts instead. Source: ${n}`))}},p=i.pages.entries,d=i.widgets.entries;await Promise.all(Object.values({...t,...e}).filter(({filename:e})=>/\.(ts|tsx|jsx|js)$/i.test(e)).map(({filename:e,isVirtualFile:t})=>{if(t){let t=l.widgets[e]??l.pages[e],r=n[t];return r?n3(r.toString(),e,l):void tE.warn("Cannot find virtual file",{file:t})}return n3(t1.readFileSync(e,"utf-8"),e,l)})).catch(e=>{tE.error("Failed to collect view metadata",{error:e})});let c=s.getData(),u=P.defineLoginPage,h=Object.entries(e).map(([e,t])=>{let n=c.pages[e],{web:r,...i}=p[e]??{},a=t.isLoginPage||n?.id===u.id;return[e,{id:t8(e,t.folderName),...n,...i,...a?u:{},path:a?u.path:t.isSpecial&&n?.path?n.path:t6(e)}]}),m=h.filter(([,e])=>e.id===u.id).map(([e])=>e);if(m.length>1)throw Error(`Only one login page is allowed: ${m.join(", ")}`);n9("page",h),h.forEach(([e,t])=>{r.addPageMeta(e,t)});let g=Object.entries(t).map(([e,t])=>{let{web:n,...r}=d[e]??{};return[e,{id:t8(e,t.folderName),...c.widgets[e],...r}]});n9("widget",g),g.forEach(([e,t])=>{r.addWidgetMeta(e,t)})}let n8=g("os");function n6(e){let[t,n]=e.split(".").map(e=>Number(e));return Number.isNaN(t)||Number.isNaN(n)?1/0:10===t?0:172===t&&n>=16&&n<=31?1:192===t&&168===n?2:3}function n7(e){return/^(?:utun|tun|tap|ppp|ipsec|wg|docker|vboxnet|vmnet)\d*$/i.test(e)||/^br-/i.test(e)||/(?:vEthernet|Hyper-V|Docker|VirtualBox|VMware)/i.test(e)}function re(e=function(){let e=Object.entries(n8.networkInterfaces()),t=[],n=[],r=[],i=[];for(let[a,s]of e)if(s)for(let e of s){let{address:s,family:o,internal:l}=e;if(!l)if("IPv4"===o)n7(a)||s.startsWith("169.254.")?r.push(s):t.push(s);else"IPv6"!==o||/^fe[89ab]/i.test(s)||(n7(a)?i.push(s):n.push(s))}return t.length>0?t:r.length>0?r:n.length>0?n:i}()){return e.slice().sort((e,t)=>n6(e)-n6(t))[0]}function rt(e){let t=re()??"127.0.0.1",n=t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t;return`http://${n}:${e}`}let rn=`base/${e3}`;async function rr({encryption:e}){let t=t1.mkdtempSync(eJ.join(n8.tmpdir(),"doubao-keystore-")),n=eJ.join(t,e3);try{let{generateKeystore:t}=await import("node:module").then(function(e){return g.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),r=await t(n,{encryption:e});if(0!==r.status)throw Error(r.error_msg);return t1.readFileSync(n)}finally{t1.rmSync(t,{recursive:!0,force:!0})}}let ri=g("../../../node_modules/.pnpm/@byted-lynx+tasm@4.4.40_debug@4.4.3/node_modules/@byted-lynx/tasm/index.js");class ra{options;isGenerateKeystore=!1;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(ra.name,t=>{t.hooks.processAssets.tapPromise({name:ra.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH},async()=>{let n=this.options.getAppAssetPath(),r=t.getAsset(n),{buffer:i,encodeOptions:a,keystoreContent:s}=await this.encode([r]),{RawSource:o}=e.webpack.sources;if(t.updateAsset(n,new o(i,!1)),s){let e=new o(s,!1);t.getAsset(rn)?t.updateAsset(rn,e):t.emitAsset(rn,e)}tp()&&t.emitAsset(`${eJ.dirname(n)}/tasm.json`,new o(JSON.stringify(a,null,2)))})})}async encode(e){let t={},{resolveSigningEncryptionOptions:n}=this.options;for(let n of e)n.name.endsWith(".js")&&(t[n.name.replace(/\.template\.js$/,"")]={content:n.source.source().toString()});let r={compilerOptions:{enableFiberArch:!0,targetSdkVersion:this.options.engineVersion??"3.5"},sourceContent:{appType:"DynamicComponent"},customSections:t},i=await n?.();if(i?.signing.enabled||i?.encryption.enabled){let{encode:e}=await import("node:module").then(function(e){return g.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),t=this.options.metadata.appId,n=t7(i,{signing:{extra_config:{app_id:t,bundle_id:t}},encryption:{salt:t}}),{buffer:a,lepus_debug:s,status:o,error_msg:l}=await e(JSON.stringify(r),n);if(0!==o)throw Error(l);return!this.isGenerateKeystore&&n.encryption.enabled?(this.isGenerateKeystore=!0,{buffer:a,encodeOptions:r,debugInfo:s,keystoreContent:await rr({encryption:{...n.encryption}})}):{buffer:a,encodeOptions:r,debugInfo:s}}let a=(0,ri.getEncodeMode)(),{buffer:s}=await a(r);return{buffer:s,encodeOptions:r}}}function rs(e,t,r,i){let a=!1;return{name:rs.name,apply(s){let o=new s.webpack.experiments.VirtualModulesPlugin;o.apply(s),s.hooks.thisCompilation.tap(rs.name,()=>{Object.keys(r).forEach(e=>{o.writeModule(r[e].filename,r[e].toString())})}),s.hooks.thisCompilation.tap(rs.name,r=>{let o=e.getLynxTemplatePluginHooks(r);o.beforeEncode.tapPromise(rs.name,async e=>(e.encodeData.sourceContent.config=ei({},e.encodeData.sourceContent.config,{mapContainerType:1}),e)),o.encode.tapPromise({name:rs.name,stage:255},async e=>{let{encodeOptions:o}=e,l=await i?.();if(l?.signing.enabled||l?.encryption.enabled){let{encode:n}=await import("node:module").then(function(e){return g.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),i=t.getData(),p=function(e,t){let n=(t??"").replaceAll("\\","/"),r=n.match(/(?:^|\/)(pages|widgets)\/(.+)$/);if(r){let[,t,n]=r,i=`${t}/${n}`;return e.widgets[i]?.id??e.pages[i]?.id}let i=eJ.posix.basename(n);return e.widgets[`widgets/${i}`]?.id??e.pages[`pages/${i}`]?.id}(i,e.intermediate),d=i.app.appId,c=t7(l,{signing:{extra_config:{app_id:d,bundle_id:p}},encryption:{salt:d}}),{buffer:u,lepus_debug:h,status:m,error_msg:f}=await n(JSON.stringify(o),c);if(0!==m)throw Error(f);if(!a&&c.encryption.enabled){a=!0;let e=await rr({encryption:{...c.encryption}}),t=new s.webpack.sources.RawSource(e,!1);r.getAsset(rn)?r.updateAsset(rn,t):r.emitAsset(rn,t)}return{buffer:u,debugInfo:h}}let{buffer:p,lepus_debug:d}=await (n??=new m({filename:new URL(g("../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.0.42-rc.5_@emnapi+core@1.11.3_@emnapi+runtime@1.11.3_@lynx-js+_d49e44f9770b66b1cf11cfb4321860a5/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"),g.b).href,maxThreads:(0,nE.availableParallelism)()})).run({encodeOptions:o});return{buffer:Buffer.from(p),debugInfo:d}})}),s.hooks.failed.tap(rs.name,e=>{tx.error("Failed to bundle template",{error:e})})}}}class ro{static _instance;listeners=[];stdinListener;nextIndex=0;static get instance(){return ro._instance??=new ro}start(){this.stdinListener||0===this.listeners.length||(this.stdinListener=e=>{let t=e.toString("utf-8");this.listeners.some(e=>e.run(t))},process.stdin.on("data",this.stdinListener),process.stdin.resume())}stop(){this.stdinListener&&(process.stdin.off("data",this.stdinListener),this.stdinListener=void 0)}addListener(e,t,n=0){let r=e=>()=>{let t=this.listeners.findIndex(t=>t.run===e);t>-1&&(this.listeners.splice(t,1),0===this.listeners.length&&(this.stop(),0===process.stdin.listenerCount("data")&&process.stdin.pause()))};if(t){let e=this.listeners.find(e=>e.tag===t);if(e)return r(e.run)}return this.listeners.push({run:e,tag:t,priority:n,index:this.nextIndex++}),this.listeners.sort((e,t)=>e.priority-t.priority||e.index-t.index),this.start(),r(e)}}function rl(e){if(!(e instanceof Error&&"ExitPromptError"===e.name))throw e}function rp(e){ro.instance.stop(),e().catch(rl).finally(()=>ro.instance.start())}let rd=ew.child("simulator"),rc=g("node:http"),ru={"Cross-Origin-Opener-Policy":"same-origin","Cross-Origin-Embedder-Policy":"credentialless"},rh=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),rm=new Set([...rh,"cookie","host","origin","referer"]),rg=/authorization|cookie|token|secret|password|credential|private[-_]?key|(?:^|[-_])api[-_]?key(?:$|[-_])|(?:^|[-_])dek(?:$|[-_])/i,rf="X-DBX-Sandbox-Session-ID",ry="x-tt-logid";function rb(e){try{return new URL(e.url??"/","http://localhost")}catch{return}}function r_(e,t,n={}){let r={};for(let[t,n]of Object.entries(e))void 0===n||rm.has(t.toLowerCase())||(r[t]=n);return{...r,...n,host:t.host}}function rw(e,t=[]){let n={};for(let[t,r]of Object.entries(e))void 0===r||rh.has(t.toLowerCase())||(n[t]=r);if(t.length>0){let e=new Set(String(n["access-control-expose-headers"]??"").split(",").map(e=>e.trim().toLowerCase()).filter(Boolean));for(let n of t)e.add(n.toLowerCase());n["access-control-expose-headers"]=[...e].join(", ")}return n}function rv(e,t={}){Object.entries({...ru,...t}).forEach(([t,n])=>{void 0!==n&&e.setHeader(t,n)})}function rE(e,t){let n=te.createReadStream(t);n.once("error",()=>e.destroy()),n.pipe(e)}function rS(e,t,n,r){rv(e,r),e.writeHead(t,{"Content-Type":"text/plain; charset=utf-8"}),e.end(n)}function rx(e,t,n,r){let i=JSON.stringify(n);rv(e,r),e.writeHead(t,{"Content-Length":Buffer.byteLength(i),"Content-Type":"application/json; charset=utf-8"}),e.end(i)}function rA(e,t){return new Promise((n,r)=>{let i="",a=0;e.setEncoding("utf8"),e.on("data",n=>{if((a+=Buffer.byteLength(n))>t){r(Error("Request body is too large")),e.destroy();return}i+=n}),e.once("end",()=>n(i)),e.once("aborted",()=>r(Error("Request aborted"))),e.once("error",r)})}function rC(e){return e.arrayBuffer().then(e=>Buffer.from(e))}function rT(e){return Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>{let n=rg.test(e)?"[REDACTED]":Array.isArray(t)?t.join(", "):t;return` ${e}: ${n}`}).join("\n")}function rO(e){return("string"==typeof e||void 0===e?e:e.toString("utf8"))||"(no content)"}function rI({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:i,statusCode:a,targetUrl:s}){"applet0930"===process.env.DEBUG&&rd.info(`${e} ${s.pathname}${s.search} ${(a>=500?S.red:a>=400?S.yellow:S.green)(String(a))}
29
+ Please remove the property next time.`})}).every(e=>e)].every(e=>e))(e,t+"",!0)||i(!0,{path:t+"",expected:"Config",value:e}))(e,"$input",!0);let n=0===o.length;return n?{success:n,data:e}:{success:n,errors:o,data:e}}return{success:!0,data:e}},{"~standard":{version:1,vendor:"typia",validate:e=>{let t=a(e);return t.success?{value:t.data}:{issues:t.errors.map(e=>({message:`expected ${e.expected}, got ${e.value}`,path:(e=>{if(!e.startsWith("$input"))throw Error(`Invalid path: ${JSON.stringify(e)}`);let t=[],n="",r=eM.Start,o=5;for(;o<e.length-1;){let i=e[++o];if(r===eM.Property?"."===i||"["===i?(t.push({key:n}),r=eM.Start):o===e.length-1?(n+=i,t.push({key:n}),o++,r=eM.Start):n+=i:r===eM.StringKey?'"'===i?(t.push({key:JSON.parse(n+i)}),o+=2,r=eM.Start):"\\"===i?(n+=e[o],n+=e[++o]):n+=i:r===eM.NumberKey&&("]"===i?(t.push({key:Number.parseInt(n)}),o++,r=eM.Start):n+=i),r===eM.Start&&o<e.length-1){let t=e[o];if(n="","["===t)'"'===e[o+1]?(r=eM.StringKey,o++,n='"'):r=eM.NumberKey;else if("."===t)r=eM.Property;else throw Error("Unreachable: pointer points invalid character")}}if(r!==eM.Start)throw Error(`Failed to parse path: ${JSON.stringify(e)}`);return t})(e.path)}))}}}});function nK(e){let t=nJ(e);if(t.success)return t.data;throw Error(["[pluginLynxConfig] Invalid configuration.",""].concat(t.errors.flatMap(({expected:e,path:t,value:n})=>{var r;return"undefined"===e?[` Unsupported configuration: \`${nq().red(t)}\``,""]:[`Invalid config on \`${nq().red(t)}\`.`,` - Expect to be ${nq().green(e)}`,` - Got: ${nq().red((r=n,Object.prototype.toString.call(r).replace(/^\[object\s+([a-z]+)\]$/i,"$1").toLowerCase()))}`,""]})).join("\n"))}let nz={"lynx:react":"@lynx-js/react-rsbuild-plugin"};function nY(e){return e?.type==="Identifier"}function nX(e){return e?.type==="StringLiteral"}function nZ(e){return e?.type==="NumericLiteral"}function nQ(e){return e?.type==="BooleanLiteral"}function n0(e){return e?.type==="ObjectExpression"}function n1(e){return e?.type==="ArrayExpression"}function n2(e){return e?.type==="KeyValueProperty"}let n3=e=>{if(n0(e)){let t={};for(let n of e.properties){if(n?.type==="SpreadElement"||!n2(n))return null;let{key:e,value:r}=n;if(!nY(e)&&!nX(e))return null;let o=e.value;n0(r)||n1(r)?t[o]=n3(r):nX(r)||nZ(r)||nQ(r)?t[o]=r.value:nY(r)&&(t[o]=r)}return t}if(n1(e)){let t=[];for(let n of e.elements){if(!n||n.spread)return null;let e=n.expression;n0(e)||n1(e)?t.push(n3(e)):nX(e)||nZ(e)||nQ(e)?t.push(e.value):nY(e)&&t.push(e)}return t}},n4=f("../../../node_modules/.pnpm/@swc+core@1.15.11_@swc+helpers@0.5.23/node_modules/@swc/core/index.js");function n5(e,t,n){let{widgets:r,pages:o,collector:i,define:a,onDeprecatedAIMeta:s}=n,l=o[t],p=r[t],c=e;return(l||p)&&(a&&Object.keys(a).length>0&&(c=Object.keys(a).reduce((e,t)=>{let n=a[t];if("string"==typeof n)return e.replaceAll(t,n);throw Error(`Define value ${t} is not a string`)},e)),el((0,n4.parseSync)(c,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(nY(e.callee)&&["defineWidget","definePage"].includes(e.callee.value)){let n=e.arguments[0]?.expression;if(n0(n)){for(let e of n.properties)if(n2(e)&&nY(e.key)&&"aiMeta"===e.key.value){let n=n3(e.value);if(!n)continue;l?(s?.({kind:"page",entryName:l,filename:t}),i.addPageMeta(l,n)):p&&(s?.({kind:"widget",entryName:p,filename:t}),i.addWidgetMeta(p,n))}}}nY(e.callee)&&e.callee.value in I&&(p&&i.addWidgetMeta(p,I[e.callee.value]),l&&i.addPageMeta(l,I[e.callee.value]))}})),e}let n9=/[/\\]/;function n8(e,t){t.forEach(([t,{id:n}])=>{if(n&&n9.test(n))throw Error(`Invalid ${e} id "${n}" for "${t}": a ${e} id cannot contain a path separator. Set an "id" without one in src/app.config.ts, or drop it to derive the id from the entry.`)})}async function n6({pages:e,widgets:t,entries:n,collector:r,normalizedAppConfig:o,define:i}){let a=new tV,s=new Set,l={collector:a,widgets:Object.fromEntries(Object.entries(t).map(([e,t])=>[t.filename,e])),pages:Object.fromEntries(Object.entries(e).map(([e,t])=>[t.filename,e])),define:i,onDeprecatedAIMeta({kind:e,entryName:t,filename:n}){let r=`${e}:${t}:${n}`;s.has(r)||(s.add(r),tS.warn(`define${"page"===e?"Page":"Widget"}({ aiMeta }) is deprecated for ${t}. Configure this ${e} metadata in src/app.config.ts instead. Source: ${n}`))}},p=o.pages.entries,c=o.widgets.entries;await Promise.all(Object.values({...t,...e}).filter(({filename:e})=>/\.(ts|tsx|jsx|js)$/i.test(e)).map(({filename:e,isVirtualFile:t})=>{if(t){let t=l.widgets[e]??l.pages[e],r=n[t];return r?n5(r.toString(),e,l):void tS.warn("Cannot find virtual file",{file:t})}return n5(t1.readFileSync(e,"utf-8"),e,l)})).catch(e=>{tS.error("Failed to collect view metadata",{error:e})});let d=a.getData(),u=I.defineLoginPage,m=t6("",u.path),h=Object.entries(e).map(([e,t])=>{let n=d.pages[e],{web:r,...o}=p[e]??{},i=n?.path,a=t.isLoginPage||void 0!==i&&t6(e,i)===m;return[e,{id:t8(e,t.folderName),...n,...o,...a?u:{},path:t6(e,a?u.path:t.isSpecial?i:void 0)}]}),f=[...new Set([...h.filter(([,e])=>e.path===m).map(([e])=>e),...h.filter(([,e])=>e.id===u.id).map(([e])=>e)])];if(f.length>1)throw Error(`Only one login page is allowed: ${f.join(", ")}`);n8("page",h),h.forEach(([e,t])=>{r.addPageMeta(e,t)});let g=Object.entries(t).map(([e,t])=>{let{web:n,...r}=c[e]??{};return[e,{id:t8(e,t.folderName),...d.widgets[e],...r}]});n8("widget",g),function(e){let t=new Map;e.forEach(([e,{id:n}])=>{if(!n)return;let r=t.get(n)??[];r.push(e),t.set(n,r)});let n=[...t].filter(([,e])=>e.length>1);if(0===n.length)return;let r=n.map(([e,t])=>`Duplicate widget id "${e}" is used by:
30
+ ${t.map(e=>`- ${e}`).join("\n")}`).join("\n\n");throw Error(`${r}
31
+
32
+ Widget IDs must be globally unique. Configure distinct "id" values in src/app.config.ts.`)}(g),g.forEach(([e,t])=>{r.addWidgetMeta(e,t)})}let n7=f("os");function re(e){let[t,n]=e.split(".").map(e=>Number(e));return Number.isNaN(t)||Number.isNaN(n)?1/0:10===t?0:172===t&&n>=16&&n<=31?1:192===t&&168===n?2:3}function rt(e){return/^(?:utun|tun|tap|ppp|ipsec|wg|docker|vboxnet|vmnet)\d*$/i.test(e)||/^br-/i.test(e)||/(?:vEthernet|Hyper-V|Docker|VirtualBox|VMware)/i.test(e)}function rn(e=function(){let e=Object.entries(n7.networkInterfaces()),t=[],n=[],r=[],o=[];for(let[i,a]of e)if(a)for(let e of a){let{address:a,family:s,internal:l}=e;if(!l)if("IPv4"===s)rt(i)||a.startsWith("169.254.")?r.push(a):t.push(a);else"IPv6"!==s||/^fe[89ab]/i.test(a)||(rt(i)?o.push(a):n.push(a))}return t.length>0?t:r.length>0?r:n.length>0?n:o}()){return e.slice().sort((e,t)=>re(e)-re(t))[0]}function rr(e){let t=rn()??"127.0.0.1",n=t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t;return`http://${n}:${e}`}let ro=`base/${e3}`;async function ri({encryption:e}){let t=t1.mkdtempSync(eJ.join(n7.tmpdir(),"doubao-keystore-")),n=eJ.join(t,e3);try{let{generateKeystore:t}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),r=await t(n,{encryption:e});if(0!==r.status)throw Error(r.error_msg);return t1.readFileSync(n)}finally{t1.rmSync(t,{recursive:!0,force:!0})}}let ra=f("../../../node_modules/.pnpm/@byted-lynx+tasm@4.4.40_debug@4.4.3/node_modules/@byted-lynx/tasm/index.js");class rs{options;isGenerateKeystore=!1;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(rs.name,t=>{t.hooks.processAssets.tapPromise({name:rs.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH},async()=>{let n=Date.now();try{let{RawSource:n}=e.webpack.sources,r=this.options.getAppAssetPath();for(let e of[r,this.options.getClientToolRuntimeAssetPath?.()].filter(e=>!!e)){let o=t.getAsset(e);if(!o)throw Error(`Worker entry asset was not emitted: ${e}`);let{buffer:i,encodeOptions:a,keystoreContent:s}=await this.encode([o]);if(t.updateAsset(e,new n(i,!1)),s){let e=new n(s,!1);t.getAsset(ro)?t.updateAsset(ro,e):t.emitAsset(ro,e)}tc()&&e===r&&t.emitAsset(`${eJ.dirname(e)}/tasm.json`,new n(JSON.stringify(a,null,2)))}}finally{this.options.onProcessDuration?.(Date.now()-n)}})})}async encode(e){let t={},{resolveSigningEncryptionOptions:n}=this.options;for(let n of e)n.name.endsWith(".js")&&(t[n.name.replace(/\.template\.js$/,"")]={content:n.source.source().toString()});let r={compilerOptions:{enableFiberArch:!0,targetSdkVersion:this.options.engineVersion??"3.5"},sourceContent:{appType:"DynamicComponent"},customSections:t},o=await n?.();if(o?.signing.enabled||o?.encryption.enabled){let{encode:e}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),t=this.options.metadata.appId,n=ne(o,{signing:{extra_config:{app_id:t,bundle_id:t}},encryption:{salt:t}}),{buffer:i,lepus_debug:a,status:s,error_msg:l}=await e(JSON.stringify(r),n);if(0!==s)throw Error(l);return!this.isGenerateKeystore&&n.encryption.enabled?(this.isGenerateKeystore=!0,{buffer:i,encodeOptions:r,debugInfo:a,keystoreContent:await ri({encryption:{...n.encryption}})}):{buffer:i,encodeOptions:r,debugInfo:a}}let i=(0,ra.getEncodeMode)(),{buffer:a}=await i(r);return{buffer:a,encodeOptions:r}}}function rl(e,t,r,o,i){let a=!1;return{name:rl.name,apply(s){let l=new s.webpack.experiments.VirtualModulesPlugin;l.apply(s),s.hooks.thisCompilation.tap(rl.name,()=>{Object.keys(r).forEach(e=>{l.writeModule(r[e].filename,r[e].toString())})}),s.hooks.thisCompilation.tap(rl.name,r=>{let l,p=()=>{void 0!==l&&i?.(Math.max(0,Date.now()-l))},c=e.getLynxTemplatePluginHooks(r);c.beforeEncode.tapPromise(rl.name,async e=>(l??=Date.now(),e.encodeData.sourceContent.config=eo({},e.encodeData.sourceContent.config,{mapContainerType:1}),e)),c.encode.tapPromise({name:rl.name,stage:255},async e=>{let{encodeOptions:i}=e,l=await o?.();if(l?.signing.enabled||l?.encryption.enabled){let{encode:n}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),o=t.getData(),c=function(e,t){let n=(t??"").replaceAll("\\","/"),r=n.match(/(?:^|\/)(pages|widgets)\/(.+)$/);if(r){let[,t,n]=r,o=`${t}/${n}`;return"widgets"===t?e.widgets[o]?.id:e.pages[o]?.path}let o=eJ.posix.basename(n);return e.widgets[`widgets/${o}`]?.id??e.pages[`pages/${o}`]?.path}(o,e.intermediate),d=o.app.appId,u=ne(l,{signing:{extra_config:{app_id:d,bundle_id:c}},encryption:{salt:d}}),{buffer:m,lepus_debug:h,status:g,error_msg:y}=await n(JSON.stringify(i),u);if(0!==g)throw Error(y);if(!a&&u.encryption.enabled){a=!0;let e=await ri({encryption:{...u.encryption}}),t=new s.webpack.sources.RawSource(e,!1);r.getAsset(ro)?r.updateAsset(ro,t):r.emitAsset(ro,t)}return p(),{buffer:m,debugInfo:h}}let{buffer:c,lepus_debug:d}=await (n??=new h({filename:new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.0.42-rc.10_@emnapi+core@1.11.3_@emnapi+runtime@1.11.3_@lynx-js_f5de924f569728557c959fd61505c789/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"),f.b).href,maxThreads:(0,nx.availableParallelism)()})).run({encodeOptions:i});return p(),{buffer:Buffer.from(c),debugInfo:d}})}),s.hooks.failed.tap(rl.name,e=>{tA.error("Failed to bundle template",{error:e})})}}}class rp{static _instance;listeners=[];stdinListener;nextIndex=0;static get instance(){return rp._instance??=new rp}start(){this.stdinListener||0===this.listeners.length||(this.stdinListener=e=>{let t=e.toString("utf-8");this.listeners.some(e=>e.run(t))},process.stdin.on("data",this.stdinListener),process.stdin.resume())}stop(){this.stdinListener&&(process.stdin.off("data",this.stdinListener),this.stdinListener=void 0)}addListener(e,t,n=0){let r=e=>()=>{let t=this.listeners.findIndex(t=>t.run===e);t>-1&&(this.listeners.splice(t,1),0===this.listeners.length&&(this.stop(),0===process.stdin.listenerCount("data")&&process.stdin.pause()))};if(t){let e=this.listeners.find(e=>e.tag===t);if(e)return r(e.run)}return this.listeners.push({run:e,tag:t,priority:n,index:this.nextIndex++}),this.listeners.sort((e,t)=>e.priority-t.priority||e.index-t.index),this.start(),r(e)}}function rc(e){if(!(e instanceof Error&&"ExitPromptError"===e.name))throw e}function rd(e){rp.instance.stop(),e().catch(rc).finally(()=>rp.instance.start())}let ru=ew.child("simulator"),rm=f("node:http"),rh={"Cross-Origin-Opener-Policy":"same-origin","Cross-Origin-Embedder-Policy":"credentialless"},rf=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),rg=new Set([...rf,"cookie","host","origin","referer"]),ry=/authorization|cookie|token|secret|password|credential|private[-_]?key|(?:^|[-_])api[-_]?key(?:$|[-_])|(?:^|[-_])dek(?:$|[-_])/i,rb="X-DBX-Sandbox-Session-ID",r_="x-tt-logid";function rw(e){try{return new URL(e.url??"/","http://localhost")}catch{return}}function rv(e,t,n={}){let r={};for(let[t,n]of Object.entries(e))void 0===n||rg.has(t.toLowerCase())||(r[t]=n);return{...r,...n,host:t.host}}function rE(e,t=[]){let n={};for(let[t,r]of Object.entries(e))void 0===r||rf.has(t.toLowerCase())||(n[t]=r);if(t.length>0){let e=new Set(String(n["access-control-expose-headers"]??"").split(",").map(e=>e.trim().toLowerCase()).filter(Boolean));for(let n of t)e.add(n.toLowerCase());n["access-control-expose-headers"]=[...e].join(", ")}return n}function rS(e,t={}){Object.entries({...rh,...t}).forEach(([t,n])=>{void 0!==n&&e.setHeader(t,n)})}function rx(e,t){let n=tt.createReadStream(t);n.once("error",()=>e.destroy()),n.pipe(e)}function rA(e,t,n,r){rS(e,r),e.writeHead(t,{"Content-Type":"text/plain; charset=utf-8"}),e.end(n)}function rT(e,t,n,r){let o=JSON.stringify(n);rS(e,r),e.writeHead(t,{"Content-Length":Buffer.byteLength(o),"Content-Type":"application/json; charset=utf-8"}),e.end(o)}function rC(e,t,n){return new Promise((r,o)=>{let i="",a=0,s=!1;e.setEncoding("utf8"),e.on("data",r=>{if((a+=Buffer.byteLength(r))>n){if(s)return;s=!0,e.pause(),t.shouldKeepAlive=!1,t.setHeader("Connection","close");let n=()=>{e.destroyed||e.destroy()};t.once("finish",n),t.once("close",n),o(Error("Request body is too large"));return}i+=r}),e.once("end",()=>{s||(s=!0,r(i))}),e.once("aborted",()=>{s||(s=!0,o(Error("Request aborted")))}),e.once("error",e=>{s||(s=!0,o(e))})})}function rO(e){return e.arrayBuffer().then(e=>Buffer.from(e))}function rP(e){return Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>{let n=ry.test(e)?"[REDACTED]":Array.isArray(t)?t.join(", "):t;return` ${e}: ${n}`}).join("\n")}function rI(e){return("string"==typeof e||void 0===e?e:e.toString("utf8"))||"(no content)"}function rk({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a}){"applet0930"===process.env.DEBUG&&ru.info(`${e} ${a.pathname}${a.search} ${(i>=500?S.red:i>=400?S.yellow:S.green)(String(i))}
30
33
  Request headers:
31
- ${rT(n)}
32
- Request body: ${rO(t)}
34
+ ${rP(n)}
35
+ Request body: ${rI(t)}
33
36
 
34
37
  Response headers:
35
- ${rT(Object.fromEntries(i))}
36
- Response body: ${rO(r)}`)}function rP(e,t,n){let r,i=("https:"===n.targetUrl.protocol?b:rc).request(n.targetUrl,{headers:n.requestHeaders,method:e.method},e=>{(r=e,t.destroyed||t.writableEnded)?e.destroy():(rv(t,n.commonHeaders),t.writeHead(e.statusCode??500,n.createResponseHeaders?.(e.headers)??rw(e.headers)),e.pipe(t))}),a=()=>{i.destroy(),r?.destroy()};i.once("error",e=>{if(!t.destroyed&&!t.writableEnded){if(t.headersSent)return void t.destroy(e);rS(t,502,`${n.errorMessage}: ${e.message}`,n.commonHeaders)}}),e.once("aborted",()=>{a()}),e.socket.once("close",()=>{t.writableEnded||a()}),t.once("close",()=>{t.writableEnded||a()}),e.pipe(i)}let rk=["page","widget","app"],rN=["log","info","warn","error","debug","eval"],r$=new Set(["id","class","role","title","href","src","type","name","value","placeholder","disabled","checked","selected"]);function rD(e,t){let n=t.pageIdx??0,r=t.pageSize??50,i=n*r,a=e.slice(i,i+r);return{pageIdx:n,pageSize:r,total:e.length,hasMore:i+a.length<e.length,items:a}}function rR(e){if(!e.snapshot)return{stored:!1,updatedAtMs:e.updatedAtMs};let{debug_snapshot:t,...n}=e.snapshot;return{stored:!0,storedAt:n.stored_at,updatedAtMs:n.stored_at_ms??e.updatedAtMs,snapshot:n.snapshot}}function rL(e){return e.value??e.unserializableValue??e.description??e.type??""}function rM(e,t){var n,r;let i;return(n=e,"all"===(r=t)?rk:"page"===r||"widget"===r||"app"===r?[r]:(i=n.context,i?.page_id||i?.page_path?["page","app"]:i?.widget_id?["widget"]:rk)).flatMap(t=>{let n,r=(n=e.runtime_console?.[t],{entries:n?.entries??[],updatedAtMs:n?.updated_at_ms??n?.updatedAtMs});return r.entries.map((e,n)=>{var i;let a,s,o,l;return i=r.updatedAtMs,a=e.url??e.location?.url,s=e.lineNumber??e.location?.lineNumber,o=e.columnNumber??e.location?.columnNumber,l=e.id??String(n),{msgid:`${t}:${l}`,target:t,level:e.level??"log",source:e.source??"",timestamp:e.timestamp??0,text:e.message??(e.args??[]).map(rL).filter(Boolean).join(" "),...a?{url:a}:{},...void 0===s?{}:{lineNumber:s},...void 0===o?{}:{columnNumber:o},...void 0===i?{}:{updatedAtMs:i},entry:e}})})}function rj(e,t){return{id:e.toolCallId??e.id??`tool-call:${t}`,requestId:e.requestId??e.request_id??"",toolCallId:e.toolCallId??e.id??"",toolName:e.toolName??e.name??"",serverId:e.serverId??e.server_id??"",appKey:e.appKey??e.app_key??"",status:e.status??"",createdAtMs:e.createdAtMs??e.created_at_ms??0,updatedAtMs:e.updatedAtMs??e.updated_at_ms??0,requiresUserApproval:!0===e.requiresUserApproval,isMiniApp:!0===e.isMiniApp,message:e.message??"",resultSummary:e.resultSummary??e.structuredResultSummary}}function rB(e,t){if("page"===t){let{pageId:t,path:n}=e;if(!t||!n)return;return{pageId:t,path:n,name:e.name??t,isHome:!0===e.isHome}}let{widgetId:n}=e;if(n)return{widgetId:n,name:e.name??n}}let rU=new Set(["DEBUGGER_NOT_CONNECTED","DEBUGGER_DISCONNECTED","TARGET_NOT_FOUND","ELEMENT_NOT_FOUND","RENDER_FAILED","RENDER_TIMEOUT","VIEWPORT_FAILED","INSPECTION_FAILED","SCROLL_FAILED","SCREENSHOT_FAILED","CHAT_NOT_READY","CHAT_BUSY","CHAT_SUBMIT_FAILED","CHAT_TIMEOUT","COMMAND_TIMEOUT"]);class rF extends Error{code;constructor(e,t){super(t),this.name="DebuggerControlError",this.code=e}}function rW(e){return"render_page"===e||"render_widget"===e}function rH(e){return"number"==typeof e&&Number.isFinite(e)}function rG(e){return"number"==typeof e&&Number.isInteger(e)&&e>=1&&e<=9999}class rV{clients=new Map;lastSnapshotAtByClientId=new Map;snapshotStore;nextCommandId=0;constructor(e){this.snapshotStore=e}registerClient(e,t){let n=this.clients.get(e);n&&this.disconnectClient(n,"Debugger control connection was replaced");let r={clientId:e,lastSnapshotAtMs:this.lastSnapshotAtByClientId.get(e)??0,queue:[],response:t};this.clients.set(e,r),t.once("close",()=>{this.clients.get(e)===r&&this.disconnectClient(r,"Debugger control connection was closed",!1)})}noteSnapshot(e){if(!e)return;let t=Date.now();this.lastSnapshotAtByClientId.set(e,t);let n=e?this.clients.get(e):void 0;n&&(n.lastSnapshotAtMs=t)}execute(e,t){let n=this.getActiveClient();if(!n)return Promise.reject(new rF("DEBUGGER_NOT_CONNECTED","No Web SDK debugger with a stored snapshot is connected"));let r=`control-${Date.now()}-${++this.nextCommandId}`;return new Promise((i,a)=>{n.queue.push({command:{...t,commandId:r,type:e},reject:a,resolve:i}),this.flushClient(n)})}handleResult(e){var t,n;let r,i=e.clientId?.trim(),a=e.commandId?.trim(),s=i?this.clients.get(i):void 0,o=s?.activeJob;if(!s||!o||o.command.commandId!==a)return!1;if((o.timeout&&clearTimeout(o.timeout),s.activeJob=void 0,!0===e.ok&&rW(o.command.type)&&(t=e.snapshot,t.snapshot.command_id===a&&t.snapshot.runtime_snapshot))?(this.snapshotStore.snapshot=e.snapshot,this.snapshotStore.updatedAtMs=Date.now(),this.noteSnapshot(i),r={target:e.target}):!0!==e.ok||rW(o.command.type)||(r=function(e,t){if("set_viewport"===e)return rG(t.width)&&rG(t.height)?t:void 0;if("submit_chat_query"===e)return!0===t.completed&&t.query?.trim()&&t.requestId?.trim()?t:void 0;if("take_screenshot"===e||t.uid?.trim()){if("get_computed_style"===e){if(!Array.isArray(t.computedStyle)||!t.computedStyle.every(e=>!!e.name?.trim()&&"string"==typeof e.value))return;return t}if("get_element_rect"===e)return[t.x,t.y,t.width,t.height].every(rH)?t:void 0;if("scroll_to"===e)return[t.x,t.y,t.maxX,t.maxY,t.viewportWidth,t.viewportHeight].every(e=>rH(e)&&e>=0)&&t.x<=t.maxX&&t.y<=t.maxY?t:void 0;if("take_screenshot"===e){let e="png"===t.format?"image/png":"jpeg"===t.format?"image/jpeg":"webp"===t.format?"image/webp":void 0;return"string"==typeof t.data&&t.data.length>0&&t.mimeType===e&&rH(t.width)&&rH(t.height)&&(void 0===t.uid||t.uid?.trim())?t:void 0}}}(o.command.type,e.result)),r)o.resolve(r);else{let t=e.error??{},r=t.code?.trim(),i=r&&rU.has(r)?r:void 0;o.reject(new rF(i??(rW(n=o.command.type)?"RENDER_FAILED":"set_viewport"===n?"VIEWPORT_FAILED":"scroll_to"===n?"SCROLL_FAILED":"submit_chat_query"===n?"CHAT_SUBMIT_FAILED":"take_screenshot"===n?"SCREENSHOT_FAILED":"INSPECTION_FAILED"),t.message?.trim()||"Debugger control command failed"))}return this.flushClient(s),!0}getActiveClient(){return[...this.clients.values()].filter(e=>!e.response.writableEnded&&e.lastSnapshotAtMs>0).sort((e,t)=>t.lastSnapshotAtMs-e.lastSnapshotAtMs)[0]}flushClient(e){if(e.activeJob||e.response.writableEnded)return;let t=e.queue.shift();if(t){e.activeJob=t,t.timeout=setTimeout(()=>{if(e.activeJob===t){if("submit_chat_query"===t.command.type){t.timeout=void 0,t.reject(new rF("CHAT_TIMEOUT","Debugger control command timed out"));try{e.response.write(`data: ${JSON.stringify({commandId:t.command.commandId,type:"cancel_chat_query"})}
37
-
38
- `)}catch{this.disconnectClient(e,"Debugger control connection was closed");return}t.timeout=setTimeout(()=>{e.activeJob===t&&this.disconnectClient(e,"Debugger chat cancellation was not acknowledged")},5e3);return}e.activeJob=void 0,t.reject(new rF(rW(t.command.type)?"RENDER_TIMEOUT":"COMMAND_TIMEOUT","Debugger control command timed out")),this.flushClient(e)}},"submit_chat_query"===t.command.type?12e4:15e3);try{e.response.write(`data: ${JSON.stringify(t.command)}
39
-
40
- `)}catch{t.timeout&&clearTimeout(t.timeout),e.activeJob=void 0,t.reject(new rF("DEBUGGER_DISCONNECTED","Debugger control connection was closed")),this.disconnectClient(e,"Debugger control connection was closed")}}}disconnectClient(e,t,n=!0){if(this.clients.get(e.clientId)!==e)return;this.clients.delete(e.clientId);let r=new rF("DEBUGGER_DISCONNECTED",t);for(let t of(e.activeJob?.timeout&&clearTimeout(e.activeJob.timeout),e.activeJob?.reject(r),e.activeJob=void 0,e.queue.splice(0)))t.reject(r);n&&!e.response.writableEnded&&e.response.end()}}async function rq(e,t,n){let r;if("POST"!==e.method)return void rx(t,405,{error:"Method not allowed"});try{r=JSON.parse(await rA(e,0xa00000))}catch(e){rx(t,400,{error:e.message});return}n.handleResult(r)?rx(t,200,{ok:!0}):rx(t,404,{error:"Pending debugger command not found"})}let rJ={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},rK={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},rz={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1};function rY(e,t={}){return{structuredContent:e,content:t.image?[{type:"image",...t.image}]:[{type:"text",text:t.text??JSON.stringify(e,null,2)}],...t.isError?{isError:!0}:{}}}async function rX(e,t={}){try{return await e()}catch(e){return function(e,t={}){let n=e instanceof rF?e:new rF("INSPECTION_FAILED",String(e));return rY({...t,error:{code:n.code,message:n.message}},{isError:!0})}(e,t)}}function rZ(e,t,n,r){e.registerTool(t,n,r)}let rQ="/__wsd_mcp";async function r0(e,t,n,r){let i,a;if("OPTIONS"===e.method){rv(t),t.writeHead(204),t.end();return}if("POST"!==e.method)return void rS(t,405,"Method not allowed");let s=(i=new J({name:"doubao-web-sdk-debugger-log",version:"0.0.1"}),a=async e=>{var t;let r=rR(n);if(!r.stored)return rY(r);let i=rD((t=r.snapshot,[{source:"simulator",events:t.simulator?.trace_events??[]},{source:"widget_runtime",events:t.widget_runtime_trace_events??[]},{source:"page_runtime",events:t.page_runtime_trace_events??[]}].flatMap(({source:e,events:t})=>t.map((t,n)=>{let r;return r=t.payload??{},{source:e,id:t.id??`${e}:${n}`,timestamp:t.timestamp??0,category:r.category??t.display?.category??"",event:r.event??t.event??"",requestId:r.request_id??r.requestId??r.trace_id??r.trace?.trace_id??"",payload:t.payload??t}}))).filter(t=>{let n,r,i;return n=e.category??[],r=e.event?.trim(),i=e.requestId?.trim(),(0===n.length||n.includes(t.category))&&(!r||t.event===r)&&(!i||t.requestId===i)}),e);return rY({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:i.total,pageIdx:i.pageIdx,pageSize:i.pageSize,hasMore:i.hasMore,events:i.items})},rZ(i,"list_console_messages",{annotations:rJ,description:"List runtime console messages captured by the Doubao Web SDK debugger.",inputSchema:{levels:er(C(rN)).optional(),pageIdx:A().int().min(0).optional(),pageSize:A().int().min(1).max(200).optional(),query:Y().optional(),target:C(["current","page","widget","app","all"]).optional()}},async e=>{let t=rR(n);if(!t.stored)return rY(t);let r=rD(rM(t.snapshot,e.target).filter(t=>{let n,r;return n=e.levels??[],r=e.query?.trim().toLowerCase(),(!(n.length>0)||!!n.includes(t.level))&&(!r||[t.text,t.url,t.source,t.target].filter(e=>"string"==typeof e).some(e=>e.toLowerCase().includes(r)))}),e);return rY({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,messages:r.items.map(({entry:e,...t})=>t)})}),rZ(i,"get_console_message",{annotations:rJ,description:"Get one full runtime console message, including args and stack trace.",inputSchema:{msgid:Y()}},async e=>{let t=rR(n);if(!t.stored)return rY(t);let r=rM(t.snapshot,"all").find(t=>t.msgid===e.msgid);return rY({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,found:!!r,...r?{message:r}:{msgid:e.msgid}})}),rZ(i,"get_log_snapshot",{annotations:rJ,description:"Return the latest compact debugger log snapshot.",inputSchema:{}},async()=>{let e=rR(n);return e.stored?rY({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,snapshot:e.snapshot}):rY(e)}),rZ(i,"list_render_targets",{annotations:rJ,description:"List Page and Widget targets that can be rendered by the Web SDK debugger.",inputSchema:{type:C(["all","page","widget"]).optional()}},async e=>{var t,r;let i,a=rR(n);return a.stored?rY({stored:!0,storedAt:a.storedAt,updatedAtMs:a.updatedAtMs,...(t=a.snapshot,r=e.type??"all",i=t.render_targets??{},{pages:"widget"===r?[]:(i.pages??[]).map(e=>rB(e,"page")).filter(Boolean),widgets:"page"===r?[]:(i.widgets??[]).map(e=>rB(e,"widget")).filter(Boolean),...i.currentTarget?{currentTarget:i.currentTarget}:{}})}):rY(a)}),rZ(i,"take_snapshot",{annotations:rJ,description:"Take a text snapshot of the currently rendered Page or Widget card.",inputSchema:{target:C(["current","page","widget"]).optional(),verbose:$().optional()}},async e=>{let t=rR(n);if(!t.stored)return rY(t);let r=function(e,t){var n,r;let i,a,s,o=e.runtime_snapshot;if(!o?.target)return{available:!1,reason:"NO_RUNTIME_SNAPSHOT"};let l=o.target,p=l.type,d=t.target??"current";if(("page"===d||"widget"===d)&&p!==d)return{available:!1,reason:"TARGET_MISMATCH",requestedTarget:d,currentTarget:l};if(!o.root)return{available:!1,reason:"NO_RENDERED_TARGET",currentTarget:l};let c=o.selectedUid,u=(n=o.root,r=!0===t.verbose,i=[],a=0,(s=(e,t)=>{var n,o;let{name:l,uid:p}=e;if(!p||!l)return;a+=1;let d=" ".repeat(t);if("text"===e.type)return void i.push(`${d}uid=${p} text ${JSON.stringify(e.text??"")}`);let u=[`uid=${p}`,l],{keyboardFocusable:h=!1,name:m,role:g}=e.accessibility??{};for(let t of(g&&(r||"generic"!==g)&&u.push(`role=${JSON.stringify(g)}`),m&&u.push(`name=${JSON.stringify(m)}`),(r||h)&&u.push(`focusable=${String(h)}`),(e.attributes??[]).map(e=>({name:e.name,value:e.value})).filter(e=>e.name&&(r||r$.has(e.name)||e.name.startsWith("aria-")))))u.push((n=t.name,(o=t.value)?`${n}=${JSON.stringify(o)}`:n));for(let n of(p===c&&u.push("[selected]"),i.push(`${d}${u.join(" ")}`),e.children??[]))s(n,t+1)})(n,0),{actualNodeCount:a,text:i.join("\n")});return{available:!0,target:l,nodeCount:o.nodeCount??u.actualNodeCount,...c?{selectedUid:c}:{},truncated:!0===o.truncated,snapshot:u.text,snapshotUpdatedAtMs:o.updatedAtMs}}(t.snapshot,e),i={stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,...r};return rY(i,{text:r.available?r.snapshot:JSON.stringify(i,null,2)})}),rZ(i,"get_computed_style",{annotations:rJ,description:"Get computed CSS styles for an element uid in the current Page or Widget target.",inputSchema:{properties:er(Y().min(1)).max(100).optional(),uid:Y().min(1)}},({properties:e,uid:t})=>rX(async()=>rY(await r.execute("get_computed_style",{uid:t,...e?{properties:e}:{}})))),rZ(i,"get_element_rect",{annotations:rJ,description:"Get x, y, width, and height for an element uid in the emulated viewport.",inputSchema:{uid:Y().min(1)}},({uid:e})=>rX(async()=>rY(await r.execute("get_element_rect",{uid:e})))),rZ(i,"take_screenshot",{annotations:rJ,description:"Take a screenshot of the current Page or Widget target, or of one element uid.",inputSchema:{format:C(["png","jpeg","webp"]).optional(),quality:A().min(0).max(100).optional(),uid:Y().min(1).optional()}},({format:e="png",quality:t,uid:n})=>rX(async()=>{let i=await r.execute("take_screenshot",{format:e,...void 0!==t?{quality:t}:{},...n?{uid:n}:{}}),{data:a,...s}=i;return rY({captured:!0,...s},{image:{data:a,mimeType:i.mimeType}})},{captured:!1})),rZ(i,"scroll_to",{annotations:rz,description:"Scroll a Page or Widget container to absolute coordinates, or return its current scroll position.",inputSchema:{uid:Y().min(1).optional(),x:A().min(0).optional(),y:A().min(0).optional()}},({uid:e,x:t,y:n})=>rX(async()=>rY({scrolled:!0,...await r.execute("scroll_to",{uid:e,x:t,y:n})}),{scrolled:!1})),rZ(i,"set_viewport",{annotations:rz,description:"Set the current Page or Widget emulated viewport size.",inputSchema:{height:A().int().min(1).max(9999),width:A().int().min(1).max(9999)}},({height:e,width:t})=>rX(async()=>rY({updated:!0,viewport:await r.execute("set_viewport",{height:e,width:t})}),{updated:!1})),rZ(i,"render_page",{annotations:rK,description:"Render a Page route in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{url:Y().min(1)}},({url:e})=>rX(async()=>rY({rendered:!0,target:(await r.execute("render_page",{url:e})).target}),{rendered:!1})),rZ(i,"render_widget",{annotations:rK,description:"Render a Widget card in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{structuredContent:j(Y(),O()).optional(),widgetId:Y().min(1)}},({structuredContent:e,widgetId:t})=>rX(async()=>rY({rendered:!0,target:(await r.execute("render_widget",{structuredContent:e??{},widgetId:t})).target}),{rendered:!1})),rZ(i,"submit_chat_query",{annotations:rK,description:"Submit a chat query through the connected Web SDK debugger and wait for the simulator response to complete.",inputSchema:{query:Y().trim().min(1)}},({query:e})=>rX(async()=>rY({submitted:!0,...await r.execute("submit_chat_query",{query:e})}),{submitted:!1})),rZ(i,"list_agent_trace_events",{annotations:rJ,description:"List Agent-side simulator and runtime trace events captured by the debugger.",inputSchema:{category:er(Y()).optional(),event:Y().optional(),pageIdx:A().int().min(0).optional(),pageSize:A().int().min(1).max(200).optional(),requestId:Y().optional()}},a),rZ(i,"list_agent_tool_calls",{annotations:rJ,description:"List Agent-side simulator tool calls captured by the debugger.",inputSchema:{pageIdx:A().int().min(0).optional(),pageSize:A().int().min(1).max(200).optional(),query:Y().optional(),requestId:Y().optional(),status:er(Y()).optional(),toolName:Y().optional()}},async e=>{var t;let r=rR(n);if(!r.stored)return rY(r);let i=rD((t=r.snapshot,(t.simulator?.tool_calls??[]).map(rj)).filter(t=>{let n,r,i,a;return n=e.requestId?.trim(),r=e.toolName?.trim(),i=e.status??[],a=e.query?.trim().toLowerCase(),(!n||t.requestId===n)&&(!r||t.toolName===r)&&(!(i.length>0)||!!i.includes(t.status))&&(!a||[t.toolName,t.serverId,t.appKey,t.status,t.message,"string"==typeof t.resultSummary?t.resultSummary:void 0].filter(e=>"string"==typeof e).some(e=>e.toLowerCase().includes(a)))}),e);return rY({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:i.total,pageIdx:i.pageIdx,pageSize:i.pageSize,hasMore:i.hasMore,toolCalls:i.items})}),i),o=new T({enableJsonResponse:!0,sessionIdGenerator:void 0});try{await s.connect(o),await o.handleRequest(e,t)}catch(e){t.headersSent?t.destroy(e instanceof Error?e:void 0):rS(t,500,e instanceof Error?e.message:String(e))}finally{await o.close().catch(()=>void 0),await s.close().catch(()=>void 0)}}let r1="/__web_sdk_debug_scenes",r2="/__web_sdk_widget_view_data_templates",r3={"Cache-Control":"no-cache"};async function r4(e,t){try{let n=await t?.()??{templatesByEntry:{},templatesByWidget:{}};rx(e,200,n,r3)}catch(t){rd.error("加载 Widget viewData 模板失败",{error:t}),rx(e,500,{templatesByEntry:{},templatesByWidget:{}},r3)}}let r9={"Cache-Control":"no-cache"};async function r5(e,t,n,r){var i,a,s,o;let l,p,d,c,u,h;if("OPTIONS"===e.method){rv(t,r9),t.writeHead(204),t.end();return}if("GET"===e.method){let r;return void rx(t,200,function(e,t){if(!e?.debug_snapshot)return e;let{debug_snapshot:n,...r}=e;return t?{...r,snapshot:n}:r}(n.snapshot,(i=e,null!=(r=rb(i)?.searchParams.get("DEBUG"))&&"0"!==r&&"false"!==r.toLowerCase()))??{stored:!1},r9)}if("POST"!==e.method)return void rx(t,405,{error:"Method not allowed"},r9);try{l=JSON.parse(await rA(e,0xa00000))}catch(e){rx(t,400,{error:e.message},r9);return}a=n.snapshot,s=l,p=a?.snapshot,d=s.snapshot,c=p?.runtime_snapshot,u=d.runtime_snapshot,n.snapshot=l=!(!p||!c||!u||Object.hasOwn(u,"root"))&&Object.hasOwn(c,"root")&&p.client_id===d.client_id&&c.updatedAtMs===u.updatedAtMs&&JSON.stringify(c.target)===JSON.stringify(u.target)?{...s,snapshot:{...d,runtime_snapshot:{...u,root:c.root}}}:s,n.updatedAtMs=Date.now(),r.noteSnapshot("string"==typeof(h=(o=l).snapshot.client_id??o.debug_snapshot?.client_id)&&h.trim()?h.trim():void 0),rx(t,200,{ok:!0,updated_at_ms:n.updatedAtMs},r9)}let r8=g("../../../node_modules/.pnpm/undici@6.22.0/node_modules/undici/index.js"),r6={"sso-internal":"doubao-developer.bytedance.net","sms-internal":"doubao-developer-open.bytedance.net","sms-external":"hello.doubao-dev.com"},r7={"http:":"80","https:":"443"},ie=new Map;function it(){return process.env.X_TT_ENV?{"x-use-ppe":"1","x-tt-env":process.env.X_TT_ENV}:{}}function ir(e){let t=e.startsWith("/")?e:`/${e}`;return"/app_developer"===t||t.startsWith("/app_developer/")}async function ii(e,t={}){let n=function(e){var t,n;let r="string"==typeof e?new URL(e):e;if(function(e){let t=io(["NO_PROXY","no_proxy"]);if(!t)return!1;let n=il(e.hostname),r=e.port||r7[e.protocol]||"";for(let e of t.split(",")){let t=function(e){let t=e.trim().toLowerCase();if(!t)return{host:""};if((t=t.replace(/^[a-z][a-z\d+.-]*:\/\//,"").split("/")[0]).startsWith("[")){let e=t.indexOf("]");if(-1!==e)return{host:il(t.slice(0,e+1)),port:":"===t[e+1]?t.slice(e+2):void 0}}let n=t.indexOf(":")===t.lastIndexOf(":")?t.match(/:(\d+)$/):void 0;return{host:il(n?t.slice(0,-n[0].length):t),port:n?.[1]}}(e);if(t.host&&(!t.port||t.port===r)){if("*"===t.host)return!0;if(t.host.startsWith("*.")){let e=t.host.slice(1);if(n.endsWith(e))return!0;continue}if(t.host.startsWith(".")){if(n.endsWith(t.host))return!0;continue}if(n===t.host)return!0}}return!1}(r))return;let i="https:"===(t=r.protocol)?io(["HTTPS_PROXY","https_proxy","HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):"http:"===t?io(["HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):void 0;if(!i)return;let a=(n=i,/^[a-z][a-z\d+.-]*:\/\//i.test(n)?n:`http://${n}`),s=ie.get(a);return s||(s=new r8.kT(a),ie.set(a,s)),s}(e),r=n?{...t,dispatcher:n}:t;return await fetch(e,r)}async function ia({internal:e,domainId:t,path:n,query:r,method:i="GET",body:a,headers:s,signal:o,auth:l=!0}){let p={method:i,body:a,headers:{...it(),...s}};o&&(p.signal=o);let d=function({internal:e,domainId:t,path:n,query:r}){let i=n.startsWith("/")?n:`/${n}`,a=new URLSearchParams;for(let[e,t]of Object.entries(r||{}))null!=t&&a.append(e,t.toString());let s=a.toString(),o=s?`${i.includes("?")?"&":"?"}${s}`:"",l=ir(i)?eo:t?r6[t]:e?r6["sso-internal"]:r6["sms-external"];return`https://${l}${i}${o}`}({internal:e,domainId:t,path:n,query:r}),c=new Headers(p.headers),u=c.has("Cookie");if(!l||!ir(n)||c.has("Authorization")||c.has("X-Developer-Open-Build-Token"))return await ii(d,p);let h=new URL(d).origin,m=D(ii,{baseUrl:h,allowedOrigins:[h]});try{return await m(d,p)}catch(e){if(!(e instanceof W||e instanceof I))throw e;if(u)return await ii(d,p);throw Error(e instanceof I?"Doubao Apps Platform 登录已过期,请运行 `dbx auth login` 后重试。":"Doubao Apps Platform 请求需要登录,请运行 `dbx auth login` 后重试。")}}async function is(e){let t=await ia(e),n=t.headers.get("x-tt-logid")||"";if(!t.ok){let e=await t.text();throw Error(JSON.stringify({code:t.status,message:"HTTP 请求失败",data:e,log_id:n}))}let r=await t.json();if(0!==r.code)throw Error(JSON.stringify({...r,log_id:n}));return{...r,log_id:n}}function io(e){for(let t of e){let e=process.env[t]?.trim();if(e)return e}}function il(e){return e.trim().toLowerCase().replace(/^\[/,"").replace(/\]$/,"")}let ip="/app_developer/api/sandbox/",id=`${ip}session/business_info/update`,ic=new Set([`${ip}resources/notices/pull`,`${ip}resources/tasks/pull`]),iu={"Access-Control-Expose-Headers":ry},ih=new Set;function im(e,t,n,r,i,a){if("applet0930"!==process.env.DEBUG)return!1;let s=`${i[rf]??""} ${e} ${t.pathname}`,o=ic.has(t.pathname);if(o&&n>=500){if(ih.has(s))return!1;ih.add(s)}else o&&n<500&&ih.delete(s);let l=Number(process.hrtime.bigint()-r)/1e6;return rd.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:l,headers:i,logId:a}),!0}function ig({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:i,statusCode:a,targetUrl:s}){rI({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:i,statusCode:a,targetUrl:s})}function iy(e,t,n){return n&&!(ic.has(e.pathname)&&t>=500)}function ib(e,t){if(e.pathname!==id||!t)return t;try{let e=JSON.parse(t);return JSON.stringify({...e,..."csr_pem"in e?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]"})}catch{return JSON.stringify({omitted:"invalid business info request"})}}async function i_({method:e,request:t,requestBody:n,requestHeaders:r,response:i,targetUrl:a,usePlatformFetch:s}){let o=new AbortController,l=process.hrtime.bigint(),p=()=>o.abort();t.once("aborted",p),t.socket.once("close",p),i.once("close",()=>{i.writableEnded||p()});try{let t,p=s?await ia({internal:!0,path:`${a.pathname}${a.search}`,method:e,body:n,headers:r,signal:o.signal}):await fetch(a,{body:"GET"===e||"HEAD"===e?void 0:n,headers:r,method:e,signal:o.signal}),d=im(e,a,p.status,l,r,p.headers.get(ry)??void 0);if(i.destroyed||i.writableEnded)return void p.body?.cancel().catch(()=>void 0);let c=await rC(p);return iy(a,p.status,d)&&ig({method:e,requestBody:ib(a,n),requestHeaders:r,responseBody:c,responseHeaders:p.headers,statusCode:p.status,targetUrl:a}),i.destroyed||i.writableEnded||(t=rw(Object.fromEntries(p.headers),[ry]),delete t["content-encoding"],delete t["content-length"],rv(i,iu),i.writeHead(p.status,t),i.end(c)),{body:c,ok:p.ok}}catch(p){if(i.destroyed||i.writableEnded||o.signal.aborted)return;let t=`Failed to proxy sandbox request: ${p instanceof Error?p.message:String(p)}`,s=im(e,a,502,l,r);iy(a,502,s)&&ig({method:e,requestBody:ib(a,n),requestHeaders:r,responseBody:t,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:a}),rS(i,502,t,iu)}}async function iw(e,t,n={}){let r;if("POST"!==e.method)return void rS(t,405,"Method not allowed",iu);try{r=JSON.parse(await rA(e,0xa00000))}catch(e){rS(t,400,`Invalid sandbox proxy payload: ${e.message}`,iu);return}let i=function(e,t){if(!e.url)return;let n=new URL(e.url,t);if(!n.pathname.startsWith(ip))return;let r=new URL(`${n.pathname}${n.search}`,t);var i=e.params;if(i)for(let[e,t]of Object.entries(i))null!=t&&r.searchParams.set(e,String(t));return r}(r,n.targetOrigin??ee);if(!i)return void rS(t,404,"Sandbox endpoint not found",iu);if(!n.sandboxSessionId)return void rx(t,200,{code:-1,message:"无法模拟平台服务:当前未获取到开发者登录态或 Sandbox session 创建失败。"},iu);let a=function(e,t,n,r){if(t.pathname.startsWith(`${ip}session/`)&&t.pathname!==`${ip}session/create`)return JSON.stringify({..."object"==typeof e.data&&null!==e.data?e.data:{},sandbox_session_id:r});if(void 0===e.data)return;if("object"!=typeof e.data||null===e.data||!n)return JSON.stringify(e.data);let i={...e.data};return t.pathname.startsWith(`${ip}jsb/`)&&"app_key"in i&&(i.app_key=n),t.pathname===`${ip}passport/open/auth`&&"client_key"in i&&(i.client_key=n),JSON.stringify(i)}(r,i,n.sandboxAppId,n.sandboxSessionId),s=r.method||"POST",o=function(e,t,n,r,i){let a=Object.fromEntries(Object.entries(r_({...e.headers,...n,...void 0===r?{}:{"content-length":String(Buffer.byteLength(r))},"content-type":"application/json"},t,{...it(),...i?{[rf]:i}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]));for(let e of Object.keys(a))"accept-encoding"===e.toLowerCase()&&delete a[e];return a["accept-encoding"]="identity",a}(e,i,r.headers,a,n.sandboxSessionId),l=await i_({method:s,request:e,requestBody:a,requestHeaders:o,response:t,targetUrl:i,usePlatformFetch:!n.targetOrigin});if(i.pathname===id&&l?.ok)try{let e=JSON.parse(l.body.toString("utf8"));(void 0===e.code||0===e.code)&&n.onBusinessInfoUpdated?.(function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t="string"==typeof e.csr_pem?e.csr_pem.trim():"",n="string"==typeof e.phone_num?e.phone_num.trim():"";return n?{...t?{csrPem:t}:{},phoneNum:n}:void 0}(r.data))}catch{}}let iv=g("node:util"),iE="/app_developer/api/sandbox/bridge/events",iS="/app_developer/api/sandbox/bridge/response",ix=new Set(["connection","content-length","host"]),iA=new Set(["heartbeat"]),iC=[500,1e3,2e3,5e3],iT=0;function iO(e){return e.length<=8?e:`${e.slice(0,4)}...${e.slice(-4)}`}function iI(e,t=new Headers,n=""){return{response:e,responseHeaders:Object.fromEntries(t),statusText:n}}async function iP(e){let t,n,r=e.request_id||"";if(!r)return iI({error_message:"bridge request_id is required",http_status:0,request_id:r,success:!1});if(!e.path?.startsWith("/"))return iI({error_message:`invalid bridge request path: ${e.path??""}`,http_status:0,request_id:r,success:!1});let i=function(e){if(e.origin)try{var t;return new URL(e.path??"/",(t=e.origin).endsWith("/")?t:`${t}/`)}catch{return}}(e);if(!i)return iI({error_message:`invalid bridge request origin: ${e.origin??""}`,http_status:0,request_id:r,success:!1});let a=(e.method||"GET").toUpperCase(),s=function(e){let t={};for(let[n,r]of Object.entries(e??{}))!n||ix.has(n.toLowerCase())||(t[n]=r);return t}(e.headers),o="GET"===a||"HEAD"===a?void 0:e.body??"",l=new AbortController,p=setTimeout(()=>l.abort(),(t="number"==typeof e.timeout_ms?e.timeout_ms:3e3,n="number"==typeof e.deadline_ms?e.deadline_ms-Date.now():t,Math.max(1,Math.min(t,n))));try{var d;let e=await fetch(i,{body:o,headers:s,method:a,redirect:"manual",signal:l.signal}),t=await e.text();return d={method:a,requestBody:o,requestHeaders:s,responseBody:t,responseHeaders:e.headers,statusCode:e.status,targetUrl:i},rI(d),iI({body:t,http_status:e.status,request_id:r,success:!0},e.headers,e.statusText)}catch(e){return rI({method:a,requestBody:o,requestHeaders:s,responseBody:e instanceof Error?e.message:String(e),responseHeaders:new Headers,statusCode:0,targetUrl:i}),iI({error_message:e instanceof Error?e.message:String(e),http_status:0,request_id:r,success:!1})}finally{clearTimeout(p)}}function ik(e,t=new Set){if(Array.isArray(e)){for(let n of e)ik(n,t);return[...t]}if(!e||"object"!=typeof e)return[...t];for(let[n,r]of Object.entries(e)){if(n.toLowerCase().replace(/[_-]/g,"").includes("logid")){if("string"==typeof r&&r)t.add(r);else if(Array.isArray(r))for(let e of r)"string"==typeof e&&e&&t.add(e);continue}ik(r,t)}return[...t]}function iN(e,t){e.onLog?.(t)}function i$(e){try{return JSON.parse(e)}catch{return}}function iD({detail:e,requestHeaders:t,status:n,targetUrl:r}){if("applet0930"===process.env.DEBUG){if("number"==typeof n)return void rd.request({method:"CONNECT",url:r.pathname,statusCode:n,headers:t,context:{detail:e}});rd.info("Bridge connection pending",{url:r.pathname,detail:e,ppe:eb(t)})}}function iR(e,t={}){"applet0930"===process.env.DEBUG&&rd.info(e,t)}async function iL(e,t){let n=JSON.stringify({sandbox_session_id:e.sandboxSessionId,...t}),r={"content-type":"application/json",[rf]:e.sandboxSessionId,...it()};if(e.targetOrigin){let t=new URL(iS,e.targetOrigin),i=await fetch(t,{body:n,headers:r,method:"POST"}),a=await i.text();if(rI({method:"POST",requestBody:n,requestHeaders:r,responseBody:a,responseHeaders:i.headers,statusCode:i.status,targetUrl:t}),!i.ok)throw Error(`upload bridge response failed: ${i.status} ${a}`);return{responseBody:a,responseHeaders:Object.fromEntries(i.headers),responsePayload:i$(a)}}let i=new URL(iS,ee),a=await ia({body:n,headers:r,internal:!0,method:"POST",path:iS}),s=await a.text();if(rI({method:"POST",requestBody:n,requestHeaders:r,responseBody:s,responseHeaders:a.headers,statusCode:a.status,targetUrl:i}),!a.ok)throw Error(`upload bridge response failed: ${a.status} ${s}`);return{responseBody:s,responseHeaders:Object.fromEntries(a.headers),responsePayload:i$(s)}}async function iM(e,t){let n;try{n=JSON.parse(t)}catch(e){rd.warn("Sandbox Bridge request parse failed",{reason:e.message});return}let r=Date.now(),i=`bridge-${r}-${++iT}`,a=n.request_id||"",s={id:i,request:n,requestId:a,sandboxSessionId:e.sandboxSessionId,timestamp:r};iN(e,{...s,logIds:ik(n),status:"pending",updatedAtMs:r});let o=await iP(n),l={...o.response,headers:o.responseHeaders,status_text:o.statusText};try{let t=await iL(e,o.response);iN(e,{...s,logIds:ik([n,l,t]),response:l,status:o.response.success?"success":"error",updatedAtMs:Date.now()})}catch(t){throw iN(e,{...s,errorMessage:t instanceof Error?t.message:String(t),logIds:ik([n,l]),response:l,status:"error",updatedAtMs:Date.now()}),t}}async function ij(e,t,n){let r={sandbox_session_id:e.sandboxSessionId},i=new URL(`${iE}?sandbox_session_id=${encodeURIComponent(e.sandboxSessionId)}`,ee),a=(d=e.sandboxSessionId,{accept:"text/event-stream",host:i.host,[rf]:d,...it()});iD({detail:`host=${a.host} session=${iO(e.sandboxSessionId)}`,requestHeaders:a,status:"pending",targetUrl:i}),iR("bridge/events request",{headers:{accept:a.accept,host:a.host,[rf]:iO(e.sandboxSessionId),"x-tt-env":a["x-tt-env"],"x-use-ppe":a["x-use-ppe"]},path:iE,query:r});let s=await ia({headers:a,internal:!0,method:"GET",path:iE,query:r,signal:t});if(iD({detail:`content-type=${s.headers.get("content-type")??""}`,requestHeaders:a,status:s.status,targetUrl:i}),!s.ok||!s.body){let e=await s.text().catch(()=>"");rI({method:"GET",requestBody:void 0,requestHeaders:a,responseBody:e,responseHeaders:s.headers,statusCode:s.status,targetUrl:i}),rd.warn("Sandbox Bridge events request failed",{status:s.status,body:e.slice(0,500)});let t=Error(`Sandbox Bridge SSE failed: ${s.status} ${e}`);throw t.status=s.status,t}rI({method:"GET",requestBody:void 0,requestHeaders:a,responseBody:"",responseHeaders:s.headers,statusCode:s.status,targetUrl:i}),n?.();let o=s.body.getReader(),l=new iv.TextDecoder,p="";for(;!t.aborted;){let{done:t,value:n}=await o.read();if(t){iR("bridge/events stream ended",{session:iO(e.sandboxSessionId)});break}let r=(p+=l.decode(n,{stream:!0})).search(/\r?\n\r?\n/);for(;r>=0;){let t=p.slice(0,r),n=p.slice(r).match(/^\r?\n\r?\n/);p=p.slice(r+(n?.[0].length??2));let o=function(e){let t="message",n=[];for(let r of e.split(/\r?\n/)){if(r.startsWith("event:")){t=r.slice(6).trim();continue}r.startsWith("data:")&&n.push(r.slice(5).trimStart())}return{data:n.join("\n"),name:t}}(t);if(!function(e,t){if("applet0930"!==process.env.DEBUG||iA.has(e.name))return;let n=function(e){try{let t=JSON.parse(e);return"string"==typeof t.request_id?t.request_id:void 0}catch{return}}(e.data);rd.info("Bridge event received",{event:e.name,requestId:n,ppe:eb(t)}),rd.info(`Event detail
41
- ${e.data}`)}(o,a),"bridge_request"===o.name){var d,c=s.headers,u=s.status;rI({method:`EVENT ${o.name}`,requestBody:o.data,requestHeaders:a,responseBody:"",responseHeaders:c,statusCode:u,targetUrl:i}),iM(e,o.data).catch(e=>{rd.warn("Sandbox Bridge request failed",{reason:e.message})})}else if("sandbox_resource_changed"===o.name){let t=function(e){let t=i$(e);if(!t||"object"!=typeof t||Array.isArray(t))return;let n=t.data&&"object"==typeof t.data&&!Array.isArray(t.data)?t.data:void 0,r=n?.resource,i=n?.action,a=n?.resource_id,s=n?.revision;if(("notice"===r||"task"===r)&&("upsert"===i||"remove"===i)&&"string"==typeof a&&a&&("number"==typeof s||"string"==typeof s))return{action:i,eventId:"string"==typeof t.event_id?t.event_id:"",occurredAtMs:"number"==typeof t.occurred_at_ms?t.occurred_at_ms:void 0,resource:r,resourceId:a,revision:s}}(o.data);t?e.onResourceChanged?.(t):rd.warn("Sandbox resource event parse failed")}r=p.search(/\r?\n\r?\n/)}}}async function iB(e,t){let n=0,r=!1;for(;!t.aborted;){try{await ij(e,t,()=>{r=!1,e.onConnectionStatusChange?.("connected")}),n=0}catch(n){if(t.aborted)return;let e=n.status;if(r||(rd.warn("无法接收来自平台服务的请求",{reason:n.message}),r=!0),401===e||403===e||404===e)return}e.onConnectionStatusChange?.("reconnecting"),await (0,v.setTimeout)(iC[Math.min(n,iC.length-1)],void 0,{signal:t}).catch(()=>void 0),n+=1}}let iU=g("node:crypto"),iF=g("node:net"),iW="/__web_sdk_sandbox_bridge_logs",iH="/__web_sdk_sandbox_resource_events",iG="DOUBAO_APPS_SANDBOX_BRIDGE_ORIGINS",iV="/app_developer/api/sandbox/session/business_info/update";function iq(e){if(!e)return!1;try{return te.statSync(e).isFile()}catch{return!1}}async function iJ({body:e,headers:t,method:n,sandboxPath:r,targetOrigin:i,targetUrl:a}){let s=new AbortController,o=setTimeout(()=>s.abort(),3e4);try{return i?await fetch(a,{body:e,headers:t,method:n,signal:s.signal}):await ia({internal:!0,path:r,body:e,headers:t,method:n,signal:s.signal})}catch(e){if(s.signal.aborted)throw Error(`Sandbox session 请求超时(30000ms):${a}`);throw e}finally{clearTimeout(o)}}function iK(e,t){return(e?.[t]??process.env[t])?.trim()??""}function iz(e,t,n,r,i,a){if("applet0930"!==process.env.DEBUG)return;let s=Number(process.hrtime.bigint()-r)/1e6;rd.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:s,headers:i,logId:a})}function iY({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:i,statusCode:a,targetUrl:s}){rI({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:i,statusCode:a,targetUrl:s})}async function iX(e,t,n,r,i){let a,s,o="/app_developer/api/sandbox/session/create",l="POST",p=function(){let e=new Set;for(let t of(process.env[iG]??"").split(",")){let n=t.trim();if(n)try{let t=new URL(n),r=t.hostname.replace(/^\[|\]$/g,"").toLowerCase(),i="localhost"===r||"::1"===r||4===(0,iF.isIP)(r)&&r.startsWith("127.");if("http:"!==t.protocol&&"https:"!==t.protocol||!i)throw Error("only loopback HTTP(S) origins are allowed");e.add(t.origin)}catch(e){throw Error(`${iG} contains an invalid origin: ${n} (${e instanceof Error?e.message:String(e)})`)}}return[...e]}(),d=JSON.stringify({sandbox_project_id:e,manifest:iq(t)?te.readFileSync(t,"utf8"):"",business_templates:iq(n)?te.readFileSync(n,"utf8"):"",...i?{app_id:i}:{},...p.length>0?{bridge_origins:p}:{}}),c={"content-type":"application/json",...it()},u=new URL(o,r??ee),h=process.hrtime.bigint();try{a=await iJ({body:d,headers:c,method:l,sandboxPath:o,targetOrigin:r,targetUrl:u})}catch(t){let e=`创建 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw iz(l,u,502,h,c),iY({method:l,requestBody:d,requestHeaders:c,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:u}),t}let m=a.headers.get(ry)||"",g=await a.text();iz(l,u,a.status,h,c,m),iY({method:l,requestBody:d,requestHeaders:c,responseBody:g,responseHeaders:a.headers,statusCode:a.status,targetUrl:u});try{s=JSON.parse(g||"{}")}catch{throw Error(`创建 Sandbox session 失败:HTTP ${a.status} ${a.statusText||g||"响应不是有效 JSON"}${m?`,log_id=${m}`:""}`)}if(!a.ok||0!==s.code)throw Error(`创建 Sandbox session 失败:${s.message||a.statusText||a.status}${s.log_id||m?`,log_id=${s.log_id||m}`:""}`);let f=s.data?.sandbox_session_id,y=s.data?.sandbox_appid;if(!f||!y)throw Error(`创建 Sandbox session 失败:响应缺少 ${f?"sandbox_appid":"sandbox_session_id"}${s.log_id||m?`,log_id=${s.log_id||m}`:""}`);return{appId:y,sessionId:f}}async function iZ(e,t,n,r,i){try{return await iX(e,t,n,r,i)}catch(e){return rd.warn(`Sandbox 平台服务模拟已跳过:${e instanceof Error?e.message:String(e)}`),{appId:"",sessionId:""}}}function iQ(){return{csrUploaded:!1,phoneNumberUploaded:!1}}function i0(e){return{csrUploaded:!!e,phoneNumberUploaded:!0}}async function i1(e,t){let n,r,i="/app_developer/api/sandbox/session/business_info/get",a="POST",s=JSON.stringify({sandbox_session_id:e}),o={"content-type":"application/json",...it()},l=new URL(i,t??ee),p=process.hrtime.bigint();try{n=await iJ({body:s,headers:o,method:a,sandboxPath:i,targetOrigin:t,targetUrl:l})}catch(e){throw iz(a,l,502,p,o),e}let d=n.headers.get(ry)||"",c=await n.text();iz(a,l,n.status,p,o,d);try{r=JSON.parse(c||"{}")}catch{throw iY({method:a,requestBody:s,requestHeaders:o,responseBody:JSON.stringify({omitted:"invalid business info response"}),responseHeaders:n.headers,statusCode:n.status,targetUrl:l}),Error(`获取 Sandbox session 信息失败:HTTP ${n.status} 响应不是有效 JSON${d?`,log_id=${d}`:""}`)}let u={csrUploaded:!!r.data?.csr_pem?.trim(),phoneNumberUploaded:!!r.data?.phone_num?.trim()};if(iY({method:a,requestBody:s,requestHeaders:o,responseBody:JSON.stringify({code:r.code,data:u,log_id:r.log_id}),responseHeaders:n.headers,statusCode:n.status,targetUrl:l}),!n.ok||void 0!==r.code&&0!==r.code)throw Error(`获取 Sandbox session 信息失败:${r.message||n.statusText||n.status}${r.log_id||d?`,log_id=${r.log_id||d}`:""}`);return u}async function i2(e,t){if(!e)return iQ();try{return await i1(e,t)}catch(e){return rd.warn(`Sandbox session 信息查询已跳过:${e instanceof Error?e.message:String(e)}`),iQ()}}async function i3(e,t,n){let r,i,a="POST",s=JSON.stringify({...e.csrPem?{csr_pem:e.csrPem}:{},phone_num:e.phoneNum,sandbox_session_id:t}),o={"content-type":"application/json",...it(),[rf]:t},l=new URL(iV,n??ee),p=process.hrtime.bigint();try{r=await iJ({body:s,headers:o,method:a,sandboxPath:iV,targetOrigin:n,targetUrl:l})}catch(e){throw iz(a,l,502,p,o),e}let d=r.headers.get(ry)||"",c=await r.text();iz(a,l,r.status,p,o,d),iY({method:a,requestBody:JSON.stringify({...e.csrPem?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]",sandbox_session_id:t}),requestHeaders:o,responseBody:c,responseHeaders:r.headers,statusCode:r.status,targetUrl:l});try{i=JSON.parse(c||"{}")}catch{throw Error(`更新 Sandbox session 信息失败:HTTP ${r.status} 响应不是有效 JSON${d?`,log_id=${d}`:""}`)}if(!r.ok||void 0!==i.code&&0!==i.code)throw Error(`更新 Sandbox session 信息失败:${i.message||r.statusText||r.status}${i.log_id||d?`,log_id=${i.log_id||d}`:""}`)}async function i4(e,t,n,r){if(e&&t.phoneNum&&(!n||t.csrPem))try{return await i3({...t.csrPem?{csrPem:t.csrPem}:{},phoneNum:t.phoneNum},e,r),rd.info("Sandbox business info 已自动上传",{sessionId:e}),i0(t.csrPem)}catch(e){rd.warn(`Sandbox business info 自动上传已跳过:${e instanceof Error?e.message:String(e)}`);return}}async function i9(e,t){let n,r="/app_developer/api/sandbox/session/revoke",i="POST",a=JSON.stringify({sandbox_session_id:e}),s={"content-type":"application/json",...it()},o=new URL(r,t??ee),l=process.hrtime.bigint();try{n=await iJ({body:a,headers:s,method:i,sandboxPath:r,targetOrigin:t,targetUrl:o})}catch(t){let e=`撤回 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw iz(i,o,502,l,s),iY({method:i,requestBody:a,requestHeaders:s,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:o}),t}let p=n.headers.get(ry)||"",d=await n.text();iz(i,o,n.status,l,s,p),iY({method:i,requestBody:a,requestHeaders:s,responseBody:d,responseHeaders:n.headers,statusCode:n.status,targetUrl:o});let c=JSON.parse(d||"{}");if(!n.ok||0!==c.code)throw Error(`撤回 Sandbox session 失败:${c.message||n.statusText||n.status}${c.log_id||p?`,log_id=${c.log_id||p}`:""}`)}async function i5(e){if(e.recreatePromise)return e.recreatePromise;e.recreatePromise=(async()=>{var t;let n=e.sandboxSessionId;n&&await i9(n,e.sandboxTargetOrigin),e.bridge?.close(),e.bridge=void 0;let r=await iX(e.sandboxProjectId,e.simulatorManifestPath,e.simulatorBusinessTemplatesPath,e.sandboxTargetOrigin,e.sandboxSessionAppId),i=r.sessionId,a=!e.sandboxSessionAppId,s=await i4(i,e.businessInfoInput,a,e.sandboxTargetOrigin)??await i2(i,e.sandboxTargetOrigin);return e.sandboxAppId=r.appId,e.sandboxSessionId=i,e.businessInfo=s,(t=e).resourceConnectionStatus="connecting",t.resourceEventSequence=0,t.resourceEvents.length=0,t.resourceGeneration+=1,i8(t),e.bridge=i6(e,i),rd.info("Sandbox session 已重建",{sessionId:i}),{...r,businessInfoUploaded:s.phoneNumberUploaded&&(!a||s.csrUploaded)}})();try{return await e.recreatePromise}finally{e.recreatePromise=void 0}}function i8(e){e.resourceEventsUpdatedAtMs=Math.max(Date.now(),e.resourceEventsUpdatedAtMs+1)}function i6(e,t){var n={onConnectionStatusChange:t=>{e.resourceConnectionStatus!==t&&(e.resourceConnectionStatus=t,i8(e))},onLog:t=>{let n=e.bridgeLogs.findIndex(e=>e.id===t.id);n>=0?e.bridgeLogs[n]=t:(e.bridgeLogs.push(t),e.bridgeLogs.length>200&&e.bridgeLogs.splice(0,e.bridgeLogs.length-200)),e.bridgeLogsUpdatedAtMs=Math.max(Date.now(),e.bridgeLogsUpdatedAtMs+1)},onResourceChanged:t=>{e.resourceEvents.push({...t,sequence:++e.resourceEventSequence}),e.resourceEvents.length>200&&e.resourceEvents.splice(0,e.resourceEvents.length-200),i8(e)},sandboxSessionId:t,targetOrigin:e.sandboxTargetOrigin};if(!n.sandboxSessionId)return void rd.warn("Sandbox Bridge skipped: missing sandbox session id");let r=new AbortController;return iR("start sandbox bridge",{session:iO(n.sandboxSessionId)}),n.onConnectionStatusChange?.("connecting"),iB(n,r.signal),{close:()=>r.abort()}}async function i7(e,t,n){if("POST"!==e.method)return void rS(t,405,"Method not allowed");if(!n)return void rS(t,503,"Sandbox session is not initialized");try{let r=await rA(e,1048576);if(r){let e=JSON.parse(r);if(void 0!==e.csrPem&&"string"!=typeof e.csrPem||"string"!=typeof e.phoneNum)return void rS(t,400,"Invalid Sandbox business info");n.businessInfoInput={..."string"==typeof e.csrPem&&e.csrPem.trim()?{csrPem:e.csrPem.trim()}:{},phoneNum:e.phoneNum.trim()}}let i=await i5(n);rx(t,200,{code:0,data:{sandbox_appid:i.appId,business_info_uploaded:i.businessInfoUploaded,sandbox_session_id:i.sessionId},message:"ok"})}catch(e){rS(t,500,e.message)}}function ae(e){let t=e.appId?.trim(),n=t&&!t.startsWith("doubao-sandbox-app-")?t:void 0,r=function(e){let t=tt.resolve(e??process.cwd()),n=t;try{n=te.realpathSync.native(t)}catch{}return(0,iU.createHash)("sha256").update(n).digest("hex")}(e.appDirectory),i=function(e,t){let n=iK(e,"DOUBAO_SANDBOX_PHONE_NUM"),r=iK(e,"DOUBAO_SANDBOX_CSR_FILE"),i=function(e,t){if(!e)return;let n=tt.isAbsolute(e)?e:tt.resolve(t??process.cwd(),e);return iq(n)?n:void 0}(r,t),a="";if(r&&!i)rd.warn(`Sandbox CSR 文件不存在:${r}`);else if(i)try{a=te.readFileSync(i,"utf8").trim()}catch(e){rd.warn(`Sandbox CSR 文件读取失败:${e instanceof Error?e.message:String(e)}`)}return{...n?{phoneNum:n}:{},...a?{csrPem:a}:{}}}(e.env,e.appDirectory),a=`${i.phoneNum??""}\0${i.csrPem??""}`;return{businessInfoInput:i,businessInfoInputKey:a,businessTemplatesPath:e.businessTemplatesPath,key:JSON.stringify([a,r,n,e.targetOrigin]),manifestPath:e.manifestPath,projectId:r,sessionAppId:n,targetOrigin:e.targetOrigin}}class at{configKey;state;constructor(e,t){this.state=e,this.configKey=t}static async start(e){let t=ae(e),n=await iZ(t.projectId,t.manifestPath,t.businessTemplatesPath,t.targetOrigin,t.sessionAppId),r=!t.sessionAppId,i={bridgeLogs:[],bridgeLogsUpdatedAtMs:0,businessInfo:await i4(n.sessionId,t.businessInfoInput,r,t.targetOrigin)??await i2(n.sessionId,t.targetOrigin),businessInfoInput:t.businessInfoInput,resourceConnectionStatus:"connecting",resourceEventSequence:0,resourceEvents:[],resourceEventsUpdatedAtMs:0,resourceGeneration:1,sandboxAppId:n.appId,sandboxProjectId:t.projectId,sandboxSessionAppId:t.sessionAppId,sandboxSessionId:n.sessionId,sandboxTargetOrigin:t.targetOrigin,simulatorBusinessTemplatesPath:t.businessTemplatesPath,simulatorManifestPath:t.manifestPath},a=new at(i,t.key);return i.bridge=n.sessionId?i6(i,n.sessionId):void 0,a}get sessionId(){return this.state.sandboxSessionId}close(){this.state.bridge?.close()}matches(e){return this.configKey===ae(e).key}getDebugContext(){var e;let t;return{fileSystemNamespace:(t=(e=this.state).sandboxSessionAppId?`real-app\0${e.sandboxSessionAppId}`:`virtual-app\0${e.sandboxAppId}\0${e.sandboxProjectId}`,`sandbox-v1:${(0,iU.createHash)("sha256").update(t).digest("hex")}`),sandboxSessionAvailable:!!this.state.sandboxSessionId,sandboxCsrRequired:!this.state.sandboxSessionAppId,sandboxCsrUploaded:this.state.businessInfo.csrUploaded,sandboxPhoneNumberUploaded:this.state.businessInfo.phoneNumberUploaded,sandboxBridgeLogsEndpoint:iW,sandboxResourceEventsEndpoint:iH,...this.state.businessInfoInput.csrPem?{sandboxCsrPem:this.state.businessInfoInput.csrPem}:{},...this.state.businessInfoInput.phoneNum?{sandboxPhoneNum:this.state.businessInfoInput.phoneNum}:{}}}handleRequest(e,t){var n,r;let i=rb(e)?.pathname;return i===iW?(n=this.state,"GET"!==e.method&&"DELETE"!==e.method?rS(t,405,"Method not allowed"):("DELETE"===e.method&&n&&(n.bridgeLogs.length=0,n.bridgeLogsUpdatedAtMs=Math.max(Date.now(),n.bridgeLogsUpdatedAtMs+1)),rx(t,200,{logs:n?.bridgeLogs??[],updatedAtMs:n?.bridgeLogsUpdatedAtMs??0},{"Cache-Control":"no-cache"})),!0):i===iH?(r=this.state,"GET"!==e.method?rS(t,405,"Method not allowed"):rx(t,200,{connectionStatus:r?.resourceConnectionStatus??"connecting",events:r?.resourceEvents??[],generation:r?.resourceGeneration??0,updatedAtMs:r?.resourceEventsUpdatedAtMs??0},{"Cache-Control":"no-cache"}),!0):rb(e)?.pathname==="/__web_sdk_sandbox_proxy__"?(iw(e,t,{onBusinessInfoUpdated:e=>{this.state.businessInfo=i0(e?.csrPem),e&&(this.state.businessInfoInput=e)},sandboxAppId:this.state.sandboxAppId,sandboxSessionId:this.state.sandboxSessionId,targetOrigin:this.state.sandboxTargetOrigin}),!0):"/__web_sdk_sandbox_session_recreate__"===i&&(i7(e,t,this.state),!0)}}let an=g("node:stream"),ar="/app_developer/api",ai=new Set([`${ar}/simulator/chat`,`${ar}/simulator/tool/report`]),aa={"Access-Control-Expose-Headers":ry};async function as(e,t,n,r){let i=new AbortController,a=()=>i.abort();e.once("aborted",a),e.socket.once("close",a),t.once("close",()=>{t.writableEnded||a()});try{let a=e.method??"GET",s=process.hrtime.bigint(),o=ac(e,n,r),l="GET"===a||"HEAD"===a?void 0:await rA(e,0xa00000),p=await ia({internal:!0,path:`${n.pathname}${n.search}`,method:a,body:l,headers:o,signal:i.signal});if(ad(a,n,p.status,s,o,p.headers.get(ry)??void 0),t.destroyed||t.writableEnded)return void p.body?.cancel().catch(()=>void 0);await al({method:a,requestBody:l,requestHeaders:o,requestUrl:n,response:t,upstreamResponse:p})}catch(e){if(t.destroyed||t.writableEnded||i.signal.aborted)return;rS(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,aa)}}async function ao(e,t,n,r,i){let a=new AbortController,s=()=>a.abort();e.once("aborted",s),e.socket.once("close",s),t.once("close",()=>{t.writableEnded||s()});try{let s=e.method??"GET",o=process.hrtime.bigint(),l="GET"===s||"HEAD"===s?void 0:await rA(e,0xa00000),p=ac(e,n,i,r),d=await fetch(r,{body:l,headers:p,method:s,signal:a.signal});if(ad(s,n,d.status,o,p,d.headers.get(ry)??void 0),t.destroyed||t.writableEnded)return void d.body?.cancel().catch(()=>void 0);await al({method:s,requestBody:l,requestHeaders:p,requestUrl:n,response:t,upstreamResponse:d})}catch(e){if(t.destroyed||t.writableEnded||a.signal.aborted)return;rS(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,aa)}}async function al({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:i,upstreamResponse:a}){var s,o;if(rv(i,aa),i.writeHead(a.status,rw(Object.fromEntries(a.headers),[ry])),s=r,o=a,s.pathname===`${ar}/simulator/chat`||o.headers.get("content-type")?.toLowerCase().includes("text/event-stream")===!0)return void await ap({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:i,upstreamResponse:a});if("applet0930"!==process.env.DEBUG)return a.body?void await (0,f.pipeline)(an.Readable.fromWeb(a.body),i):void i.end();let l=await rC(a);rI({method:e,requestBody:t,requestHeaders:n,responseBody:l,responseHeaders:a.headers,statusCode:a.status,targetUrl:r}),i.end(l)}async function ap({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:i,upstreamResponse:a}){if(!a.body){rI({method:e,requestBody:t,requestHeaders:n,responseBody:"",responseHeaders:a.headers,statusCode:a.status,targetUrl:r}),i.end();return}let s=an.Readable.fromWeb(a.body);if("applet0930"!==process.env.DEBUG)return void await (0,f.pipeline)(s,i);rI({method:e,requestBody:t,requestHeaders:n,responseBody:"(event stream)",responseHeaders:a.headers,statusCode:a.status,targetUrl:r});let o=new an.Transform({transform(e,t,n){let i;try{i=String(e).split("\n\n").filter(Boolean)}catch(t){return rd.error(`failed to decode event stream chunk: ${t?.toString()}`),n(null,e)}for(let e of i)rd.info(`Event from ${r.pathname}${r.search}
42
- ${e}`);n(null,e)}});await (0,f.pipeline)(s,o,i)}function ad(e,t,n,r,i,a){if("applet0930"!==process.env.DEBUG)return;let s=Number(process.hrtime.bigint()-r)/1e6;rd.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:s,headers:i,logId:a})}function ac(e,t,n,r=new URL(`${t.pathname}${t.search}`,ee)){return Object.fromEntries(Object.entries(r_(e.headers,r,{...it(),...n?{[rf]:n}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]))}let au="manifest.yaml",ah="SKILL.md",am=tt.join("skill",ah),ag=tt.join(".dbx","config.json");function af(e){if(!e)return!1;try{return te.statSync(e).isFile()}catch{return!1}}function ay(e,t){if(!e)return;let n=tt.isAbsolute(e)?e:tt.resolve(t??process.cwd(),e);return af(n)?n:void 0}function ab(e,t){if(e&&t)return tt.relative(t,e).split(tt.sep).join("/")||"."}function a_(e){let t=tt.resolve(e);for(;;){let e;if(e=t,af(tt.join(e,ag)))return t;let n=tt.dirname(t);if(n===t)break;t=n}}function aw(e){return[...new Set(e.filter(Boolean))].find(af)}function av(e){if(!e)return!1;try{return te.statSync(e).isDirectory()}catch{return!1}}function aE(e){return af(e)?e:av(e)?aw([tt.join(e,ah)]):void 0}function aS(e,t){try{if(t){if(!t)return;let n=e?a_(e):void 0;return[...new Set((tt.isAbsolute(t)?[void 0]:[e,n,process.cwd()]).map(e=>tt.isAbsolute(t)?t:tt.resolve(e??process.cwd(),t)))].map(aE).find(Boolean)}if(!e)return;let n=a_(e);return aw([n?tt.join(n,am):void 0,tt.join(e,am),tt.join(process.cwd(),am)])}catch{return}}class ax{appDirectory;businessTemplatesPath;manifestPath;simulatorSkillPath;sourceKey;constructor(e){var t,n,r;this.appDirectory=e.appDirectory,this.manifestPath=e.manifestPath?ay(e.manifestPath,e.appDirectory):function(e){if(!e)return;let t=a_(e);return aw([t?tt.join(t,au):void 0,tt.join(e,au),tt.join(process.cwd(),au)])}(e.appDirectory),this.businessTemplatesPath=(t=this.manifestPath,n=e.businessTemplatesPath,r=e.appDirectory,n?ay(n,r):t?ay(tt.join(tt.dirname(t),"business-templates.yaml"),r):void 0),this.simulatorSkillPath=e.skillPath,this.sourceKey=JSON.stringify([this.appDirectory,this.businessTemplatesPath,this.manifestPath,this.simulatorSkillPath])}matches(e){return this.sourceKey===new ax(e).sourceKey}getDebugContext(){let e=aS(this.appDirectory,this.simulatorSkillPath),t=ab(this.businessTemplatesPath,this.appDirectory),n=ab(this.manifestPath,this.appDirectory),r=ab(e,this.appDirectory);return{...this.manifestPath?{simulatorManifestOriginalUrl:this.manifestPath,...n?{simulatorManifestRelativePath:n}:{}}:{},...this.businessTemplatesPath?{simulatorBusinessTemplatesOriginalUrl:this.businessTemplatesPath,...t?{simulatorBusinessTemplatesRelativePath:t}:{}}:{},...e?{simulatorSkillOriginalUrl:e,...r?{simulatorSkillRelativePath:r}:{}}:{}}}handleRequest(e,t){let n=rb(e)?.pathname;return"/__simulator_manifest/manifest.yaml"===n?(!function(e,t){if(!af(t))return rS(e,404,"Simulator manifest not found");let n=te.statSync(t);rv(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":n.size,"Content-Type":"application/yaml; charset=utf-8"}),rE(e,t)}(t,this.manifestPath),!0):"/__simulator_skill/skill.md"===n&&(!function(e,t,n){let r,i=aS(t,n);try{r=function(e){var t;let n;if(af(e))return[te.readFileSync(e,"utf8").trim(),...(t=tt.dirname(e),n=tt.join(t,"references"),!av(n)?[]:(function e(t){let n;try{n=te.readdirSync(t,{withFileTypes:!0})}catch{return[]}let r=[];for(let i of n){let n=tt.join(t,i.name);if(i.isDirectory()){r.push(...e(n));continue}i.isFile()&&[".md",".markdown",".txt"].includes(tt.extname(n).toLowerCase())&&r.push(n)}return r})(n).sort((e,t)=>tt.relative(n,e).localeCompare(tt.relative(n,t))).flatMap(e=>{let n=te.readFileSync(e,"utf8").trim();if(!n)return[];let r=tt.relative(t,e).split(tt.sep).join("/");return[`<!-- local-skill-reference:${r} -->
43
- ${n}`]}))].filter(Boolean).join("\n\n---\n\n")}(i)}catch{r=void 0}void 0===r?rS(e,404,"Simulator skill not found"):(rv(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":Buffer.byteLength(r),"Content-Type":"text/markdown; charset=utf-8"}),e.end(r))}(t,this.appDirectory,this.simulatorSkillPath),!0)}}let aA="/__web_artifacts",aC="/wsd",aT="/__web_view_proxy__",aO="Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",aI="__wsd_webview_target__";function aP(e){return({".css":"text/css; charset=utf-8",".html":"text/html; charset=utf-8",".js":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".map":"application/json; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".svg":"image/svg+xml",".wasm":"application/wasm",".yaml":"application/yaml; charset=utf-8",".yml":"application/yaml; charset=utf-8"})[tt.extname(e).toLowerCase()]??"application/octet-stream"}function ak(e){if(!e)return!1;try{return te.statSync(e).isFile()}catch{return!1}}function aN(e){if(!e)throw Error("url 必须为非空字符串");let t=new URL(e);if("http:"!==t.protocol&&"https:"!==t.protocol)throw Error(`不支持的请求协议:${t.protocol}`);return t}function a$(e,t){let n=e.trim();if(!n||n.startsWith("#"))return e;try{let r=new URL(n,t);if("http:"!==r.protocol&&"https:"!==r.protocol)return e;return`${aT}?url=${encodeURIComponent(r.toString())}`}catch{return e}}function aD(e,t="/"){let n,r,i=new URL(t,"http://localhost");try{n=decodeURIComponent(i.pathname)}catch{return}let a="/"===n||n.endsWith("/")?`${n}index.html`:n,s=tt.join(e,a);if(""===(r=tt.relative(e,s))||!r.startsWith("..")&&!tt.isAbsolute(r))return s}async function aR(e,t){if("POST"!==e.method)return void rx(t,405,{message:"Method Not Allowed"});try{var n,r;let i,a,s,o=JSON.parse(await rA(e,0xa00000)),l=aN(o.url),p=(o.method??"GET").toUpperCase(),d=(n=o.header,a=new Headers(n??{"content-type":"application/json"}),["connection","content-length","host","origin","referer"].forEach(e=>a.delete(e)),a),c=await fetch(l,{body:"GET"!==p&&"HEAD"!==p?function(e,t){var n;let r=e.data;if(null==r)return;if("base64"===e.dataEncoding&&"string"==typeof r){let e;return e=new ArrayBuffer((n=Buffer.from(r,"base64")).byteLength),new Uint8Array(e).set(n),e}if("string"==typeof r)return r;let i=t.get("content-type")?.toLowerCase()??"";if(i.includes("application/x-www-form-urlencoded")&&"object"==typeof r){let e=new URLSearchParams;return Object.entries(r).forEach(([t,n])=>{e.set(t,String(n))}),e.toString()}return i.includes("application/json")||"object"==typeof r?JSON.stringify(r):String(r)}(o,d):void 0,headers:d,method:p}),u="arraybuffer"===o.dataType||"arraybuffer"===o.responseType;if(u)i=Buffer.from(await c.arrayBuffer()).toString("base64");else{let e=await c.text();i="string"===o.dataType||0===e.length?e:JSON.parse(e)}rx(t,200,{data:i,dataEncoding:u?"base64":void 0,header:(r=c.headers,s={},r.forEach((e,t)=>{s[t]=e}),s),statusCode:c.status})}catch(e){rx(t,500,{message:e instanceof Error?e.message:String(e)})}}async function aL(e,t){if("GET"!==e.method&&"HEAD"!==e.method)return void rS(t,405,"Method Not Allowed");let n=rb(e);try{var r;let i=aN(n?.searchParams.get("url")??void 0),a=await fetch(i,{headers:{"user-agent":aO,..."string"==typeof e.headers.accept?{accept:e.headers.accept}:{},..."string"==typeof e.headers["accept-language"]?{"accept-language":e.headers["accept-language"]}:{}},method:e.method}),s=a.url?new URL(a.url):i,o=a.headers.get("content-type")??"",l=rw(Object.fromEntries(a.headers));if(l["cache-control"]="no-cache",delete l["content-encoding"],delete l["content-length"],"HEAD"===e.method||!o.includes("text/html")&&!o.includes("text/css")){let n="HEAD"===e.method?void 0:Buffer.from(await a.arrayBuffer());rv(t),t.writeHead(a.status,{...l,...n?{"content-length":n.byteLength}:{}}),t.end(n);return}let p=(r=await a.text(),o.includes("text/html")?(function(e,t){let n,r=(n=`${t.pathname}${t.search}${t.hash}`,`<script>(function () {
44
- if (window === window.parent) { return; }
45
- var originalUrl = ${JSON.stringify(t.toString())};
46
- var proxyPath = ${JSON.stringify(aT)};
47
- function createProxyUrl(value) {
48
- try {
49
- var url = new URL(value, originalUrl);
50
- if (url.protocol !== 'http:' && url.protocol !== 'https:') { return null; }
51
- return proxyPath + '?url=' + encodeURIComponent(url.toString());
52
- } catch (_) {
53
- return null;
54
- }
55
- }
56
- function isProxyUrl(value) {
57
- try {
58
- var url = new URL(value, window.location.href);
59
- return url.origin === window.location.origin && url.pathname === proxyPath;
60
- } catch (_) {
61
- return false;
62
- }
63
- }
64
- function rewriteNavigationAttribute(element, attribute) {
65
- var value = element.getAttribute(attribute);
66
- if (!value || value.charAt(0) === '#' || isProxyUrl(value)) { return; }
67
- var proxyUrl = createProxyUrl(value);
68
- if (proxyUrl) { element.setAttribute(attribute, proxyUrl); }
69
- }
70
- document.addEventListener('click', function (event) {
71
- var target = event.target;
72
- var anchor = target && typeof target.closest === 'function' ? target.closest('a[href]') : null;
73
- if (anchor) { rewriteNavigationAttribute(anchor, 'href'); }
74
- }, true);
75
- document.addEventListener('submit', function (event) {
76
- var form = event.target;
77
- if (form && typeof form.getAttribute === 'function') {
78
- rewriteNavigationAttribute(form, 'action');
79
- }
80
- }, true);
81
- var navigationApi = window.navigation;
82
- if (navigationApi && typeof navigationApi.addEventListener === 'function') {
83
- navigationApi.addEventListener('navigate', function (event) {
84
- if (!event.cancelable) { return; }
85
- var destination;
86
- try {
87
- destination = new URL(event.destination.url);
88
- } catch (_) {
89
- return;
90
- }
91
- if (destination.origin === window.location.origin) { return; }
92
- var proxyUrl = createProxyUrl(destination.toString());
93
- if (!proxyUrl) { return; }
94
- event.preventDefault();
95
- if (event.navigationType === 'replace') {
96
- window.location.replace(proxyUrl);
97
- } else {
98
- window.location.assign(proxyUrl);
99
- }
100
- });
101
- }
102
- try { history.replaceState(null, '', ${JSON.stringify(n)}); } catch (_) {}
103
- try {
104
- Object.defineProperty(Navigator.prototype, 'userAgent', {
105
- get: function () { return ${JSON.stringify(aO)}; },
106
- configurable: true
107
- });
108
- Object.defineProperty(Navigator.prototype, 'platform', {
109
- get: function () { return 'iPhone'; },
110
- configurable: true
111
- });
112
- } catch (_) {}
113
- if (window.AppletBridgeModule) { return; }
114
- window.AppletBridgeModule = {
115
- postMessage: function (message) {
116
- var payload = typeof message === 'string' ? message : JSON.stringify(message);
117
- try { window.parent.postMessage(payload, '*'); } catch (_) {}
118
- return Promise.resolve({});
119
- },
120
- postMessageSync: function () { return undefined; }
121
- };
122
- })();</script>`),i=/<head[^>]*>/i.exec(e);if(i){let t=i.index+i[0].length;return`${e.slice(0,t)}${r}${e.slice(t)}`}return`${r}${e}`})(r,s).replace(/\b(src|href|action|poster|manifest)=(["'])([^"']*)\2/gi,(e,t,n,r)=>`${t}=${n}${a$(r,s)}${n}`).replace(/\b(srcset|imagesrcset)=(["'])([^"']*)\2/gi,(e,t,n,r)=>`${t}=${n}${/\bdata:/i.test(r)?r:r.split(",").map(e=>{let t=e.trim();if(!t)return e;let[n,...r]=t.split(/\s+/);return[a$(n,s),...r].join(" ")}).join(", ")}${n}`):o.includes("text/css")?r.replace(/url\((["']?)([^"')]+)\1\)/gi,(e,t,n)=>{let r=a$(n,s);return`url(${t}${r}${t})`}).replace(/@import\s+(["'])([^"']+)\1/gi,(e,t,n)=>{let r=a$(n,s);return`@import ${t}${r}${t}`}):r);rv(t),t.writeHead(a.status,{...l,...o.includes("text/html")?{"set-cookie":`${aI}=${encodeURIComponent(s.origin)}; Path=/; SameSite=Lax; HttpOnly`}:{},"content-length":Buffer.byteLength(p)}),t.end(p)}catch(e){rS(t,502,`代理 web-view 页面失败: ${e instanceof Error?e.message:String(e)}`)}}let aM=g("node:child_process");async function aj(e){let{command:t,args:n}="darwin"===process.platform?{command:"open",args:[e]}:"win32"===process.platform?{command:"cmd",args:["/c","start","",e]}:{command:"xdg-open",args:[e]};await new Promise((e,r)=>{let i=(0,aM.spawn)(t,n,{detached:!0,stdio:"ignore"});i.once("error",r),i.once("spawn",()=>{i.unref(),e()})})}async function aB(e,t=aj){let n=new URL(e).toString();try{await t(n)}catch(e){rd.error("打开 Web 模拟器失败",{error:e}),rd.info("请手动打开 Web 模拟器(本地)",{url:n})}return n}async function aU(e,t){await new Promise((n,r)=>{let i=t=>{e.off("listening",a),r(t)},a=()=>{e.off("error",i),n()};e.once("error",i),e.once("listening",a),e.listen(t,"127.0.0.1")})}async function aF(e){let t=await z(9e3),n=rc.createServer(function({artifactOrigin:e,debugScenes:t,distPath:n,getWidgetViewDataTemplates:r,mcpEndpoint:i,mcpHeaders:a,sandboxRuntime:s,simulatorAssets:o,simulatorTargetOrigin:l}){var p;let d,c,u=(p={artifactOrigin:e,debugScenes:t,getWidgetViewDataTemplates:r,mcpEndpoint:i,sandboxRuntime:s,simulatorAssets:o},(e,t)=>{let n=rb(e)?.pathname;if("/__web_sdk_debug_context"===n){let n,r;return r="string"==typeof(n=e.headers.host)&&n?`http://${n}`:void 0,rx(t,200,{homeDir:nE.homedir(),...p.simulatorAssets.appDirectory?{launchDir:p.simulatorAssets.appDirectory}:{},debugScenesEndpoint:r1,widgetViewDataTemplatesEndpoint:r2,debuggerMcpEndpoint:r?new URL(rQ,r).toString():rQ,manifestOriginalUrl:new URL("/base/manifest.json",p.artifactOrigin).toString(),...p.mcpEndpoint?{mcpOriginalEndpoint:p.mcpEndpoint}:{},...p.simulatorAssets.getDebugContext(),...p.sandboxRuntime.getDebugContext()},r3),!0}return n===r1?(rx(t,200,p.debugScenes??{errors:[],scenes:[]},r3),!0):n===r2&&(r4(t,p.getWidgetViewDataTemplates),!0)}),h=(c=new rV(d={}),(e,t)=>rb(e)?.pathname==="/__agent_trace"?(r5(e,t,d,c),!0):rb(e)?.pathname==="/__wsd_control_events"?(!function(e,t,n){if("GET"!==e.method)return rx(t,405,{error:"Method not allowed"});let r=rb(e)?.searchParams.get("clientId")?.trim();r?(rv(t,{"Cache-Control":"no-cache, no-transform",Connection:"keep-alive"}),t.writeHead(200,{"Content-Type":"text/event-stream; charset=utf-8"}),t.write(": connected\n\n"),n.registerClient(r,t)):rx(t,400,{error:"clientId is required"})}(e,t,c),!0):rb(e)?.pathname==="/__wsd_control_results"?(rq(e,t,c),!0):rb(e)?.pathname===rQ&&(r0(e,t,d,c),!0)),m=(t,r)=>{let i=rb(t)?.pathname??"/";if(i.startsWith(aA))return void function(e,t,n){let r=rb(e);if(!r)return rS(t,400,"Bad request");let i=r.pathname.replace(aA,"")||"/",a=new URL(`${i}${r.search}`,n);rP(e,t,{createResponseHeaders:e=>({...rw(e),"cache-control":"no-cache"}),errorMessage:"代理 Web 产物失败",requestHeaders:r_(e.headers,a),targetUrl:a})}(t,r,e);if(i===aC||i.startsWith(`${aC}/`))return void function(e,t,n){let r=n.slice(`${aC}/`.length),i=tt.join(t,"wsd",r);if(!r||r!==tt.basename(r)||!ak(i))return rS(e,404,"Not found");let a=te.statSync(i);rv(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":a.size,"Content-Type":aP(i)}),rE(e,i)}(r,n,i);if("/__web_sdk_request_proxy__"===i)return void aR(t,r);if(i===aT)return void aL(t,r);if(i.startsWith("/__doubao_web_sdk_native_modules"))return void function(e,t,n){let r=aD(n,e.url);if(!r)return rS(t,403,"Forbidden");if(!ak(r))return rS(t,404,"Not found");let i=te.statSync(r);rv(t),t.writeHead(200,{"Content-Length":i.size,"Content-Type":aP(r)}),rE(t,r)}(t,r,n);if(i.startsWith("/__"))return void rS(r,404,"Debugger resource not found");let a=aD(n,t.url),s=function(e){let t=e.headers.referer;if("string"==typeof t)try{let e=new URL(t);if(e.pathname!==aT)return;let n=e.searchParams.get("url");return n?new URL(n).origin:void 0}catch{return}}(t)??function(e){let t=e.headers.cookie;if("string"!=typeof t)return;let n=t.split(";").map(e=>e.trim()).find(e=>e.startsWith(`${aI}=`));if(n)try{let e=new URL(decodeURIComponent(n.slice(aI.length+1)));return"http:"===e.protocol||"https:"===e.protocol?e.origin:void 0}catch{return}}(t);s&&!(a&&ak(a))?function(e,t,n){let r,i=rb(e);try{r=new URL(`${i?.pathname??"/"}${i?.search??""}`,n)}catch{rS(t,400,"Invalid web-view runtime request target");return}if("GET"===e.method&&String(e.headers.accept??"").includes("text/html")){rv(t),t.writeHead(302,{location:`${aT}?url=${encodeURIComponent(r.toString())}`}),t.end();return}rP(e,t,{createResponseHeaders:e=>({...rw(e),"cache-control":"no-cache"}),errorMessage:"代理 web-view 页面请求失败",requestHeaders:{...r_(e.headers,r),"user-agent":aO},targetUrl:r})}(t,r,s):function(e,t,n){let r=aD(n,e.url);if(!r)return rS(t,403,"Forbidden");te.existsSync(r)||(r=tt.join(n,"index.html"));let i=te.statSync(r);i.isFile()?(rv(t),t.writeHead(200,{"Content-Length":i.size,"Content-Type":aP(r)}),rE(t,r)):rS(t,404,"Not found")}(t,r,n)};return(e,t)=>{let n,r;u(e,t)||h(e,t)||((n=rb(e))&&(n.pathname===ar||n.pathname.startsWith(`${ar}/`))?function(e,t,n={}){let r=rb(e);if(!r)return rS(t,400,"请求无效",aa);if(!ai.has(r.pathname))return rS(t,404,"未找到模拟器接口",aa);let i=n.targetOrigin??ee,a=new URL(`${r.pathname}${r.search}`,i);n.targetOrigin?ao(e,t,r,a,n.sandboxSessionId):as(e,t,r,n.sandboxSessionId)}(e,t,{sandboxSessionId:s.sessionId,targetOrigin:l}):!s.handleRequest(e,t)&&((r=rb(e),r?.pathname==="/__mcp_proxy")?function(e,t,n={}){let r=rb(e),i=et(n.targetEndpoint);if(!r)return rS(t,400,"Bad request");if(!i)return rS(t,404,"MCP endpoint not configured");let a=new URL(i);for(let[e,t]of new URLSearchParams(r.search))a.searchParams.append(e,t);rP(e,t,{createResponseHeaders:rw,errorMessage:"代理 MCP 请求失败",requestHeaders:r_(e.headers,a,{...it(),...n.headers}),targetUrl:a})}(e,t,{headers:a,targetEndpoint:i}):o.handleRequest(e,t)||m(e,t)))}}(e));return await aU(n,t),{origin:`http://127.0.0.1:${t}`,server:n}}async function aW(e){e.listening&&await new Promise((t,n)=>{e.close(e=>{e?n(e):t()}),e.closeIdleConnections(),e.closeAllConnections()})}async function aH(){if(!r)return;let{sandboxRuntime:e,server:t}=r;r=void 0,e.close(),await aW(t)}async function aG(e){let t;try{var n,i;let a=et(e.mcpEndpoint),{targetOrigin:s,...o}=e.simulator??{},l={appDirectory:e.appDirectory,...o},p=new ax(l),d={appDirectory:e.appDirectory,appId:e.appId,businessTemplatesPath:p.businessTemplatesPath,env:e.env,manifestPath:p.manifestPath,targetOrigin:e.sandboxTargetOrigin};if(n=r,n?.server.listening){if(r?.artifactOrigin===e.artifactOrigin&&r.mcpEndpoint===a&&r.simulatorAssets.matches(l)&&r.getWidgetViewDataTemplates===e.getWidgetViewDataTemplates&&r.sandboxRuntime.matches(d)&&r.simulatorTargetOrigin===s)return await aB(r.origin,e.openBrowser),r;await aH()}let c={distPath:i=e.debuggerDistPath,indexPath:tt.join(i,"index.html")};if(!te.existsSync(c.indexPath))return void rd.error("Web 模拟器资源缺失,请联系框架开发者。");let u=await at.start(d);t=u;let{origin:h,server:m}=await aF({artifactOrigin:e.artifactOrigin,debugScenes:e.debugScenes,distPath:c.distPath,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:a,mcpHeaders:e.mcpHeaders,sandboxRuntime:u,simulatorAssets:p,simulatorTargetOrigin:s}),g=()=>{m.close()};m.once("close",()=>{process.off("exit",g)}),process.once("exit",g);let f=await aB(h,e.openBrowser);return r={artifactOrigin:e.artifactOrigin,close:()=>aH(),debuggerMcpEndpoint:new URL(rQ,h).toString(),getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:a,origin:h,sandboxRuntime:u,get sandboxSessionId(){return u.sessionId},server:m,simulatorAssets:p,simulatorTargetOrigin:s,url:f}}catch(e){t?.close(),rd.error("启动 Web SDK 调试器失败",{error:e});return}}async function aV(e,t){let n={errors:[],scenes:[]};if(!e)return n;for(let r of(await t$(e)).sort((e,t)=>e.name.localeCompare(t.name))){let e=await tD(r.path);e&&"tool"!==e.type&&("widget"===e.type?t.widgetIds.has(e.id):e.id?t.pageIds.has(e.id):!!e.url&&0===K(X(e.url,B(e))).length)&&n.scenes.push({content:e,name:r.name})}return n}async function aq(e,t){let n=e.metadata.getData(),r=e.pages,i=e.widgets,a=await aV(e.appDirectory,{pageIds:new Set(Object.keys(r).map(e=>nm(r,n.pages,e))),widgetIds:new Set(Object.keys(i).map(e=>nm(i,n.widgets,e)))});return aG({...t,debuggerDistPath:t.debuggerDistPath??U(),debugScenes:a,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates})}function aJ(e){return!!(e&&!/<%=?\s*appId\s*%>/.test(e))}function aK(e){if(!(e instanceof Error))return!1;try{let t=JSON.parse(e.message);return t?.code===0x2fb1799}catch{return!1}}async function az(e){aJ(e.appId)&&(await e.getCachedLoginCookie().catch(()=>void 0)||tT.warn(e.appId.startsWith("db_")?"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `dbx auth login` 后重新启动开发服务。":"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `npx doubao login` 后重新启动开发服务。"))}let aY=e=>S.bgHex("#9873b9")(S.italic(S.black(` ${e} `))),aX=e=>S.bgBlueBright(S.italic(S.black(` ${e} `))),aZ=e=>S.bold(S.blueBright(e)),aQ=[{command:"d",description:"选择调试场景 / pages / widgets"},{command:"web",description:"打开 Web 模拟器"}],a0={page:"页面",scene:"调试场景",widget:"组件"};function a1(e){console.log(` ${aZ(e.command.padEnd(21))} ${S.gray(`- ${e.description}`)}`)}async function a2(e){let t=q(e);if(0!==t.length)return await Q.prompt(t.map(([e,t])=>({type:"input",name:e,message:`请输入调试场景变量 "${e}" 的值:`,default:t??void 0})))}async function a3({matchedScene:e,appId:t,driver:n}){let r=await tD(e.path);if(!r)return;let i=await a2(r);await tR({matchedScene:e,appId:t,driver:n,variables:i},r)}async function a4(e,t,n,r,i,a,{interactive:s=!0}={}){if(await i.load({appletUrl:t,appId:e,isSigned:a}),!s)return;let o=await t$(process.cwd()),l=Object.values(n),p=Object.values(r),d=p.filter(({id:e})=>!e9(e));return l.length>0&&(console.log(`
123
-
124
- ${aX("可用 pages 列表")}
125
- `),l.forEach(e=>{let t=aZ(e.id);console.log(` - ${t}`)})),d.length>0&&(console.log(`
126
- ${aX("可用 widgets 列表")}
127
- `),d.forEach(e=>{let t=aZ(e.id);console.log(` - ${t}`)})),o.length>0&&(console.log(`
128
- ${aX("可用调试场景")}
129
- `),o.forEach(e=>console.log(` - ${aZ(e.name)}`))),console.log(`
130
- ${aX("可以继续执行以下命令:")}
131
- `),aQ.forEach(a1),console.log("\n"),ro.instance.addListener(t=>{let n=t.trim();if("d"===n){let t=[...o.map(e=>({type:"scene",id:e.name})),...d.map(e=>({type:"widget",id:e.id})),...l.map(e=>({type:"page",id:e.id}))];if(0===t.length)return console.log(`
132
- ${aX("暂无可用的页面、组件或调试场景")}`),!0;rp(async()=>{let{selectedEntry:n}=await Q.prompt([{type:"search",name:"selectedEntry",message:"请选择调试目标:",source:e=>t.filter(t=>`${a0[t.type]} ${t.type} ${t.id}`.toLowerCase().includes(e?.toLowerCase()??"")).map(e=>({name:`${S.gray(a0[e.type])}: ${e.id}`,short:`${a0[e.type]} \xb7 ${e.id}`,value:e}))}]);if("scene"===n.type){let t=o.find(e=>e.name===n.id);t&&await a3({matchedScene:t,appId:e,driver:i})}else"widget"===n.type?i.pushWidget({appId:e,widgetId:n.id}):i.openPage({appId:e,pageId:n.id})})}else{let t=o.find(e=>e.name===n);t?rp(async()=>{await a3({matchedScene:t,appId:e,driver:i})}):p.some(e=>e.id===n)?i.pushWidget({appId:e,widgetId:n}):i.openPage({appId:e,pageId:n})}return!0},"openPage")}async function a9({appId:e,appletUrl:t,pages:n,widgets:r,driver:i,isSigned:a,isDisposed:s}){let o=await t_();if(s())return;if(!o)return void tT.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");let l=await ty(o).catch(e=>(s()||tT.error("重新启动应用失败",{error:e}),!1));if(s())return;if(!l)return void setTimeout(()=>{s()||tT.info("请确认应用已经启动。\n")},1e3);if(await new Promise(e=>{setTimeout(e,5e3)}),s())return;if(!i)return void tT.error("调试驱动尚未就绪。");let p=await a4(e,t,n,r,i,a);s()&&p?.()}async function a5({context:e,port:t,driver:n,isSigned:r,onCleanupReady:i}){let a,s,o=e.metadata.getData(),l=o.app.appId,p=rt(t),d=ny(e.webMode),c=()=>{let t;return t=e.webDebuggerLaunchOptions,aq(e,{appId:e.appId,appDirectory:e.appDirectory,artifactOrigin:p,env:{...e.env,...t?.env??{}},mcpEndpoint:t?.mcpEndpoint??tu(),mcpHeaders:t?.mcpHeaders,openBrowser:t?.openBrowser,simulator:t?.simulator})};if(e.devServerInteractive){let t;t=function(e={}){let t={name:"Doubao Apps SDK",...e},n=t.name?`${t.name} 开发服务`:"",r=t.origin?`正在监听 ${S.gray(t.origin)}。`:"已启动。";return`
133
- ${aZ(n)}${r}
134
- `}(),tp()||console.clear(),console.log(t),d||console.log(((e,t)=>{if(e&&t){let n=[{title:"\uD83C\uDF10 服务地址",content:t},{title:"\uD83D\uDCE6 应用 ID",content:e}].map(({title:e,titleHighlighter:t,content:n})=>{let r=t?t(e):S.bold(S.gray(e));return` - ${S.bgWhiteBright(S.italic(S.black(` ${r} `)))}: ${S.gray(n.startsWith("http")?S.underline(n):n)}`}).join("\n");return`
135
- ${aY("豆包应用服务信息")}:
38
+ ${rP(Object.fromEntries(o))}
39
+ Response body: ${rI(r)}`)}function rD(e,t,n){let r,o=("https:"===n.targetUrl.protocol?b:rm).request(n.targetUrl,{headers:n.requestHeaders,method:e.method},e=>{(r=e,t.destroyed||t.writableEnded)?e.destroy():(rS(t,n.commonHeaders),t.writeHead(e.statusCode??500,n.createResponseHeaders?.(e.headers)??rE(e.headers)),e.pipe(t))}),i=()=>{o.destroy(),r?.destroy()};o.once("error",e=>{if(!t.destroyed&&!t.writableEnded){if(t.headersSent)return void t.destroy(e);rA(t,502,`${n.errorMessage}: ${e.message}`,n.commonHeaders)}}),e.once("aborted",()=>{i()}),e.socket.once("close",()=>{t.writableEnded||i()}),t.once("close",()=>{t.writableEnded||i()}),e.pipe(o)}let r$=["page","widget","app"],rR=["log","info","warn","error","debug","eval"],rN=new Set(["id","class","role","title","href","src","type","name","value","placeholder","disabled","checked","selected"]);function rL(e,t){let n=t.pageIdx??0,r=t.pageSize??50,o=n*r,i=e.slice(o,o+r);return{pageIdx:n,pageSize:r,total:e.length,hasMore:o+i.length<e.length,items:i}}function rM(e){if(!e.snapshot)return{stored:!1,updatedAtMs:e.updatedAtMs};let{debug_snapshot:t,...n}=e.snapshot;return{stored:!0,storedAt:n.stored_at,updatedAtMs:n.stored_at_ms??e.updatedAtMs,snapshot:n.snapshot}}function rj(e){return e.value??e.unserializableValue??e.description??e.type??""}function rB(e,t){var n,r;let o;return(n=e,"all"===(r=t)?r$:"page"===r||"widget"===r||"app"===r?[r]:(o=n.context,o?.page_id||o?.page_path?["page","app"]:o?.widget_id?["widget"]:r$)).flatMap(t=>{let n,r=(n=e.runtime_console?.[t],{entries:n?.entries??[],updatedAtMs:n?.updated_at_ms??n?.updatedAtMs});return r.entries.map((e,n)=>{var o;let i,a,s,l;return o=r.updatedAtMs,i=e.url??e.location?.url,a=e.lineNumber??e.location?.lineNumber,s=e.columnNumber??e.location?.columnNumber,l=e.id??String(n),{msgid:`${t}:${l}`,target:t,level:e.level??"log",source:e.source??"",timestamp:e.timestamp??0,text:e.message??(e.args??[]).map(rj).filter(Boolean).join(" "),...i?{url:i}:{},...void 0===a?{}:{lineNumber:a},...void 0===s?{}:{columnNumber:s},...void 0===o?{}:{updatedAtMs:o},entry:e}})})}function rU(e,t){return{id:e.toolCallId??e.id??`tool-call:${t}`,requestId:e.requestId??e.request_id??"",toolCallId:e.toolCallId??e.id??"",toolName:e.toolName??e.name??"",serverId:e.serverId??e.server_id??"",appKey:e.appKey??e.app_key??"",status:e.status??"",createdAtMs:e.createdAtMs??e.created_at_ms??0,updatedAtMs:e.updatedAtMs??e.updated_at_ms??0,requiresUserApproval:!0===e.requiresUserApproval,isMiniApp:!0===e.isMiniApp,message:e.message??"",resultSummary:e.resultSummary??e.structuredResultSummary}}function rF(e,t){if("page"===t){let{pageId:t,path:n}=e;if(!t||!n)return;return{pageId:t,path:n,name:e.name??t,isHome:!0===e.isHome}}let{widgetId:n}=e;if(n)return{widgetId:n,name:e.name??n}}let rW=new Set(["DEBUGGER_NOT_CONNECTED","DEBUGGER_DISCONNECTED","TARGET_NOT_FOUND","ELEMENT_NOT_FOUND","RENDER_FAILED","RENDER_TIMEOUT","VIEWPORT_FAILED","INSPECTION_FAILED","SCROLL_FAILED","SCREENSHOT_FAILED","SNAPSHOT_FAILED","CHAT_NOT_READY","CHAT_BUSY","CHAT_SUBMIT_FAILED","CHAT_TIMEOUT","COMMAND_TIMEOUT"]);class rH extends Error{code;constructor(e,t){super(t),this.name="DebuggerControlError",this.code=e}}function rG(e){return"render_page"===e||"render_widget"===e}function rV(e){return"number"==typeof e&&Number.isFinite(e)}function rq(e){return"number"==typeof e&&Number.isInteger(e)&&e>=1&&e<=9999}class rJ{clients=new Map;lastSnapshotAtByClientId=new Map;snapshotStore;nextCommandId=0;constructor(e){this.snapshotStore=e}registerClient(e,t){let n=this.clients.get(e);n&&this.disconnectClient(n,"Debugger control connection was replaced");let r={clientId:e,lastSnapshotAtMs:this.lastSnapshotAtByClientId.get(e)??0,queue:[],response:t};this.clients.set(e,r),t.once("close",()=>{this.clients.get(e)===r&&this.disconnectClient(r,"Debugger control connection was closed",!1)})}noteSnapshot(e){if(!e)return;let t=Date.now();this.lastSnapshotAtByClientId.set(e,t);let n=e?this.clients.get(e):void 0;n&&(n.lastSnapshotAtMs=t)}execute(e,t){let n=this.getActiveClient();if(!n)return Promise.reject(new rH("DEBUGGER_NOT_CONNECTED","No Web SDK debugger with a stored snapshot is connected"));let r=`control-${Date.now()}-${++this.nextCommandId}`;return new Promise((o,i)=>{n.queue.push({command:{...t,commandId:r,type:e},reject:i,resolve:o}),this.flushClient(n)})}handleResult(e){var t,n;let r,o=e.clientId?.trim(),i=e.commandId?.trim(),a=o?this.clients.get(o):void 0,s=a?.activeJob;if(!a||!s||s.command.commandId!==i)return!1;if((s.timeout&&clearTimeout(s.timeout),a.activeJob=void 0,!0===e.ok&&rG(s.command.type)&&(t=e.snapshot,t.snapshot.command_id===i&&t.snapshot.runtime_snapshot))?(this.snapshotStore.snapshot=e.snapshot,this.snapshotStore.updatedAtMs=Date.now(),this.noteSnapshot(o),r={target:e.target}):!0===e.ok&&!rG(s.command.type)&&(r=function(e,t){if("set_viewport"===e)return rq(t.width)&&rq(t.height)?t:void 0;if("submit_chat_query"===e)return!0===t.completed&&t.query?.trim()&&t.requestId?.trim()?t:void 0;if("take_snapshot"===e){let e=t.runtimeSnapshot;return e?.target?{runtimeSnapshot:e}:void 0}if("take_screenshot"===e||t.uid?.trim()){if("get_computed_style"===e){if(!Array.isArray(t.computedStyle)||!t.computedStyle.every(e=>!!e.name?.trim()&&"string"==typeof e.value))return;return t}if("get_element_rect"===e)return[t.x,t.y,t.width,t.height].every(rV)?t:void 0;if("scroll_to"===e)return[t.x,t.y,t.maxX,t.maxY,t.viewportWidth,t.viewportHeight].every(e=>rV(e)&&e>=0)&&t.x<=t.maxX&&t.y<=t.maxY?t:void 0;if("take_screenshot"===e){let e="png"===t.format?"image/png":"jpeg"===t.format?"image/jpeg":"webp"===t.format?"image/webp":void 0;return"string"==typeof t.data&&t.data.length>0&&t.mimeType===e&&rV(t.width)&&rV(t.height)&&(void 0===t.uid||t.uid?.trim())?t:void 0}}}(s.command.type,e.result),"take_snapshot"===s.command.type&&r&&"runtimeSnapshot"in r&&this.storeRuntimeSnapshot(a.clientId,r.runtimeSnapshot)),r)s.resolve(r);else{let t=e.error??{},r=t.code?.trim(),o=r&&rW.has(r)?r:void 0;s.reject(new rH(o??(rG(n=s.command.type)?"RENDER_FAILED":"set_viewport"===n?"VIEWPORT_FAILED":"scroll_to"===n?"SCROLL_FAILED":"submit_chat_query"===n?"CHAT_SUBMIT_FAILED":"take_snapshot"===n?"SNAPSHOT_FAILED":"take_screenshot"===n?"SCREENSHOT_FAILED":"INSPECTION_FAILED"),t.message?.trim()||"Debugger control command failed"))}return this.flushClient(a),!0}getActiveClient(){return[...this.clients.values()].filter(e=>!e.response.writableEnded&&e.lastSnapshotAtMs>0).sort((e,t)=>t.lastSnapshotAtMs-e.lastSnapshotAtMs)[0]}storeRuntimeSnapshot(e,t){let n=this.snapshotStore.snapshot,r=n?.snapshot;if(!n||!r||r.client_id!==e)return;let o=n.debug_snapshot,{root:i,...a}=t,s=Date.now();this.snapshotStore.snapshot={...n,stored_at:new Date(s).toISOString(),stored_at_ms:s,snapshot:{...r,runtime_snapshot:t},...o?{debug_snapshot:{...o,runtime_snapshot:a}}:{}},this.snapshotStore.updatedAtMs=s,this.noteSnapshot(e)}flushClient(e){if(e.activeJob||e.response.writableEnded)return;let t=e.queue.shift();if(t){e.activeJob=t,t.timeout=setTimeout(()=>{if(e.activeJob===t){if("submit_chat_query"===t.command.type){t.timeout=void 0,t.reject(new rH("CHAT_TIMEOUT","Debugger control command timed out"));try{e.response.write(`data: ${JSON.stringify({commandId:t.command.commandId,type:"cancel_chat_query"})}
40
+
41
+ `)}catch{this.disconnectClient(e,"Debugger control connection was closed");return}t.timeout=setTimeout(()=>{e.activeJob===t&&this.disconnectClient(e,"Debugger chat cancellation was not acknowledged")},5e3);return}e.activeJob=void 0,t.reject(new rH(rG(t.command.type)?"RENDER_TIMEOUT":"COMMAND_TIMEOUT","Debugger control command timed out")),this.flushClient(e)}},"submit_chat_query"===t.command.type?12e4:15e3);try{e.response.write(`data: ${JSON.stringify(t.command)}
42
+
43
+ `)}catch{t.timeout&&clearTimeout(t.timeout),e.activeJob=void 0,t.reject(new rH("DEBUGGER_DISCONNECTED","Debugger control connection was closed")),this.disconnectClient(e,"Debugger control connection was closed")}}}disconnectClient(e,t,n=!0){if(this.clients.get(e.clientId)!==e)return;this.clients.delete(e.clientId);let r=new rH("DEBUGGER_DISCONNECTED",t);for(let t of(e.activeJob?.timeout&&clearTimeout(e.activeJob.timeout),e.activeJob?.reject(r),e.activeJob=void 0,e.queue.splice(0)))t.reject(r);n&&!e.response.writableEnded&&e.response.end()}}async function rK(e,t,n){let r;if("POST"!==e.method)return void rT(t,405,{error:"Method not allowed"});try{r=JSON.parse(await rC(e,t,0xa00000))}catch(e){rT(t,400,{error:e.message});return}n.handleResult(r)?rT(t,200,{ok:!0}):rT(t,404,{error:"Pending debugger command not found"})}let rz={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},rY={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},rX={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1};function rZ(e,t={}){return{structuredContent:e,content:t.image?[{type:"image",...t.image}]:[{type:"text",text:t.text??JSON.stringify(e,null,2)}],...t.isError?{isError:!0}:{}}}async function rQ(e,t={}){try{return await e()}catch(e){return function(e,t={}){let n=e instanceof rH?e:new rH("INSPECTION_FAILED",String(e));return rZ({...t,error:{code:n.code,message:n.message}},{isError:!0})}(e,t)}}function r0(e,t,n,r){let o=$(n.inputSchema);e.registerTool(t,{...n,inputSchema:o},r)}let r1="/__wsd_mcp";async function r2(e,t,n,r){if("OPTIONS"===e.method){rS(t),t.writeHead(204),t.end();return}if("POST"!==e.method)return void rA(t,405,"Method not allowed");let o=R(()=>{let e,t;return e=new K({name:"doubao-web-sdk-debugger-log",version:"0.0.1"}),t=async e=>{var t;let r=rM(n);if(!r.stored)return rZ(r);let o=rL((t=r.snapshot,[{source:"simulator",events:t.simulator?.trace_events??[]},{source:"widget_runtime",events:t.widget_runtime_trace_events??[]},{source:"page_runtime",events:t.page_runtime_trace_events??[]}].flatMap(({source:e,events:t})=>t.map((t,n)=>{let r;return r=t.payload??{},{source:e,id:t.id??`${e}:${n}`,timestamp:t.timestamp??0,category:r.category??t.display?.category??"",event:r.event??t.event??"",requestId:r.request_id??r.requestId??r.trace_id??r.trace?.trace_id??"",payload:t.payload??t}}))).filter(t=>{let n,r,o;return n=e.category??[],r=e.event?.trim(),o=e.requestId?.trim(),(0===n.length||n.includes(t.category))&&(!r||t.event===r)&&(!o||t.requestId===o)}),e);return rZ({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:o.total,pageIdx:o.pageIdx,pageSize:o.pageSize,hasMore:o.hasMore,events:o.items})},r0(e,"list_console_messages",{annotations:rz,description:"List runtime console messages captured by the Doubao Web SDK debugger.",inputSchema:{levels:er(T(rR)).optional(),pageIdx:C().int().min(0).optional(),pageSize:C().int().min(1).max(200).optional(),query:Y().optional(),target:T(["current","page","widget","app","all"]).optional()}},async e=>{let t=rM(n);if(!t.stored)return rZ(t);let r=rL(rB(t.snapshot,e.target).filter(t=>{let n,r;return n=e.levels??[],r=e.query?.trim().toLowerCase(),(!(n.length>0)||!!n.includes(t.level))&&(!r||[t.text,t.url,t.source,t.target].filter(e=>"string"==typeof e).some(e=>e.toLowerCase().includes(r)))}),e);return rZ({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,messages:r.items.map(({entry:e,...t})=>t)})}),r0(e,"get_console_message",{annotations:rz,description:"Get one full runtime console message, including args and stack trace.",inputSchema:{msgid:Y()}},async e=>{let t=rM(n);if(!t.stored)return rZ(t);let r=rB(t.snapshot,"all").find(t=>t.msgid===e.msgid);return rZ({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,found:!!r,...r?{message:r}:{msgid:e.msgid}})}),r0(e,"get_log_snapshot",{annotations:rz,description:"Return the latest compact debugger log snapshot.",inputSchema:{}},async()=>{let e=rM(n);return e.stored?rZ({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,snapshot:e.snapshot}):rZ(e)}),r0(e,"list_render_targets",{annotations:rz,description:"List Page and Widget targets that can be rendered by the Web SDK debugger.",inputSchema:{type:T(["all","page","widget"]).optional()}},async e=>{var t,r;let o,i=rM(n);return i.stored?rZ({stored:!0,storedAt:i.storedAt,updatedAtMs:i.updatedAtMs,...(t=i.snapshot,r=e.type??"all",o=t.render_targets??{},{pages:"widget"===r?[]:(o.pages??[]).map(e=>rF(e,"page")).filter(Boolean),widgets:"page"===r?[]:(o.widgets??[]).map(e=>rF(e,"widget")).filter(Boolean),...o.currentTarget?{currentTarget:o.currentTarget}:{}})}):rZ(i)}),r0(e,"take_snapshot",{annotations:rz,description:"Capture and return a fresh text snapshot of the currently rendered Page or Widget card.",inputSchema:{target:T(["current","page","widget"]).optional(),verbose:L().optional()}},e=>rQ(async()=>{let t=function(e,t){var n,r;let o,i,a,s=e.runtime_snapshot;if(!s?.target)return{available:!1,reason:"NO_RUNTIME_SNAPSHOT"};let l=s.target,p=l.type,c=t.target??"current";if(("page"===c||"widget"===c)&&p!==c)return{available:!1,reason:"TARGET_MISMATCH",requestedTarget:c,currentTarget:l};if(!s.root)return{available:!1,reason:"NO_RENDERED_TARGET",currentTarget:l};let d=s.selectedUid,u=(n=s.root,r=!0===t.verbose,o=[],i=0,(a=(e,t)=>{var n,s;let{name:l,uid:p}=e;if(!p||!l)return;i+=1;let c=" ".repeat(t);if("text"===e.type)return void o.push(`${c}uid=${p} text ${JSON.stringify(e.text??"")}`);let u=[`uid=${p}`,l],{keyboardFocusable:m=!1,name:h,role:f}=e.accessibility??{};for(let t of(f&&(r||"generic"!==f)&&u.push(`role=${JSON.stringify(f)}`),h&&u.push(`name=${JSON.stringify(h)}`),(r||m)&&u.push(`focusable=${String(m)}`),(e.attributes??[]).map(e=>({name:e.name,value:e.value})).filter(e=>e.name&&(r||rN.has(e.name)||e.name.startsWith("aria-")))))u.push((n=t.name,(s=t.value)?`${n}=${JSON.stringify(s)}`:n));for(let n of(p===d&&u.push("[selected]"),o.push(`${c}${u.join(" ")}`),e.children??[]))a(n,t+1)})(n,0),{actualNodeCount:i,text:o.join("\n")});return{available:!0,target:l,nodeCount:s.nodeCount??u.actualNodeCount,...d?{selectedUid:d}:{},truncated:!0===s.truncated,snapshot:u.text,snapshotUpdatedAtMs:s.updatedAtMs}}({runtime_snapshot:(await r.execute("take_snapshot",{target:e.target??"current"})).runtimeSnapshot},e),o=rM(n),i={stored:o.stored,...o.stored?{storedAt:o.storedAt,updatedAtMs:o.updatedAtMs}:{},...t};return rZ(i,{text:t.available?t.snapshot:JSON.stringify(i,null,2)})},{available:!1,stored:!1})),r0(e,"get_computed_style",{annotations:rz,description:"Get computed CSS styles for an element uid in the current Page or Widget target.",inputSchema:{properties:er(Y().min(1)).max(100).optional(),uid:Y().min(1)}},({properties:e,uid:t})=>rQ(async()=>rZ(await r.execute("get_computed_style",{uid:t,...e?{properties:e}:{}})))),r0(e,"get_element_rect",{annotations:rz,description:"Get x, y, width, and height for an element uid in the emulated viewport.",inputSchema:{uid:Y().min(1)}},({uid:e})=>rQ(async()=>rZ(await r.execute("get_element_rect",{uid:e})))),r0(e,"take_screenshot",{annotations:rz,description:"Take a screenshot of the current Page or Widget target, or of one element uid.",inputSchema:{format:T(["png","jpeg","webp"]).optional(),quality:C().min(0).max(100).optional(),uid:Y().min(1).optional()}},({format:e="png",quality:t,uid:n})=>rQ(async()=>{let o=await r.execute("take_screenshot",{format:e,...void 0!==t?{quality:t}:{},...n?{uid:n}:{}}),{data:i,...a}=o;return rZ({captured:!0,...a},{image:{data:i,mimeType:o.mimeType}})},{captured:!1})),r0(e,"scroll_to",{annotations:rX,description:"Scroll a Page or Widget container to absolute coordinates, or return its current scroll position.",inputSchema:{uid:Y().min(1).optional(),x:C().min(0).optional(),y:C().min(0).optional()}},({uid:e,x:t,y:n})=>rQ(async()=>rZ({scrolled:!0,...await r.execute("scroll_to",{uid:e,x:t,y:n})}),{scrolled:!1})),r0(e,"set_viewport",{annotations:rX,description:"Set the current Page or Widget emulated viewport size.",inputSchema:{height:C().int().min(1).max(9999),width:C().int().min(1).max(9999)}},({height:e,width:t})=>rQ(async()=>rZ({updated:!0,viewport:await r.execute("set_viewport",{height:e,width:t})}),{updated:!1})),r0(e,"render_page",{annotations:rY,description:"Render a Page route in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{url:Y().min(1)}},({url:e})=>rQ(async()=>rZ({rendered:!0,target:(await r.execute("render_page",{url:e})).target}),{rendered:!1})),r0(e,"render_widget",{annotations:rY,description:"Render a Widget card in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{structuredContent:F(Y(),O()).optional(),widgetId:Y().min(1)}},({structuredContent:e,widgetId:t})=>rQ(async()=>rZ({rendered:!0,target:(await r.execute("render_widget",{structuredContent:e??{},widgetId:t})).target}),{rendered:!1})),r0(e,"submit_chat_query",{annotations:rY,description:"Submit a chat query through the connected Web SDK debugger and wait for the simulator response to complete.",inputSchema:{query:Y().trim().min(1)}},({query:e})=>rQ(async()=>rZ({submitted:!0,...await r.execute("submit_chat_query",{query:e})}),{submitted:!1})),r0(e,"list_agent_trace_events",{annotations:rz,description:"List Agent-side simulator and runtime trace events captured by the debugger.",inputSchema:{category:er(Y()).optional(),event:Y().optional(),pageIdx:C().int().min(0).optional(),pageSize:C().int().min(1).max(200).optional(),requestId:Y().optional()}},t),r0(e,"list_agent_tool_calls",{annotations:rz,description:"List Agent-side simulator tool calls captured by the debugger.",inputSchema:{pageIdx:C().int().min(0).optional(),pageSize:C().int().min(1).max(200).optional(),query:Y().optional(),requestId:Y().optional(),status:er(Y()).optional(),toolName:Y().optional()}},async e=>{var t;let r=rM(n);if(!r.stored)return rZ(r);let o=rL((t=r.snapshot,(t.simulator?.tool_calls??[]).map(rU)).filter(t=>{let n,r,o,i;return n=e.requestId?.trim(),r=e.toolName?.trim(),o=e.status??[],i=e.query?.trim().toLowerCase(),(!n||t.requestId===n)&&(!r||t.toolName===r)&&(!(o.length>0)||!!o.includes(t.status))&&(!i||[t.toolName,t.serverId,t.appKey,t.status,t.message,"string"==typeof t.resultSummary?t.resultSummary:void 0].filter(e=>"string"==typeof e).some(e=>e.toLowerCase().includes(i)))}),e);return rZ({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:o.total,pageIdx:o.pageIdx,pageSize:o.pageSize,hasMore:o.hasMore,toolCalls:o.items})}),e},{legacy:"stateless",responseMode:"json"}),i=en(o);try{await i(e,t)}catch(e){t.headersSent?t.destroy(e instanceof Error?e:void 0):rA(t,500,e instanceof Error?e.message:String(e))}finally{await o.close().catch(()=>void 0)}}let r3="/__web_sdk_debug_scenes",r4="/__web_sdk_widget_view_data_templates",r5={"Cache-Control":"no-cache"};async function r9(e,t){try{let n=await t?.()??{templatesByEntry:{},templatesByWidget:{}};rT(e,200,n,r5)}catch(t){ru.error("加载 Widget viewData 模板失败",{error:t}),rT(e,500,{templatesByEntry:{},templatesByWidget:{}},r5)}}let r8={"Cache-Control":"no-cache"};async function r6(e,t,n,r){var o,i;let a,s;if("OPTIONS"===e.method){rS(t,r8),t.writeHead(204),t.end();return}if("GET"===e.method){let r;return void rT(t,200,function(e,t){if(!e?.debug_snapshot)return e;let{debug_snapshot:n,...r}=e;return t?{...r,snapshot:n}:r}(n.snapshot,(o=e,null!=(r=rw(o)?.searchParams.get("DEBUG"))&&"0"!==r&&"false"!==r.toLowerCase()))??{stored:!1},r8)}if("POST"!==e.method)return void rT(t,405,{error:"Method not allowed"},r8);try{a=JSON.parse(await rC(e,t,0xa00000))}catch(e){rT(t,400,{error:e.message},r8);return}a=function(e,t){let n=e?.snapshot,r=t.snapshot,o=n?.runtime_snapshot,i=r.runtime_snapshot;if(!n||!o||n.client_id!==r.client_id)return t;if(!i){var a;let e;if(a=o.target,e=function(e){let t=e.render_targets?.currentTarget;if(t)return t;let n=e.context;if(n){if(Object.hasOwn(n,"widget_id"))return{type:"widget"};if(Object.hasOwn(n,"page_id")||Object.hasOwn(n,"page_path"))return{type:"page"}}}(r),a&&e&&(1===Object.keys(e).length?e.type!==a.type:JSON.stringify(e)!==JSON.stringify(a)))return t;let{root:n,...i}=o;return{...t,snapshot:{...r,runtime_snapshot:o},...t.debug_snapshot?{debug_snapshot:{...t.debug_snapshot,runtime_snapshot:i}}:{}}}return Object.hasOwn(i,"root")||!Object.hasOwn(o,"root")||o.updatedAtMs!==i.updatedAtMs||JSON.stringify(o.target)!==JSON.stringify(i.target)?t:{...t,snapshot:{...r,runtime_snapshot:{...i,root:o.root}}}}(n.snapshot,a),n.snapshot=a,n.updatedAtMs=Date.now(),r.noteSnapshot("string"==typeof(s=(i=a).snapshot.client_id??i.debug_snapshot?.client_id)&&s.trim()?s.trim():void 0),rT(t,200,{ok:!0,updated_at_ms:n.updatedAtMs},r8)}let r7=f("../../../node_modules/.pnpm/undici@6.22.0/node_modules/undici/index.js"),oe={"sso-internal":"doubao-developer.bytedance.net","sms-internal":"doubao-developer-open.bytedance.net","sms-external":"hello.doubao-dev.com"},ot={"http:":"80","https:":"443"},on=new Map;function or(){return process.env.X_TT_ENV?{"x-use-ppe":"1","x-tt-env":process.env.X_TT_ENV}:{}}function oo(e){let t=e.startsWith("/")?e:`/${e}`;return"/app_developer"===t||t.startsWith("/app_developer/")}async function oi(e,t={}){let n=function(e){var t,n;let r="string"==typeof e?new URL(e):e;if(function(e){let t=ol(["NO_PROXY","no_proxy"]);if(!t)return!1;let n=op(e.hostname),r=e.port||ot[e.protocol]||"";for(let e of t.split(",")){let t=function(e){let t=e.trim().toLowerCase();if(!t)return{host:""};if((t=t.replace(/^[a-z][a-z\d+.-]*:\/\//,"").split("/")[0]).startsWith("[")){let e=t.indexOf("]");if(-1!==e)return{host:op(t.slice(0,e+1)),port:":"===t[e+1]?t.slice(e+2):void 0}}let n=t.indexOf(":")===t.lastIndexOf(":")?t.match(/:(\d+)$/):void 0;return{host:op(n?t.slice(0,-n[0].length):t),port:n?.[1]}}(e);if(t.host&&(!t.port||t.port===r)){if("*"===t.host)return!0;if(t.host.startsWith("*.")){let e=t.host.slice(1);if(n.endsWith(e))return!0;continue}if(t.host.startsWith(".")){if(n.endsWith(t.host))return!0;continue}if(n===t.host)return!0}}return!1}(r))return;let o="https:"===(t=r.protocol)?ol(["HTTPS_PROXY","https_proxy","HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):"http:"===t?ol(["HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):void 0;if(!o)return;let i=(n=o,/^[a-z][a-z\d+.-]*:\/\//i.test(n)?n:`http://${n}`),a=on.get(i);return a||(a=new r7.kT(i),on.set(i,a)),a}(e),r=n?{...t,dispatcher:n}:t;return await fetch(e,r)}async function oa({internal:e,domainId:t,path:n,query:r,method:o="GET",body:i,headers:a,signal:s,auth:l=!0}){let p={method:o,body:i,headers:{...or(),...a}};s&&(p.signal=s);let c=function({internal:e,domainId:t,path:n,query:r}){let o=n.startsWith("/")?n:`/${n}`,i=new URLSearchParams;for(let[e,t]of Object.entries(r||{}))null!=t&&i.append(e,t.toString());let a=i.toString(),s=a?`${o.includes("?")?"&":"?"}${a}`:"",l=oo(o)?es:t?oe[t]:e?oe["sso-internal"]:oe["sms-external"];return`https://${l}${o}${s}`}({internal:e,domainId:t,path:n,query:r}),d=new Headers(p.headers),u=d.has("Cookie");if(!l||!oo(n)||d.has("Authorization")||d.has("X-Developer-Open-Build-Token"))return await oi(c,p);let m=new URL(c).origin,h=M(oi,{baseUrl:m,allowedOrigins:[m]});try{return await h(c,p)}catch(e){if(!(e instanceof G||e instanceof P))throw e;if(u)return await oi(c,p);throw Error(e instanceof P?"Doubao Apps Platform 登录已过期,请运行 `dbx auth login` 后重试。":"Doubao Apps Platform 请求需要登录,请运行 `dbx auth login` 后重试。")}}async function os(e){let t=await oa(e),n=t.headers.get("x-tt-logid")||"";if(!t.ok){let e=await t.text();throw Error(JSON.stringify({code:t.status,message:"HTTP 请求失败",data:e,log_id:n}))}let r=await t.json();if(0!==r.code)throw Error(JSON.stringify({...r,log_id:n}));return{...r,log_id:n}}function ol(e){for(let t of e){let e=process.env[t]?.trim();if(e)return e}}function op(e){return e.trim().toLowerCase().replace(/^\[/,"").replace(/\]$/,"")}let oc="/__mcp_proxy",od=f("node:crypto"),ou="/__dbx_real_device_debug",om=`${ou}/state`,oh=`${ou}/start`,of=`${ou}/cancel`,og=`${ou}/qr`,oy={"Cache-Control":"no-store",Pragma:"no-cache","Referrer-Policy":"no-referrer"};class ob extends Error{code;statusCode;constructor(e,t,n){super(e),this.code=t,this.statusCode=n,this.name="WebRealDeviceDebugProviderError"}}class o_{accessToken;provider;getDebugContext(){if(this.provider&&this.accessToken)return{stateEndpoint:om,startEndpoint:oh,cancelEndpoint:of,qrEndpoint:og,accessToken:this.accessToken,pollIntervalMs:500}}setProvider(e){this.provider=e,this.accessToken=e?od.randomBytes(32).toString("hex"):void 0}dispose(){this.setProvider(void 0)}handleRequest(e,t){let n=rw(e);return!!n?.pathname.startsWith(ou)&&(this.serveRequest(e,t,n),!0)}async serveRequest(e,t,n){try{this.validateRequest(e);let r=this.provider;if(!r)throw new ob("Real-device debugging is unavailable","REAL_DEVICE_DEBUG_UNAVAILABLE",503);if("GET"===e.method&&n.pathname===om)return void rT(t,200,ov(await r.getState()),oy);if("POST"===e.method&&n.pathname===oh){let n=await this.readJsonBody(e,t);if(Object.keys(n).length>0)throw new ob("Unexpected request fields","INVALID_REQUEST",400);rT(t,200,ov(await r.start()),oy);return}if("POST"===e.method&&n.pathname===of){let n=await this.readJsonBody(e,t),o=n.operationId;if("string"!=typeof o||!o||Object.keys(n).some(e=>"operationId"!==e))throw new ob("Invalid operationId","INVALID_REQUEST",400);rT(t,200,ov(await r.cancel(o)),oy);return}if("GET"===e.method&&n.pathname===og){let e=n.searchParams.get("operationId"),o=n.searchParams.get("kind");if(!e||"modern"!==o&&"legacy"!==o)throw new ob("Invalid QR request","INVALID_REQUEST",400);let i=await r.getQrImage(e,o);if(!i)throw new ob("QR image is unavailable","QR_NOT_FOUND",404);rS(t,oy),t.writeHead(200,{"Content-Length":i.body.byteLength,"Content-Type":i.contentType}),t.end(i.body);return}throw new ob("Not found","NOT_FOUND",404)}catch(e){this.writeError(t,e)}}validateRequest(e){var t,n;let r,o,i;if(!function(e){if(!e)return!1;try{let t=new URL(`http://${e}`).hostname.toLowerCase();return"127.0.0.1"===t||"[::1]"===t||"localhost"===t}catch{return!1}}(e.headers.host))throw new ob("Forbidden host","FORBIDDEN_HOST",403);let a=e.headers["x-dbx-real-device-token"];if("string"!=typeof a||!this.accessToken||(t=a,n=this.accessToken,o=(r=new TextEncoder).encode(t),i=r.encode(n),!(o.length===i.length&&od.timingSafeEqual(o,i))))throw new ob("Unauthorized","UNAUTHORIZED",401);if("POST"===e.method){if(!(e.headers["content-type"]?.toLowerCase()??"").startsWith("application/json"))throw new ob("Content-Type must be application/json","UNSUPPORTED_MEDIA_TYPE",415);let t=e.headers.origin;if(t&&t!==`http://${e.headers.host}`)throw new ob("Forbidden origin","FORBIDDEN_ORIGIN",403)}}async readJsonBody(e,t){let n;try{n=await rC(e,t,4096)}catch{throw new ob("Request body is too large","PAYLOAD_TOO_LARGE",413)}if(!n.trim())return{};try{let e=JSON.parse(n);if(!e||"object"!=typeof e||Array.isArray(e))throw Error("invalid JSON object");return e}catch{throw new ob("Invalid JSON body","INVALID_REQUEST",400)}}writeError(e,t){if(e.writableEnded||e.destroyed)return;let n=function(e){if(e&&"object"==typeof e){let t=Reflect.get(e,"statusCode");if("number"==typeof t&&t>=400&&t<=599)return t}return 500}(t),r=function(e){if(e&&"object"==typeof e){let t=Reflect.get(e,"code");if("string"==typeof t&&/^[A-Z0-9_]+$/.test(t))return t}return"REAL_DEVICE_DEBUG_FAILED"}(t),o=n>=500?"Real-device debugging failed":ow(t);rT(e,n,{error:{code:r,message:o}},oy)}}function ow(e){return(e instanceof Error?e.message:"Request failed").replace(/(?:log[_ -]?id)\s*[:=]?\s*[\w-]+/gi,"request id removed")}function ov(e){return{revision:e.revision,...e.operationId?{operationId:e.operationId}:{},...e.owner?{owner:e.owner}:{},phase:e.phase,...e.connectionMode?{connectionMode:e.connectionMode}:{},...e.progress?{progress:{..."number"==typeof e.progress.downloadedBytes?{downloadedBytes:e.progress.downloadedBytes}:{},..."number"==typeof e.progress.totalBytes?{totalBytes:e.progress.totalBytes}:{},..."number"==typeof e.progress.percentage?{percentage:e.progress.percentage}:{},...e.progress.installStage?{installStage:e.progress.installStage}:{}}}:{},...e.qr?{qr:{revision:e.qr.revision,modernAvailable:e.qr.modernAvailable,legacyAvailable:e.qr.legacyAvailable}}:{},..."number"==typeof e.deadlineAt?{deadlineAt:e.deadlineAt}:{},canCancel:!!e.canCancel,canRetry:!!e.canRetry,...e.error?{error:{code:e.error.code,message:ow(Error(e.error.message)),stage:e.error.stage}}:{}}}let oE="/app_developer/api/sandbox/",oS=`${oE}session/business_info/update`,ox=new Set([`${oE}resources/notices/pull`,`${oE}resources/tasks/pull`]),oA={"Access-Control-Expose-Headers":r_},oT=new Set;function oC(e,t,n,r,o,i){if("applet0930"!==process.env.DEBUG)return!1;let a=`${o[rb]??""} ${e} ${t.pathname}`,s=ox.has(t.pathname);if(s&&n>=500){if(oT.has(a))return!1;oT.add(a)}else s&&n<500&&oT.delete(a);let l=Number(process.hrtime.bigint()-r)/1e6;return ru.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:l,headers:o,logId:i}),!0}function oO({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a}){rk({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a})}function oP(e,t,n){return n&&!(ox.has(e.pathname)&&t>=500)}function oI(e,t){if(e.pathname!==oS||!t)return t;try{let e=JSON.parse(t);return JSON.stringify({...e,..."csr_pem"in e?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]"})}catch{return JSON.stringify({omitted:"invalid business info request"})}}async function ok({method:e,request:t,requestBody:n,requestHeaders:r,response:o,targetUrl:i,usePlatformFetch:a}){let s=new AbortController,l=process.hrtime.bigint(),p=()=>s.abort();t.once("aborted",p),t.socket.once("close",p),o.once("close",()=>{o.writableEnded||p()});try{let t,p=a?await oa({internal:!0,path:`${i.pathname}${i.search}`,method:e,body:n,headers:r,signal:s.signal}):await fetch(i,{body:"GET"===e||"HEAD"===e?void 0:n,headers:r,method:e,signal:s.signal}),c=oC(e,i,p.status,l,r,p.headers.get(r_)??void 0);if(o.destroyed||o.writableEnded)return void p.body?.cancel().catch(()=>void 0);let d=await rO(p);return oP(i,p.status,c)&&oO({method:e,requestBody:oI(i,n),requestHeaders:r,responseBody:d,responseHeaders:p.headers,statusCode:p.status,targetUrl:i}),o.destroyed||o.writableEnded||(t=rE(Object.fromEntries(p.headers),[r_]),delete t["content-encoding"],delete t["content-length"],rS(o,oA),o.writeHead(p.status,t),o.end(d)),{body:d,ok:p.ok}}catch(p){if(o.destroyed||o.writableEnded||s.signal.aborted)return;let t=`Failed to proxy sandbox request: ${p instanceof Error?p.message:String(p)}`,a=oC(e,i,502,l,r);oP(i,502,a)&&oO({method:e,requestBody:oI(i,n),requestHeaders:r,responseBody:t,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:i}),rA(o,502,t,oA)}}async function oD(e,t,n={}){let r;if("POST"!==e.method)return void rA(t,405,"Method not allowed",oA);try{r=JSON.parse(await rC(e,t,0xa00000))}catch(e){rA(t,400,`Invalid sandbox proxy payload: ${e.message}`,oA);return}let o=function(e,t){if(!e.url)return;let n=new URL(e.url,t);if(!n.pathname.startsWith(oE))return;let r=new URL(`${n.pathname}${n.search}`,t);var o=e.params;if(o)for(let[e,t]of Object.entries(o))null!=t&&r.searchParams.set(e,String(t));return r}(r,n.targetOrigin??Z);if(!o)return void rA(t,404,"Sandbox endpoint not found",oA);if(!n.sandboxSessionId)return void rT(t,200,{code:-1,message:"无法模拟平台服务:当前未获取到开发者登录态或 Sandbox session 创建失败。"},oA);let i=function(e,t,n,r){if(t.pathname.startsWith(`${oE}session/`)&&t.pathname!==`${oE}session/create`)return JSON.stringify({..."object"==typeof e.data&&null!==e.data?e.data:{},sandbox_session_id:r});if(void 0===e.data)return;if("object"!=typeof e.data||null===e.data||!n)return JSON.stringify(e.data);let o={...e.data};return t.pathname.startsWith(`${oE}jsb/`)&&"app_key"in o&&(o.app_key=n),t.pathname===`${oE}passport/open/auth`&&"client_key"in o&&(o.client_key=n),JSON.stringify(o)}(r,o,n.sandboxAppId,n.sandboxSessionId),a=r.method||"POST",s=function(e,t,n,r,o){let i=Object.fromEntries(Object.entries(rv({...e.headers,...n,...void 0===r?{}:{"content-length":String(Buffer.byteLength(r))},"content-type":"application/json"},t,{...or(),...o?{[rb]:o}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]));for(let e of Object.keys(i))"accept-encoding"===e.toLowerCase()&&delete i[e];return i["accept-encoding"]="identity",i}(e,o,r.headers,i,n.sandboxSessionId),l=await ok({method:a,request:e,requestBody:i,requestHeaders:s,response:t,targetUrl:o,usePlatformFetch:!n.targetOrigin});if(o.pathname===oS&&l?.ok)try{let e=JSON.parse(l.body.toString("utf8"));(void 0===e.code||0===e.code)&&n.onBusinessInfoUpdated?.(function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t="string"==typeof e.csr_pem?e.csr_pem.trim():"",n="string"==typeof e.phone_num?e.phone_num.trim():"";return n?{...t?{csrPem:t}:{},phoneNum:n}:void 0}(r.data))}catch{}}let o$=f("node:util"),oR="/app_developer/api/sandbox/bridge/events",oN="/app_developer/api/sandbox/bridge/response",oL=new Set(["connection","content-length","host"]),oM=new Set(["heartbeat"]),oj=[500,1e3,2e3,5e3],oB=0;function oU(e){return e.length<=8?e:`${e.slice(0,4)}...${e.slice(-4)}`}function oF(e,t=new Headers,n=""){return{response:e,responseHeaders:Object.fromEntries(t),statusText:n}}async function oW(e){let t,n,r=e.request_id||"";if(!r)return oF({error_message:"bridge request_id is required",http_status:0,request_id:r,success:!1});if(!e.path?.startsWith("/"))return oF({error_message:`invalid bridge request path: ${e.path??""}`,http_status:0,request_id:r,success:!1});let o=function(e){if(e.origin)try{var t;return new URL(e.path??"/",(t=e.origin).endsWith("/")?t:`${t}/`)}catch{return}}(e);if(!o)return oF({error_message:`invalid bridge request origin: ${e.origin??""}`,http_status:0,request_id:r,success:!1});let i=(e.method||"GET").toUpperCase(),a=function(e){let t={};for(let[n,r]of Object.entries(e??{}))!n||oL.has(n.toLowerCase())||(t[n]=r);return t}(e.headers),s="GET"===i||"HEAD"===i?void 0:e.body??"",l=new AbortController,p=setTimeout(()=>l.abort(),(t="number"==typeof e.timeout_ms?e.timeout_ms:3e3,n="number"==typeof e.deadline_ms?e.deadline_ms-Date.now():t,Math.max(1,Math.min(t,n))));try{var c;let e=await fetch(o,{body:s,headers:a,method:i,redirect:"manual",signal:l.signal}),t=await e.text();return c={method:i,requestBody:s,requestHeaders:a,responseBody:t,responseHeaders:e.headers,statusCode:e.status,targetUrl:o},rk(c),oF({body:t,http_status:e.status,request_id:r,success:!0},e.headers,e.statusText)}catch(e){return rk({method:i,requestBody:s,requestHeaders:a,responseBody:e instanceof Error?e.message:String(e),responseHeaders:new Headers,statusCode:0,targetUrl:o}),oF({error_message:e instanceof Error?e.message:String(e),http_status:0,request_id:r,success:!1})}finally{clearTimeout(p)}}function oH(e,t=new Set){if(Array.isArray(e)){for(let n of e)oH(n,t);return[...t]}if(!e||"object"!=typeof e)return[...t];for(let[n,r]of Object.entries(e)){if(n.toLowerCase().replace(/[_-]/g,"").includes("logid")){if("string"==typeof r&&r)t.add(r);else if(Array.isArray(r))for(let e of r)"string"==typeof e&&e&&t.add(e);continue}oH(r,t)}return[...t]}function oG(e,t){e.onLog?.(t)}function oV(e){try{return JSON.parse(e)}catch{return}}function oq({detail:e,requestHeaders:t,status:n,targetUrl:r}){if("applet0930"===process.env.DEBUG){if("number"==typeof n)return void ru.request({method:"CONNECT",url:r.pathname,statusCode:n,headers:t,context:{detail:e}});ru.info("Bridge connection pending",{url:r.pathname,detail:e,ppe:eb(t)})}}function oJ(e,t={}){"applet0930"===process.env.DEBUG&&ru.info(e,t)}async function oK(e,t){let n=JSON.stringify({sandbox_session_id:e.sandboxSessionId,...t}),r={"content-type":"application/json",[rb]:e.sandboxSessionId,...or()};if(e.targetOrigin){let t=new URL(oN,e.targetOrigin),o=await fetch(t,{body:n,headers:r,method:"POST"}),i=await o.text();if(rk({method:"POST",requestBody:n,requestHeaders:r,responseBody:i,responseHeaders:o.headers,statusCode:o.status,targetUrl:t}),!o.ok)throw Error(`upload bridge response failed: ${o.status} ${i}`);return{responseBody:i,responseHeaders:Object.fromEntries(o.headers),responsePayload:oV(i)}}let o=new URL(oN,Z),i=await oa({body:n,headers:r,internal:!0,method:"POST",path:oN}),a=await i.text();if(rk({method:"POST",requestBody:n,requestHeaders:r,responseBody:a,responseHeaders:i.headers,statusCode:i.status,targetUrl:o}),!i.ok)throw Error(`upload bridge response failed: ${i.status} ${a}`);return{responseBody:a,responseHeaders:Object.fromEntries(i.headers),responsePayload:oV(a)}}async function oz(e,t){let n;try{n=JSON.parse(t)}catch(e){ru.warn("Sandbox Bridge request parse failed",{reason:e.message});return}let r=Date.now(),o=`bridge-${r}-${++oB}`,i=n.request_id||"",a={id:o,request:n,requestId:i,sandboxSessionId:e.sandboxSessionId,timestamp:r};oG(e,{...a,logIds:oH(n),status:"pending",updatedAtMs:r});let s=await oW(n),l={...s.response,headers:s.responseHeaders,status_text:s.statusText};try{let t=await oK(e,s.response);oG(e,{...a,logIds:oH([n,l,t]),response:l,status:s.response.success?"success":"error",updatedAtMs:Date.now()})}catch(t){throw oG(e,{...a,errorMessage:t instanceof Error?t.message:String(t),logIds:oH([n,l]),response:l,status:"error",updatedAtMs:Date.now()}),t}}async function oY(e,t,n){let r={sandbox_session_id:e.sandboxSessionId},o=new URL(`${oR}?sandbox_session_id=${encodeURIComponent(e.sandboxSessionId)}`,Z),i=(c=e.sandboxSessionId,{accept:"text/event-stream",host:o.host,[rb]:c,...or()});oq({detail:`host=${i.host} session=${oU(e.sandboxSessionId)}`,requestHeaders:i,status:"pending",targetUrl:o}),oJ("bridge/events request",{headers:{accept:i.accept,host:i.host,[rb]:oU(e.sandboxSessionId),"x-tt-env":i["x-tt-env"],"x-use-ppe":i["x-use-ppe"]},path:oR,query:r});let a=await oa({headers:i,internal:!0,method:"GET",path:oR,query:r,signal:t});if(oq({detail:`content-type=${a.headers.get("content-type")??""}`,requestHeaders:i,status:a.status,targetUrl:o}),!a.ok||!a.body){let e=await a.text().catch(()=>"");rk({method:"GET",requestBody:void 0,requestHeaders:i,responseBody:e,responseHeaders:a.headers,statusCode:a.status,targetUrl:o}),ru.warn("Sandbox Bridge events request failed",{status:a.status,body:e.slice(0,500)});let t=Error(`Sandbox Bridge SSE failed: ${a.status} ${e}`);throw t.status=a.status,t}rk({method:"GET",requestBody:void 0,requestHeaders:i,responseBody:"",responseHeaders:a.headers,statusCode:a.status,targetUrl:o}),n?.();let s=a.body.getReader(),l=new o$.TextDecoder,p="";for(;!t.aborted;){let{done:t,value:n}=await s.read();if(t){oJ("bridge/events stream ended",{session:oU(e.sandboxSessionId)});break}let r=(p+=l.decode(n,{stream:!0})).search(/\r?\n\r?\n/);for(;r>=0;){let t=p.slice(0,r),n=p.slice(r).match(/^\r?\n\r?\n/);p=p.slice(r+(n?.[0].length??2));let s=function(e){let t="message",n=[];for(let r of e.split(/\r?\n/)){if(r.startsWith("event:")){t=r.slice(6).trim();continue}r.startsWith("data:")&&n.push(r.slice(5).trimStart())}return{data:n.join("\n"),name:t}}(t);if(!function(e,t){if("applet0930"!==process.env.DEBUG||oM.has(e.name))return;let n=function(e){try{let t=JSON.parse(e);return"string"==typeof t.request_id?t.request_id:void 0}catch{return}}(e.data);ru.info("Bridge event received",{event:e.name,requestId:n,ppe:eb(t)}),ru.info(`Event detail
44
+ ${e.data}`)}(s,i),"bridge_request"===s.name){var c,d=a.headers,u=a.status;rk({method:`EVENT ${s.name}`,requestBody:s.data,requestHeaders:i,responseBody:"",responseHeaders:d,statusCode:u,targetUrl:o}),oz(e,s.data).catch(e=>{ru.warn("Sandbox Bridge request failed",{reason:e.message})})}else if("sandbox_resource_changed"===s.name){let t=function(e){let t=oV(e);if(!t||"object"!=typeof t||Array.isArray(t))return;let n=t.data&&"object"==typeof t.data&&!Array.isArray(t.data)?t.data:void 0,r=n?.resource,o=n?.action,i=n?.resource_id,a=n?.revision;if(("notice"===r||"task"===r)&&("upsert"===o||"remove"===o)&&"string"==typeof i&&i&&("number"==typeof a||"string"==typeof a))return{action:o,eventId:"string"==typeof t.event_id?t.event_id:"",occurredAtMs:"number"==typeof t.occurred_at_ms?t.occurred_at_ms:void 0,resource:r,resourceId:i,revision:a}}(s.data);t?e.onResourceChanged?.(t):ru.warn("Sandbox resource event parse failed")}else if("card_delta"===s.name){let t=function(e){let t=oV(e);if(!t||"object"!=typeof t||Array.isArray(t))return;let n=t.data&&"object"==typeof t.data&&!Array.isArray(t.data)?t.data:void 0,r=n?.card_delta;if(!("card_delta"!==t.type||!r||"object"!=typeof r||Array.isArray(r)))return r}(s.data);t?e.onSimulatorEvent?.({payload:t,type:"card_delta"}):ru.warn("Sandbox simulator event parse failed",{event:s.name})}else if("get_simulator_card_snapshots"===s.name){let t=oV(s.data);t&&"object"==typeof t&&!Array.isArray(t)?e.onSimulatorEvent?.({payload:t,type:s.name}):ru.warn("Sandbox simulator event parse failed",{event:s.name})}r=p.search(/\r?\n\r?\n/)}}}async function oX(e,t){let n=0,r=!1;for(;!t.aborted;){try{await oY(e,t,()=>{r=!1,e.onConnectionStatusChange?.("connected")}),n=0}catch(n){if(t.aborted)return;let e=n.status;if(r||(ru.warn("无法接收来自平台服务的请求",{reason:n.message}),r=!0),401===e||403===e||404===e)return}e.onConnectionStatusChange?.("reconnecting"),await (0,v.setTimeout)(oj[Math.min(n,oj.length-1)],void 0,{signal:t}).catch(()=>void 0),n+=1}}let oZ=f("node:net"),oQ="/__web_sdk_sandbox_bridge_logs",o0="/__web_sdk_sandbox_resource_events",o1="DOUBAO_APPS_SANDBOX_BRIDGE_ORIGINS",o2="/app_developer/api/sandbox/session/business_info/update";function o3(e){if(!e)return!1;try{return tt.statSync(e).isFile()}catch{return!1}}async function o4({body:e,headers:t,method:n,sandboxPath:r,targetOrigin:o,targetUrl:i}){let a=new AbortController,s=setTimeout(()=>a.abort(),3e4);try{return o?await fetch(i,{body:e,headers:t,method:n,signal:a.signal}):await oa({internal:!0,path:r,body:e,headers:t,method:n,signal:a.signal})}catch(e){if(a.signal.aborted)throw Error(`Sandbox session 请求超时(30000ms):${i}`);throw e}finally{clearTimeout(s)}}function o5(e,t){return(e?.[t]??process.env[t])?.trim()??""}function o9(e,t,n,r,o,i){if("applet0930"!==process.env.DEBUG)return;let a=Number(process.hrtime.bigint()-r)/1e6;ru.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:a,headers:o,logId:i})}function o8({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a}){rk({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a})}async function o6(e,t,n,r,o,i){let a,s,l="/app_developer/api/sandbox/session/create",p="POST",c=function(){let e=new Set;for(let t of(process.env[o1]??"").split(",")){let n=t.trim();if(n)try{let t=new URL(n),r=t.hostname.replace(/^\[|\]$/g,"").toLowerCase(),o="localhost"===r||"::1"===r||4===(0,oZ.isIP)(r)&&r.startsWith("127.");if("http:"!==t.protocol&&"https:"!==t.protocol||!o)throw Error("only loopback HTTP(S) origins are allowed");e.add(t.origin)}catch(e){throw Error(`${o1} contains an invalid origin: ${n} (${e instanceof Error?e.message:String(e)})`)}}return[...e]}(),d=JSON.stringify({sandbox_project_id:e,manifest:n?.()??(o3(t)?tt.readFileSync(t,"utf8"):""),business_templates:o3(r)?tt.readFileSync(r,"utf8"):"",...i?{app_id:i}:{},...c.length>0?{bridge_origins:c}:{}}),u={"content-type":"application/json",...or()},m=new URL(l,o??Z),h=process.hrtime.bigint();try{a=await o4({body:d,headers:u,method:p,sandboxPath:l,targetOrigin:o,targetUrl:m})}catch(t){let e=`创建 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw o9(p,m,502,h,u),o8({method:p,requestBody:d,requestHeaders:u,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:m}),t}let f=a.headers.get(r_)||"",g=await a.text();o9(p,m,a.status,h,u,f),o8({method:p,requestBody:d,requestHeaders:u,responseBody:g,responseHeaders:a.headers,statusCode:a.status,targetUrl:m});try{s=JSON.parse(g||"{}")}catch{throw Error(`创建 Sandbox session 失败:HTTP ${a.status} ${a.statusText||g||"响应不是有效 JSON"}${f?`,log_id=${f}`:""}`)}if(!a.ok||0!==s.code)throw Error(`创建 Sandbox session 失败:${s.message||a.statusText||a.status}${s.log_id||f?`,log_id=${s.log_id||f}`:""}`);let y=s.data?.sandbox_session_id,b=s.data?.sandbox_appid;if(!y||!b)throw Error(`创建 Sandbox session 失败:响应缺少 ${y?"sandbox_appid":"sandbox_session_id"}${s.log_id||f?`,log_id=${s.log_id||f}`:""}`);return{appId:b,sessionId:y}}async function o7(e,t,n,r,o,i){try{return await o6(e,t,n,r,o,i)}catch(e){return ru.warn(`Sandbox 平台服务模拟已跳过:${e instanceof Error?e.message:String(e)}`),{appId:"",sessionId:""}}}function ie(){return{csrUploaded:!1,phoneNumberUploaded:!1}}function it(e){return{csrUploaded:!!e,phoneNumberUploaded:!0}}async function ir(e,t){let n,r,o="/app_developer/api/sandbox/session/business_info/get",i="POST",a=JSON.stringify({sandbox_session_id:e}),s={"content-type":"application/json",...or()},l=new URL(o,t??Z),p=process.hrtime.bigint();try{n=await o4({body:a,headers:s,method:i,sandboxPath:o,targetOrigin:t,targetUrl:l})}catch(e){throw o9(i,l,502,p,s),e}let c=n.headers.get(r_)||"",d=await n.text();o9(i,l,n.status,p,s,c);try{r=JSON.parse(d||"{}")}catch{throw o8({method:i,requestBody:a,requestHeaders:s,responseBody:JSON.stringify({omitted:"invalid business info response"}),responseHeaders:n.headers,statusCode:n.status,targetUrl:l}),Error(`获取 Sandbox session 信息失败:HTTP ${n.status} 响应不是有效 JSON${c?`,log_id=${c}`:""}`)}let u={csrUploaded:!!r.data?.csr_pem?.trim(),phoneNumberUploaded:!!r.data?.phone_num?.trim()};if(o8({method:i,requestBody:a,requestHeaders:s,responseBody:JSON.stringify({code:r.code,data:u,log_id:r.log_id}),responseHeaders:n.headers,statusCode:n.status,targetUrl:l}),!n.ok||void 0!==r.code&&0!==r.code)throw Error(`获取 Sandbox session 信息失败:${r.message||n.statusText||n.status}${r.log_id||c?`,log_id=${r.log_id||c}`:""}`);return u}async function io(e,t){if(!e)return ie();try{return await ir(e,t)}catch(e){return ru.warn(`Sandbox session 信息查询已跳过:${e instanceof Error?e.message:String(e)}`),ie()}}async function ii(e,t,n){let r,o,i="POST",a=JSON.stringify({...e.csrPem?{csr_pem:e.csrPem}:{},phone_num:e.phoneNum,sandbox_session_id:t}),s={"content-type":"application/json",...or(),[rb]:t},l=new URL(o2,n??Z),p=process.hrtime.bigint();try{r=await o4({body:a,headers:s,method:i,sandboxPath:o2,targetOrigin:n,targetUrl:l})}catch(e){throw o9(i,l,502,p,s),e}let c=r.headers.get(r_)||"",d=await r.text();o9(i,l,r.status,p,s,c),o8({method:i,requestBody:JSON.stringify({...e.csrPem?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]",sandbox_session_id:t}),requestHeaders:s,responseBody:d,responseHeaders:r.headers,statusCode:r.status,targetUrl:l});try{o=JSON.parse(d||"{}")}catch{throw Error(`更新 Sandbox session 信息失败:HTTP ${r.status} 响应不是有效 JSON${c?`,log_id=${c}`:""}`)}if(!r.ok||void 0!==o.code&&0!==o.code)throw Error(`更新 Sandbox session 信息失败:${o.message||r.statusText||r.status}${o.log_id||c?`,log_id=${o.log_id||c}`:""}`)}async function ia(e,t,n,r){if(e&&t.phoneNum&&(!n||t.csrPem))try{return await ii({...t.csrPem?{csrPem:t.csrPem}:{},phoneNum:t.phoneNum},e,r),ru.info("Sandbox business info 已自动上传",{sessionId:e}),it(t.csrPem)}catch(e){ru.warn(`Sandbox business info 自动上传已跳过:${e instanceof Error?e.message:String(e)}`);return}}async function is(e,t){let n,r="/app_developer/api/sandbox/session/revoke",o="POST",i=JSON.stringify({sandbox_session_id:e}),a={"content-type":"application/json",...or()},s=new URL(r,t??Z),l=process.hrtime.bigint();try{n=await o4({body:i,headers:a,method:o,sandboxPath:r,targetOrigin:t,targetUrl:s})}catch(t){let e=`撤回 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw o9(o,s,502,l,a),o8({method:o,requestBody:i,requestHeaders:a,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:s}),t}let p=n.headers.get(r_)||"",c=await n.text();o9(o,s,n.status,l,a,p),o8({method:o,requestBody:i,requestHeaders:a,responseBody:c,responseHeaders:n.headers,statusCode:n.status,targetUrl:s});let d=JSON.parse(c||"{}");if(!n.ok||0!==d.code)throw Error(`撤回 Sandbox session 失败:${d.message||n.statusText||n.status}${d.log_id||p?`,log_id=${d.log_id||p}`:""}`)}async function il(e){if(e.recreatePromise)return e.recreatePromise;e.recreatePromise=(async()=>{var t;let n=e.sandboxSessionId;n&&await is(n,e.sandboxTargetOrigin),e.bridge?.close(),e.bridge=void 0;let r=await o6(e.sandboxProjectId,e.simulatorManifestPath,e.simulatorManifestReader,e.simulatorBusinessTemplatesPath,e.sandboxTargetOrigin,e.sandboxSessionAppId),o=r.sessionId,i=!e.sandboxSessionAppId,a=await ia(o,e.businessInfoInput,i,e.sandboxTargetOrigin)??await io(o,e.sandboxTargetOrigin);return e.sandboxAppId=r.appId,e.sandboxSessionId=o,e.businessInfo=a,(t=e).resourceConnectionStatus="connecting",t.resourceEventSequence=0,t.resourceEvents.length=0,t.simulatorEventSequence=0,t.simulatorEvents.length=0,t.resourceGeneration+=1,ip(t),e.bridge=ic(e,o),ru.info("Sandbox session 已重建",{sessionId:o}),{...r,businessInfoUploaded:a.phoneNumberUploaded&&(!i||a.csrUploaded)}})();try{return await e.recreatePromise}finally{e.recreatePromise=void 0}}function ip(e){e.resourceEventsUpdatedAtMs=Math.max(Date.now(),e.resourceEventsUpdatedAtMs+1)}function ic(e,t){var n={onConnectionStatusChange:t=>{e.resourceConnectionStatus!==t&&(e.resourceConnectionStatus=t,ip(e))},onLog:t=>{let n=e.bridgeLogs.findIndex(e=>e.id===t.id);n>=0?e.bridgeLogs[n]=t:(e.bridgeLogs.push(t),e.bridgeLogs.length>200&&e.bridgeLogs.splice(0,e.bridgeLogs.length-200)),e.bridgeLogsUpdatedAtMs=Math.max(Date.now(),e.bridgeLogsUpdatedAtMs+1)},onResourceChanged:t=>{e.resourceEvents.push({...t,sequence:++e.resourceEventSequence}),e.resourceEvents.length>200&&e.resourceEvents.splice(0,e.resourceEvents.length-200),ip(e)},onSimulatorEvent:t=>{e.simulatorEvents.push({...t,sequence:++e.simulatorEventSequence}),e.simulatorEvents.length>200&&e.simulatorEvents.splice(0,e.simulatorEvents.length-200),ip(e)},sandboxSessionId:t,targetOrigin:e.sandboxTargetOrigin};if(!n.sandboxSessionId)return void ru.warn("Sandbox Bridge skipped: missing sandbox session id");let r=new AbortController;return oJ("start sandbox bridge",{session:oU(n.sandboxSessionId)}),n.onConnectionStatusChange?.("connecting"),oX(n,r.signal),{close:()=>r.abort()}}async function id(e,t,n){if("POST"!==e.method)return void rA(t,405,"Method not allowed");if(!n)return void rA(t,503,"Sandbox session is not initialized");try{let r=await rC(e,t,1048576);if(r){let e=JSON.parse(r);if(void 0!==e.csrPem&&"string"!=typeof e.csrPem||"string"!=typeof e.phoneNum)return void rA(t,400,"Invalid Sandbox business info");n.businessInfoInput={..."string"==typeof e.csrPem&&e.csrPem.trim()?{csrPem:e.csrPem.trim()}:{},phoneNum:e.phoneNum.trim()}}let o=await il(n);rT(t,200,{code:0,data:{sandbox_appid:o.appId,business_info_uploaded:o.businessInfoUploaded,sandbox_session_id:o.sessionId},message:"ok"})}catch(e){rA(t,500,e.message)}}function iu(e){let t=e.appId?.trim(),n=t&&!t.startsWith("doubao-sandbox-app-")?t:void 0,r=function(e){let t=tn.resolve(e??process.cwd()),n=t;try{n=tt.realpathSync.native(t)}catch{}return(0,od.createHash)("sha256").update(n).digest("hex")}(e.appDirectory),o=function(e,t){let n=o5(e,"DOUBAO_SANDBOX_PHONE_NUM"),r=o5(e,"DOUBAO_SANDBOX_CSR_FILE"),o=function(e,t){if(!e)return;let n=tn.isAbsolute(e)?e:tn.resolve(t??process.cwd(),e);return o3(n)?n:void 0}(r,t),i="";if(r&&!o)ru.warn(`Sandbox CSR 文件不存在:${r}`);else if(o)try{i=tt.readFileSync(o,"utf8").trim()}catch(e){ru.warn(`Sandbox CSR 文件读取失败:${e instanceof Error?e.message:String(e)}`)}return{...n?{phoneNum:n}:{},...i?{csrPem:i}:{}}}(e.env,e.appDirectory),i=`${o.phoneNum??""}\0${o.csrPem??""}`;return{businessInfoInput:o,businessInfoInputKey:i,businessTemplatesPath:e.businessTemplatesPath,key:JSON.stringify([i,r,n,e.targetOrigin,e.businessTemplatesPath,e.manifestPath]),manifestReader:e.manifestReader,manifestPath:e.manifestPath,projectId:r,sessionAppId:n,targetOrigin:e.targetOrigin}}class im{configKey;manifestReader;state;constructor(e,t,n){this.state=e,this.configKey=t,this.manifestReader=n}static async start(e){let t=iu(e),n=await o7(t.projectId,t.manifestPath,t.manifestReader,t.businessTemplatesPath,t.targetOrigin,t.sessionAppId),r=!t.sessionAppId,o={bridgeLogs:[],bridgeLogsUpdatedAtMs:0,businessInfo:await ia(n.sessionId,t.businessInfoInput,r,t.targetOrigin)??await io(n.sessionId,t.targetOrigin),businessInfoInput:t.businessInfoInput,resourceConnectionStatus:"connecting",resourceEventSequence:0,resourceEvents:[],resourceEventsUpdatedAtMs:0,resourceGeneration:1,simulatorEventSequence:0,simulatorEvents:[],sandboxAppId:n.appId,sandboxProjectId:t.projectId,sandboxSessionAppId:t.sessionAppId,sandboxSessionId:n.sessionId,sandboxTargetOrigin:t.targetOrigin,simulatorBusinessTemplatesPath:t.businessTemplatesPath,simulatorManifestReader:t.manifestReader,simulatorManifestPath:t.manifestPath},i=new im(o,t.key,t.manifestReader);return o.bridge=n.sessionId?ic(o,n.sessionId):void 0,i}get sessionId(){return this.state.sandboxSessionId}close(){this.state.bridge?.close()}matches(e){let t=iu(e);return this.configKey===t.key&&this.manifestReader===t.manifestReader}getDebugContext(){var e;let t;return{fileSystemNamespace:(t=(e=this.state).sandboxSessionAppId?`real-app\0${e.sandboxSessionAppId}`:`virtual-app\0${e.sandboxAppId}\0${e.sandboxProjectId}`,`sandbox-v1:${(0,od.createHash)("sha256").update(t).digest("hex")}`),sandboxSessionAvailable:!!this.state.sandboxSessionId,sandboxCsrRequired:!this.state.sandboxSessionAppId,sandboxCsrUploaded:this.state.businessInfo.csrUploaded,sandboxPhoneNumberUploaded:this.state.businessInfo.phoneNumberUploaded,sandboxBridgeLogsEndpoint:oQ,sandboxResourceEventsEndpoint:o0,...this.state.businessInfoInput.csrPem?{sandboxCsrPem:this.state.businessInfoInput.csrPem}:{},...this.state.businessInfoInput.phoneNum?{sandboxPhoneNum:this.state.businessInfoInput.phoneNum}:{}}}handleRequest(e,t){var n,r;let o=rw(e)?.pathname;return o===oQ?(n=this.state,"GET"!==e.method&&"DELETE"!==e.method?rA(t,405,"Method not allowed"):("DELETE"===e.method&&n&&(n.bridgeLogs.length=0,n.bridgeLogsUpdatedAtMs=Math.max(Date.now(),n.bridgeLogsUpdatedAtMs+1)),rT(t,200,{logs:n?.bridgeLogs??[],updatedAtMs:n?.bridgeLogsUpdatedAtMs??0},{"Cache-Control":"no-cache"})),!0):o===o0?(r=this.state,"GET"!==e.method?rA(t,405,"Method not allowed"):rT(t,200,{connectionStatus:r?.resourceConnectionStatus??"connecting",events:r?.resourceEvents??[],generation:r?.resourceGeneration??0,simulatorEvents:r?.simulatorEvents??[],updatedAtMs:r?.resourceEventsUpdatedAtMs??0},{"Cache-Control":"no-cache"}),!0):rw(e)?.pathname==="/__web_sdk_sandbox_proxy__"?(oD(e,t,{onBusinessInfoUpdated:e=>{this.state.businessInfo=it(e?.csrPem),e&&(this.state.businessInfoInput=e)},sandboxAppId:this.state.sandboxAppId,sandboxSessionId:this.state.sandboxSessionId,targetOrigin:this.state.sandboxTargetOrigin}),!0):"/__web_sdk_sandbox_session_recreate__"===o&&(id(e,t,this.state),!0)}}let ih="/__tools/tools.json",ig="manifest.yaml",iy="SKILL.md",ib=tn.join("skill",iy),i_=tn.join(".dbx","config.json");function iw(e){if(!e)return!1;try{return tt.statSync(e).isFile()}catch{return!1}}function iv(e,t){if(!e)return;let n=tn.isAbsolute(e)?e:tn.resolve(t??process.cwd(),e);return iw(n)?n:void 0}function iE(e,t){if(e&&t)return tn.relative(t,e).split(tn.sep).join("/")||"."}function iS(e){let t=tn.resolve(e);for(;;){let e;if(e=t,iw(tn.join(e,i_)))return t;let n=tn.dirname(t);if(n===t)break;t=n}}function ix(e){return[...new Set(e.filter(Boolean))].find(iw)}function iA(e){if(!e)return!1;try{return tt.statSync(e).isDirectory()}catch{return!1}}function iT(e){return iw(e)?e:iA(e)?ix([tn.join(e,iy)]):void 0}function iC(e,t,n,r){let o;if(!t.reader&&iw(t.sourcePath)){let n=tt.statSync(t.sourcePath);rS(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":n.size,"Content-Type":r}),rx(e,t.sourcePath);return}try{o=t.reader?.()}catch{o=void 0}void 0===o?rA(e,404,`${n} not found`):(rS(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":Buffer.byteLength(o),"Content-Type":r}),e.end(o))}class iO{appDirectory;businessTemplatesPath;manifestPath;manifestReader;toolsConfigReader;toolsConfigSource;manifestSource;skillReader;skillSource;sourceKey;constructor(e){var t,n,r;this.appDirectory=e.appDirectory,this.manifestPath=e.manifestPath?iv(e.manifestPath,e.appDirectory):function(e){if(!e)return;let t=iS(e);return ix([t?tn.join(t,ig):void 0,tn.join(e,ig),tn.join(process.cwd(),ig)])}(e.appDirectory),this.businessTemplatesPath=(t=this.manifestPath,n=e.businessTemplatesPath,r=e.appDirectory,n?iv(n,r):t?iv(tn.join(tn.dirname(t),"business-templates.yaml"),r):void 0),this.manifestReader=e.manifestReader,this.toolsConfigReader=e.toolsConfigReader,this.skillReader=e.skillReader;let o=e.skillSourcePath?e.skillSourcePath:function(e,t){try{if(t){if(!t)return;let n=e?iS(e):void 0;return[...new Set((tn.isAbsolute(t)?[void 0]:[e,n,process.cwd()]).map(e=>tn.isAbsolute(t)?t:tn.resolve(e??process.cwd(),t)))].map(iT).find(Boolean)}if(!e)return;let n=iS(e);return ix([n?tn.join(n,ib):void 0,tn.join(e,ib),tn.join(process.cwd(),ib)])}catch{return}}(e.appDirectory,e.skillPath);this.toolsConfigSource={reader:e.toolsConfigReader,sourcePath:e.toolsConfigSourcePath},this.manifestSource={reader:e.manifestReader,sourcePath:e.manifestSourcePath??this.manifestPath},this.skillSource={reader:e.skillReader??(()=>(function(e){var t;let n;if(iw(e))return[tt.readFileSync(e,"utf8").trim(),...(t=tn.dirname(e),!iA(n=tn.join(t,"references"))?[]:(function e(t){let n;try{n=tt.readdirSync(t,{withFileTypes:!0})}catch{return[]}let r=[];for(let o of n){let n=tn.join(t,o.name);if(o.isDirectory()){r.push(...e(n));continue}o.isFile()&&[".md",".markdown",".txt"].includes(tn.extname(n).toLowerCase())&&r.push(n)}return r})(n).sort((e,t)=>tn.relative(n,e).localeCompare(tn.relative(n,t))).flatMap(e=>{let n=tt.readFileSync(e,"utf8").trim();if(!n)return[];let r=tn.relative(t,e).split(tn.sep).join("/");return[`<!-- local-skill-reference:${r} -->
45
+ ${n}`]}))].filter(Boolean).join("\n\n---\n\n")})(o)),sourcePath:o},this.sourceKey=JSON.stringify([this.appDirectory,this.businessTemplatesPath,this.manifestPath,this.toolsConfigSource.sourcePath,this.manifestSource.sourcePath,this.skillSource.sourcePath])}matches(e){let t=new iO(e);return this.sourceKey===t.sourceKey&&this.toolsConfigReader===t.toolsConfigReader&&this.manifestReader===t.manifestReader&&this.skillReader===t.skillReader}getDebugContext(){let e=iE(this.businessTemplatesPath,this.appDirectory),t=iE(this.toolsConfigSource.sourcePath,this.appDirectory),n=iE(this.manifestSource.sourcePath,this.appDirectory),r=iE(this.skillSource.sourcePath,this.appDirectory);return{...this.toolsConfigSource.sourcePath?{toolsConfigOriginalUrl:this.toolsConfigSource.sourcePath,toolsConfigUrl:ih,...t?{toolsConfigRelativePath:t}:{}}:{},...this.manifestSource.sourcePath?{simulatorManifestOriginalUrl:this.manifestSource.sourcePath,...n?{simulatorManifestRelativePath:n}:{}}:{},...this.businessTemplatesPath?{simulatorBusinessTemplatesOriginalUrl:this.businessTemplatesPath,...e?{simulatorBusinessTemplatesRelativePath:e}:{}}:{},...this.skillSource.sourcePath?{simulatorSkillOriginalUrl:this.skillSource.sourcePath,...r?{simulatorSkillRelativePath:r}:{}}:{}}}handleRequest(e,t){let n=rw(e)?.pathname;return n===ih?(iC(t,this.toolsConfigSource,"Tools config","application/json; charset=utf-8"),!0):"/__simulator_manifest/manifest.yaml"===n?(iC(t,this.manifestSource,"Simulator manifest","application/yaml; charset=utf-8"),!0):"/__simulator_skill/skill.md"===n&&(iC(t,this.skillSource,"Simulator skill","text/markdown; charset=utf-8"),!0)}}let iP=f("node:stream"),iI="/app_developer/api",ik=new Set([`${iI}/simulator/chat`,`${iI}/simulator/tool/report`]),iD={"Access-Control-Expose-Headers":r_};async function i$(e,t,n,r){let o=new AbortController,i=()=>o.abort();e.once("aborted",i),e.socket.once("close",i),t.once("close",()=>{t.writableEnded||i()});try{let i=e.method??"GET",a=process.hrtime.bigint(),s=ij(e,n,r),l="GET"===i||"HEAD"===i?void 0:await rC(e,t,0xa00000),p=await oa({internal:!0,path:`${n.pathname}${n.search}`,method:i,body:l,headers:s,signal:o.signal});if(iM(i,n,p.status,a,s,p.headers.get(r_)??void 0),t.destroyed||t.writableEnded)return void p.body?.cancel().catch(()=>void 0);await iN({method:i,requestBody:l,requestHeaders:s,requestUrl:n,response:t,upstreamResponse:p})}catch(e){if(t.destroyed||t.writableEnded||o.signal.aborted)return;rA(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,iD)}}async function iR(e,t,n,r,o){let i=new AbortController,a=()=>i.abort();e.once("aborted",a),e.socket.once("close",a),t.once("close",()=>{t.writableEnded||a()});try{let a=e.method??"GET",s=process.hrtime.bigint(),l="GET"===a||"HEAD"===a?void 0:await rC(e,t,0xa00000),p=ij(e,n,o,r),c=await fetch(r,{body:l,headers:p,method:a,signal:i.signal});if(iM(a,n,c.status,s,p,c.headers.get(r_)??void 0),t.destroyed||t.writableEnded)return void c.body?.cancel().catch(()=>void 0);await iN({method:a,requestBody:l,requestHeaders:p,requestUrl:n,response:t,upstreamResponse:c})}catch(e){if(t.destroyed||t.writableEnded||i.signal.aborted)return;rA(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,iD)}}async function iN({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:o,upstreamResponse:i}){var a,s;if(rS(o,iD),o.writeHead(i.status,rE(Object.fromEntries(i.headers),[r_])),a=r,s=i,a.pathname===`${iI}/simulator/chat`||s.headers.get("content-type")?.toLowerCase().includes("text/event-stream")===!0)return void await iL({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:o,upstreamResponse:i});if("applet0930"!==process.env.DEBUG)return i.body?void await (0,g.pipeline)(iP.Readable.fromWeb(i.body),o):void o.end();let l=await rO(i);rk({method:e,requestBody:t,requestHeaders:n,responseBody:l,responseHeaders:i.headers,statusCode:i.status,targetUrl:r}),o.end(l)}async function iL({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:o,upstreamResponse:i}){if(!i.body){rk({method:e,requestBody:t,requestHeaders:n,responseBody:"",responseHeaders:i.headers,statusCode:i.status,targetUrl:r}),o.end();return}let a=iP.Readable.fromWeb(i.body);if("applet0930"!==process.env.DEBUG)return void await (0,g.pipeline)(a,o);rk({method:e,requestBody:t,requestHeaders:n,responseBody:"(event stream)",responseHeaders:i.headers,statusCode:i.status,targetUrl:r});let s=new iP.Transform({transform(e,t,n){let o;try{o=String(e).split("\n\n").filter(Boolean)}catch(t){return ru.error(`failed to decode event stream chunk: ${t?.toString()}`),n(null,e)}for(let e of o)ru.info(`Event from ${r.pathname}${r.search}
46
+ ${e}`);n(null,e)}});await (0,g.pipeline)(a,s,o)}function iM(e,t,n,r,o,i){if("applet0930"!==process.env.DEBUG)return;let a=Number(process.hrtime.bigint()-r)/1e6;ru.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:a,headers:o,logId:i})}function ij(e,t,n,r=new URL(`${t.pathname}${t.search}`,Z)){return Object.fromEntries(Object.entries(rv(e.headers,r,{...or(),...n?{[rb]:n}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]))}let iB="/__web_artifacts",iU="/wsd",iF="/__webview",iW=`${iF}/client.js`,iH=`${iF}/page`,iG=`${iF}/runtime`,iV=`${iF}/sw.js`,iq="x-doubao-web-view-target",iJ="Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",iK=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.0.42-rc.10_@emnapi+core@1.11.3_@emnapi+runtime@1.1_20b2ab4c2ed5d84bd875033d6bad8b60/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-page-client.js"),f.b),iz=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.0.42-rc.10_@emnapi+core@1.11.3_@emnapi+runtime@1.1_20b2ab4c2ed5d84bd875033d6bad8b60/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-service-worker.js"),f.b);function iY(e){return({".css":"text/css; charset=utf-8",".html":"text/html; charset=utf-8",".js":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".map":"application/json; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".svg":"image/svg+xml",".wasm":"application/wasm",".yaml":"application/yaml; charset=utf-8",".yml":"application/yaml; charset=utf-8"})[tn.extname(e).toLowerCase()]??"application/octet-stream"}function iX(e){if(!e)return!1;try{return tt.statSync(e).isFile()}catch{return!1}}function iZ(e){if(!e)throw Error("url 必须为非空字符串");let t=new URL(e);if("http:"!==t.protocol&&"https:"!==t.protocol)throw Error(`不支持的请求协议:${t.protocol}`);return t}function iQ(e,t="/"){let n,r,o=new URL(t,"http://localhost");try{n=decodeURIComponent(o.pathname)}catch{return}let i="/"===n||n.endsWith("/")?`${n}index.html`:n,a=tn.join(e,i);if(""===(r=tn.relative(e,a))||!r.startsWith("..")&&!tn.isAbsolute(r))return a}async function i0(e,t){if("POST"!==e.method)return void rT(t,405,{message:"Method Not Allowed"});try{var n,r;let o,i,a,s=JSON.parse(await rC(e,t,0xa00000)),l=iZ(s.url),p=(s.method??"GET").toUpperCase(),c=(n=s.header,i=new Headers(n??{"content-type":"application/json"}),["connection","content-length","host","origin","referer"].forEach(e=>i.delete(e)),i),d=await fetch(l,{body:"GET"!==p&&"HEAD"!==p?function(e,t){var n;let r=e.data;if(null==r)return;if("base64"===e.dataEncoding&&"string"==typeof r){let e;return e=new ArrayBuffer((n=Buffer.from(r,"base64")).byteLength),new Uint8Array(e).set(n),e}if("string"==typeof r)return r;let o=t.get("content-type")?.toLowerCase()??"";if(o.includes("application/x-www-form-urlencoded")&&"object"==typeof r){let e=new URLSearchParams;return Object.entries(r).forEach(([t,n])=>{e.set(t,String(n))}),e.toString()}return o.includes("application/json")||"object"==typeof r?JSON.stringify(r):String(r)}(s,c):void 0,headers:c,method:p}),u="arraybuffer"===s.dataType||"arraybuffer"===s.responseType;if(u)o=Buffer.from(await d.arrayBuffer()).toString("base64");else{let e=await d.text();o="string"===s.dataType||0===e.length?e:JSON.parse(e)}rT(t,200,{data:o,dataEncoding:u?"base64":void 0,header:(r=d.headers,a={},r.forEach((e,t)=>{a[t]=e}),a),statusCode:d.status})}catch(e){rT(t,500,{message:e instanceof Error?e.message:String(e)})}}function i1(e,t,n,r=!1){if("GET"!==e.method&&"HEAD"!==e.method)return void rA(t,405,"Method Not Allowed");let o=tt.readFileSync(n,"utf8");rS(t),t.writeHead(200,{"cache-control":"no-store","content-length":Buffer.byteLength(o),"content-type":"text/javascript; charset=utf-8",...r?{"service-worker-allowed":"/"}:{}}),t.end("HEAD"===e.method?void 0:o)}async function i2(e,t){if("GET"!==e.method&&"HEAD"!==e.method)return void rA(t,405,"Method Not Allowed");let n=rw(e);try{let r=iZ(n?.searchParams.get("url")??void 0),o=await fetch(r,{headers:{"user-agent":iJ,..."string"==typeof e.headers.accept?{accept:e.headers.accept}:{},..."string"==typeof e.headers["accept-language"]?{"accept-language":e.headers["accept-language"]}:{}},method:e.method}),i=o.url?new URL(o.url):r,a=o.headers.get("content-type")??"",s=rE(Object.fromEntries(o.headers));if(s["cache-control"]="no-cache",delete s["content-encoding"],delete s["content-length"],"HEAD"===e.method||!a.includes("text/html")){let n="HEAD"===e.method?void 0:Buffer.from(await o.arrayBuffer());rS(t),t.writeHead(o.status,{...s,[iq]:i.toString(),...n?{"content-length":n.byteLength}:{}}),t.end(n);return}let l=function(e,t){let n=new URLSearchParams({mobileUserAgent:iJ,originalPath:`${t.pathname}${t.search}${t.hash}`}).toString().replaceAll("&","&amp;"),r=`<script src="${iW}?${n}"></script>`,o=/<head[^>]*>/i.exec(e);if(o){let t=o.index+o[0].length;return`${e.slice(0,t)}${r}${e.slice(t)}`}return`${r}${e}`}(await o.text(),i);rS(t),t.writeHead(o.status,{...s,[iq]:i.toString(),"content-length":Buffer.byteLength(l)}),t.end(l)}catch(e){rA(t,502,`代理 web-view 页面失败: ${e instanceof Error?e.message:String(e)}`)}}let i3=f("node:child_process");async function i4(e){let{command:t,args:n}="darwin"===process.platform?{command:"open",args:[e]}:"win32"===process.platform?{command:"cmd",args:["/c","start","",e]}:{command:"xdg-open",args:[e]};await new Promise((e,r)=>{let o=(0,i3.spawn)(t,n,{detached:!0,stdio:"ignore"});o.once("error",r),o.once("spawn",()=>{o.unref(),e()})})}async function i5(e,t,n=i4){let r,o=(r=new URL(e),t&&r.searchParams.set("mcp",oc),r.toString());try{await n(o)}catch(e){ru.error("打开 Web 模拟器失败",{error:e}),ru.info("请手动打开 Web 模拟器(本地)",{url:o})}return o}async function i9(e,t){await new Promise((n,r)=>{let o=t=>{e.off("listening",i),r(t)},i=()=>{e.off("error",o),n()};e.once("error",o),e.once("listening",i),e.listen(t,"127.0.0.1")})}async function i8(e){let t=await z(9e3),n=rm.createServer(function({artifactOrigin:e,debugScenes:t,distPath:n,getWidgetViewDataTemplates:r,mcpEndpoint:o,mcpHeaders:i,realDeviceDebugGateway:a,sandboxRuntime:s,simulatorAssets:l,simulatorTargetOrigin:p}){var c;let d,u,m=(c={artifactOrigin:e,debugScenes:t,getWidgetViewDataTemplates:r,mcpEndpoint:o,realDeviceDebugGateway:a,sandboxRuntime:s,simulatorAssets:l},(e,t)=>{let n=rw(e)?.pathname;if("/__web_sdk_debug_context"===n){let n,r;return r="string"==typeof(n=e.headers.host)&&n?`http://${n}`:void 0,rT(t,200,{homeDir:nx.homedir(),...c.simulatorAssets.appDirectory?{launchDir:c.simulatorAssets.appDirectory}:{},debugScenesEndpoint:r3,widgetViewDataTemplatesEndpoint:r4,debuggerMcpEndpoint:r?new URL(r1,r).toString():r1,manifestOriginalUrl:new URL("/base/manifest.json",c.artifactOrigin).toString(),...c.mcpEndpoint?{mcpOriginalEndpoint:c.mcpEndpoint}:{},...c.realDeviceDebugGateway?.getDebugContext()?{realDeviceDebug:c.realDeviceDebugGateway.getDebugContext()}:{},...c.simulatorAssets.getDebugContext(),...c.sandboxRuntime.getDebugContext()},r5),!0}return n===r3?(rT(t,200,c.debugScenes??{errors:[],scenes:[]},r5),!0):n===r4&&(r9(t,c.getWidgetViewDataTemplates),!0)}),h=(u=new rJ(d={}),(e,t)=>rw(e)?.pathname==="/__agent_trace"?(r6(e,t,d,u),!0):rw(e)?.pathname==="/__wsd_control_events"?(!function(e,t,n){if("GET"!==e.method)return rT(t,405,{error:"Method not allowed"});let r=rw(e)?.searchParams.get("clientId")?.trim();r?(rS(t,{"Cache-Control":"no-cache, no-transform",Connection:"keep-alive"}),t.writeHead(200,{"Content-Type":"text/event-stream; charset=utf-8"}),t.write(": connected\n\n"),n.registerClient(r,t)):rT(t,400,{error:"clientId is required"})}(e,t,u),!0):rw(e)?.pathname==="/__wsd_control_results"?(rK(e,t,u),!0):rw(e)?.pathname===r1&&(r2(e,t,d,u),!0)),f=(t,r)=>{let o=rw(t)?.pathname??"/",i=o.replace(/^\/web-sdk\/[^/]+(?=\/wsd(?:\/|$))/,"");o.startsWith(iB)?function(e,t,n){let r=rw(e);if(!r)return rA(t,400,"Bad request");let o=r.pathname.replace(iB,"")||"/",i=new URL(`${o}${r.search}`,n);rD(e,t,{createResponseHeaders:e=>({...rE(e),"cache-control":"no-cache"}),errorMessage:"代理 Web 产物失败",requestHeaders:rv(e.headers,i),targetUrl:i})}(t,r,e):i===iU||i.startsWith(`${iU}/`)?function(e,t,n){let r=n.slice(`${iU}/`.length),o=tn.join(t,"wsd",r);if(!r||r!==tn.basename(r)||!iX(o))return rA(e,404,"Not found");let i=tt.statSync(o);rS(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":i.size,"Content-Type":iY(o)}),rx(e,o)}(r,n,i):"/__web_sdk_request_proxy__"===o?i0(t,r):o===iV?i1(t,r,iz,!0):o===iW?i1(t,r,iK):o===iG?function(e,t){let n,r=rw(e);try{n=iZ(r?.searchParams.get("url")??void 0)}catch(e){rA(t,400,`无效的 web-view 请求地址: ${e instanceof Error?e.message:String(e)}`);return}let o=rv(e.headers,n,{"user-agent":iJ});for(let e of Object.keys(o))e.startsWith("sec-fetch-")&&delete o[e];rD(e,t,{createResponseHeaders:e=>{let t=rE(e),r=Array.isArray(e.location)?e.location[0]:e.location;if(r&&URL.canParse(r,n)){let e=new URL(r,n);t.location=`${iG}?url=${encodeURIComponent(e.toString())}`}return t["cache-control"]="no-cache",t},errorMessage:"代理 web-view 运行时请求失败",requestHeaders:o,targetUrl:n})}(t,r):o===iH?i2(t,r):o.startsWith("/__doubao_web_sdk_native_modules")?function(e,t,n){let r=iQ(n,e.url);if(!r)return rA(t,403,"Forbidden");if(!iX(r))return rA(t,404,"Not found");let o=tt.statSync(r);rS(t),t.writeHead(200,{"Content-Length":o.size,"Content-Type":iY(r)}),rx(t,r)}(t,r,n):o.startsWith("/__")?rA(r,404,"Debugger resource not found"):function(e,t,n){let r=iQ(n,e.url);if(!r)return rA(t,403,"Forbidden");tt.existsSync(r)||(r=tn.join(n,"index.html"));let o=tt.statSync(r);o.isFile()?(rS(t),t.writeHead(200,{"Content-Length":o.size,"Content-Type":iY(r)}),rx(t,r)):rA(t,404,"Not found")}(t,r,n)};return(e,t)=>{let n,r;m(e,t)||a.handleRequest(e,t)||h(e,t)||((n=rw(e))&&(n.pathname===iI||n.pathname.startsWith(`${iI}/`))?function(e,t,n={}){let r=rw(e);if(!r)return rA(t,400,"请求无效",iD);if(!ik.has(r.pathname))return rA(t,404,"未找到模拟器接口",iD);let o=n.targetOrigin??Z,i=new URL(`${r.pathname}${r.search}`,o);n.targetOrigin?iR(e,t,r,i,n.sandboxSessionId):i$(e,t,r,n.sandboxSessionId)}(e,t,{sandboxSessionId:s.sessionId,targetOrigin:p}):!s.handleRequest(e,t)&&((r=rw(e),r?.pathname===oc)?function(e,t,n={}){let r=rw(e),o=ee(n.targetEndpoint);if(!r)return rA(t,400,"Bad request");if(!o)return rA(t,404,"MCP endpoint not configured");let i=new URL(o);for(let[e,t]of new URLSearchParams(r.search))i.searchParams.append(e,t);rD(e,t,{createResponseHeaders:rE,errorMessage:"代理 MCP 请求失败",requestHeaders:rv(e.headers,i,{...or(),...n.headers}),targetUrl:i})}(e,t,{headers:i,targetEndpoint:o}):l.handleRequest(e,t)||f(e,t)))}}(e));return await i9(n,t),{origin:`http://127.0.0.1:${t}`,server:n}}async function i6(e){e.listening&&await new Promise((t,n)=>{e.close(e=>{e?n(e):t()}),e.closeIdleConnections(),e.closeAllConnections()})}async function i7(){if(!r)return;let{realDeviceDebugGateway:e,sandboxRuntime:t,server:n}=r;r=void 0,e.dispose(),t.close(),await i6(n)}async function ae(e){let t;try{var n,o;let i=ee(e.mcpEndpoint),{targetOrigin:a,...s}=e.simulator??{},l={appDirectory:e.appDirectory,toolsConfigReader:e.toolsConfigReader,toolsConfigSourcePath:e.toolsConfigSourcePath,manifestReader:e.simulatorManifestReader,manifestSourcePath:e.simulatorManifestSourcePath,skillReader:e.simulatorSkillReader,skillSourcePath:e.simulatorSkillSourcePath,...s},p=new iO(l),c={appDirectory:e.appDirectory,appId:e.appId,businessTemplatesPath:p.businessTemplatesPath,env:e.env,manifestReader:e.simulatorManifestReader,manifestPath:p.manifestPath,targetOrigin:e.sandboxTargetOrigin};if(n=r,n?.server.listening){if(r?.artifactOrigin===e.artifactOrigin&&r.mcpEndpoint===i&&r.simulatorAssets.matches(l)&&r.getWidgetViewDataTemplates===e.getWidgetViewDataTemplates&&r.sandboxRuntime.matches(c)&&r.simulatorTargetOrigin===a)return await i5(r.origin,i,e.openBrowser),r;await i7()}let d={distPath:o=e.debuggerDistPath,indexPath:tn.join(o,"index.html")};if(!tt.existsSync(d.indexPath))return void ru.error("Web 模拟器资源缺失,请联系框架开发者。");let u=await im.start(c);t=u;let m=new o_,{origin:h,server:f}=await i8({artifactOrigin:e.artifactOrigin,debugScenes:e.debugScenes,distPath:d.distPath,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:i,mcpHeaders:e.mcpHeaders,realDeviceDebugGateway:m,sandboxRuntime:u,simulatorAssets:p,simulatorTargetOrigin:a}),g=()=>{f.close()};f.once("close",()=>{process.off("exit",g)}),process.once("exit",g);let y=await i5(h,i,e.openBrowser);return r={artifactOrigin:e.artifactOrigin,close:()=>i7(),debuggerMcpEndpoint:new URL(r1,h).toString(),getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:i,origin:h,realDeviceDebugGateway:m,sandboxRuntime:u,get sandboxSessionId(){return u.sessionId},server:f,simulatorAssets:p,simulatorTargetOrigin:a,setRealDeviceDebugProvider(e){m.setProvider(e)},url:y}}catch(e){t?.close(),ru.error("启动 Web SDK 调试器失败",{error:e});return}}async function at(e,t){let n={errors:[],scenes:[]};if(!e)return n;for(let r of(await t$(e)).sort((e,t)=>e.name.localeCompare(t.name))){let e=await tR(r.path);e&&function(e,t){let n=D(e);return"tool"!==n.type&&("widget"===n.type?t.widgetIds.has(n.id):0===n.unresolvedVariables.length)}(e,t)&&n.scenes.push({content:e,name:r.name})}return n}async function an(e,t){let n=e.metadata.getData(),r=e.widgets,o=await at(e.appDirectory,{widgetIds:new Set(Object.keys(r).map(e=>ng(r,n.widgets,e)))});return ae({...t,debuggerDistPath:t.debuggerDistPath??W(),debugScenes:o,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates})}function ar(e){return!!(e&&!/<%=?\s*appId\s*%>/.test(e))}function ao(e){if(!(e instanceof Error))return!1;try{let t=JSON.parse(e.message);return t?.code===0x2fb1799}catch{return!1}}async function ai(e){ar(e.appId)&&(await e.getCachedLoginCookie().catch(()=>void 0)||tO.warn(e.appId.startsWith("db_")?"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `dbx auth login` 后重新启动开发服务。":"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `npx doubao login` 后重新启动开发服务。"))}let aa=e=>S.bgHex("#9873b9")(S.italic(S.black(` ${e} `))),as=e=>S.bgBlueBright(S.italic(S.black(` ${e} `))),al=e=>S.bold(S.blueBright(e)),ap=[{command:"d",description:"选择调试场景 / pages / widgets"},{command:"web",description:"打开 Web 模拟器"}],ac={page:"页面",scene:"调试场景",widget:"组件"};function ad(e){console.log(` ${al(e.command.padEnd(21))} ${S.gray(`- ${e.description}`)}`)}async function au(e){let t=J(e);if(0!==t.length)return await X.prompt(t.map(([e,t])=>({type:"input",name:e,message:`请输入调试场景变量 "${e}" 的值:`,default:t??void 0})))}async function am({matchedScene:e,appId:t,driver:n}){let r=await tR(e.path);if(!r)return;let o=await au(r);await tN({matchedScene:e,appId:t,driver:n,variables:o},r)}async function ah(e,t,n,r,o,i,{interactive:a=!0}={}){if(await o.load({appletUrl:t,appId:e,isSigned:i}),!a)return;let s=await t$(process.cwd()),l=Object.values(n),p=Object.values(r),c=p.filter(({id:e})=>!e9(e));return l.length>0&&(console.log(`
47
+
48
+ ${as("可用 pages 列表")}
49
+ `),l.forEach(e=>{console.log(` - ${al(e.path)}`)})),c.length>0&&(console.log(`
50
+ ${as("可用 widgets 列表")}
51
+ `),c.forEach(e=>{let t=al(e.id);console.log(` - ${t}`)})),s.length>0&&(console.log(`
52
+ ${as("可用调试场景")}
53
+ `),s.forEach(e=>console.log(` - ${al(e.name)}`))),console.log(`
54
+ ${as("可以继续执行以下命令:")}
55
+ `),ap.forEach(ad),console.log("\n"),rp.instance.addListener(t=>{let n=t.trim();if("d"===n){let t=[...s.map(e=>({type:"scene",id:e.name})),...c.map(e=>({type:"widget",id:e.id})),...l.map(e=>({type:"page",id:e.path}))];if(0===t.length)return console.log(`
56
+ ${as("暂无可用的页面、组件或调试场景")}`),!0;rd(async()=>{let{selectedEntry:n}=await X.prompt([{type:"search",name:"selectedEntry",message:"请选择调试目标:",source:e=>t.filter(t=>`${ac[t.type]} ${t.type} ${t.id}`.toLowerCase().includes(e?.toLowerCase()??"")).map(e=>({name:`${S.gray(ac[e.type])}: ${e.id}`,short:`${ac[e.type]} \xb7 ${e.id}`,value:e}))}]);if("scene"===n.type){let t=s.find(e=>e.name===n.id);t&&await am({matchedScene:t,appId:e,driver:o})}else"widget"===n.type?o.pushWidget({appId:e,widgetId:n.id}):o.openPageUrl({appId:e,url:n.id})})}else{let t=s.find(e=>e.name===n);t?rd(async()=>{await am({matchedScene:t,appId:e,driver:o})}):p.some(e=>e.id===n)?o.pushWidget({appId:e,widgetId:n}):o.openPageUrl({appId:e,url:n})}return!0},"openPage")}async function af({appId:e,appletUrl:t,pages:n,widgets:r,driver:o,isSigned:i,isDisposed:a}){let s=await tw();if(a())return;if(!s)return void tO.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");let l=await tb(s).catch(e=>(a()||tO.error("重新启动应用失败",{error:e}),!1));if(a())return;if(!l)return void setTimeout(()=>{a()||tO.info("请确认应用已经启动。\n")},1e3);if(await new Promise(e=>{setTimeout(e,5e3)}),a())return;if(!o)return void tO.error("调试驱动尚未就绪。");let p=await ah(e,t,n,r,o,i);a()&&p?.()}async function ag({context:e,port:t,driver:n,isSigned:r,onCleanupReady:o}){let i,a,s=e.metadata.getData(),l=s.app.appId,p=rr(t);if(e.devServerInteractive){let t;t=function(e={}){let t={name:"Doubao Apps SDK",...e},n=t.name?`${t.name} 开发服务`:"",r=t.origin?`正在监听 ${S.gray(t.origin)}。`:"已启动。";return`
57
+ ${al(n)}${r}
58
+ `}(),tc()||console.clear(),console.log(t),console.log(((e,t)=>{if(e&&t){let n=[{title:"\uD83C\uDF10 服务地址",content:t},{title:"\uD83D\uDCE6 应用 ID",content:e}].map(({title:e,titleHighlighter:t,content:n})=>{let r=t?t(e):S.bold(S.gray(e));return` - ${S.bgWhiteBright(S.italic(S.black(` ${r} `)))}: ${S.gray(n.startsWith("http")?S.underline(n):n)}`}).join("\n");return`
59
+ ${aa("豆包应用服务信息")}:
136
60
 
137
61
  ${n}
138
62
 
139
63
  `}return`
140
- ${aY("豆包应用服务信息")}:
64
+ ${aa("豆包应用服务信息")}:
141
65
 
142
- 调试服务未运行。`})(l,p)),await az(e)}if(d)return void await c();let u=(a=!1,s=[],{add(e){e&&(a?e():s.push(e))},cleanup:()=>{a=!0,s.splice(0).forEach(e=>e())},isDisposed:()=>a});if(e.devServerInteractive){let t={context:e,appId:l,appletUrl:p,pages:o.pages,widgets:o.widgets,driver:n,isSigned:r,openWebDebugger:c,isDisposed:u.isDisposed};u.add(ro.instance.addListener(e=>{let n=e.trim().toLowerCase();return("r"===n||"web"===n)&&(process.stdout.write(F(2)),"r"===n?a9(t).catch(rl):"off"===t.context.webMode?tT.error("Web 产物未启用。请在 app.config.ts 中添加 `web: true` 并重新启动开发服务。"):t.openWebDebugger(),!0)},"devCommands",-1))}i(u.cleanup);try{if(!n){e.devServerInteractive&&tT.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");return}u.add(await a4(l,p,o.pages,o.widgets,n,r,{interactive:e.devServerInteractive}))}catch(e){throw u.cleanup(),e}}let a8=(e,t,n)=>{if(!tp())return void n();let r=process.hrtime.bigint(),i=e.method,a=e.url;t.on("finish",()=>{let e=Number(process.hrtime.bigint()-r)/1e6,n=a?new URL(a,"http://localhost").pathname:"",s=t.statusCode;tT.request({method:i||"UNKNOWN",url:n,statusCode:s,durationMs:e})}),n()},a6=g("crypto");class a7{constructor(e,t,n){this._content=t,this._hashCode=n,this.source=e}get content(){return this._content}get hashCode(){var e;return this._hashCode||(e=this.content,a6.createHash("sha256").update("string"==typeof e?e:new DataView(e.buffer,e.byteOffset,e.byteLength)).digest("hex").substring(0,8))}}class se extends a7{constructor(e,t){super(e,t),this._manifest={applet:{pages:[],tools:[]},widgets:[]};try{this._manifest=ei(this._manifest,JSON.parse(t))}catch(e){}this.destination=e}get manifest(){return this._manifest}get content(){return JSON.stringify({manifestVersion:this._manifest.manifestVersion,packageName:this._manifest.packageName,appId:this._manifest.appId,scmVersion:this._manifest.scmVersion,versionName:this._manifest.versionName,versionTag:this._manifest.versionTag,versionCode:this._manifest.versionCode,runtimeVersion:this._manifest.runtimeVersion,sourceType:this._manifest.sourceType,permissions:this._manifest.permissions,applet:this._manifest.applet,widgets:this._manifest.widgets},null,2)}setManifestVersion(e){this._manifest.manifestVersion=e}setRuntimeVersion(e){this._manifest.runtimeVersion=e}setPackageName(e){this._manifest.packageName=e}setVersionName(e){this._manifest.versionName=e}assignBasicManifest(e){Object.assign(this._manifest,e)}mergeBasicManifest(e){ei(this._manifest,e)}setSCMVersion(e){this._manifest.scmVersion=e}setVersionCode(e){this._manifest.versionCode=e}setAppletManifest(e){this._manifest.applet=e}mergeAppletManifest(e){ei(this._manifest.applet,e)}setRenderType(e=R.REACT_LYNX){this._manifest.renderType=e}appendWidget(e){this._manifest.widgets||(this._manifest.widgets=[]),this._manifest.widgets.push(e)}appendPage(e){this._manifest.applet.pages||(this._manifest.applet.pages=[]),this._manifest.applet.pages.push(e)}toString(){return JSON.stringify(this._manifest,null,2)}}class st{constructor(){this.assets={}}addAsset(e,t){this.assets[e]=t}deleteAsset(e){delete this.assets[e]}getAsset(e){return this.assets[e]}getAssets(){return this.assets}getManifestAsset(e){return this.getAsset(e)||(this.assets[e]=new se(e,JSON.stringify({}))),this.getAsset(e)}}class sn{options;constructor(e){this.options=e}apply(e){let t,{pluginSystem:n}=this.options;e.hooks.thisCompilation.tap({name:sn.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},r=>{r.hooks.processAssets.tapPromise({name:sn.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{t=new st,r.getAssets().forEach(e=>{let n=new a7(e.name,e.source.source(),e.info.contenthash?.[0]);t.addAsset(e.name,n)});let{entrypoints:i}=r,a={};i.forEach((e,n)=>{a[n]=e.getFiles().map(e=>{let n=t.getAsset(e);if(!n)throw Error(`Asset ${e} not found`);return new a7(n.source,n.content,n.hashCode)})});let s=this.options.context.appId;s&&t1.mkdirSync(eJ.join(this.options.context.rootPath,s),{recursive:!0}),await n.callAssetsHooks("beforeEmit",{assets:t,chunks:a}),Object.keys(t.getAssets()).forEach(n=>{let i=t.getAsset(n);if(!i)return;let{source:a,destination:s}=i;if(!a||!s)return;r.getAsset(a)?r.renameAsset(a,s):r.emitAsset(s,new e.rspack.sources.RawSource(i.content));let o=r.getAsset(`${a}.map`);o&&r.renameAsset(o.name,`${s}.map`)}),await n.callAssetsHooks("afterEmit",{assets:{...t.getAssets()}})})})}}let sr=new Set(["@doubao-dev/template","@byted-doubao-apps/template"]);class si{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(si.name,e=>{e.hooks.finishModules.tap(si.name,()=>{let t=new Map,n=r=>{if(!r)return!1;let i=t.get(r);if(void 0!==i)return i;if(function(e){var t;let n=e.resourceResolveData?.descriptionFileData?.name;if("string"==typeof n&&sr.has(n))return!0;let r=(t=e.resource,t?.split(/[?#]/)[0].replace(/\\/g,"/"));return[...sr].some(e=>r?.includes(`/node_modules/${e}/`))}(r))return t.set(r,!0),!0;for(let i of(t.set(r,!1),e.moduleGraph.getOutgoingConnections(r)))if(n(i.module))return t.set(r,!0),!0;return!1};e.entries.forEach((t,r)=>{t.dependencies.some(t=>n(e.moduleGraph.getModule(t)))&&this.options.markTemplateWidgetEntry(this.options.normalizeEntryName?.(r)??r)})})})}}class sa{options;constructor(e){this.options=e}apply(e){e.hooks.make.tapPromise(sa.name,async()=>{await this.options.pluginSystem.callViewHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(sa.name,e=>{e.hooks.optimizeTree.tapPromise(sa.name,async t=>{await this.options.pluginSystem.callViewHooks("build",{metadata:this.options.context.metadata,fileDependencies:e.fileDependencies})})}),e.hooks.done.tapPromise(sa.name,async e=>{await this.options.pluginSystem.callViewHooks("afterBuild",{stats:e})})}}function ss(e){return e.replaceAll("\\","/")}function so(e,t,n,r,i){Object.keys(t).forEach(a=>{let s=nh(ss(a));!function(e,t,n,r=`${t}.map`){t!==n&&e.getAsset(t)&&(e.renameAsset(t,n),e.getAsset(r)&&e.renameAsset(r,`${n}.map`))}(e,`${s}/template.js`,nu(r,nm(t,n,a),i),`${s}/background.js.map`)})}class sl{context;constructor(e){this.context=e}apply(e){e.hooks.thisCompilation.tap(sl.name,t=>{t.hooks.processAssets.tapPromise({name:sl.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{let e=this.context.metadata.getData(),n=nf(this.context.webMode),r=ng(this.context.pages,this.context.normalizedAppConfig.pages.entries,n),i=ng(this.context.widgets,this.context.normalizedAppConfig.widgets.entries,n),a=e.app.appId||this.context.appId;so(t,r,e.pages,"pages",a),so(t,i,e.widgets,"widgets")})})}}class sp{entry;constructor(e){this.entry=e}apply(e){let t=new e.webpack.experiments.VirtualModulesPlugin;t.apply(e),e.hooks.thisCompilation.tap(sp.name,()=>{t.writeModule(ez,""),t.writeModule(eY,eX),Object.values(this.entry).forEach(e=>{t.writeModule(e.filename,e.toString())})})}}function sd(e,t){return e.isIdentifier(t)?t.text:e.isPropertyAccessExpression(t)?t.name.text:void 0}let sc={templatesByEntry:{},templatesByWidget:{}},su="/doubao-apps-framework.template.js",sh="/doubao-apps-api.template.js",sm=(e,t)=>{let n=(n,r,i)=>{var a;return a=(n=>{if(!t)return n;let r="0.0.42-rc.5";return e||!r?`/wsd${n}`:`/web-sdk/${encodeURIComponent(r)}/wsd${n}`})(n),{libraryName:i,url:a,background:{sectionPath:r},mainThread:{sectionPath:`${r}__main-thread`},async:!!t}};return{"@byted-doubao-apps/bridge-base":n(sh,"api"),"@byted-doubao-apps/open-api":n(sh,"api"),...Object.fromEntries(Object.entries(e4).map(([t,r])=>[t,n(e?"/doubao-apps-react-dev.template.js":"/doubao-apps-react.template.js","reactLynx",["reactLynx",r])])),[`${tn}/api`]:n(sh,"api"),[`${tr}/api`]:n(sh,"api"),[tn]:n(su,"framework"),[tr]:n(su,"framework"),"@byted-doubao-apps/components":n(su,"components"),[ta(tn)]:n(su,"components"),[ta(tr)]:n(su,"components")}},sg=g("node:url"),sf=(0,nr.createRequire)(import.meta.url);class sy{pluginSystem;constructor(e){this.pluginSystem=e}async createEntry(){let{entry:e}=await this.pluginSystem.callViewHooks("modifyEntryOption",{entry:{}});return e}async createConfig({config:e}){var t,n,r,i,a;let{appDirectory:s,command:p,metadata:m,rootPath:g}=e.context,f=e.context.environment,y="1"===process.env.ENABLE_SELF_CONTAINED;await this.pluginSystem.callViewHooks("modifyEnvironment",{environment:f}),e.context.setEnvironment(f);let b=p===eD.DEV,_=await this.createEntry(),w=to(s),v=[s,eJ.dirname((0,sg.fileURLToPath)(import.meta.url))],E=sf.resolve("@lynx-js/react/transform"),S=nf(e.context.webMode),A=ng(e.context.pages,e.context.normalizedAppConfig.pages.entries,S),C=new Set([...Object.keys(ng(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,S)),...Object.keys(A)]);if(e.web&&0===C.size)throw Error(b?"No Web entries are available. Add page/widget entries under src/pages or src/widgets.":"No Web entries are configured. Add `web: true` to page/widget entries in src/app.config.ts.");e.web&&await n5({widgets:e.context.widgets,pages:e.context.pages,entries:_,collector:m,normalizedAppConfig:e.context.normalizedAppConfig,define:e.context.userConfig?.source?.define});let T={include:e.options.source?.include,exclude:e.options.source?.exclude,decorators:e.options.source?.decorators,define:{...e.options.source?.define,__MAIN_PROCESS__:JSON.stringify(!1),__DOUBAO_APPS_WEB__:JSON.stringify(!1),__LEPUS__:JSON.stringify(!1),"process.env":"({})"}},O=(e,t)=>e9(eJ.basename(e))?[ez,eY,t.filename]:[ez,t.filename],I={...T,entry:Object.fromEntries(Object.entries(_).map(([e,t])=>[e,O(e,t)]))},P=Object.fromEntries(Object.entries(_).filter(([e])=>C.has(e))),N=new Map(Object.keys(P).map(e=>[nh(e),e])),$={...I,entry:Object.fromEntries(Object.entries(P).map(([e,t])=>[nh(e),O(e,t)])),define:{...I.define,__DOUBAO_APPS_WEB__:JSON.stringify(!0),__LYNXVIEW__:JSON.stringify(!0)}},D=[...td()?[]:[V({externals:sm(b),globalObject:"lynx"})]],R=[function({metadata:e,resolveAppInfo:t}){return{name:"ai-manifest-plugin",setup(n){n.modifyBundlerChain((n,r)=>{let i=r?.environment?.name==="web"?np:nl;n.plugin(nd.name).use(nd,[{metadata:e,resolveAppInfo:t,shouldInjectAsset:i}])})}}}({metadata:m,resolveAppInfo:()=>e.context.resolveAppInfo()})],L={source:I,plugins:D},M=[function e(t,n,r){return{name:e.name,setup(e){e.modifyBundlerChain((i,a)=>{if(a?.environment?.name==="web")return;let s=e.useExposed(Symbol.for("LynxTemplatePlugin"));i.plugin(rs.name).use(rs,[s.LynxTemplatePlugin,t,n,r])})}}}(m,_,()=>e.context.resolveSigningEncryptionOptions()),function({context:e,normalizeEntryName:t}){return{name:"template-widget-entry-plugin",setup(n){n.modifyBundlerChain((n,r)=>{let i=r?.environment?.name;n.plugin("template-widget-entry-plugin").use(si,[{markTemplateWidgetEntry:t=>{e.addTemplateWidgetEntry(t)},normalizeEntryName:e=>t?.(e,i)}])})}}}({context:e.context,normalizeEntryName:(e,t)=>"web"===t?N.get(e):e}),(t=this.pluginSystem,n=e.context,{name:"output-plugin",setup(e){let r={pluginSystem:t,context:n};e.modifyBundlerChain((e,t)=>{(t?.environment?.name!=="web"||ny(n.webMode))&&e.plugin("output-plugin").use(sn,[r])})}}),...p===eD.DEV&&e.web?[function({context:e}){let t;return e.getWidgetViewDataTemplates=async()=>{if(t)return t;try{t=function(e,t,n){let r=function(e){let t,n=(0,x.createRequire)(tt.join(e,"package.json"));try{t=n.resolve("typescript")}catch(e){return}return n(t)}(e);if(!r)return{templatesByEntry:{},templatesByWidget:{}};let i=[...new Set(Object.values(t).map(({filename:e})=>e))],a=r.createProgram({options:function(e,t){let n={allowJs:!0,checkJs:!1,jsx:e.JsxEmit.Preserve,noEmit:!0,skipLibCheck:!0,target:e.ScriptTarget.ESNext},r=e.findConfigFile(t,te.existsSync);if(!r)return n;let i=e.readConfigFile(r,e.sys.readFile);return i.error?n:{...e.parseJsonConfigFileContent(i.config,e.sys,tt.dirname(r)).options,...n}}(r,e),rootNames:i}),s=a.getTypeChecker(),o=Object.fromEntries(Object.entries(t).map(([e,{filename:t}])=>{let n,i=a.getSourceFile(t);return[k(e),i?(n={},!function e(t){if(r.isCallExpression(t)&&("getViewData"===sd(r,t.expression)||"useViewData"===sd(r,t.expression))&&t.typeArguments?.[0]){let e=s.getTypeFromTypeNode(t.typeArguments[0]);for(let i of s.getPropertiesOfType(e)){let a=i.valueDeclaration??i.declarations?.[0]??t;n[i.getName()]=function e(t,n,r,i,a){let s=(n.isUnion()?n.types:[n]).filter(e=>!(e.flags&(t.TypeFlags.Undefined|t.TypeFlags.Never)));if(s.some(e=>e.flags&t.TypeFlags.Null))return null;if(s.some(e=>e.flags&t.TypeFlags.StringLike))return"";if(s.some(e=>e.flags&(t.TypeFlags.NumberLike|t.TypeFlags.BigIntLike)))return 0;if(s.some(e=>e.flags&t.TypeFlags.BooleanLike))return!1;if(s.some(e=>r.isArrayType(e)||r.isTupleType(e)))return[];let o=s.find(e=>e.flags&t.TypeFlags.Object);if(!o||a.has(o))return{};a.add(o);let l=Object.fromEntries(r.getPropertiesOfType(o).map(n=>{let s=n.valueDeclaration??n.declarations?.[0]??i;return[n.getName(),e(t,r.getTypeOfSymbolAtLocation(n,s),r,s,a)]}));return a.delete(o),l}(r,s.getTypeOfSymbolAtLocation(i,a),s,a,new Set([e]))}}r.forEachChild(t,e)}(i),n):{}]})),l=Object.fromEntries(Object.keys(t).map(e=>{let r=k(e);return[nm(t,n,e),o[r]??{}]}));return{templatesByEntry:o,templatesByWidget:l}}(e.appDirectory,e.widgets,e.metadata.getData().widgets)}catch{t=sc}return t},{name:"WidgetViewDataPlugin",setup(e){e.onAfterDevCompile(({stats:e})=>{e.hasErrors()||(t=void 0)})}}}({context:e.context})]:[],(({context:e})=>({name:"DevServerLogPlugin",setup(t){let n,r=!1,i=!1;t.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t(e,{server:{setup({server:e}){e.middlewares.use(a8)}}})),t.onAfterDevCompile(async({stats:a})=>{if(a.hasErrors()||r)return;let{devServer:s}=t.context;if(!s)return;r=!0;let o=ny(e.webMode)?void 0:await tP({debugDriver:e.userConfig.debugDriver,skipAdbForegroundAppWatch:e.userConfig.skipAdbForegroundAppWatch}).catch(rl);i||await a5({context:e,port:s.port,driver:o,isSigned:e.isSignedEncryption,onCleanupReady(e){i?e():n=e}})}),t.onCloseDevServer(()=>{i=!0,n?.(),n=void 0})}}))({context:e.context}),(r=this.pluginSystem,i=e.context,{name:"view-hooks-plugin",setup(e){e.modifyBundlerChain((e,t)=>{t?.environment?.name==="web"||e.plugin("view-hooks-plugin").use(sa,[{pluginSystem:r,context:i}])})}}),(({getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:n,metadata:r,resolveSigningEncryptionOptions:i})=>({name:"lynx:encode-worker",async setup(a){tc()||a.modifyBundlerChain((a,s)=>{s?.environment?.name!=="web"&&a.plugin(ra.name).use(ra,[{getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:n,metadata:r,resolveSigningEncryptionOptions:i}]).end()})}}))({getAppAssetPath:()=>e.context.appAssetPath,getAppMapAssetPath:()=>e.context.appMapAssetPath,metadata:e.context.metadata,resolveSigningEncryptionOptions:()=>e.context.resolveSigningEncryptionOptions()}),...e.rsbuildPlugins||[]],j=[{name:"web-virtual-entry-plugin",setup(e){e.modifyBundlerChain((e,{environment:t})=>{"web"===t.name&&e.plugin(sp.name).use(sp,[P])})}},(a=e.context,{name:"web-output-plugin",setup(e){e.modifyBundlerChain({order:"post",handler(e,{environment:t}){if("web"===t.name){let t=".rspeedy/";for(let n of Object.keys(e.plugins.entries()??{}))n.startsWith("lynx:template-")&&e.plugin(n).tap(e=>{let n=e[0];return n?.intermediate?.startsWith(t)&&(n.intermediate=n.intermediate.slice(t.length)),e});e.plugins.has("lynx:sourcemap")&&e.plugin("lynx:sourcemap").tap(e=>{var t;let n,r=e[0];return r.ignoreList=[/^(?!file:\/\/\/)/,/\/(?:externals-loading-runtime|webpack\/runtime)(?:\/|$)/,/\/node_modules\//,/\.(?:css|less|sass|scss)(?:[?#]|$)/],t=a.appDirectory,n=tt.resolve(t),r.moduleFilenameTemplate=({absoluteResourcePath:e,query:t=""})=>{let r=tt.relative(n,e),i=".."!==r&&!r.startsWith(`..${tt.sep}`)&&!tt.isAbsolute(r),a=i?ss(r):ss(e).replace(/^\/+/,"");return`${i?"file":"webpack"}:///${a}${t}`},e}),e.plugin(sl.name).use(sl,[a])}}})}})],B=d({mode:p===eD.DEV?"development":"production",environments:e.web?{...ny(e.context.webMode)?{}:{lynx:L},web:{source:$,output:{distPath:{css:""},cleanDistPath:!1,filename:{assets:"[name]/web.bundle"},sourceMap:{js:!!b&&"cheap-module-source-map",css:!1}},plugins:[V({externals:sm(p===eD.DEV,!0),globalObject:"lynx"})]}}:{lynx:L},tools:{rspack:{module:{rules:[{enforce:"pre",test:/\.(t|j)sx$/,loader:function(e,t,n=eJ.join(eJ.dirname((0,sg.fileURLToPath)(import.meta.url)),"components-loader.js"),r=function(e,t){for(let n of e)try{return sf.resolve(n,{paths:t})}catch{}throw Error(`Cannot resolve package from candidates: ${e.join(", ")}`)}){try{return r(t===tr?["@doubao-dev/kit/components-loader","@byted-doubao-apps/kit/components-loader"]:["@byted-doubao-apps/kit/components-loader","@doubao-dev/kit/components-loader"],e)}catch(e){if((0,te.existsSync)(n))return n;throw e}}(v,w),options:{frameworkPackage:w}}]},plugins:[new c.BannerPlugin({banner:'"use registerWorkletInternal";',raw:!0,entryOnly:!0,test:/\.js$/})]}},source:{...T,entry:{}},server:{host:re()},dev:{writeToDisk:tp(),hmr:p===eD.DEV},output:{distPath:{js:"base/common",root:g||"dist"},cleanDistPath:!1,filename:{bundle:"[name]/template.js"},dataUriLimit:5120},resolve:{alias:{...e.options.resolve?.alias||{}}},performance:{printFileSize:tp(),...td()&&!y?{chunkSplit:{strategy:"split-by-experience"}}:{}},...y?{splitChunks:!1}:{},plugins:[{name:"replace-lynx-react-alias",setup(e){en({LAYERS:o,lazy:!1,rootPath:eJ.dirname((0,sg.fileURLToPath)(import.meta.url))}).setup(e)}},{name:"set-server.printUrls-false",setup(e){e.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t(e,{server:{printUrls:!1}}))}},l({compat:{componentsPkg:[],newRuntimePkg:w,oldRuntimePkg:[],legacySlot:!0},enableCSSInheritance:!0,shake:{pkgName:[...ti]}}),{name:"pin-react-transform-path",pre:["lynx:react"],setup(e){e.modifyBundlerChain((e,{CHAIN_ID:t})=>{let n=e.module.rule(t.RULE.JS).oneOf(t.ONE_OF.JS_MAIN);for(let e of[o.BACKGROUND,o.MAIN_THREAD]){let t=n.oneOfs.get(e)?.uses.get(e);if(!t)throw Error(`React transform loader not found for layer: ${e}`);t.tap(e=>({...e,transformPath:E}))}})}},function(e){let{compilerOptionsKeys:t=nx.compilerOptionsKeys,configKeys:n=nx.configKeys,validate:r=nq,dslPluginName2PkgName:i=nJ,upgradeRspeedyLink:a="https://www.npmjs.com/package/upgrade-rspeedy"}=(void 0)??{};return r(e),{name:"lynx:config",async setup(r){r.expose(Symbol.for("lynx.config"),{config:e}),r.modifyBundlerChain(s=>{let o=r.useExposed(Symbol.for("LynxTemplatePlugin"));if(!o){let e="Rspeedy and plugins";throw Object.entries(i).forEach(([t,n])=>{r.isPluginExists(t)&&(e=n)}),Error(`\
143
- [pluginLynxConfig] No \`LynxTemplatePlugin\` exposed to ${nM("the plugin API","https://rsbuild.rs/plugins/dev/core#apiexpose")}.
66
+ 调试服务未运行。`})(l,p)),await ai(e)}let c=(i=!1,a=[],{add(e){e&&(i?e():a.push(e))},cleanup:()=>{i=!0,a.splice(0).forEach(e=>e())},isDisposed:()=>i});if(e.devServerInteractive){let t={context:e,appId:l,appletUrl:p,pages:s.pages,widgets:s.widgets,driver:n,isSigned:r,openWebDebugger:()=>{let t;return t=e.webDebuggerLaunchOptions,an(e,{appId:e.appId,appDirectory:e.appDirectory,artifactOrigin:p,env:{...e.env,...t?.env??{}},mcpEndpoint:t?.mcpEndpoint??tm(),mcpHeaders:t?.mcpHeaders,openBrowser:t?.openBrowser,simulator:t?.simulator,toolsConfigReader:e.toolsResources?.readToolsJson,toolsConfigSourcePath:e.toolsResources?.toolsSourcePath,simulatorManifestReader:t?.simulator?.manifestPath?void 0:e.toolsResources?.readManifestYaml,simulatorManifestSourcePath:t?.simulator?.manifestPath?void 0:e.toolsResources?.manifestSourcePath,simulatorSkillReader:t?.simulator?.skillPath?void 0:e.toolsResources?.readSkillMarkdown,simulatorSkillSourcePath:t?.simulator?.skillPath?void 0:e.toolsResources?.skillDocumentPath})},isDisposed:c.isDisposed};c.add(rp.instance.addListener(e=>{let n=e.trim().toLowerCase();return("r"===n||"web"===n)&&(process.stdout.write(H(2)),"r"===n?af(t).catch(rc):t.openWebDebugger(),!0)},"devCommands",-1))}o(c.cleanup);try{if(!n){e.devServerInteractive&&tO.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");return}c.add(await ah(l,p,s.pages,s.widgets,n,r,{interactive:e.devServerInteractive}))}catch(e){throw c.cleanup(),e}}let ay=(e,t,n)=>{if(!tc())return void n();let r=process.hrtime.bigint(),o=e.method,i=e.url;t.on("finish",()=>{let e=Number(process.hrtime.bigint()-r)/1e6,n=i?new URL(i,"http://localhost").pathname:"",a=t.statusCode;tO.request({method:o||"UNKNOWN",url:n,statusCode:a,durationMs:e})}),n()},ab=new Set(["EACCES","EPERM"]),a_=new Set(["MODULE_NOT_FOUND","ERR_MODULE_NOT_FOUND"]),aw=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT","ERR_REQUEST_TIMEOUT"]),av=new Set(["ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETUNREACH","ENOTFOUND","EAI_AGAIN","EPIPE"]),aE=new Set(["EEXIST","EISDIR","EMFILE","ENOENT","ENOSPC","ENOTDIR","EROFS"]),aS={SyntaxError:"syntax_error",TypeError:"type_error",ModuleNotFoundError:"dependency_error",ModuleBuildError:"compilation_error",ValidationError:"config_error",TimeoutError:"timeout_error",FetchError:"network_error",LoaderError:"loader_error",PluginError:"plugin_error"};function ax(e,t){if(!e||"object"!=typeof e||!(t in e))return;let n=e[t];return"string"==typeof n?n:void 0}function aA(e){if(!e||"object"!=typeof e)return[];if(Array.isArray(e.errors)&&e.errors.length>0)return e.errors;if(Array.isArray(e.stats))return e.stats.flatMap(aA);let t=e.stats&&"object"==typeof e.stats?e.stats:e;try{let e=t.toJson?.({all:!1,errors:!0}).errors;return Array.isArray(e)?e:[]}catch{return[]}}var aT=JSON.parse('{"rE":"0.0.42-rc.10"}');function aC(e){return{scene:void 0,commandStartTime:e,compileStartTime:void 0,builderInitStartTime:void 0,compilePhaseEndTimes:{moduleProcess:void 0,assetProcess:void 0},prepareDurations:{configLoadMs:0,projectScanMs:0,contextBootstrapMs:0,pluginBootstrapMs:0,builderInitMs:0},appInfoDurationMs:0,appInfoMeasured:!1,appTemplateProcessDurationMs:0,viewTemplateProcessDurationMs:0,reported:!1}}function aO(e,t){Object.assign(e,aC(t))}function aP(e,{scene:t,commandStartTime:n,compileStartTime:r}){let o=e.commandStartTime===n,i=e.prepareDurations,a=e.builderInitStartTime,s=e.appInfoDurationMs,l=e.appInfoMeasured;o&&void 0!==a&&(i.builderInitMs=Math.max(0,r-a)),aO(e,n),e.scene=t,e.compileStartTime=r,o&&(e.prepareDurations=i,e.appInfoDurationMs=s,e.appInfoMeasured=l)}function aI(e,t,n){e.compilePhaseEndTimes[t]=Math.max(e.compilePhaseEndTimes[t]??0,n)}function ak(e){return Math.max(0,Math.round(Number.isFinite(e)?e:0))}let aD=new class{uploader;constructor(e){this.uploader=e}async report(e){try{var t,n;let r,o,i,a,s,l,p,c=e.context?.compileLifecycle;if(c){if(c.reported)return;c.reported=!0}let d="dev_initial"===e.scene||"hot_update"===e.scene?"dev":e.scene,u={appDirectory:e.appDirectory,targetAppId:function(e){try{let t=e?.appId;return ar(t)?t:void 0}catch{return}}(e.context),scene:e.scene,command:d},m="failed"===e.status?{...u,status:e.status,errorStage:e.errorStage,error:aA(e.error)[0]??e.error}:{...u,status:e.status,pageCount:Object.keys(e.context.pages).length,widgetCount:Object.keys(e.context.widgets).length,securityMode:(r=e.context.signingEncryptionOptions,o=!!r?.signing.enabled,i=!!r?.encryption.enabled,o&&i?"signing_and_encryption":o?"signing":i?"encryption":"none"),durations:(t=e.context.compileLifecycle,n=e.compileEndTime,a=t.commandStartTime??n,s=t.compileStartTime??n,l=Math.min(n,Math.max(s,t.compilePhaseEndTimes.moduleProcess??n)),p=Math.min(n,Math.max(l,t.compilePhaseEndTimes.assetProcess??n)),{totalMs:n-a,prepareMs:s-a,compileMs:n-s,...t.prepareDurations,appInfoMs:t.appInfoDurationMs,appTemplateProcessMs:t.appTemplateProcessDurationMs,viewTemplateProcessMs:t.viewTemplateProcessDurationMs,moduleProcessMs:l-s,assetProcessMs:p-l,outputWriteMs:n-p})};await this.upload(m)}catch{}}async flush(e=3e3){try{await this.uploader?.flush?.(e)}catch{}}async upload(e){let{appDirectory:t,...n}=e;await (this.uploader??=new ei).upload(function(e,t){let n={kit_compile_id:function(){let e="unknown";try{e=(0,nx.userInfo)().username||e}catch{}return`${Date.now()}_${e}_${(0,od.randomUUID)()}`}(),kit_compile_scene:e.scene,kit_command:e.command,kit_status:e.status,kit_version:t.kitVersion,kit_node_version:process.version,kit_os_name:process.platform,kit_run_env:t.runEnv.toLowerCase()};if(e.targetAppId&&(n.kit_appId=e.targetAppId),"success"===e.status)n.kit_page_count=e.pageCount,n.kit_widget_count=e.widgetCount,n.kit_security_mode=e.securityMode,n.kit_duration_ms_total=ak(e.durations.totalMs),n.kit_prepare_ms=ak(e.durations.prepareMs),n.kit_compile_ms=ak(e.durations.compileMs),n.kit_config_load_ms=ak(e.durations.configLoadMs),n.kit_project_scan_ms=ak(e.durations.projectScanMs),n.kit_context_bootstrap_ms=ak(e.durations.contextBootstrapMs),n.kit_app_info_ms=ak(e.durations.appInfoMs),n.kit_app_template_process_ms=ak(e.durations.appTemplateProcessMs),n.kit_view_template_process_ms=ak(e.durations.viewTemplateProcessMs),n.kit_plugin_bootstrap_ms=ak(e.durations.pluginBootstrapMs),n.kit_builder_init_ms=ak(e.durations.builderInitMs),n.kit_module_process_ms=ak(e.durations.moduleProcessMs),n.kit_asset_process_ms=ak(e.durations.assetProcessMs),n.kit_output_write_ms=ak(e.durations.outputWriteMs);else{n.kit_error_type=function(e){let t=ax(e,"code")?.toUpperCase();if(t){if(ab.has(t))return"permission_error";if(a_.has(t))return"dependency_error";if(aw.has(t))return"timeout_error";if(av.has(t))return"network_error";if(aE.has(t))return"filesystem_error"}let n="string"==typeof e?e:ax(e,"message")??"";if(/cannot find module|can't resolve|cannot resolve|module not found|package .+ not found/i.test(n))return"dependency_error";if(/permission denied|operation not permitted/i.test(n))return"permission_error";if(/timed out|timeout/i.test(n))return"timeout_error";if(/connection (?:refused|reset)|getaddrinfo|network error|socket hang up|unable to connect/i.test(n))return"network_error";if(/no such file|file does not exist|not a directory|directory does not exist/i.test(n))return"filesystem_error";if(/syntax\s*error|syntaxerror|unexpected token|failed to parse|pars(?:e|ing) error/i.test(n))return"syntax_error";if(/\bTS\d{4}:|\btype\s*error\b|\btypeerror\b/i.test(n))return"type_error";if(/appId is required|entry config|invalid config|configuration (?:is )?(?:invalid|missing)/i.test(n))return"config_error";if(/loader/i.test(n))return"loader_error";if(/plugin/i.test(n))return"plugin_error";let r=ax(e,"name");return r&&aS[r]||"unknown_error"}(e.error),e.errorStage&&(n.kit_error_stage=e.errorStage);let o=function(e){if("string"==typeof e)return e;if(!e||"object"!=typeof e||!("message"in e))return;let t=e.message;return"string"==typeof t?t:void 0}(e.error);if(o){var r;let e=(r=t.appDirectory,(0,o$.stripVTControlCharacters)(o).replaceAll(tn.resolve(r),"<project>").replaceAll((0,nx.homedir)(),"<home>").replace(/\s+/g," ").trim().slice(0,1024));e&&(n.kit_error_message=e)}}return{name:"kit_compile",params:n}}(n,{appDirectory:t,kitVersion:aT.rE,runEnv:process.env.BUILD_VERSION?"SCM":process.env.CI_REPO_NAME?"CI":"LOCAL"}))}};function a$(e,t,n){n?.hasErrors()?aD.report({appDirectory:e.appDirectory,context:e,scene:t,status:"failed",errorStage:"compile",error:aA(n)[0]}):aD.report({appDirectory:e.appDirectory,context:e,scene:t,status:"success",compileEndTime:Date.now()})}let aR=f("crypto");class aN{constructor(e,t,n){this._content=t,this._hashCode=n,this.source=e}get content(){return this._content}get hashCode(){var e;return this._hashCode||(e=this.content,aR.createHash("sha256").update("string"==typeof e?e:new DataView(e.buffer,e.byteOffset,e.byteLength)).digest("hex").substring(0,8))}}class aL extends aN{constructor(e,t){super(e,t),this._manifest={applet:{pages:[],tools:[]},widgets:[]};try{this._manifest=eo(this._manifest,JSON.parse(t))}catch(e){}this.destination=e}get manifest(){return this._manifest}get content(){return JSON.stringify({manifestVersion:this._manifest.manifestVersion,packageName:this._manifest.packageName,appId:this._manifest.appId,scmVersion:this._manifest.scmVersion,versionName:this._manifest.versionName,versionTag:this._manifest.versionTag,versionCode:this._manifest.versionCode,runtimeVersion:this._manifest.runtimeVersion,sourceType:this._manifest.sourceType,permissions:this._manifest.permissions,applet:this._manifest.applet,widgets:this._manifest.widgets},null,2)}setManifestVersion(e){this._manifest.manifestVersion=e}setRuntimeVersion(e){this._manifest.runtimeVersion=e}setPackageName(e){this._manifest.packageName=e}setVersionName(e){this._manifest.versionName=e}assignBasicManifest(e){Object.assign(this._manifest,e)}mergeBasicManifest(e){eo(this._manifest,e)}setSCMVersion(e){this._manifest.scmVersion=e}setVersionCode(e){this._manifest.versionCode=e}setAppletManifest(e){this._manifest.applet=e}mergeAppletManifest(e){eo(this._manifest.applet,e)}setRenderType(e=j.REACT_LYNX){this._manifest.renderType=e}appendWidget(e){this._manifest.widgets||(this._manifest.widgets=[]),this._manifest.widgets.push(e)}appendPage(e){this._manifest.applet.pages||(this._manifest.applet.pages=[]),this._manifest.applet.pages.push(e)}toString(){return JSON.stringify(this._manifest,null,2)}}class aM{constructor(){this.assets={}}addAsset(e,t){this.assets[e]=t}deleteAsset(e){delete this.assets[e]}getAsset(e){return this.assets[e]}getAssets(){return this.assets}getManifestAsset(e){return this.getAsset(e)||(this.assets[e]=new aL(e,JSON.stringify({}))),this.getAsset(e)}}class aj{options;constructor(e){this.options=e}apply(e){let t,{pluginSystem:n}=this.options;e.hooks.thisCompilation.tap({name:aj.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},r=>{r.hooks.processAssets.tapPromise({name:aj.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{t=new aM,r.getAssets().forEach(e=>{let n=new aN(e.name,e.source.source(),e.info.contenthash?.[0]);t.addAsset(e.name,n)});let{entrypoints:o}=r,i={};o.forEach((e,n)=>{i[n]=e.getFiles().map(e=>{let n=t.getAsset(e);if(!n)throw Error(`Asset ${e} not found`);return new aN(n.source,n.content,n.hashCode)})});let a=this.options.context.appId;a&&t1.mkdirSync(eJ.join(this.options.context.rootPath,a),{recursive:!0}),await n.callAssetsHooks("beforeEmit",{assets:t,chunks:i}),Object.keys(t.getAssets()).forEach(n=>{let o=t.getAsset(n);if(!o)return;let{source:i,destination:a}=o;if(!i||!a)return;r.getAsset(i)?r.renameAsset(i,a):r.emitAsset(a,new e.rspack.sources.RawSource(o.content));let s=r.getAsset(`${i}.map`);s&&r.renameAsset(s.name,`${a}.map`)}),await n.callAssetsHooks("afterEmit",{assets:{...t.getAssets()}})})})}}let aB=new Set(["@doubao-dev/template","@byted-doubao-apps/template"]);class aU{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(aU.name,e=>{e.hooks.finishModules.tap(aU.name,()=>{let t=new Map,n=r=>{if(!r)return!1;let o=t.get(r);if(void 0!==o)return o;if(function(e){var t;let n=e.resourceResolveData?.descriptionFileData?.name;if("string"==typeof n&&aB.has(n))return!0;let r=(t=e.resource,t?.split(/[?#]/)[0].replace(/\\/g,"/"));return[...aB].some(e=>r?.includes(`/node_modules/${e}/`))}(r))return t.set(r,!0),!0;for(let o of(t.set(r,!1),e.moduleGraph.getOutgoingConnections(r)))if(n(o.module))return t.set(r,!0),!0;return!1};e.entries.forEach((t,r)=>{t.dependencies.some(t=>n(e.moduleGraph.getModule(t)))&&this.options.markTemplateWidgetEntry(this.options.normalizeEntryName?.(r)??r)})})})}}class aF{options;constructor(e){this.options=e}apply(e){e.hooks.make.tapPromise(aF.name,async()=>{await this.options.pluginSystem.callViewHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(aF.name,e=>{e.hooks.optimizeTree.tapPromise(aF.name,async t=>{await this.options.pluginSystem.callViewHooks("build",{metadata:this.options.context.metadata,fileDependencies:e.fileDependencies})})}),e.hooks.done.tapPromise(aF.name,async e=>{await this.options.pluginSystem.callViewHooks("afterBuild",{stats:e})})}}function aW(e){return e.replaceAll("\\","/")}function aH(e,t,n,r=`${t}.map`){return t!==n&&!!e.getAsset(t)&&(e.renameAsset(t,n),e.getAsset(r)&&e.renameAsset(r,`${n}.map`),!0)}class aG{context;constructor(e){this.context=e}apply(e){e.hooks.thisCompilation.tap(aG.name,t=>{t.hooks.processAssets.tapPromise({name:aG.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{var e,n;let r=this.context.metadata.getData(),o=this.context.command===eR.DEV?"all":"configured",i=nb(this.context.pages,this.context.normalizedAppConfig.pages.entries,o),a=nb(this.context.widgets,this.context.normalizedAppConfig.widgets.entries,o),s=r.app.appId||this.context.appId;if(!s&&Object.keys(i).length>0)throw Error("appId is required to resolve Web page entry paths");s&&(e=r.pages,Object.keys(i).forEach(n=>{let r=aW(n),o=nf(r);aH(t,`${o}/template.js`,t7(s,e[n]?.path??t6(r),nu),`${o}/background.js.map`)})),n=r.widgets,Object.keys(a).forEach(e=>{var r;let o=nf(aW(e));aH(t,`${o}/template.js`,(r=ng(a,n,e),`${r}/${nu}`),`${o}/background.js.map`)})})})}}class aV{entry;constructor(e){this.entry=e}apply(e){let t=new e.webpack.experiments.VirtualModulesPlugin;t.apply(e),e.hooks.thisCompilation.tap(aV.name,()=>{t.writeModule(ez,""),t.writeModule(eY,eX),Object.values(this.entry).forEach(e=>{t.writeModule(e.filename,e.toString())})})}}function aq(e,t){return e.isIdentifier(t)?t.text:e.isPropertyAccessExpression(t)?t.name.text:void 0}let aJ={templatesByEntry:{},templatesByWidget:{}},aK="/doubao-apps-framework.template.js",az="/doubao-apps-api.template.js",aY=(e,t)=>{let n=(n,r,o)=>{var i;return i=(n=>{if(!t)return n;let r="0.0.42-rc.10";return e||!r?`/wsd${n}`:`/web-sdk/${encodeURIComponent(r)}/wsd${n}`})(n),{libraryName:o,url:i,background:{sectionPath:r},mainThread:{sectionPath:`${r}__main-thread`},async:!!t}};return{"@byted-doubao-apps/bridge-base":n(az,"api"),"@byted-doubao-apps/open-api":n(az,"api"),...Object.fromEntries(Object.entries(e4).map(([t,r])=>[t,n(e?"/doubao-apps-react-dev.template.js":"/doubao-apps-react.template.js","reactLynx",["reactLynx",r])])),[`${tr}/api`]:n(az,"api"),[`${to}/api`]:n(az,"api"),[tr]:n(aK,"framework"),[to]:n(aK,"framework"),"@byted-doubao-apps/components":n(aK,"components"),[ta(tr)]:n(aK,"components"),[ta(to)]:n(aK,"components")}},aX=f("node:url"),aZ=(0,no.createRequire)(import.meta.url);class aQ{pluginSystem;constructor(e){this.pluginSystem=e}async createEntry(){let{entry:e}=await this.pluginSystem.callViewHooks("modifyEntryOption",{entry:{}});return e}async createConfig({config:e}){var t,n,r,o,i;let{appDirectory:a,command:p,metadata:h,rootPath:f}=e.context,g=e.context.environment,y="1"===process.env.ENABLE_SELF_CONTAINED;await this.pluginSystem.callViewHooks("modifyEnvironment",{environment:g}),e.context.setEnvironment(g);let b=p===eR.DEV,_=await this.createEntry(),w=tl(a),v=[a,eJ.dirname((0,aX.fileURLToPath)(import.meta.url))],E=aZ.resolve("@lynx-js/react/transform"),S=b?"all":"configured",A=nb(e.context.pages,e.context.normalizedAppConfig.pages.entries,S),T=new Set([...Object.keys(nb(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,S)),...Object.keys(A)]);if(e.web&&0===T.size)throw Error(b?"No Web entries are available. Add page/widget entries under src/pages or src/widgets.":"No Web entries are configured. Add `web: true` to page/widget entries in src/app.config.ts.");e.web&&await n6({widgets:e.context.widgets,pages:e.context.pages,entries:_,collector:h,normalizedAppConfig:e.context.normalizedAppConfig,define:e.context.userConfig?.source?.define});let C={include:e.options.source?.include,exclude:e.options.source?.exclude,decorators:e.options.source?.decorators,define:{...e.options.source?.define,__MAIN_PROCESS__:JSON.stringify(!1),__DOUBAO_APPS_WEB__:JSON.stringify(!1),__LEPUS__:JSON.stringify(!1),"process.env":"({})"}},O=(e,t)=>e9(eJ.basename(e))?[ez,eY,t.filename]:[ez,t.filename],P={...C,entry:Object.fromEntries(Object.entries(_).map(([e,t])=>[e,O(e,t)]))},I=Object.fromEntries(Object.entries(_).filter(([e])=>T.has(e))),D=new Map(Object.keys(I).map(e=>[nf(e),e])),$={...P,entry:Object.fromEntries(Object.entries(I).map(([e,t])=>[nf(e),O(e,t)])),define:{...P.define,__DOUBAO_APPS_WEB__:JSON.stringify(!0),__LYNXVIEW__:JSON.stringify(!0)}},R=[...td()?[]:[V({externals:aY(b),globalObject:"lynx"})]],N=[function({metadata:e,resolveAppInfo:t}){return{name:"ai-manifest-plugin",setup(n){n.modifyBundlerChain((n,r)=>{let o=r?.environment?.name==="web"?nc:np;n.plugin(nd.name).use(nd,[{metadata:e,resolveAppInfo:t,shouldInjectAsset:o}])})}}}({metadata:h,resolveAppInfo:()=>e.context.resolveAppInfo()})],L={source:P,plugins:R},M=[function e({metadata:t,entry:n,resolveSigningEncryptionOptions:r,onProcessDuration:o}){return{name:e.name,setup(e){e.modifyBundlerChain((i,a)=>{if(a?.environment?.name==="web")return;let s=e.useExposed(Symbol.for("LynxTemplatePlugin"));i.plugin(rl.name).use(rl,[s.LynxTemplatePlugin,t,n,r,o])})}}}({metadata:h,entry:_,resolveSigningEncryptionOptions:()=>e.context.resolveSigningEncryptionOptions(),onProcessDuration:t=>{e.context.compileLifecycle.viewTemplateProcessDurationMs=Math.max(e.context.compileLifecycle.viewTemplateProcessDurationMs,t)}}),function({context:e,normalizeEntryName:t}){return{name:"template-widget-entry-plugin",setup(n){n.modifyBundlerChain((n,r)=>{let o=r?.environment?.name;n.plugin("template-widget-entry-plugin").use(aU,[{markTemplateWidgetEntry:t=>{e.addTemplateWidgetEntry(t)},normalizeEntryName:e=>t?.(e,o)}])})}}}({context:e.context,normalizeEntryName:(e,t)=>"web"===t?D.get(e):e}),(t=this.pluginSystem,n=e.context,{name:"output-plugin",setup(e){let r={pluginSystem:t,context:n};e.modifyBundlerChain((e,t)=>{t?.environment?.name!=="web"&&e.plugin("output-plugin").use(aj,[r])})}}),...p===eR.DEV&&e.web?[function({context:e}){let t;return e.getWidgetViewDataTemplates=async()=>{if(t)return t;try{t=function(e,t,n){let r=function(e){let t,n=(0,x.createRequire)(tn.join(e,"package.json"));try{t=n.resolve("typescript")}catch(e){return}return n(t)}(e);if(!r)return{templatesByEntry:{},templatesByWidget:{}};let o=[...new Set(Object.values(t).map(({filename:e})=>e))],i=r.createProgram({options:function(e,t){let n={allowJs:!0,checkJs:!1,jsx:e.JsxEmit.Preserve,noEmit:!0,skipLibCheck:!0,target:e.ScriptTarget.ESNext},r=e.findConfigFile(t,tt.existsSync);if(!r)return n;let o=e.readConfigFile(r,e.sys.readFile);return o.error?n:{...e.parseJsonConfigFileContent(o.config,e.sys,tn.dirname(r)).options,...n}}(r,e),rootNames:o}),a=i.getTypeChecker(),s=Object.fromEntries(Object.entries(t).map(([e,{filename:t}])=>{let n,o=i.getSourceFile(t);return[k(e),o?(n={},!function e(t){if(r.isCallExpression(t)&&("getViewData"===aq(r,t.expression)||"useViewData"===aq(r,t.expression))&&t.typeArguments?.[0]){let e=a.getTypeFromTypeNode(t.typeArguments[0]);for(let o of a.getPropertiesOfType(e)){let i=o.valueDeclaration??o.declarations?.[0]??t;n[o.getName()]=function e(t,n,r,o,i){let a=(n.isUnion()?n.types:[n]).filter(e=>!(e.flags&(t.TypeFlags.Undefined|t.TypeFlags.Never)));if(a.some(e=>e.flags&t.TypeFlags.Null))return null;if(a.some(e=>e.flags&t.TypeFlags.StringLike))return"";if(a.some(e=>e.flags&(t.TypeFlags.NumberLike|t.TypeFlags.BigIntLike)))return 0;if(a.some(e=>e.flags&t.TypeFlags.BooleanLike))return!1;if(a.some(e=>r.isArrayType(e)||r.isTupleType(e)))return[];let s=a.find(e=>e.flags&t.TypeFlags.Object);if(!s||i.has(s))return{};i.add(s);let l=Object.fromEntries(r.getPropertiesOfType(s).map(n=>{let a=n.valueDeclaration??n.declarations?.[0]??o;return[n.getName(),e(t,r.getTypeOfSymbolAtLocation(n,a),r,a,i)]}));return i.delete(s),l}(r,a.getTypeOfSymbolAtLocation(o,i),a,i,new Set([e]))}}r.forEachChild(t,e)}(o),n):{}]})),l=Object.fromEntries(Object.keys(t).map(e=>{let r=k(e);return[ng(t,n,e),s[r]??{}]}));return{templatesByEntry:s,templatesByWidget:l}}(e.appDirectory,e.widgets,e.metadata.getData().widgets)}catch{t=aJ}return t},{name:"WidgetViewDataPlugin",setup(e){e.onAfterDevCompile(({stats:e})=>{e.hasErrors()||(t=void 0)})}}}({context:e.context})]:[],(({context:e})=>({name:"DevServerLogPlugin",setup(t){let n,r=!1,o=!1;t.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t(e,{server:{setup({server:e}){e.middlewares.use(ay)}}})),t.onAfterDevCompile(async({stats:i})=>{if(i.hasErrors()||r)return;let{devServer:a}=t.context;if(!a)return;r=!0;let s=await tk({debugDriver:e.userConfig.debugDriver,skipAdbForegroundAppWatch:e.userConfig.skipAdbForegroundAppWatch}).catch(rc);o||await ag({context:e,port:a.port,driver:s,isSigned:e.isSignedEncryption,onCleanupReady(e){o?e():n=e}})}),t.onCloseDevServer(()=>{o=!0,n?.(),n=void 0})}}))({context:e.context}),function({context:e}){let t="KitMonitorPlugin";return{name:t,setup(n){if(n.onAfterCreateCompiler(({compiler:n})=>{for(let r of"compilers"in n?n.compilers:[n])r.hooks.finishMake.tap(t,()=>{aI(e.compileLifecycle,"moduleProcess",Date.now())}),r.hooks.emit.tap(t,()=>{aI(e.compileLifecycle,"assetProcess",Date.now())}),r.hooks.failed.tap(t,t=>{aD.report({appDirectory:e.appDirectory,context:e,scene:e.compileLifecycle.scene??(e.command===eR.DEV?"dev_initial":e.command),status:"failed",errorStage:"compile",error:t})})}),e.command!==eR.DEV){let t=e.command;n.onBeforeBuild(()=>{let n=Date.now();aP(e.compileLifecycle,{scene:t,commandStartTime:e.compileLifecycle.commandStartTime??n,compileStartTime:n})}),n.onAfterBuild(({stats:n})=>{a$(e,t,n)})}else n.onBeforeDevCompile(({isFirstCompile:t})=>{let n=Date.now();aP(e.compileLifecycle,{scene:t?"dev_initial":"hot_update",commandStartTime:t?e.compileLifecycle.commandStartTime??n:n,compileStartTime:n})}),n.onAfterDevCompile(({stats:t})=>{a$(e,e.compileLifecycle.scene??"dev_initial",t)})}}}({context:e.context}),(r=this.pluginSystem,o=e.context,{name:"view-hooks-plugin",setup(e){e.modifyBundlerChain((e,t)=>{t?.environment?.name==="web"||e.plugin("view-hooks-plugin").use(aF,[{pluginSystem:r,context:o}])})}}),(({getAppAssetPath:e,getAppMapAssetPath:t,getClientToolRuntimeAssetPath:n,engineVersion:r,metadata:o,resolveSigningEncryptionOptions:i,onProcessDuration:a})=>({name:"lynx:encode-worker",async setup(s){tu()||s.modifyBundlerChain((s,l)=>{l?.environment?.name!=="web"&&s.plugin(rs.name).use(rs,[{getAppAssetPath:e,getAppMapAssetPath:t,getClientToolRuntimeAssetPath:n,engineVersion:r,metadata:o,resolveSigningEncryptionOptions:i,onProcessDuration:a}]).end()})}}))({getAppAssetPath:()=>e.context.appAssetPath,getAppMapAssetPath:()=>e.context.appMapAssetPath,getClientToolRuntimeAssetPath:()=>e.context.clientToolRuntimeAssetPath,metadata:e.context.metadata,resolveSigningEncryptionOptions:()=>e.context.resolveSigningEncryptionOptions(),onProcessDuration:t=>{e.context.compileLifecycle.appTemplateProcessDurationMs+=t}}),...e.rsbuildPlugins||[]],j=[{name:"web-virtual-entry-plugin",setup(e){e.modifyBundlerChain((e,{environment:t})=>{"web"===t.name&&e.plugin(aV.name).use(aV,[I])})}},(i=e.context,{name:"web-output-plugin",setup(e){e.modifyBundlerChain({order:"post",handler(e,{environment:t}){if("web"===t.name){let t=".rspeedy/";for(let n of Object.keys(e.plugins.entries()??{}))n.startsWith("lynx:template-")&&e.plugin(n).tap(e=>{let n=e[0];return n?.intermediate?.startsWith(t)&&(n.intermediate=n.intermediate.slice(t.length)),e});e.plugins.has("lynx:sourcemap")&&e.plugin("lynx:sourcemap").tap(e=>{var t;let n,r=e[0];return r.ignoreList=[/^(?!file:\/\/\/)/,/\/(?:externals-loading-runtime|webpack\/runtime)(?:\/|$)/,/\/node_modules\//,/\.(?:css|less|sass|scss)(?:[?#]|$)/],t=i.appDirectory,n=tn.resolve(t),r.moduleFilenameTemplate=({absoluteResourcePath:e,query:t=""})=>{let r=tn.relative(n,e),o=".."!==r&&!r.startsWith(`..${tn.sep}`)&&!tn.isAbsolute(r),i=o?aW(r):aW(e).replace(/^\/+/,"");return`${o?"file":"webpack"}:///${i}${t}`},e}),e.plugin(aG.name).use(aG,[i])}}})}})],B=c({mode:p===eR.DEV?"development":"production",environments:e.web?{lynx:L,web:{source:$,output:{distPath:{css:""},cleanDistPath:!1,filename:{assets:"[name]/web.bundle"},sourceMap:{js:!!b&&"cheap-module-source-map",css:!1}},plugins:[V({externals:aY(p===eR.DEV,!0),globalObject:"lynx"})]}}:{lynx:L},tools:{rspack:{module:{rules:[{enforce:"pre",test:/\.(t|j)sx$/,loader:function(e,t,n=eJ.join(eJ.dirname((0,aX.fileURLToPath)(import.meta.url)),"components-loader.js"),r=function(e,t){for(let n of e)try{return aZ.resolve(n,{paths:t})}catch{}throw Error(`Cannot resolve package from candidates: ${e.join(", ")}`)}){try{return r(t===to?["@doubao-dev/kit/components-loader","@byted-doubao-apps/kit/components-loader"]:["@byted-doubao-apps/kit/components-loader","@doubao-dev/kit/components-loader"],e)}catch(e){if((0,tt.existsSync)(n))return n;throw e}}(v,w),options:{frameworkPackage:w}}]},plugins:[new d.BannerPlugin({banner:'"use registerWorkletInternal";',raw:!0,entryOnly:!0,stage:d.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE+1,test:/\.js$/})]}},source:{...C,entry:{}},server:{host:rn()},dev:{writeToDisk:tc(),hmr:p===eR.DEV},output:{distPath:{js:"base/common",root:f||"dist"},cleanDistPath:!1,filename:{bundle:"[name]/template.js"},dataUriLimit:5120},resolve:{alias:{...e.options.resolve?.alias||{}}},performance:{printFileSize:tc(),...td()&&!y?{chunkSplit:{strategy:"split-by-experience"}}:{}},...y?{splitChunks:!1}:{},plugins:[{name:"replace-lynx-react-alias",setup(e){et({LAYERS:s,lazy:!1,rootPath:eJ.dirname((0,aX.fileURLToPath)(import.meta.url))}).setup(e)}},{name:"set-server.printUrls-false",setup(e){e.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t(e,{server:{printUrls:!1}}))}},l({compat:{componentsPkg:[],newRuntimePkg:w,oldRuntimePkg:[],legacySlot:!0},enableCSSInheritance:!0,shake:{pkgName:[...ti]}}),{name:"pin-react-transform-path",pre:["lynx:react"],setup(e){e.modifyBundlerChain((e,{CHAIN_ID:t})=>{let n=e.module.rule(t.RULE.JS).oneOf(t.ONE_OF.JS_MAIN);for(let e of[s.BACKGROUND,s.MAIN_THREAD]){let t=n.oneOfs.get(e)?.uses.get(e);if(!t)throw Error(`React transform loader not found for layer: ${e}`);t.tap(e=>({...e,transformPath:E}))}})}},function(e){let{compilerOptionsKeys:t=nT.compilerOptionsKeys,configKeys:n=nT.configKeys,validate:r=nK,dslPluginName2PkgName:o=nz,upgradeRspeedyLink:i="https://www.npmjs.com/package/upgrade-rspeedy"}=(void 0)??{};return r(e),{name:"lynx:config",async setup(r){r.expose(Symbol.for("lynx.config"),{config:e}),r.modifyBundlerChain(a=>{let s=r.useExposed(Symbol.for("LynxTemplatePlugin"));if(!s){let e="Rspeedy and plugins";throw Object.entries(o).forEach(([t,n])=>{r.isPluginExists(t)&&(e=n)}),Error(`\
67
+ [pluginLynxConfig] No \`LynxTemplatePlugin\` exposed to ${nB("the plugin API","https://rsbuild.rs/plugins/dev/core#apiexpose")}.
144
68
 
145
69
  Please upgrade ${e} to latest version.
146
70
 
147
- See ${nM(nG().yellow("Upgrade Rspeedy"),a)} for more details.
148
- `)}let{LynxTemplatePlugin:l}=o;s.plugin("lynx:config").use(nU,[{LynxTemplatePlugin:l,config:e,compilerOptionsKeys:t,configKeys:n}])})}}}({enableMultiTouch:!0,enableNewGesture:!0,enableCSSInlineVariables:!0,enableSimultaneousTap:!0,enableReloadLifecycle:!0}),h(),u(),...e.web?[]:D,...R,...M,...e.web?j:[]]});return await this.pluginSystem.callViewHooks("beforeBuild",{buildConfig:B}),B}}async function sb(e,t){let n=new sy(t),r=await n.createConfig({config:e}),i=await p({rspeedyConfig:r,cwd:e.context.appDirectory});return i.removePlugins(["lynx:react-alias"]),i}async function s_(e,t){var n;let{entry:r}=await ns({config:e,pluginSystem:t});return await sb({...e,rsbuildPlugins:[...e.rsbuildPlugins||[],(n={context:e.context,entry:r,pluginSystem:t},{name:"worker-in-view-plugin",setup(e){e.modifyRspackConfig((e,{environment:t})=>{var r,i,a;let s;("lynx"===t.name||"web"===t.name)&&(r=e,i=n,a=t.name,r.entry??={},s=r.entry,Object.entries(i.entry).forEach(([e,t])=>{s[e]={filename:"web"===a?`${e}.js`:`base/${e}${tc()?".js":".template.js"}`,import:t.filename,layer:o.BACKGROUND}}),e.plugins.push(new nv(n,"lynx"===t.name)),"web"===t.name&&e.plugins.push(new nb))})}})]},t)}let sw=e=>{try{return te.statSync(e,{throwIfNoEntry:!1})?.isFile()}catch(e){return!1}};async function sv({internal:e,appKey:t}){try{return await is({internal:e,path:`/developer/resource_api/apps/${encodeURIComponent(t)}/dek/public_key`})}catch(e){throw tS.error("Failed to get KEK",{error:e,appKey:t,operation:"get-kek"}),e}}async function sE(e,t,n,r){if(!(r||tl("DISABLE_SIGNING_ENCRYPTION")||tl("LEGACY_FRAMEWORK"))){if(e)return e;if("production"===process.env.NODE_ENV&&t===eD.DEPLOY){if(!n)throw Error("appId is required to get KEK");let{data:e}=await sv({internal:!1,appKey:n}),t=Number(Object.keys(e.keys)[0]);return{signing:{enabled:!1},encryption:{enabled:!0,wrap_key:e.keys[t],key_id:t,salt:""}}}}}function sS(e,t,n){if(n){let t=eJ.isAbsolute(n)?n:eJ.resolve(e,n);if(t1.existsSync(t))return t;tE.warn("Cannot find config file",{path:t})}for(let n of e8.map(n=>eJ.resolve(e,`${t}${n}`)))if(sw(n))return n;return!1}async function sx(e){let t=(0,_.createJiti)((0,sg.fileURLToPath)(import.meta.url),{requireCache:!1,interopDefault:!0});return await t.import(e,{default:!0})}async function sA({cwd:e=process.cwd(),customConfigFile:t}){let n=sS(e,"doubao.config",t);if(!n)return{};try{return await sx(n)}catch(e){throw tE.error("Failed to load config file",{path:n}),e}}async function sC({cwd:e=process.cwd()}={}){let t=sS(eJ.resolve(e,"src"),e5);if(t)try{return await sx(t)}catch(e){throw tE.error("Failed to load app config file",{path:t}),e}}async function sT(e){let t=globalThis,n=Object.prototype.hasOwnProperty.call(t,"defineAppConfig"),r=t.defineAppConfig;t.defineAppConfig=e=>e;try{return await sx(e)}finally{n?t.defineAppConfig=r:delete t.defineAppConfig}}async function sO({cwd:e=process.cwd()}={}){let t=sS(eJ.resolve(e,"src"),e5);if(t)try{let e=await sT(t);return{...void 0!==e.darkMode?{darkMode:e.darkMode}:{},...Array.isArray(e.pages)?{pages:e.pages}:{},...Array.isArray(e.widgets)?{widgets:e.widgets}:{}}}catch(e){throw tE.error("Failed to load Taro app config file",{path:t}),e}}let sI=g("fs/promises"),sP=async(e,t=eJ.basename(e))=>{if(!t1.existsSync(e))return{};let n={};for(let r of(await sI.readdir(e))){let i=eJ.resolve(e,r);if(!t1.statSync(i).isDirectory())continue;let a=eJ.resolve(i,"index.tsx");t1.existsSync(a)&&(n[`${t}/${r}/index`]={folderName:`${r}/index`,renderType:R.REACT_LYNX,filename:a})}return n},sk=async(e,t=eJ.basename(e))=>{if(!t1.existsSync(e))return{viewEntries:{},apiEntries:{}};let n=await sP(e,t),r={},i=eJ.resolve(e,"login.ts");t1.existsSync(i)&&(r[`${t}/login`]={filename:i,folderName:e});let a=eJ.resolve(e,"privacy.ts");return t1.existsSync(a)&&(r[`${t}/privacy`]={filename:a,folderName:e}),{viewEntries:n,apiEntries:r}},sN=async(e,t)=>t1.existsSync(e)?(await sI.readdir(e)).reduce((n,r)=>{let i=eJ.resolve(e,r);return t1.statSync(i).isDirectory()&&t1.existsSync(eJ.resolve(i,t))&&(n[r]=eJ.resolve(i,t)),n},{}):{};function s$(e){return tt.resolve(e,"app.ts")}let sD=async e=>{let t=tt.resolve(e,"tools"),n=await sN(t,"index.ts"),r=s$(e);return{tools:n,app:te.existsSync(r)?r:void 0}},sR=async(e,t)=>{let n=tt.resolve(e,"pages"),r=tt.resolve(e,"widgets"),i=tt.resolve(e,"auth"),a=tt.resolve(e,"mcp-ui"),[s,o,l,p]=await Promise.all([sP(n),sP(r),sk(a),sk(i)]),d=Object.keys(p.viewEntries).length>0||Object.keys(p.apiEntries).length>0?p:l,c=t.pages,u=t.widgets,h=(t,n,r)=>{let i={...t};return n.forEach(t=>{if(i[t])return;let n=`${r}/`;if(!t.startsWith(n))throw Error(`${r} config key must start with "${n}": ${t}`);let a=t.slice(n.length),s=tt.resolve(e,r,`${a}.tsx`);if(!te.existsSync(s))throw Error(`Configured entry file does not exist for ${t}: ${s}`);i[t]={folderName:a,renderType:R.REACT_LYNX,filename:s,isVirtualFile:!1}}),i},m=h(s,c.entryNames,"pages");return{widgets:h(o,u.entryNames,"widgets"),pages:m,auth:d}};function sL(e,t,n=!1,r=!1){let i=to(t);return Object.keys(e).reduce((a,s)=>{let{filename:o}=e[s],l=r&&e[s].isLoginPage?"defineLoginPage":r?"definePage":"defineWidget",p=`${eK}${tt.sep}${s}${tt.extname(o)}`,d=ne(tt.join(t,p,".."),o);return a[s]=new nt(p),a[s].appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:d,importSpecifiers:[{propertyName:"default",name:"ViewEntry"}]},{moduleSpecifier:i,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:l,name:l},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"hookConsole",name:"hookConsole"}]}),a[s].appendContent(`
71
+ See ${nB(nq().yellow("Upgrade Rspeedy"),i)} for more details.
72
+ `)}let{LynxTemplatePlugin:l}=s;a.plugin("lynx:config").use(nW,[{LynxTemplatePlugin:l,config:e,compilerOptionsKeys:t,configKeys:n}])})}}}({enableMultiTouch:!0,enableNewGesture:!0,enableCSSInlineVariables:!0,enableSimultaneousTap:!0,enableReloadLifecycle:!0}),m(),u(),...e.web?[]:R,...N,...M,...e.web?j:[]]});return await this.pluginSystem.callViewHooks("beforeBuild",{buildConfig:B}),B}}async function a0(e,t){let n=new aQ(t),r=await n.createConfig({config:e}),o=await p({rspeedyConfig:r,cwd:e.context.appDirectory});return o.removePlugins(["lynx:react-alias"]),o}async function a1(e,t){var n;let{entry:r}=await ns({config:e,pluginSystem:t});return await a0({...e,rsbuildPlugins:[...e.rsbuildPlugins||[],(n={context:e.context,entry:r,pluginSystem:t},{name:"worker-in-view-plugin",setup(e){e.modifyRspackConfig((e,{environment:t})=>{var r,o,i;let a;("lynx"===t.name||"web"===t.name)&&(r=e,o=n,i=t.name,r.entry??={},a=r.entry,Object.entries(o.entry).forEach(([e,t])=>{a[e]={filename:"web"===i?`${e}.js`:`base/${e}${tu()?".js":".template.js"}`,import:t.filename,layer:s.BACKGROUND}}),e.plugins.push(new nS(n,"lynx"===t.name)),"web"===t.name&&e.plugins.push(new n_))})}})]},t)}let a2=e=>{try{return tt.statSync(e,{throwIfNoEntry:!1})?.isFile()}catch(e){return!1}};async function a3({internal:e,appKey:t}){try{return await os({internal:e,path:`/developer/resource_api/apps/${encodeURIComponent(t)}/dek/public_key`})}catch(e){throw tx.error("Failed to get KEK",{error:e,appKey:t,operation:"get-kek"}),e}}async function a4(e,t,n,r){if(!(r||tp("DISABLE_SIGNING_ENCRYPTION")||tp("LEGACY_FRAMEWORK"))){if(e)return e;if("production"===process.env.NODE_ENV&&t===eR.DEPLOY){if(!n)throw Error("appId is required to get KEK");let{data:e}=await a3({internal:!1,appKey:n}),t=Number(Object.keys(e.keys)[0]);return{signing:{enabled:!1},encryption:{enabled:!0,wrap_key:e.keys[t],key_id:t,salt:""}}}}}function a5(e,t,n){if(n){let t=eJ.isAbsolute(n)?n:eJ.resolve(e,n);if(t1.existsSync(t))return t;tS.warn("Cannot find config file",{path:t})}for(let n of e6.map(n=>eJ.resolve(e,`${t}${n}`)))if(a2(n))return n;return!1}async function a9(e){let t=(0,_.createJiti)((0,aX.fileURLToPath)(import.meta.url),{requireCache:!1,interopDefault:!0});return await t.import(e,{default:!0})}async function a8({cwd:e=process.cwd(),customConfigFile:t}){let n=a5(e,"doubao.config",t);if(!n)return{};try{return await a9(n)}catch(e){throw tS.error("Failed to load config file",{path:n}),e}}async function a6({cwd:e=process.cwd()}={}){let t=a5(eJ.resolve(e,"src"),e8);if(t)try{return await a9(t)}catch(e){throw tS.error("Failed to load app config file",{path:t}),e}}async function a7(e){let t=globalThis,n=Object.prototype.hasOwnProperty.call(t,"defineAppConfig"),r=t.defineAppConfig;t.defineAppConfig=e=>e;try{return await a9(e)}finally{n?t.defineAppConfig=r:delete t.defineAppConfig}}async function se({cwd:e=process.cwd()}={}){let t=a5(eJ.resolve(e,"src"),e8);if(t)try{let e=await a7(t);return{...void 0!==e.darkMode?{darkMode:e.darkMode}:{},...Array.isArray(e.pages)?{pages:e.pages}:{},...Array.isArray(e.widgets)?{widgets:e.widgets}:{}}}catch(e){throw tS.error("Failed to load Taro app config file",{path:t}),e}}let st=f("fs/promises"),sn=async(e,t=eJ.basename(e))=>{if(!t1.existsSync(e))return{};let n={};for(let r of(await st.readdir(e))){let o=eJ.resolve(e,r);if(!t1.statSync(o).isDirectory())continue;let i=eJ.resolve(o,"index.tsx");t1.existsSync(i)&&(n[`${t}/${r}/index`]={folderName:`${r}/index`,renderType:j.REACT_LYNX,filename:i})}return n},sr=async(e,t=eJ.basename(e))=>{if(!t1.existsSync(e))return{viewEntries:{},apiEntries:{}};let n=await sn(e,t),r={},o=eJ.resolve(e,"login.ts");t1.existsSync(o)&&(r[`${t}/login`]={filename:o,folderName:e});let i=eJ.resolve(e,"privacy.ts");return t1.existsSync(i)&&(r[`${t}/privacy`]={filename:i,folderName:e}),{viewEntries:n,apiEntries:r}},so=async(e,t)=>t1.existsSync(e)?(await st.readdir(e)).reduce((n,r)=>{let o=eJ.resolve(e,r);return t1.statSync(o).isDirectory()&&t1.existsSync(eJ.resolve(o,t))&&(n[r]=eJ.resolve(o,t)),n},{}):{};function si(e){return tn.resolve(e,"app.ts")}let sa=async e=>{let t=tn.resolve(e,"tools"),n=await so(t,"index.ts"),r=si(e);return{tools:n,app:tt.existsSync(r)?r:void 0}},ss=async(e,t)=>{let n=tn.resolve(e,"pages"),r=tn.resolve(e,"widgets"),o=tn.resolve(e,"auth"),i=tn.resolve(e,"mcp-ui"),[a,s,l,p]=await Promise.all([sn(n),sn(r),sr(i),sr(o)]),c=Object.keys(p.viewEntries).length>0||Object.keys(p.apiEntries).length>0?p:l,d=t.pages,u=t.widgets,m=(t,n,r)=>{let o={...t};return n.forEach(t=>{if(o[t])return;let n=`${r}/`;if(!t.startsWith(n))throw Error(`${r} config key must start with "${n}": ${t}`);let i=t.slice(n.length),a=tn.resolve(e,r,`${i}.tsx`);if(!tt.existsSync(a))throw Error(`Configured entry file does not exist for ${t}: ${a}`);o[t]={folderName:i,renderType:j.REACT_LYNX,filename:a,isVirtualFile:!1}}),o},h=m(a,d.entryNames,"pages");return{widgets:m(s,u.entryNames,"widgets"),pages:h,auth:c}};function sl(e,t,n=!1,r=!1){let o=tl(t);return Object.keys(e).reduce((i,a)=>{let{filename:s}=e[a],l=r&&e[a].isLoginPage?"defineLoginPage":r?"definePage":"defineWidget",p=`${eK}${tn.sep}${a}${tn.extname(s)}`,c=nt(tn.join(t,p,".."),s);return i[a]=new nn(p),i[a].appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:c,importSpecifiers:[{propertyName:"default",name:"ViewEntry"}]},{moduleSpecifier:o,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:l,name:l},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"hookConsole",name:"hookConsole"}]}),i[a].appendContent(`
149
73
  if (
150
74
  typeof __DOUBAO_APPS_WEB__ === 'boolean' &&
151
75
  __DOUBAO_APPS_WEB__ &&
@@ -168,11 +92,11 @@ const View =
168
92
  const FC = bootstrapReactLynx(View, viewId, ${JSON.stringify(r)});
169
93
 
170
94
  root.render(<FC />);
171
- `),n&&a[s].appendContent(`
95
+ `),n&&i[a].appendContent(`
172
96
  if (import.meta.webpackHot) {
173
97
  import.meta.webpackHot.accept()
174
98
  }
175
- `),a},{})}let sM={name:"AuthPlugin",async setup(e){tl("DISABLE_GENERATE_LOGIN_CARD")||tl("LEGACY_FRAMEWORK")||(e.view.hooks.modifyEnvironment.tapPromise(sM.name,async({environment:e})=>{e.useAuth=!0}),e.view.hooks.modifyEntryOption.tapPromise({name:sM.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let n,r,i,a,s,o,l,{isDev:p,auth:d,appDirectory:c}=e.context,u={},h=Object.keys(d.viewEntries).reduce((e,t)=>(e[t]={...d.viewEntries[t],isSpecial:!0,isLoginPage:"auth/login-page/index"===t||"auth/mcp-login-page/index"===t||"mcp-ui/mcp-login-page/index"===t},e),{});return e.context.appendPages(h),t=Object.assign(t,(n=to(c),r=`${eK}${eJ.sep}${eZ}${eJ.sep}${e1}.tsx`,u[i=`${eZ}/${e1}`]={filename:r,renderType:R.REACT_LYNX,folderName:e1,isVirtualFile:!0,isSpecial:!0},a=new nt(r),s=eJ.join(c,eJ.dirname(r)),o=Object.values(d.apiEntries).find(e=>"login"===eJ.parse(e.filename).name),l=Object.values(d.apiEntries).find(e=>"privacy"===eJ.parse(e.filename).name),o&&a.appendImports({moduleSpecifier:ne(s,o.filename),importSpecifiers:[{propertyName:"default",name:"loginApi"}]}),l&&a.appendImports({moduleSpecifier:ne(s,l.filename),importSpecifiers:[{propertyName:"default",name:"privacyApi"}]}),a.appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:n,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"definePrivacyLoginWidget",name:"definePrivacyLoginWidget"},{propertyName:"hookConsole",name:"hookConsole"}]},{moduleSpecifier:`${n}/components`,importSpecifiers:[{propertyName:"MCPAuthCard",name:"MCPAuthCard"}]}),a.appendContent(`
99
+ `),i},{})}let sp={name:"AuthPlugin",async setup(e){tp("DISABLE_GENERATE_LOGIN_CARD")||tp("LEGACY_FRAMEWORK")||(e.view.hooks.modifyEnvironment.tapPromise(sp.name,async({environment:e})=>{e.useAuth=!0}),e.view.hooks.modifyEntryOption.tapPromise({name:sp.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let n,r,o,i,a,s,l,{isDev:p,auth:c,appDirectory:d}=e.context,u={},m=Object.keys(c.viewEntries).reduce((e,t)=>(e[t]={...c.viewEntries[t],isSpecial:!0,isLoginPage:"auth/login-page/index"===t||"auth/mcp-login-page/index"===t||"mcp-ui/mcp-login-page/index"===t},e),{});return e.context.appendPages(m),t=Object.assign(t,(n=tl(d),r=`${eK}${eJ.sep}${eZ}${eJ.sep}${e1}.tsx`,u[o=`${eZ}/${e1}`]={filename:r,renderType:j.REACT_LYNX,folderName:e1,isVirtualFile:!0,isSpecial:!0},i=new nn(r),a=eJ.join(d,eJ.dirname(r)),s=Object.values(c.apiEntries).find(e=>"login"===eJ.parse(e.filename).name),l=Object.values(c.apiEntries).find(e=>"privacy"===eJ.parse(e.filename).name),s&&i.appendImports({moduleSpecifier:nt(a,s.filename),importSpecifiers:[{propertyName:"default",name:"loginApi"}]}),l&&i.appendImports({moduleSpecifier:nt(a,l.filename),importSpecifiers:[{propertyName:"default",name:"privacyApi"}]}),i.appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:n,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"definePrivacyLoginWidget",name:"definePrivacyLoginWidget"},{propertyName:"hookConsole",name:"hookConsole"}]},{moduleSpecifier:`${n}/components`,importSpecifiers:[{propertyName:"MCPAuthCard",name:"MCPAuthCard"}]}),i.appendContent(`
176
100
  if (
177
101
  typeof __DOUBAO_APPS_WEB__ === 'boolean' &&
178
102
  __DOUBAO_APPS_WEB__ &&
@@ -190,8 +114,8 @@ const View = definePrivacyLoginWidget({
190
114
  <MCPAuthCard
191
115
  ${l?"onAgreePrivacy={privacyApi.onAgreePrivacy}":""}
192
116
  ${l?"onRefusePrivacy={privacyApi.onRefusePrivacy}":""}
193
- ${o?"onLogin={loginApi.onLogin}":""}
194
- ${o?"onRefuseLogin={loginApi.onRefuseLogin}":""}
117
+ ${s?"onLogin={loginApi.onLogin}":""}
118
+ ${s?"onRefuseLogin={loginApi.onRefuseLogin}":""}
195
119
  />
196
120
  );
197
121
  }
@@ -203,7 +127,7 @@ root.render(<FC />);
203
127
  if (import.meta.webpackHot) {
204
128
  import.meta.webpackHot.accept()
205
129
  }
206
- `:""),{[i]:a}),sL(h,c,p,!0)),e.context.appendWidgets(u),{entry:t}}))}};(eC=ej||(ej={}))[eC.DISABLED=0]="DISABLED",eC[eC.ENABLED=1]="ENABLED";let sj="AppletDoubaoAppInfoPlugin",sB={name:sj,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sj,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-1},async({assets:t})=>{if(e.context.command!==eD.DEV&&e.context.command!==eD.BUILD&&e.context.command!==eD.DEPLOY||!e.context.appId)return;let n=await e.context.resolveAppInfo();if(n){var r=t.getManifestAsset(e.context.manifestAssetPath);r.mergeBasicManifest({permissions:Object.fromEntries(n.permissionList.filter(e=>e.status===ej.ENABLED).map(e=>[e.scope_name,{desc:e.description||e.scope_name||"",apis:(e.api_list||[]).map(e=>e.api_name).filter(Boolean)}]).filter(([e,t])=>e&&t.apis.length>0))}),n?.appName&&r.mergeAppletManifest({name:n.appName}),n?.iconUrl&&r.mergeAppletManifest({icons:tM(n.iconUrl)})}})}},sU={name:"ExpiredWidgetPlugin",async setup(e){e.view.hooks.modifyEntryOption.tapPromise({name:sU.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let n,r,i,a,{isDev:s,appDirectory:o}=e.context,l={};return t=Object.assign(t,(n=to(o),r=`${eK}${eJ.sep}${eZ}${eJ.sep}${e2}.tsx`,l[i=`${eZ}/${e2}`]={filename:r,renderType:R.REACT_LYNX,folderName:e2,isVirtualFile:!0,isSpecial:!0},(a=new nt(r)).appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:n,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"defineWidget",name:"defineWidget"}]},{moduleSpecifier:`${n}/components`,importSpecifiers:[{propertyName:"UpdatedState",name:"UpdatedState"}]}),a.appendContent(`
130
+ `:""),{[o]:i}),sl(m,d,p,!0)),e.context.appendWidgets(u),{entry:t}}))}};(eT=ej||(ej={}))[eT.DISABLED=0]="DISABLED",eT[eT.ENABLED=1]="ENABLED";let sc="AppletDoubaoAppInfoPlugin",sd={name:sc,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sc,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-1},async({assets:t})=>{if(e.context.command!==eR.DEV&&e.context.command!==eR.BUILD&&e.context.command!==eR.DEPLOY||!e.context.appId)return;let n=await e.context.resolveAppInfo();if(n){var r=t.getManifestAsset(e.context.manifestAssetPath);r.mergeBasicManifest({permissions:Object.fromEntries(n.permissionList.filter(e=>e.status===ej.ENABLED).map(e=>[e.scope_name,{desc:e.description||e.scope_name||"",apis:(e.api_list||[]).map(e=>e.api_name).filter(Boolean)}]).filter(([e,t])=>e&&t.apis.length>0))}),n?.appName&&r.mergeAppletManifest({name:n.appName}),n?.iconUrl&&r.mergeAppletManifest({icons:tM(n.iconUrl)})}})}},su={name:"ExpiredWidgetPlugin",async setup(e){e.view.hooks.modifyEntryOption.tapPromise({name:su.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let n,r,o,i,{isDev:a,appDirectory:s}=e.context,l={};return t=Object.assign(t,(n=tl(s),r=`${eK}${eJ.sep}${eZ}${eJ.sep}${e2}.tsx`,l[o=`${eZ}/${e2}`]={filename:r,renderType:j.REACT_LYNX,folderName:e2,isVirtualFile:!0,isSpecial:!0},(i=new nn(r)).appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:n,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"defineWidget",name:"defineWidget"}]},{moduleSpecifier:`${n}/components`,importSpecifiers:[{propertyName:"UpdatedState",name:"UpdatedState"}]}),i.appendContent(`
207
131
  const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
208
132
 
209
133
  const View = defineWidget({
@@ -216,34 +140,44 @@ const View = defineWidget({
216
140
 
217
141
  const FC = bootstrapReactLynx(View, viewId);
218
142
  root.render(<FC />);
219
- `,s?`
143
+ `,a?`
220
144
  if (import.meta.webpackHot) {
221
145
  import.meta.webpackHot.accept()
222
146
  }
223
- `:""),{[i]:a})),e.context.appendWidgets(l),{entry:t}})}},sF="LynxPlugin",sW={name:sF,async setup(e){e.view.hooks.modifyEnvironment.tapPromise(sF,async({environment:e})=>{e.useLynx=!0});let t={};e.view.hooks.modifyEntryOption.tapPromise({name:sF,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:n})=>{let{appDirectory:r,isDev:i,widgets:a,pages:s}=e.context;return t=n=Object.assign(n,sL(a,r,i),sL(s,r,i,!0)),{entry:n}}),e.view.hooks.collectMetaData.tapPromise({name:sF,stage:e.view.COLLECT_METADATA_STAGE_PROCESS_METADATA},async({collector:n})=>{let{normalizedAppConfig:r,userConfig:i,widgets:a,pages:s}=e.context;await n5({widgets:a,pages:s,entries:t,collector:n,normalizedAppConfig:r,define:i.source?.define})}),e.assets.hooks.beforeEmit.tapPromise({name:sF,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS},async({assets:t})=>{let{widgets:n,pages:r,app:i}=e.context.metadata.getInstance(),a=e.context.templateWidgetEntries;Object.keys(n).forEach(r=>{let i=n[r],s=`${r}/template.js`,o=t.getAsset(s);if(i&&o){let n=`${i.metadata.id}/template.js`;o.destination=n;let s=t.getManifestAsset(e.context.manifestAssetPath),l=i.toManifest(n,o.hashCode,R.LYNX);a.has(r)&&(l.titleType=M.NONE),s.appendWidget(l)}}),Object.keys(r).forEach(n=>{let a=r[n],s=`${n}/template.js`,o=t.getAsset(s);if(a&&o){let n=`${i.metadata.appId}/${a.metadata.id}/template.js`;o.destination=n,t.getManifestAsset(e.context.manifestAssetPath).appendPage(a.toManifest(n,o.hashCode,R.LYNX))}})}),e.assets.hooks.afterEmit.tapPromise(sF,async({assets:e})=>{}),e.view.hooks.afterBuild.tapPromise(sF,async({stats:e})=>{})}};async function sH(e,t,n){let{app:r,tools:i,collector:a,define:s}=n,o=i[t],l=e;(o||r===t)&&(s&&Object.keys(s).length>0&&(l=Object.keys(s).reduce((e,t)=>{let n=s[t];if("string"==typeof n)return e.replaceAll(t,n);throw Error(`Define value ${t} is not a string`)},e)),el((0,n2.parseSync)(l,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(nK(e.callee)&&["defineTool","defineApp"].includes(e.callee.value)){let t=e.arguments[0]?.expression;if(nZ(t)){for(let e of t.properties)if(n0(e)&&nK(e.key)&&"aiMeta"===e.key.value){let t=n1(e.value);o?a.addToolMeta(o,t):a.addAppMeta({...t,appId:t.appId??t.package})}}}}}))}async function sG({tools:e,app:t,collector:n,define:r,appConfig:i}){let a={collector:n,tools:Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),app:t,define:r};Object.entries(e).forEach(([e])=>{n.addToolMeta(e,{id:e})}),t1.existsSync(t)?await Promise.all(Object.values({...e,app:t}).filter(e=>/\.(ts|tsx|jsx|js)$/i.test(e)&&t1.existsSync(e)).map(e=>sH(t1.readFileSync(e,"utf-8"),e,a))):tE.warn("App file does not exist",{path:t});let s=n.app,o=i?.appId??s.appId;if(!o)throw Error("appId is required in app config or AI metadata");n.addAppMeta({...s,name:i?.name??s.name,description:i?.description??s.description,icons:i?.icons??s.icons,keywords:i?.keywords??s.keywords,version:i?.version??s.version,darkMode:i?.darkMode??s.darkMode,appId:o})}let sV={name:"AppletMainPlugin",setup:async e=>{e.context.app&&(e.worker.hooks.modifyEntryOption.tapPromise("AppletMainPlugin",async({entry:t})=>{let{app:n,tools:r}=e.context;return Object.assign(t,{app:((e,t,n,r={})=>{let i=(({dirname:e,app:t,functionalTools:n,enableWebConsoleHook:r=!1})=>{let i=[],a=[],s=[],o=to(eJ.resolve(t,"..","..")),l=r?`if (__DOUBAO_APPS_WEB__ && typeof __BACKGROUND__ === 'boolean' && __BACKGROUND__) {
147
+ `:""),{[o]:i})),e.context.appendWidgets(l),{entry:t}})}},sm="LynxPlugin",sh={name:sm,async setup(e){e.view.hooks.modifyEnvironment.tapPromise(sm,async({environment:e})=>{e.useLynx=!0});let t={};e.view.hooks.modifyEntryOption.tapPromise({name:sm,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:n})=>{let{appDirectory:r,isDev:o,widgets:i,pages:a}=e.context;return t=n=Object.assign(n,sl(i,r,o),sl(a,r,o,!0)),{entry:n}}),e.view.hooks.collectMetaData.tapPromise({name:sm,stage:e.view.COLLECT_METADATA_STAGE_PROCESS_METADATA},async({collector:n})=>{let{normalizedAppConfig:r,userConfig:o,widgets:i,pages:a}=e.context;await n6({widgets:i,pages:a,entries:t,collector:n,normalizedAppConfig:r,define:o.source?.define})}),e.assets.hooks.beforeEmit.tapPromise({name:sm,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS},async({assets:t})=>{let{widgets:n,pages:r,app:o}=e.context.metadata.getInstance(),i=e.context.templateWidgetEntries;Object.keys(n).forEach(r=>{let o=n[r],a=`${r}/template.js`,s=t.getAsset(a);if(o&&s){let n=`${o.metadata.id}/template.js`;s.destination=n;let a=t.getManifestAsset(e.context.manifestAssetPath),l=o.toManifest(n,s.hashCode,j.LYNX);i.has(r)&&(l.titleType=U.NONE),a.appendWidget(l)}}),Object.keys(r).forEach(n=>{let i=r[n],a=`${n}/template.js`,s=t.getAsset(a);if(i&&s){let n=t7(o.metadata.appId,i.metadata.path,"template.js");s.destination=n,t.getManifestAsset(e.context.manifestAssetPath).appendPage(i.toManifest(n,s.hashCode,j.LYNX))}})}),e.assets.hooks.afterEmit.tapPromise(sm,async({assets:e})=>{}),e.view.hooks.afterBuild.tapPromise(sm,async({stats:e})=>{})}};async function sf(e,t,n){let{app:r,tools:o,collector:i,define:a}=n,s=o[t],l=e;(s||r===t)&&(a&&Object.keys(a).length>0&&(l=Object.keys(a).reduce((e,t)=>{let n=a[t];if("string"==typeof n)return e.replaceAll(t,n);throw Error(`Define value ${t} is not a string`)},e)),el((0,n4.parseSync)(l,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(nY(e.callee)&&["defineTool","defineApp"].includes(e.callee.value)){let t=e.arguments[0]?.expression;if(n0(t)){for(let e of t.properties)if(n2(e)&&nY(e.key)&&"aiMeta"===e.key.value){let t=n3(e.value);s?i.addToolMeta(s,t):i.addAppMeta({...t,appId:t.appId??t.package})}}}}}))}async function sg({tools:e,app:t,collector:n,define:r,appConfig:o}){let i={collector:n,tools:Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),app:t,define:r};Object.entries(e).forEach(([e])=>{n.addToolMeta(e,{id:e})}),t1.existsSync(t)?await Promise.all(Object.values({...e,app:t}).filter(e=>/\.(ts|tsx|jsx|js)$/i.test(e)&&t1.existsSync(e)).map(e=>sf(t1.readFileSync(e,"utf-8"),e,i))):tS.warn("App file does not exist",{path:t});let a=n.app,s=o?.appId??a.appId;if(!s)throw Error("appId is required in app config or AI metadata");n.addAppMeta({...a,name:o?.name??a.name,description:o?.description??a.description,icons:o?.icons??a.icons,keywords:o?.keywords??a.keywords,version:o?.version??a.version,darkMode:o?.darkMode??a.darkMode,appId:s})}let sy={name:"AppletMainPlugin",setup:async e=>{e.context.app&&(e.worker.hooks.modifyEntryOption.tapPromise("AppletMainPlugin",async({entry:t})=>{let{app:n,tools:r}=e.context;return Object.assign(t,{app:((e,t,n,r={})=>{let o=(({dirname:e,app:t,functionalTools:n,enableWebConsoleHook:r=!1})=>{let o=[],i=[],a=[],s=tl(eJ.resolve(t,"..","..")),l=r?`if (__DOUBAO_APPS_WEB__ && typeof __BACKGROUND__ === 'boolean' && __BACKGROUND__) {
224
148
  hookConsole();
225
149
  }
226
150
 
227
- `:"";return Object.keys(n).forEach((t,r)=>{n[t]&&(a.push(`import Tool${r} from "${ne(e,n[t])}";`),s.push(`const Tool${r}Wrapper = {
151
+ `:"";return Object.keys(n).forEach((t,r)=>{n[t]&&(i.push(`import Tool${r} from "${nt(e,n[t])}";`),a.push(`const Tool${r}Wrapper = {
228
152
  ...Tool${r},
229
153
  aiMeta: {
230
154
  ...Tool${r}.aiMeta,
231
155
  id: Tool${r}.aiMeta?.id || "${t}"
232
156
  }
233
- };`),i.push(`Tool${r}Wrapper`))}),`
234
- import { Applet${r?", hookConsole":""} } from "${o}";
235
- import App from "${ne(e,t)}";
157
+ };`),o.push(`Tool${r}Wrapper`))}),`
158
+ import { Applet${r?", hookConsole":""} } from "${s}";
159
+ import App from "${nt(e,t)}";
160
+
161
+ ${i.join("\n")}
236
162
 
237
163
  ${a.join("\n")}
238
164
 
239
- ${s.join("\n")}
165
+ ${l}new Applet(App, [${o.join(", ")}]).bootstrap();
166
+ `})({dirname:eJ.dirname(e),app:t,functionalTools:n,enableWebConsoleHook:r.enableWebConsoleHook});return new nn(e,o)})(`${e.context.appDirectory}${tn.sep}${eK}${tn.sep}app.js`,n,r)}),Object.keys(e.context.clientToolEntries).length>0&&(t[e5]=function(e,t,n,r={}){return new nn(e,function({appDirectory:e,clientTools:t,dirname:n,enableWebConsoleHook:r=!1}){let o=tl(e),i=[],a=[];Object.entries(t).forEach(([e,t],r)=>{i.push(`import ClientTool${r} from "${nt(n,t.filename)}";`),a.push(`{ name: ${JSON.stringify(e)}, handler: ClientTool${r} }`)});let s=r?`if (__DOUBAO_APPS_WEB__ && typeof __BACKGROUND__ === 'boolean' && __BACKGROUND__) {
167
+ hookConsole();
168
+ }
169
+
170
+ `:"";return`
171
+ import { bootstrapClientToolRuntime${r?", hookConsole":""} } from "${o}";
172
+
173
+ ${i.join("\n")}
240
174
 
241
- ${l}new Applet(App, [${i.join(", ")}]).bootstrap();
242
- `})({dirname:eJ.dirname(e),app:t,functionalTools:n,enableWebConsoleHook:r.enableWebConsoleHook});return new nt(e,i)})(`${e.context.appDirectory}${tt.sep}${eK}${tt.sep}app.js`,n,r)}),{entry:t}}),e.worker.hooks.modifyEnvironment.tapPromise("AppletMainPlugin",async({environment:e})=>{}),e.worker.hooks.collectMetaData.tapPromise({name:"AppletMainPlugin",stage:e.worker.COLLECT_METADATA_STAGE_PROCESS_METADATA},async({collector:t})=>{let{app:n,appConfig:r,tools:i,userConfig:a}=e.context;await sG({appConfig:r,tools:i,app:n,collector:t,define:a.source?.define})}),e.assets.hooks.beforeEmit.tapPromise({name:"AppletMainPlugin",stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS},async({assets:t})=>{var n,r;let{app:i,pages:a,tools:s}=e.context.metadata.getInstance(),o=t.getAsset(e.context.appAssetPath),l=t.getManifestAsset(e.context.manifestAssetPath),{manifest:p}=l,d=[];p.applet.pages.forEach(e=>{d.push(e.digest)});let c=i.metadata.appId,u=e.context.versionTag??i.metadata.version;l.assignBasicManifest({manifestVersion:"3.0",packageName:c,appId:c,versionName:u,versionTag:u,scmVersion:process.env.BUILD_VERSION,versionCode:Date.now().toString(),runtimeVersion:"1.0",sourceType:e.context.internal?1:2});let h=e.context.appAssetPath,m=e.context.normalizedAppConfig.pages.entryNames[0],g=m?a[m]?.metadata.id:void 0,f=i.toManifest({toolsMetadata:s,hashCode:o?.hashCode??(n=o?.hashCode??p?.applet?.digest,r=d.join(""),a6.createHash("sha256").update(n+r).digest("hex").substring(0,8)),appRuntimeEntry:h,appRuntimeType:e.context.environment.useLynx?"lynx":"js"});l.mergeAppletManifest(f),g&&l.mergeAppletManifest({appletEntry:g})}),e.assets.hooks.afterEmit.tapPromise({name:"AppletMainPlugin",stage:e.assets.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS},async({assets:e})=>{}),e.worker.hooks.afterBuild.tapPromise("AppletMainPlugin",async({stats:e})=>{}))}},sq={name:"AppletMainEntryCheckPlugin",setup:async e=>{let{srcDirectory:t}=e.context,n=s$(t);if(!t1.existsSync(n))throw Error("ENOENT: no such file or directory")}},sJ={name:"AppletManifestPlugin",setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:"AppletManifestPlugin",stage:e.assets.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS},async({assets:t})=>{let{signing:n}=await e.context.resolveSigningEncryptionOptions()||{};if(n?.enabled){let{signData:r}=await import("node:module").then(function(e){return g.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),i=t.getManifestAsset(e.context.manifestAssetPath),{manifest:a}=i,{buffer:s,status:o,error_msg:l}=await r(Buffer.from(i.content),t7(n,{extra_config:{app_id:a.appId,bundle_id:""},output_mode:"sign_block"}));if(0!==o)throw Error(l);let p=new a7(e0,s);p.destination=e0,t.addAsset(e0,p)}})}},sK="AppletWebManifestPlugin";function sz(e,t,n,r){return Object.keys(t).map(i=>{var a;let{id:s,...o}=n[i]??{},l=s??nm(t,n,i),p={entry:nu(e,l,r)},d=(a=t[i],!!(a?.isVirtualFile||a?.isSpecial));return{id:l,entryName:i,web:p,debugHidden:d,manifest:{...o,..."pages"===e?{id:l,path:o.path??`/${i}`}:{widgetId:l},digest:"",entry:"",renderType:R.LYNX,web:p,...d?{debugHidden:!0}:{}}}})}let sY={name:sK,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sK,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-2},async({assets:t})=>{if("off"===e.context.webMode)return;let n=e.context.metadata.getData(),r=n.app.appId||e.context.appId,i=nf(e.context.webMode),a=ng(e.context.pages,e.context.normalizedAppConfig.pages.entries,i),s=ng(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,i),o=sz("pages",a,n.pages,r),l=sz("widgets",s,n.widgets);if(0===o.length&&0===l.length)return;let p=t.getManifestAsset(e.context.manifestAssetPath),d=new Map(o.map(e=>[e.id,e])),c=new Set(p.manifest.applet.pages?.map(e=>e.id));for(let e of(p.manifest.applet.pages?.forEach(e=>{let t=d.get(e.id);t&&(e.web=t.web,t.debugHidden&&(e.debugHidden=!0))}),o))c.has(e.id)||p.appendPage(e.manifest);let u=new Map(l.map(e=>[e.id,e])),h=new Set(p.manifest.widgets?.map(e=>e.widgetId));for(let t of(p.manifest.widgets?.forEach(e=>{let t=u.get(e.widgetId);t&&(e.web=t.web,t.debugHidden&&(e.debugHidden=!0))}),l))if(!h.has(t.id)){let n=t.manifest;e.context.templateWidgetEntries.has(t.entryName)&&(n.titleType=M.NONE),p.appendWidget(n)}e.context.app&&(p.manifest.applet.web={appRuntimeEntry:nc})})}};function sX(e=((e=process.cwd())=>ts(e)===tn)()){return e?"sso":"sms"}async function sZ(e={},t={}){if(e.cookie)return e.cookie;let{ensureLoginCookie:n}=await import("./@byted-doubao-apps/login.js");return await n({route:sX(t.internal),browser:e.loginBrowser,browserPath:e.loginBrowserPath,force:t.force})}async function sQ(e,t){if(e.cookie)return e.cookie;let{getCachedLoginCookie:n}=await import("./@byted-doubao-apps/login.js");return await n({route:sX(t)})}function s0(e,t){let n;if(!e)return{entryNames:[],entries:{}};if(Array.isArray(e))n=e;else if("object"==typeof e)t&&tE.warn(`${t} config object map is deprecated. Use an array of strings or { entry, ...metadata } objects instead.`),n=Object.entries(e).map(([e,t])=>{let n;return{...t,entry:(n=e.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"")).endsWith("/index")?n:`${n}/index`}});else throw Error("Entry config must be an array or object map.");let r=[],i={},a=new Set,s=[],o=new Set;return n.forEach(e=>{let t,n;if("string"==typeof e)t=e,n={};else{let{entry:r,...i}=e;if(!r)throw Error('Entry config object must include "entry".');t=r,n=i}a.has(t)?o.has(t)||(s.push(t),o.add(t)):(r.push(t),a.add(t)),i[t]=n}),t&&s.length>0&&tE.warn(`${t} config contains duplicate entries: ${s.join(", ")}. Entries are deduplicated, and the last metadata config takes effect.`),{entryNames:r,entries:i}}class s1{constructor(){this.deploy={},this._isInitialized=!1,this._environment={useLynx:!1,useAuth:!1},this._srcDirectory="",this._virtualEntryDir="",this._appDirectory=process.cwd(),this._rootPath="",this._appAssetPath="",this._appMapAssetPath="",this._manifestPath="",this._widgets={},this._app="",this._tools={},this._cookie="",this._pages={},this._auth={viewEntries:{},apiEntries:{}},this._viewEntriesByType={}}async bootstrap({command:e,metadata:t,versionTag:n,srcDirectory:r="",virtualEntryDir:i="",appDirectory:a=process.cwd(),rootPath:s="",manifestPath:o="",pages:l={},widgets:p={},auth:d,mcpUI:c,app:u="",tools:h={},environment:m={useLynx:!1,useAuth:!1},viewEntriesByType:g={},loginCookieResolver:f,cachedLoginCookieResolver:y}){this._command=e,this._metadata=t,this._versionTag=n,this._srcDirectory=r,this._virtualEntryDir=i,this._appDirectory=a,this._rootPath=s,this._manifestPath=o,this._pages={...l},this._widgets={...p};let b=d??c??{viewEntries:{},apiEntries:{}};this._auth={viewEntries:{...b.viewEntries},apiEntries:{...b.apiEntries}},this._app=u,this._tools={...h},this._environment={useLynx:m.useLynx,useAuth:!!(m.useAuth||m.useMcpUI)},this._cookie="",this._loginCookieResolver=f,this._loginCookiePromise=void 0,this._cachedLoginCookieResolver=y,this._viewEntriesByType=Object.fromEntries(Object.entries(g).map(([e,t])=>[e,{pages:{...t.pages},widgets:{...t.widgets}}])),this._isInitialized=!0}assertInitialized(e){if(!this._isInitialized)throw Error(`BuildContext.${e} is unavailable before bootstrap`)}get isDev(){return this.assertInitialized("isDev"),this._command===eD.DEV}get command(){return this.assertInitialized("command"),this._command}get metadata(){return this.assertInitialized("metadata"),this._metadata}get manifestPath(){return this.assertInitialized("manifestPath"),this._manifestPath}get appDirectory(){return this._appDirectory}get virtualEntryDir(){return this.assertInitialized("virtualEntryDir"),this._virtualEntryDir}get srcDirectory(){return this.assertInitialized("srcDirectory"),this._srcDirectory}get rootPath(){return this.assertInitialized("rootPath"),this._rootPath}get manifest(){if(this._manifest)return{...this._manifest};try{return this._manifest=JSON.parse(te.readFileSync(this._manifestPath,"utf-8")),{...this._manifest}}catch(e){return{}}}get useLynx(){return this._environment.useLynx}get useAuth(){return this._environment.useAuth}get useMcpUI(){return this.useAuth}get manifestAssetPath(){return eQ}get appAssetPath(){return this._appAssetPath}get appMapAssetPath(){return this._appMapAssetPath}get environment(){return{...this._environment}}get widgets(){return{...this._widgets}}get pages(){return{...this._pages}}get auth(){return{viewEntries:{...this._auth.viewEntries},apiEntries:{...this._auth.apiEntries}}}get mcpUI(){return this.auth}get viewEntriesByType(){return Object.fromEntries(Object.entries(this._viewEntriesByType).map(([e,t])=>[e,{pages:{...t.pages},widgets:{...t.widgets}}]))}get app(){return this._app}get tools(){return{...this._tools}}async getLoginCookie(){return(this.assertInitialized("getLoginCookie"),this._cookie)?this._cookie:this._loginCookieResolver?(this._loginCookiePromise||(this._loginCookiePromise=this._loginCookieResolver().then(e=>(this._cookie=e??"",e)).catch(e=>{throw this._loginCookiePromise=void 0,e})),await this._loginCookiePromise):void 0}async getCachedLoginCookie(){if(this.assertInitialized("getCachedLoginCookie"),this._cookie)return this._cookie;if(!this._cachedLoginCookieResolver)return;let e=await this._cachedLoginCookieResolver();return e&&(this._cookie=e),e}get appId(){return this._appId||this._metadata.appId}setAppId(e){this._appId=e}setApp(e){this._app=e}setTools(e){this._tools=e}setEnvironment(e){this._environment={...e}}mergeEnvironment(e){this._environment={...this._environment,...e}}setPages(e){this._pages=e}setWidgets(e){this._widgets=e}appendPages(e){Object.assign(this._pages,e)}appendWidgets(e){Object.assign(this._widgets,e)}getViewEntriesByType(e){let t=this._viewEntriesByType[e];return t?{pages:{...t.pages},widgets:{...t.widgets}}:{pages:{},widgets:{}}}setViewEntriesByType(e,t){this._viewEntriesByType[e]={pages:{...t.pages},widgets:{...t.widgets}}}setAppAssetPath(e){this._appAssetPath=e}setAppMapAssetPath(e){this._appMapAssetPath=e}setManifest(e){this._manifest=e}setAuthApi(e){this._auth={viewEntries:{...e.viewEntries},apiEntries:{...e.apiEntries}}}setMcpUIApi(e){this.setAuthApi(e)}get versionTag(){return this.assertInitialized("versionTag"),this._versionTag}}function s2(e){if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}async function s3({internal:e,domainId:t,appLimit:n,appOffset:r,keyWord:i,appKey:a,cookie:s}){return await is({internal:e,domainId:t,path:"/app_developer/api/apps",query:{app_limit:n,app_offset:r,key_word:i,app_key:a},method:"GET",headers:s?{Cookie:s}:void 0})}async function s4({source:e,internal:t,domainId:n,appLimit:r,appOffset:i,releaseStatus:a,keyWord:s,appKey:o,cookie:l}){return await is({internal:t,domainId:n,path:"/developer/api/apps",query:{source:e,app_limit:r,app_offset:i,release_status:a,key_word:s,app_key:o},method:"GET",headers:l?{Cookie:l}:void 0})}async function s9({appKey:e,source:t,internal:n,domainId:r,releaseStatus:i,limit:a,offset:s,status:o,keyWord:l,versionTag:p,cookie:d}){return await is({internal:n,domainId:r,path:`/developer/api/apps/${encodeURIComponent(e)}/version`,query:{source:t,release_status:i,limit:a,offset:s,status:o,key_word:l,version_tag:p},method:"GET",headers:d?{Cookie:d}:void 0})}async function s5({appKey:e,versionTag:t,internal:n,domainId:r,pageSize:i,pageNum:a,cookie:s}){return await is({internal:n,domainId:r,path:`/developer/api/apps/${encodeURIComponent(e)}/permission/versions/${encodeURIComponent(t)}/permission_list`,query:{page_size:i,page_num:a},method:"GET",headers:s?{Cookie:s}:void 0})}function s8(e){return e.is_latest||e.is_current}function s6(e){return Date.parse(e.updated_at??e.created_at??e.online_at??"")}function s7(e){return Number(e.version_code??e.qr_data?.artifact_version_code)}function oe(e){return e.version_tag}function ot(e,t){tp()&&tE.info(e,t)}async function on({appKey:e,internal:t=!1,cookie:n,source:r=eW.REQUEST_SOURCE_IDE}){ot("[app-info] 开始获取应用信息",{appKey:e,internal:t,session:n?"present":"absent"});let i=await s3({internal:t,appLimit:1,appOffset:0,appKey:e,cookie:n}).then(({data:t,log_id:n})=>{let r=t?.app_list||[],i=r.find(t=>t.app_key===e);return ot("[app-info] MGetApps 请求完成",{appKey:e,appCount:r.length,exactMatch:!!i,logId:n}),i||r[0]}).catch(t=>{if(ot("[app-info] MGetApps 请求失败",{appKey:e,reason:s2(t)}),aK(t))throw t}),a=i&&i.name&&i.icon_url?void 0:await s4({source:r,internal:t,appLimit:1,appOffset:0,appKey:e,cookie:n}).then(({data:t,log_id:n})=>{let r=t?.org_list?.flatMap(e=>e.app_list)||[],i=r.find(t=>t.app_key===e),a=i||r[0];return ot("[app-info] MGetAppsDeprecated 请求完成",{appKey:e,appCount:r.length,exactMatch:!!i,logId:n}),a?.app_meta}).catch(t=>{ot("[app-info] MGetAppsDeprecated 请求失败",{appKey:e,reason:s2(t)})});if(!i&&!a)throw ot("[app-info] 应用信息查询结束,未找到可用结果",{appKey:e}),Error(`未找到应用 ${e}`);let s=i?.current_version_tag&&(i.icon_url||a?.icon_url)?void 0:await s9({appKey:e,source:r,internal:t,cookie:n}).then(({data:t,log_id:n})=>{let r=Array.isArray(t?.version_list)?t.version_list:[];if(ot("[app-info] MGetAppVersions 请求完成",{appKey:e,versionCount:r.length,logId:n}),0===r.length)return;let i=r.find(s8);return i||r.reduce((e,t)=>{let n,r;return!e||(n=s6(t),r=s6(e),(Number.isNaN(n)&&Number.isNaN(r)?s7(t)-s7(e):(Number.isNaN(n)?-1/0:n)-(Number.isNaN(r)?-1/0:r))>0)?t:e},void 0)}).catch(t=>{ot("[app-info] MGetAppVersions 请求失败",{appKey:e,reason:s2(t)})}),o=i?.current_version_tag||(s?oe(s):""),l=i?.icon_url||(s?s.icon_url:void 0)||a?.icon_url,p=i?.name||a?.name,d=s&&oe(s)===o?s:i?{version_tag:i.current_version_tag,icon_url:i.icon_url,updated_at:i.updated_at,online_at:i.online_at,offline_at:i.offline_at}:{version_tag:o,icon_url:l};if(!o||!n)return{appKey:e,appName:p,versionTag:o,iconUrl:l,permissionList:[],permissionTotal:0,version:d};let c=await s5({appKey:e,versionTag:o,pageSize:1e3,pageNum:1,internal:t,cookie:n}).then(t=>(ot("[app-info] FetchAppPermissionList 请求完成",{appKey:e,versionTag:o,permissionTotal:t.data?.total||0,logId:t.log_id}),t)).catch(t=>{throw ot("[app-info] FetchAppPermissionList 请求失败",{appKey:e,versionTag:o,reason:s2(t)}),t});return{appKey:e,appName:p,versionTag:o,iconUrl:l,permissionList:c.data?.permission_list||[],permissionTotal:c.data?.total||0,version:d}}function or(){return function({fetch:e,getCacheKey:t,ttl:n,timeout:r,cacheFailures:i=!1,now:a=Date.now}){let s=new Map;return function(...o){var l,p;let d,c="string"==typeof(l=t(...o))?l:JSON.stringify(l),u=a(),h=s.get(c);if(h&&h.expiresAt>u)return h.promise;let m=(p=e(...o),void 0===r?p:Promise.race([p,new Promise((e,t)=>{d=setTimeout(()=>{t(Error(`Request timed out after ${r}ms`))},r)})]).finally(()=>{d&&clearTimeout(d)})).catch(e=>{throw i||s.get(c)?.promise!==m||s.delete(c),e});return s.set(c,{expiresAt:u+n,promise:m}),m}}({fetch:on,getCacheKey:({appKey:e,internal:t,cookie:n})=>[e,t,n],ttl:6e4,timeout:1e4,cacheFailures:!0})}(eT=eB||(eB={}))[eT.APP_TYPE_MINI_APP=0]="APP_TYPE_MINI_APP",eT[eT.APP_TYPE_NATIVE=1]="APP_TYPE_NATIVE",(eO=eU||(eU={}))[eO.DRAFT=0]="DRAFT",eO[eO.UNDER_REVIEW=1]="UNDER_REVIEW",eO[eO.APPROVED=2]="APPROVED",eO[eO.REJECTED=3]="REJECTED",eO[eO.WITHDRAWN=4]="WITHDRAWN",eO[eO.PUBLISHING=5]="PUBLISHING",eO[eO.PUBLISHED=6]="PUBLISHED",eO[eO.ARCHIVED=7]="ARCHIVED",eO[eO.DELETED=8]="DELETED",(eI=eF||(eF={}))[eI.DRAFT=0]="DRAFT",eI[eI.PUBLISHED=1]="PUBLISHED",eI[eI.ARCHIVED=2]="ARCHIVED",(eP=eW||(eW={}))[eP.REQUEST_SOURCE_PLATFORM=0]="REQUEST_SOURCE_PLATFORM",eP[eP.REQUEST_SOURCE_IDE=1]="REQUEST_SOURCE_IDE",eP[eP.REQUEST_SOURCE_DEVICE=2]="REQUEST_SOURCE_DEVICE",eP[eP.REQUEST_SOURCE_OP_PLATFORM=3]="REQUEST_SOURCE_OP_PLATFORM";class oi extends s1{devServerInteractive=!0;getWidgetViewDataTemplates;webMode="off";webDebuggerLaunchOptions;_userConfig={};_env={};_appConfig={};_normalizedAppConfig={pages:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}};_signingEncryptionOptions;_rawSigningEncryptionOptions;_signingEncryptionOptionsPromise;_disableSigningEncryption=!1;_dek=Buffer.from("");_internal=!1;_fetchCachedAppInfo=or();_skipAppInfoFetch=!1;_hasWarnedAppInfoFetchFailure=!1;_templateWidgetEntries=new Set;get userConfig(){return this._userConfig}get env(){return{...this._env}}get appConfig(){return this._appConfig}get normalizedAppConfig(){var e;return{pages:{entryNames:[...(e=this._normalizedAppConfig).pages.entryNames],entries:Object.fromEntries(Object.entries(e.pages.entries).map(([e,t])=>[e,{...t}]))},widgets:{entryNames:[...e.widgets.entryNames],entries:Object.fromEntries(Object.entries(e.widgets.entries).map(([e,t])=>[e,{...t}]))}}}get templateWidgetEntries(){return new Set(this._templateWidgetEntries)}get signingEncryptionOptions(){if(this._signingEncryptionOptions)return{...this._signingEncryptionOptions,encryption:{...this._signingEncryptionOptions?.encryption,dek:this.dek}}}get dek(){return this._dek}get isSignedEncryption(){return this.signingEncryptionOptions?.signing.enabled||this.signingEncryptionOptions?.encryption.enabled}get internal(){return this.assertInitialized("internal"),this._internal}setSigningEncryptionOptions(e){this._rawSigningEncryptionOptions=e,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0}disableSigningEncryption(){this._disableSigningEncryption=!0,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0,this._dek=Buffer.from("")}addTemplateWidgetEntry(e){this._templateWidgetEntries.add(e)}async resolveSigningEncryptionOptions(){return this._signingEncryptionOptionsPromise||(this._signingEncryptionOptionsPromise=this.resolveSigningEncryptionOptionsOnce()),this._signingEncryptionOptionsPromise}async resolveAppInfo(){var e;this.assertInitialized("resolveAppInfo");let t=this.appId;if(!aJ(t))return;let n="string"==typeof(e=this._appConfig.icons)?e.length>0?e:void 0:e?.["3x"]||e?.["2x"]||e?.["1x"],r={appKey:t,versionTag:this.versionTag??"",permissionList:[],permissionTotal:0,version:{},...this._appConfig.name?{appName:this._appConfig.name}:{},...n?{iconUrl:n}:{}};if(this._skipAppInfoFetch)return r;let i=await this.getCachedLoginCookie().catch(()=>void 0);try{return Object.assign(r,await this._fetchCachedAppInfo({appKey:t,cookie:i,internal:this.internal})),r.appName||=this._appConfig.name,r.iconUrl||=n,r}catch(e){if(this.command!==eD.DEV&&this.command!==eD.BUILD)throw e;if(aK(e))return r;return this._hasWarnedAppInfoFetchFailure||(this._hasWarnedAppInfoFetchFailure=!0,tE.warn("从平台获取 Doubao 应用信息失败,将使用本地 `app.config.ts` 配置的数据",{reason:s2(e)})),r}}async bootstrap({srcDirectory:e,appDirectory:t,rootPath:n,userConfig:r,appConfig:i={},normalizedAppConfig:a={pages:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}},command:s,metadata:o,signingEncryptionOptions:l,disableSigningEncryption:p,appId:d,versionTag:c,pages:u,widgets:h,auth:m,app:g,tools:f,internal:y,skipAppInfoFetch:b,devServerInteractive:_=!0,env:w={},loginCookieResolver:v,cachedLoginCookieResolver:E}){await super.bootstrap({srcDirectory:e,appDirectory:t,virtualEntryDir:tt.resolve(t,eK),rootPath:n,manifestPath:tt.resolve(`${n}/${eQ}`),command:s,metadata:o,versionTag:c,pages:u,widgets:h,auth:m,app:g,tools:f,loginCookieResolver:v,cachedLoginCookieResolver:E});let{icons:S,...x}=i??{};this._userConfig=r,this.devServerInteractive=_,this._env={...w},this._appConfig={...x,...void 0!==d?{appId:d}:{},...void 0!==S?{icons:tM(S)}:{}},this._normalizedAppConfig=a,this._internal=y??((e=process.cwd())=>ts(e)===tn)(t),this._skipAppInfoFetch=!!b,this._hasWarnedAppInfoFetchFailure=!1,this._templateWidgetEntries=new Set,this._rawSigningEncryptionOptions=l,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0,this._disableSigningEncryption=!!p,this._appId=d??i?.appId,this._dek=Buffer.from(""),this._fetchCachedAppInfo=or()}async resolveSigningEncryptionOptionsOnce(){let e=this._appId??this.metadata.appId;if(this._signingEncryptionOptions=await sE(this._rawSigningEncryptionOptions,this.command,e,this._disableSigningEncryption),this._signingEncryptionOptions?.encryption.enabled){let{generateDEK:e}=await import("node:module").then(function(e){return g.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)});this._dek=e(),tp()&&console.log("DEK base64:",Buffer.from(this.dek.buffer,this.dek.byteOffset,this.dek.byteLength).toString("base64"))}return this.signingEncryptionOptions}}async function oa({appId:e,versionTag:t,versionCode:n,packagePath:r,internal:i,domainId:a,cookie:s,token:o,needAuth:l=!0}){let p=new FormData,d=new Blob([new Uint8Array(te.readFileSync(r))],{type:"application/zip"});p.append("applet_file",d,"doubao_app.zip"),p.append("applet_version_code",n.toString());let c=`/developer/${l?"resource_api":"resource_internal_api"}/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/package/upload_applet`;return await is({internal:i,domainId:o?"sms-external":a,path:c,method:"POST",body:p,headers:{...s?{Cookie:s}:{},...o?{"X-Developer-Open-Build-Token":o}:{}},auth:l&&!o})}async function os({versionTag:e,appKey:t,manifest:n,rootPath:r,internal:i,needAuth:a=!0,cookie:s,token:o}){process.env.NODE_ENV="production";let{appId:l,packageName:p,versionCode:d}=n,c=function(e,t){let n=e||t.versionTag||t.versionName;if(!n)throw Error("Doubao Apps Platform deploy requires versionTag in params or app metadata.");return n}(e,n),{packageResource:u}=await t4({channelName:"doubao_app",manifest:n,rootPath:r});if(!u)throw Error("Failed to archive package");let h=await oa({appId:t||l||p,versionTag:c,versionCode:d,packagePath:u.resource,internal:i,needAuth:a,cookie:s,token:o});return console.log("Deploy success:",h),h}class oo{pluginSystem;rootPath="dist";context;appDirectory;_userConfig;_appConfig;_appConfigLoaded=!1;_env={};constructor(e=process.cwd()){this.appDirectory=e}async prepare(e,t={},n){Date.now();let r=await this.getUserConfig(t),i={...await this.getAppConfig(),...t.appName?{name:t.appName}:{},...t.appIcon?{icons:tM(t.appIcon)}:{}},a={pages:s0(i?.pages,"pages"),widgets:s0(i?.widgets,"widgets")},s=Object.values(a.pages.entries).some(e=>!0===e.web)||Object.values(a.widgets.entries).some(e=>!0===e.web),o=e===eD.DEV?!0===t.web?"web-only-all":"mixed-all":e===eD.BUILD?!0===t.web?"web-only-configured":"off":!0===t.web?"web-only-configured":s?"mixed":"off",l=function(e){if(e)return!0===e?{mcpEndpoint:tu()}:{...e,mcpEndpoint:tu({mcpEndpoint:e.mcpEndpoint})}}(t.openWebDebugger);this.rootPath=eJ.resolve(this.appDirectory,"dist"),te.existsSync(eJ.resolve(this.rootPath))&&te.rmSync(eJ.resolve(this.rootPath),{recursive:!0,force:!0}),this.context=new oi;let p=eJ.resolve(this.appDirectory,"src"),{pages:d,widgets:c,auth:u,app:h,tools:m}=await this.analyzeConvention(p,a),g=new tV,f=((e=process.cwd())=>ts(e)===tn)(this.appDirectory);await this.context.bootstrap({srcDirectory:p,appDirectory:this.appDirectory,rootPath:this.rootPath,userConfig:r,env:this._env,appConfig:i,normalizedAppConfig:a,command:e,metadata:g,signingEncryptionOptions:t.signingEncryptionOptions,skipAppInfoFetch:!!t.token,appId:t.appId,versionTag:t.versionTag,pages:d,widgets:c,auth:u,app:h,tools:m,internal:f,devServerInteractive:t.interactive,loginCookieResolver:()=>sZ(t,{internal:f}),cachedLoginCookieResolver:()=>sQ(t,f)}),this.context.webMode=o,this.context.webDebuggerLaunchOptions=l,this.pluginSystem=new t0(this.context,[sV,sW,sq,sM,sY,sB,sJ,sU,...r.experiments?.taro?[function({name:e,appId:t,icons:n,widgets:r}){return{name:ni,setup:i=>{let a=(0,nr.createRequire)(import.meta.url);i.view.hooks.modifyEntryOption.tapPromise({name:ni,stage:i.view.MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY},async({entry:e})=>{let{appDirectory:t,isDev:n,pages:r,widgets:a}=i.context;return{entry:e=Object.assign(e,nn(r,t,!1,n),nn(a,t,!0,n))}}),i.view.hooks.beforeBuild.tapPromise({name:ni,stage:i.view.BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG},async({buildConfig:e})=>{let{appDirectory:t}=i.context;t7(e,{resolve:{alias:{"@tarojs/components":a.resolve("@doubao-dev/taro-runtime/components",{paths:[t]}),"@tarojs/taro":(0,eJ.dirname)(a.resolve("@doubao-dev/taro-runtime/package.json",{paths:[t]}))}}})}),i.worker.hooks.modifyEntryOption.tapPromise({name:ni,stage:i.worker.MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE},async({entry:n})=>{let{appDirectory:r,isDev:a}=i.context,{app:s}=i.context;return s&&(n.app=function(e,t,n,r,i=!1){var a;let s=`${eK}${tt.sep}app.js`,o=(a=ne(tt.dirname(s),e)).startsWith(".")?a:`./${a}`,l=to(t);return new nt(s,`
175
+ ${s}bootstrapClientToolRuntime([${a.join(", ")}]);
176
+ `}({appDirectory:n,clientTools:t,dirname:tn.dirname(e),enableWebConsoleHook:r.enableWebConsoleHook}))}(`${e.context.appDirectory}${tn.sep}${eK}${tn.sep}${e5}.js`,e.context.clientToolEntries,e.context.appDirectory)),{entry:t}}),e.worker.hooks.modifyEnvironment.tapPromise("AppletMainPlugin",async({environment:e})=>{}),e.worker.hooks.collectMetaData.tapPromise({name:"AppletMainPlugin",stage:e.worker.COLLECT_METADATA_STAGE_PROCESS_METADATA},async({collector:t})=>{let{app:n,appConfig:r,tools:o,userConfig:i}=e.context;await sg({appConfig:r,tools:o,app:n,collector:t,define:i.source?.define})}),e.assets.hooks.beforeEmit.tapPromise({name:"AppletMainPlugin",stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS},async({assets:t})=>{var n,r;let{app:o,pages:i,tools:a}=e.context.metadata.getInstance(),s=t.getAsset(e.context.appAssetPath),l=e.context.clientToolRuntimeAssetPath?t.getAsset(e.context.clientToolRuntimeAssetPath):void 0,p=t.getManifestAsset(e.context.manifestAssetPath),{manifest:c}=p,d=[];c.applet.pages.forEach(e=>{d.push(e.digest)});let u=o.metadata.appId,m=e.context.versionTag??o.metadata.version;p.assignBasicManifest({manifestVersion:"3.0",packageName:u,appId:u,versionName:m,versionTag:m,scmVersion:process.env.BUILD_VERSION,versionCode:Date.now().toString(),runtimeVersion:"1.0",sourceType:e.context.internal?1:2});let h=e.context.appAssetPath,f=e.context.normalizedAppConfig.pages.entryNames[0]??Object.keys(e.context.pages)[0],g=f?i[f]?.metadata.path:void 0,y=o.toManifest({toolsMetadata:a,hashCode:s?.hashCode??(n=s?.hashCode??c?.applet?.digest,r=d.join(""),aR.createHash("sha256").update(n+r).digest("hex").substring(0,8)),appRuntimeEntry:h,appRuntimeType:e.context.environment.useLynx?"lynx":"js"});y.tools=[...y.tools??[],...Object.keys(e.context.clientToolEntries).map(e=>({id:e}))],l&&e.context.clientToolRuntimeAssetPath&&(y.toolRuntimeEntry=e.context.clientToolRuntimeAssetPath),p.mergeAppletManifest(y),g&&p.mergeAppletManifest({appletEntry:g})}),e.assets.hooks.afterEmit.tapPromise({name:"AppletMainPlugin",stage:e.assets.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS},async({assets:e})=>{}),e.worker.hooks.afterBuild.tapPromise("AppletMainPlugin",async({stats:e})=>{}))}},sb={name:"AppletMainEntryCheckPlugin",setup:async e=>{let{srcDirectory:t}=e.context,n=si(t);if(!t1.existsSync(n))throw Error("ENOENT: no such file or directory")}},s_={name:"AppletManifestPlugin",setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:"AppletManifestPlugin",stage:e.assets.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS},async({assets:t})=>{let{signing:n}=await e.context.resolveSigningEncryptionOptions()||{};if(n?.enabled){let{signData:r}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),o=t.getManifestAsset(e.context.manifestAssetPath),{manifest:i}=o,{buffer:a,status:s,error_msg:l}=await r(Buffer.from(o.content),ne(n,{extra_config:{app_id:i.appId,bundle_id:""},output_mode:"sign_block"}));if(0!==s)throw Error(l);let p=new aN(e0,a);p.destination=e0,t.addAsset(e0,p)}})}},sw="AppletWebManifestPlugin",sv={name:sw,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sw,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-2},async({assets:t})=>{var n,r;let o=e.context.metadata.getData(),i=o.app.appId||e.context.appId,a=e.context.command===eR.DEV?"all":"configured",s=nb(e.context.pages,e.context.normalizedAppConfig.pages.entries,a),l=nb(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,a);if(!i&&Object.keys(s).length>0)throw Error("appId is required to resolve Web page entry paths");let p=i?(n=o.pages,Object.keys(s).map(e=>{let t=n[e]??{},r=t.path??t6(e),o={entry:t7(i,r,nu)},a=ny(s[e]);return{path:r,entryName:e,web:o,debugHidden:a,manifest:{...t,path:r,digest:"",entry:"",renderType:j.LYNX,web:o,...a?{debugHidden:!0}:{}}}})):[],c=(r=o.widgets,Object.keys(l).map(e=>{let{id:t,...n}=r[e]??{},o=t??ng(l,r,e),i={entry:`${o}/${nu}`},a=ny(l[e]);return{id:o,entryName:e,web:i,debugHidden:a,manifest:{...n,widgetId:o,digest:"",entry:"",renderType:j.LYNX,web:i,...a?{debugHidden:!0}:{}}}}));if(0===p.length&&0===c.length&&0===Object.keys(e.context.clientToolEntries).length)return;let d=t.getManifestAsset(e.context.manifestAssetPath),u=new Map(p.map(e=>[e.path,e])),m=new Set(d.manifest.applet.pages?.map(e=>e.path));for(let e of(d.manifest.applet.pages?.forEach(e=>{let t=u.get(e.path);t&&(e.web=t.web,t.debugHidden&&(e.debugHidden=!0))}),p))m.has(e.path)||d.appendPage(e.manifest);let h=new Map(c.map(e=>[e.id,e])),f=new Set(d.manifest.widgets?.map(e=>e.widgetId));for(let t of(d.manifest.widgets?.forEach(e=>{let t=h.get(e.widgetId);t&&(e.web=t.web,t.debugHidden&&(e.debugHidden=!0))}),c))if(!f.has(t.id)){let n=t.manifest;e.context.templateWidgetEntries.has(t.entryName)&&(n.titleType=U.NONE),d.appendWidget(n)}e.context.app&&(d.manifest.applet.web={appRuntimeEntry:nm,...Object.keys(e.context.clientToolEntries).length>0?{toolRuntimeEntry:nh}:{}})})}},sE=f("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),sS="x-db-llm-modifiable",sx="x-db-is-entity-id",sA="x-db-is-refresh-key",sT=["entity_type"];function sC(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function sO(e,t,n){if(!sC(e))throw Error(`Tool "${n}" requires an object ${t}`);return e}function sP(e,t,n,r,o=!1){let i=`Tool "${t}" ${n} property "${r}"`;if(!sC(e)||"string"!=typeof e.type||!e.type.trim())throw Error(`${i} requires a string type`);let a=e.type.trim(),s=e[sS];if(void 0!==s&&"boolean"!=typeof s)throw Error(`${i} ${sS} must be a boolean`);if(s&&"outputSchema"!==n)throw Error(`${i} ${sS} is only supported in outputSchema`);if(s&&"array"!==a)throw Error(`${i} ${sS} is only supported for array fields`);let l=e[sx];if(void 0!==l&&"boolean"!=typeof l)throw Error(`${i} ${sx} must be a boolean`);if(l&&!o)throw Error(`${i} ${sx} is only supported on top-level card output fields`);let p=e[sA];if(void 0!==p&&"boolean"!=typeof p)throw Error(`${i} ${sA} must be a boolean`);if(p&&!o)throw Error(`${i} ${sA} is only supported on top-level card output fields`);let c={type:function(e,t){if("integer"===e)return"int";if("number"===e)return"float";if(["string","boolean","object","array"].includes(e))return e;throw Error(`${t} has unsupported type "${e}"`)}(a,i),...s?{llm_modifiable:!0}:{},...l?{is_entity_id:!0}:{},..."string"==typeof e.description&&e.description.trim()?{description:e.description.trim()}:{}};if("object"===a){if(!sC(e.properties))throw Error(`${i} requires object properties`);if(c.properties=Object.fromEntries(Object.entries(e.properties).map(([e,o])=>[e,sP(o,t,n,`${r}.${e}`)])),void 0!==e.required){if(!Array.isArray(e.required)||e.required.some(e=>"string"!=typeof e))throw Error(`${i} required must be a string array`);c.required=e.required}}if("array"===a){if(!sC(e.items))throw Error(`${i} requires object array items`);c.items=sP(e.items,t,n,`${r}[]`)}return c}function sI(e,t,n){let r=e[t];if(void 0===r)return{};if(!sC(r))throw Error(`manifest.yaml ${t} must be an object: ${n}`);return{...r}}function sk(e,t){if(!tt.existsSync(e)||!tt.statSync(e).isFile())throw Error(`${t} does not exist: ${e}`);return tt.readFileSync(e,"utf8")}function sD(e=((e=process.cwd())=>ts(e)===tr)()){return e?"sso":"sms"}async function s$(e={},t={}){if(e.cookie)return e.cookie;let{ensureLoginCookie:n}=await import("./@byted-doubao-apps/login.js");return await n({route:sD(t.internal),browser:e.loginBrowser,browserPath:e.loginBrowserPath,force:t.force})}async function sR(e,t){if(e.cookie)return e.cookie;let{getCachedLoginCookie:n}=await import("./@byted-doubao-apps/login.js");return await n({route:sD(t)})}function sN(e,t){let n;if(!e)return{entryNames:[],entries:{}};if(Array.isArray(e))n=e;else if("object"==typeof e)t&&tS.warn(`${t} config object map is deprecated. Use an array of strings or { entry, ...metadata } objects instead.`),n=Object.entries(e).map(([e,t])=>{let n;return{...t,entry:(n=e.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"")).endsWith("/index")?n:`${n}/index`}});else throw Error("Entry config must be an array or object map.");let r=[],o={},i=new Set,a=[],s=new Set;return n.forEach(e=>{let t,n;if("string"==typeof e)t=e,n={};else{let{entry:r,...o}=e;if(!r)throw Error('Entry config object must include "entry".');t=r,n=o}i.has(t)?s.has(t)||(a.push(t),s.add(t)):(r.push(t),i.add(t)),o[t]=n}),t&&a.length>0&&tS.warn(`${t} config contains duplicate entries: ${a.join(", ")}. Entries are deduplicated, and the last metadata config takes effect.`),{entryNames:r,entries:o}}class sL{constructor(){this.deploy={},this._isInitialized=!1,this._environment={useLynx:!1,useAuth:!1},this._srcDirectory="",this._virtualEntryDir="",this._appDirectory=process.cwd(),this._rootPath="",this._appAssetPath="",this._appMapAssetPath="",this._manifestPath="",this._widgets={},this._app="",this._tools={},this._cookie="",this._pages={},this._auth={viewEntries:{},apiEntries:{}},this._viewEntriesByType={}}async bootstrap({command:e,metadata:t,versionTag:n,srcDirectory:r="",virtualEntryDir:o="",appDirectory:i=process.cwd(),rootPath:a="",manifestPath:s="",pages:l={},widgets:p={},auth:c,mcpUI:d,app:u="",tools:m={},environment:h={useLynx:!1,useAuth:!1},viewEntriesByType:f={},loginCookieResolver:g,cachedLoginCookieResolver:y}){this._command=e,this._metadata=t,this._versionTag=n,this._srcDirectory=r,this._virtualEntryDir=o,this._appDirectory=i,this._rootPath=a,this._manifestPath=s,this._pages={...l},this._widgets={...p};let b=c??d??{viewEntries:{},apiEntries:{}};this._auth={viewEntries:{...b.viewEntries},apiEntries:{...b.apiEntries}},this._app=u,this._tools={...m},this._environment={useLynx:h.useLynx,useAuth:!!(h.useAuth||h.useMcpUI)},this._cookie="",this._loginCookieResolver=g,this._loginCookiePromise=void 0,this._cachedLoginCookieResolver=y,this._viewEntriesByType=Object.fromEntries(Object.entries(f).map(([e,t])=>[e,{pages:{...t.pages},widgets:{...t.widgets}}])),this._isInitialized=!0}assertInitialized(e){if(!this._isInitialized)throw Error(`BuildContext.${e} is unavailable before bootstrap`)}get isDev(){return this.assertInitialized("isDev"),this._command===eR.DEV}get command(){return this.assertInitialized("command"),this._command}get metadata(){return this.assertInitialized("metadata"),this._metadata}get manifestPath(){return this.assertInitialized("manifestPath"),this._manifestPath}get appDirectory(){return this._appDirectory}get virtualEntryDir(){return this.assertInitialized("virtualEntryDir"),this._virtualEntryDir}get srcDirectory(){return this.assertInitialized("srcDirectory"),this._srcDirectory}get rootPath(){return this.assertInitialized("rootPath"),this._rootPath}get manifest(){if(this._manifest)return{...this._manifest};try{return this._manifest=JSON.parse(tt.readFileSync(this._manifestPath,"utf-8")),{...this._manifest}}catch(e){return{}}}get useLynx(){return this._environment.useLynx}get useAuth(){return this._environment.useAuth}get useMcpUI(){return this.useAuth}get manifestAssetPath(){return eQ}get appAssetPath(){return this._appAssetPath}get appMapAssetPath(){return this._appMapAssetPath}get environment(){return{...this._environment}}get widgets(){return{...this._widgets}}get pages(){return{...this._pages}}get auth(){return{viewEntries:{...this._auth.viewEntries},apiEntries:{...this._auth.apiEntries}}}get mcpUI(){return this.auth}get viewEntriesByType(){return Object.fromEntries(Object.entries(this._viewEntriesByType).map(([e,t])=>[e,{pages:{...t.pages},widgets:{...t.widgets}}]))}get app(){return this._app}get tools(){return{...this._tools}}async getLoginCookie(){return(this.assertInitialized("getLoginCookie"),this._cookie)?this._cookie:this._loginCookieResolver?(this._loginCookiePromise||(this._loginCookiePromise=this._loginCookieResolver().then(e=>(this._cookie=e??"",e)).catch(e=>{throw this._loginCookiePromise=void 0,e})),await this._loginCookiePromise):void 0}async getCachedLoginCookie(){if(this.assertInitialized("getCachedLoginCookie"),this._cookie)return this._cookie;if(!this._cachedLoginCookieResolver)return;let e=await this._cachedLoginCookieResolver();return e&&(this._cookie=e),e}get appId(){return this._appId||this._metadata.appId}setAppId(e){this._appId=e}setApp(e){this._app=e}setTools(e){this._tools=e}setEnvironment(e){this._environment={...e}}mergeEnvironment(e){this._environment={...this._environment,...e}}setPages(e){this._pages=e}setWidgets(e){this._widgets=e}appendPages(e){Object.assign(this._pages,e)}appendWidgets(e){Object.assign(this._widgets,e)}getViewEntriesByType(e){let t=this._viewEntriesByType[e];return t?{pages:{...t.pages},widgets:{...t.widgets}}:{pages:{},widgets:{}}}setViewEntriesByType(e,t){this._viewEntriesByType[e]={pages:{...t.pages},widgets:{...t.widgets}}}setAppAssetPath(e){this._appAssetPath=e}setAppMapAssetPath(e){this._appMapAssetPath=e}setManifest(e){this._manifest=e}setAuthApi(e){this._auth={viewEntries:{...e.viewEntries},apiEntries:{...e.apiEntries}}}setMcpUIApi(e){this.setAuthApi(e)}get versionTag(){return this.assertInitialized("versionTag"),this._versionTag}}function sM(e){if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}async function sj({internal:e,domainId:t,appLimit:n,appOffset:r,keyWord:o,appKey:i,cookie:a}){return await os({internal:e,domainId:t,path:"/app_developer/api/apps",query:{app_limit:n,app_offset:r,key_word:o,app_key:i},method:"GET",headers:a?{Cookie:a}:void 0})}async function sB({source:e,internal:t,domainId:n,appLimit:r,appOffset:o,releaseStatus:i,keyWord:a,appKey:s,cookie:l}){return await os({internal:t,domainId:n,path:"/developer/api/apps",query:{source:e,app_limit:r,app_offset:o,release_status:i,key_word:a,app_key:s},method:"GET",headers:l?{Cookie:l}:void 0})}async function sU({appKey:e,source:t,internal:n,domainId:r,releaseStatus:o,limit:i,offset:a,status:s,keyWord:l,versionTag:p,cookie:c}){return await os({internal:n,domainId:r,path:`/developer/api/apps/${encodeURIComponent(e)}/version`,query:{source:t,release_status:o,limit:i,offset:a,status:s,key_word:l,version_tag:p},method:"GET",headers:c?{Cookie:c}:void 0})}async function sF({appKey:e,versionTag:t,internal:n,domainId:r,pageSize:o,pageNum:i,cookie:a}){return await os({internal:n,domainId:r,path:`/developer/api/apps/${encodeURIComponent(e)}/permission/versions/${encodeURIComponent(t)}/permission_list`,query:{page_size:o,page_num:i},method:"GET",headers:a?{Cookie:a}:void 0})}function sW(e){return e.is_latest||e.is_current}function sH(e){return Date.parse(e.updated_at??e.created_at??e.online_at??"")}function sG(e){return Number(e.version_code??e.qr_data?.artifact_version_code)}function sV(e){return e.version_tag}function sq(e,t){tc()&&tS.info(e,t)}async function sJ({appKey:e,internal:t=!1,cookie:n,source:r=eW.REQUEST_SOURCE_IDE}){sq("[app-info] 开始获取应用信息",{appKey:e,internal:t,session:n?"present":"absent"});let o=await sj({internal:t,appLimit:1,appOffset:0,appKey:e,cookie:n}).then(({data:t,log_id:n})=>{let r=t?.app_list||[],o=r.find(t=>t.app_key===e);return sq("[app-info] MGetApps 请求完成",{appKey:e,appCount:r.length,exactMatch:!!o,logId:n}),o||r[0]}).catch(t=>{if(sq("[app-info] MGetApps 请求失败",{appKey:e,reason:sM(t)}),ao(t))throw t}),i=o&&o.name&&o.icon_url?void 0:await sB({source:r,internal:t,appLimit:1,appOffset:0,appKey:e,cookie:n}).then(({data:t,log_id:n})=>{let r=t?.org_list?.flatMap(e=>e.app_list)||[],o=r.find(t=>t.app_key===e),i=o||r[0];return sq("[app-info] MGetAppsDeprecated 请求完成",{appKey:e,appCount:r.length,exactMatch:!!o,logId:n}),i?.app_meta}).catch(t=>{sq("[app-info] MGetAppsDeprecated 请求失败",{appKey:e,reason:sM(t)})});if(!o&&!i)throw sq("[app-info] 应用信息查询结束,未找到可用结果",{appKey:e}),Error(`未找到应用 ${e}`);let a=o?.current_version_tag&&(o.icon_url||i?.icon_url)?void 0:await sU({appKey:e,source:r,internal:t,cookie:n}).then(({data:t,log_id:n})=>{let r=Array.isArray(t?.version_list)?t.version_list:[];if(sq("[app-info] MGetAppVersions 请求完成",{appKey:e,versionCount:r.length,logId:n}),0===r.length)return;let o=r.find(sW);return o||r.reduce((e,t)=>{let n,r;return!e||(n=sH(t),r=sH(e),(Number.isNaN(n)&&Number.isNaN(r)?sG(t)-sG(e):(Number.isNaN(n)?-1/0:n)-(Number.isNaN(r)?-1/0:r))>0)?t:e},void 0)}).catch(t=>{sq("[app-info] MGetAppVersions 请求失败",{appKey:e,reason:sM(t)})}),s=o?.current_version_tag||(a?sV(a):""),l=o?.icon_url||(a?a.icon_url:void 0)||i?.icon_url,p=o?.name||i?.name,c=a&&sV(a)===s?a:o?{version_tag:o.current_version_tag,icon_url:o.icon_url,updated_at:o.updated_at,online_at:o.online_at,offline_at:o.offline_at}:{version_tag:s,icon_url:l};if(!s||!n)return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:[],permissionTotal:0,version:c};let d=await sF({appKey:e,versionTag:s,pageSize:1e3,pageNum:1,internal:t,cookie:n}).then(t=>(sq("[app-info] FetchAppPermissionList 请求完成",{appKey:e,versionTag:s,permissionTotal:t.data?.total||0,logId:t.log_id}),t)).catch(t=>{throw sq("[app-info] FetchAppPermissionList 请求失败",{appKey:e,versionTag:s,reason:sM(t)}),t});return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:d.data?.permission_list||[],permissionTotal:d.data?.total||0,version:c}}function sK(){return function({fetch:e,getCacheKey:t,ttl:n,timeout:r,cacheFailures:o=!1,now:i=Date.now}){let a=new Map;return function(...s){var l,p;let c,d="string"==typeof(l=t(...s))?l:JSON.stringify(l),u=i(),m=a.get(d);if(m&&m.expiresAt>u)return m.promise;let h=(p=e(...s),void 0===r?p:Promise.race([p,new Promise((e,t)=>{c=setTimeout(()=>{t(Error(`Request timed out after ${r}ms`))},r)})]).finally(()=>{c&&clearTimeout(c)})).catch(e=>{throw o||a.get(d)?.promise!==h||a.delete(d),e});return a.set(d,{expiresAt:u+n,promise:h}),h}}({fetch:sJ,getCacheKey:({appKey:e,internal:t,cookie:n})=>[e,t,n],ttl:6e4,timeout:1e4,cacheFailures:!0})}(eC=eB||(eB={}))[eC.APP_TYPE_MINI_APP=0]="APP_TYPE_MINI_APP",eC[eC.APP_TYPE_NATIVE=1]="APP_TYPE_NATIVE",(eO=eU||(eU={}))[eO.DRAFT=0]="DRAFT",eO[eO.UNDER_REVIEW=1]="UNDER_REVIEW",eO[eO.APPROVED=2]="APPROVED",eO[eO.REJECTED=3]="REJECTED",eO[eO.WITHDRAWN=4]="WITHDRAWN",eO[eO.PUBLISHING=5]="PUBLISHING",eO[eO.PUBLISHED=6]="PUBLISHED",eO[eO.ARCHIVED=7]="ARCHIVED",eO[eO.DELETED=8]="DELETED",(eP=eF||(eF={}))[eP.DRAFT=0]="DRAFT",eP[eP.PUBLISHED=1]="PUBLISHED",eP[eP.ARCHIVED=2]="ARCHIVED",(eI=eW||(eW={}))[eI.REQUEST_SOURCE_PLATFORM=0]="REQUEST_SOURCE_PLATFORM",eI[eI.REQUEST_SOURCE_IDE=1]="REQUEST_SOURCE_IDE",eI[eI.REQUEST_SOURCE_DEVICE=2]="REQUEST_SOURCE_DEVICE",eI[eI.REQUEST_SOURCE_OP_PLATFORM=3]="REQUEST_SOURCE_OP_PLATFORM";class sz extends sL{devServerInteractive=!0;getWidgetViewDataTemplates;webDebuggerLaunchOptions;compileLifecycle=aC();clientToolEntries={};toolsResources;clientToolRuntimeAssetPath;_userConfig={};_env={};_appConfig={};_normalizedAppConfig={pages:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}};_signingEncryptionOptions;_rawSigningEncryptionOptions;_signingEncryptionOptionsPromise;_disableSigningEncryption=!1;_dek=Buffer.from("");_internal=!1;_fetchCachedAppInfo=sK();_skipAppInfoFetch=!1;_hasWarnedAppInfoFetchFailure=!1;_templateWidgetEntries=new Set;get userConfig(){return this._userConfig}get env(){return{...this._env}}get appConfig(){return this._appConfig}get normalizedAppConfig(){var e;return{pages:{entryNames:[...(e=this._normalizedAppConfig).pages.entryNames],entries:Object.fromEntries(Object.entries(e.pages.entries).map(([e,t])=>[e,{...t}]))},widgets:{entryNames:[...e.widgets.entryNames],entries:Object.fromEntries(Object.entries(e.widgets.entries).map(([e,t])=>[e,{...t}]))}}}get templateWidgetEntries(){return new Set(this._templateWidgetEntries)}get signingEncryptionOptions(){if(this._signingEncryptionOptions)return{...this._signingEncryptionOptions,encryption:{...this._signingEncryptionOptions?.encryption,dek:this.dek}}}get dek(){return this._dek}get isSignedEncryption(){return this.signingEncryptionOptions?.signing.enabled||this.signingEncryptionOptions?.encryption.enabled}get internal(){return this.assertInitialized("internal"),this._internal}setSigningEncryptionOptions(e){this._rawSigningEncryptionOptions=e,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0}disableSigningEncryption(){this._disableSigningEncryption=!0,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0,this._dek=Buffer.from("")}addTemplateWidgetEntry(e){this._templateWidgetEntries.add(e)}async resolveSigningEncryptionOptions(){return this._signingEncryptionOptionsPromise||(this._signingEncryptionOptionsPromise=this.resolveSigningEncryptionOptionsOnce()),this._signingEncryptionOptionsPromise}async resolveAppInfo(){this.assertInitialized("resolveAppInfo");let e=this.compileLifecycle.appInfoMeasured?void 0:Date.now();this.compileLifecycle.appInfoMeasured=!0;try{return await this.resolveAppInfoInternal()}finally{void 0!==e&&(this.compileLifecycle.appInfoDurationMs=Math.max(0,Date.now()-e))}}async resolveAppInfoInternal(){var e;let t=this.appId;if(!ar(t))return;let n="string"==typeof(e=this._appConfig.icons)?e.length>0?e:void 0:e?.["3x"]||e?.["2x"]||e?.["1x"],r={appKey:t,versionTag:this.versionTag??"",permissionList:[],permissionTotal:0,version:{},...this._appConfig.name?{appName:this._appConfig.name}:{},...n?{iconUrl:n}:{}};if(this._skipAppInfoFetch)return r;let o=await this.getCachedLoginCookie().catch(()=>void 0);try{return Object.assign(r,await this._fetchCachedAppInfo({appKey:t,cookie:o,internal:this.internal})),r.appName||=this._appConfig.name,r.iconUrl||=n,r}catch(e){if(this.command!==eR.DEV&&this.command!==eR.BUILD)throw e;if(ao(e))return r;return this._hasWarnedAppInfoFetchFailure||(this._hasWarnedAppInfoFetchFailure=!0,tS.warn("从平台获取 Doubao 应用信息失败,将使用本地 `app.config.ts` 配置的数据",{reason:sM(e)})),r}}async bootstrap({srcDirectory:e,appDirectory:t,rootPath:n,userConfig:r,appConfig:o={},normalizedAppConfig:i={pages:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}},command:a,metadata:s,signingEncryptionOptions:l,disableSigningEncryption:p,appId:c,versionTag:d,pages:u,widgets:m,auth:h,app:f,tools:g,internal:y,skipAppInfoFetch:b,devServerInteractive:_=!0,env:w={},loginCookieResolver:v,cachedLoginCookieResolver:E}){await super.bootstrap({srcDirectory:e,appDirectory:t,virtualEntryDir:tn.resolve(t,eK),rootPath:n,manifestPath:tn.resolve(`${n}/${eQ}`),command:a,metadata:s,versionTag:d,pages:u,widgets:m,auth:h,app:f,tools:g,loginCookieResolver:v,cachedLoginCookieResolver:E});let{icons:S,...x}=o??{};this._userConfig=r,this.devServerInteractive=_,this._env={...w},this._appConfig={...x,...void 0!==c?{appId:c}:{},...void 0!==S?{icons:tM(S)}:{}},this._normalizedAppConfig=i,this._internal=y??((e=process.cwd())=>ts(e)===tr)(t),this._skipAppInfoFetch=!!b,this._hasWarnedAppInfoFetchFailure=!1,this._templateWidgetEntries=new Set,this._rawSigningEncryptionOptions=l,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0,this._disableSigningEncryption=!!p,this._appId=c??o?.appId,this._dek=Buffer.from(""),this._fetchCachedAppInfo=sK()}async resolveSigningEncryptionOptionsOnce(){let e=this._appId??this.metadata.appId;if(this._signingEncryptionOptions=await a4(this._rawSigningEncryptionOptions,this.command,e,this._disableSigningEncryption),this._signingEncryptionOptions?.encryption.enabled){let{generateDEK:e}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)});this._dek=e(),tc()&&console.log("DEK base64:",Buffer.from(this.dek.buffer,this.dek.byteOffset,this.dek.byteLength).toString("base64"))}return this.signingEncryptionOptions}}async function sY({appId:e,versionTag:t,versionCode:n,packagePath:r,internal:o,domainId:i,cookie:a,token:s,needAuth:l=!0}){let p=new FormData,c=new Blob([new Uint8Array(tt.readFileSync(r))],{type:"application/zip"});p.append("applet_file",c,"doubao_app.zip"),p.append("applet_version_code",n.toString());let d=`/developer/${l?"resource_api":"resource_internal_api"}/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/package/upload_applet`;return await os({internal:o,domainId:s?"sms-external":i,path:d,method:"POST",body:p,headers:{...a?{Cookie:a}:{},...s?{"X-Developer-Open-Build-Token":s}:{}},auth:l&&!s})}async function sX({versionTag:e,appKey:t,manifest:n,rootPath:r,internal:o,needAuth:i=!0,cookie:a,token:s}){process.env.NODE_ENV="production";let{appId:l,packageName:p,versionCode:c}=n,d=function(e,t){let n=e||t.versionTag||t.versionName;if(!n)throw Error("Doubao Apps Platform deploy requires versionTag in params or app metadata.");return n}(e,n),{packageResource:u}=await t4({channelName:"doubao_app",manifest:n,rootPath:r});if(!u)throw Error("Failed to archive package");let m=await sY({appId:t||l||p,versionTag:d,versionCode:c,packagePath:u.resource,internal:o,needAuth:i,cookie:a,token:s});return console.log("Deploy success:",m),m}class sZ{pluginSystem;rootPath="dist";context;appDirectory;_userConfig;_appConfig;_appConfigLoaded=!1;_env={};constructor(e=process.cwd()){this.appDirectory=e}async prepare(e,t={},n){let r=this.context;try{let r=Date.now(),o=await this.getUserConfig(t),i={...await this.getAppConfig(),...t.appName?{name:t.appName}:{},...t.appIcon?{icons:tM(t.appIcon)}:{}},a={pages:sN(i?.pages,"pages"),widgets:sN(i?.widgets,"widgets")},s=function({appDirectory:e,normalizedAppConfig:t}){let n=tn.join(e,"tools.json");if(!tt.existsSync(n))return;let r=tn.join(e,"manifest.yaml"),o=tn.join(e,"skill","SKILL.md"),i=()=>sk(n,"tools.json"),a=()=>{let e=sk(o,"SKILL.md");return!function(e,t){let n=/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(e);if(!n)throw Error(`Skill frontmatter is required: ${t}`);let r=(0,sE.qg)(n[1]),o="object"!=typeof r||null===r||Array.isArray(r)?void 0:r,i="string"==typeof o?.name?o.name.trim():"",a="string"==typeof o?.description?o.description.trim():"";if(!i||!a)throw Error(`Skill frontmatter requires non-empty name and description: ${t}`)}(e,o),e},s=()=>(function({tools:e,manifestPath:t,manifestText:n}){let r=function(e,t){let n;try{n=(0,sE.qg)(e)}catch(e){throw Error(`Failed to parse manifest.yaml: ${t}`,{cause:e})}if(!sC(n))throw Error(`manifest.yaml must contain an object: ${t}`);return n}(n,t),o=sI(r,"tools",t),i=sI(r,"entities",t);for(let t of e){if(t.name in o)throw Error(`Tool "${t.name}" conflicts with a tool in manifest.yaml`);if(o[t.name]={login_type:"no_login",description:t.description,..."client"===t.toolType?{is_client_tool:!0}:{},input_schema:function(e,t){if("object"!==e.type||!sC(e.properties))throw Error(`Tool "${t}" inputSchema requires type object and object properties`);let n=Object.fromEntries(Object.entries(e.properties).map(([e,n])=>[e,sP(n,t,"inputSchema",e)])),r=e.required;if(void 0!==r&&(!Array.isArray(r)||r.some(e=>"string"!=typeof e)))throw Error(`Tool "${t}" inputSchema required must be a string array`);return{type:"object",properties:n,...r&&r.length>0?{required:r}:{}}}(t.inputSchema,t.name),output:t.widgetId?{kind:"entities",entity_types:[t.name]}:{kind:"execution_result"},...t.permissions.length>0?{permissions:t.permissions}:{}},t.widgetId){if(t.name in i)throw Error(`Tool "${t.name}" conflicts with an entity in manifest.yaml`);i[t.name]={schema:{entity_type:{type:"string",llm_visible:!1},...function(e,t){let n=t.name;if("array"!==e.type||!sC(e.items))throw Error(`Card Tool "${n}" outputSchema must be an array`);if("object"!==e.items.type||!sC(e.items.properties))throw Error(`Card Tool "${n}" outputSchema items must be objects`);let r=e.items.properties,o=sT.find(e=>e in r);if(o)throw Error(`Tool "${n}" outputSchema must not declare reserved field "${o}"`);let i=Object.entries(r).filter(([e,t])=>{if(!sC(t)||void 0===t[sx])return!1;if("boolean"!=typeof t[sx])throw Error(`Tool "${n}" outputSchema property "${e}" ${sx} must be a boolean`);return t[sx]});if(1!==i.length)throw Error(`Card Tool "${n}" outputSchema requires exactly one ${sx} field; found ${i.length}`);let a=Object.entries(r).filter(([e,t])=>{if(!sC(t)||void 0===t[sA])return!1;if("boolean"!=typeof t[sA])throw Error(`Tool "${n}" outputSchema property "${e}" ${sA} must be a boolean`);return t[sA]});if("same_conversation"===t.expirePolicy){let e=i[0]?.[0];if(1!==a.length||a[0]?.[0]!==e)throw Error(`Card Tool "${n}" with expirePolicy "same_conversation" requires ${sA} on its ${sx} field`)}return Object.fromEntries(Object.entries(r).map(([e,t])=>[e,sP(t,n,"outputSchema",e,!0)]))}(t.outputSchema,t)},tool_card_binding:{[t.name]:t.widgetId},..."same_conversation"===t.expirePolicy?{history_card_refresh:{enabled:!0,scope:"same_conversation",refresh_to:"fixed_style"}}:{}}}}return(0,sE.As)({...r,tools:o,entities:i})})({tools:(()=>{let e=function(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error(`Failed to parse tools.json: ${t}`,{cause:e})}if(!sC(n)||!Array.isArray(n.tools)||0===n.tools.length)throw Error(`tools.json requires a non-empty tools array: ${t}`);let r=new Set;return{tools:n.tools.map((e,n)=>{let o=function(e,t,n){if(!sC(e))throw Error(`Tool at index ${t} must be an object: ${n}`);let r="string"==typeof e.name?e.name.trim():"",o="string"==typeof e.description?e.description.trim():"";if(!r||!o)throw Error(`Tool at index ${t} requires name and description: ${n}`);if(void 0!==e.tool_type&&"client"!==e.tool_type&&"server"!==e.tool_type)throw Error(`Tool "${r}" tool_type must be "client" or "server"`);let i=function(e,t){if(void 0===e)return{};if(!sC(e))throw Error(`Tool "${t}" _meta must be an object`);if(void 0===e.ui)return{};if(!sC(e.ui))throw Error(`Tool "${t}" _meta.ui must be an object`);if("widgetPath"in e.ui)throw Error(`Tool "${t}" must use _meta.ui.widgetId instead of widgetPath`);let n=e.ui.widgetId;if(void 0!==n&&("string"!=typeof n||!n.trim()))throw Error(`Tool "${t}" _meta.ui.widgetId must be a non-empty string`);let r=e.ui.expirePolicy;if(void 0!==r&&"same_conversation"!==r)throw Error(`Tool "${t}" _meta.ui.expirePolicy must be "same_conversation" when provided`);if("same_conversation"===r&&"string"!=typeof n)throw Error(`Tool "${t}" _meta.ui.expirePolicy requires _meta.ui.widgetId`);return{..."string"==typeof n?{widgetId:n.trim()}:{},..."same_conversation"===r?{expirePolicy:r}:{}}}(e._meta,r);return{name:r,description:o,...i,inputSchema:sO(e.inputSchema,"inputSchema",r),outputSchema:sO(e.outputSchema,"outputSchema",r),permissions:function(e,t){if(void 0===e)return[];if(!Array.isArray(e)||e.some(e=>"string"!=typeof e||!e.trim()))throw Error(`Tool "${t}" permissions must be an array of non-empty strings`);return e.map(e=>e.trim())}(e.permissions,r),toolType:"client"===e.tool_type?"client":"server"}}(e,n,t);if(r.has(o.name))throw Error(`Duplicate Tool name: ${o.name}`);return r.add(o.name),o})}}(i(),n);var r=e.tools;let o=new Set(t.widgets.entryNames.map(e=>t.widgets.entries[e]?.id??t8(e)));for(let e of r)if(e.widgetId&&!o.has(e.widgetId))throw Error(`Tool "${e.name}" references widgetId "${e.widgetId}" not declared in app.config.ts`);return e})().tools,manifestPath:r,manifestText:sk(r,"manifest.yaml")});return a(),s(),{manifestSourcePath:r,readManifestYaml:s,readSkillMarkdown:a,readToolsJson:i,skillDocumentPath:o,toolsSourcePath:n}}({appDirectory:this.appDirectory,normalizedAppConfig:a}),l=function(e,t=[]){let n=tn.resolve(e,"src"),r={};for(let e of t){let t=e.split("/");if(tn.isAbsolute(e)||3!==t.length||"tools"!==t[0]||!t[1]||"index"!==t[2]||tn.posix.normalize(e)!==e)throw Error(`Client Tool entry must match tools/<name>/index relative to src/: ${e}`);let o=tn.posix.basename(tn.posix.dirname(e));if(r[o])throw Error(`Duplicate Client Tool entry: ${o}`);let i=tn.resolve(n,`${e}.ts`);if(!tt.existsSync(i)||!tt.statSync(i).isFile())throw Error(`Client Tool "${o}" entry does not exist: ${i}`);r[o]={filename:i}}return r}(this.appDirectory,i.tools),p=e===eR.DEV||Object.values(a.pages.entries).some(e=>!0===e.web)||Object.values(a.widgets.entries).some(e=>!0===e.web)||Object.keys(l).length>0,c=function(e){if(e)return!0===e?{mcpEndpoint:tm()}:{...e,mcpEndpoint:tm({mcpEndpoint:e.mcpEndpoint})}}(t.openWebDebugger),d=Date.now()-r;this.rootPath=eJ.resolve(this.appDirectory,"dist"),tt.existsSync(eJ.resolve(this.rootPath))&&tt.rmSync(eJ.resolve(this.rootPath),{recursive:!0,force:!0}),this.context=new sz,aO(this.context.compileLifecycle,r),this.context.compileLifecycle.prepareDurations.configLoadMs=d;let u=eJ.resolve(this.appDirectory,"src"),m=Date.now(),{pages:h,widgets:f,auth:g,app:y,tools:b}=await this.analyzeConvention(u,a),_=new Set(Object.keys(l)),w=Object.fromEntries(Object.entries(b).filter(([e])=>!_.has(e)));this.context.compileLifecycle.prepareDurations.projectScanMs=Date.now()-m;let v=new tV,E=((e=process.cwd())=>ts(e)===tr)(this.appDirectory),S=Date.now();await this.context.bootstrap({srcDirectory:u,appDirectory:this.appDirectory,rootPath:this.rootPath,userConfig:o,env:this._env,appConfig:i,normalizedAppConfig:a,command:e,metadata:v,signingEncryptionOptions:t.signingEncryptionOptions,skipAppInfoFetch:!!t.token,appId:t.appId,versionTag:t.versionTag,pages:h,widgets:f,auth:g,app:y,tools:w,internal:E,devServerInteractive:t.interactive,loginCookieResolver:()=>s$(t,{internal:E}),cachedLoginCookieResolver:()=>sR(t,E)}),this.context.compileLifecycle.prepareDurations.contextBootstrapMs=Date.now()-S,this.context.webDebuggerLaunchOptions=c,this.context.clientToolEntries=l,this.context.toolsResources=s,this.pluginSystem=new t0(this.context,[sy,sh,sb,sp,sv,sd,s_,su,...o.experiments?.taro?[function({name:e,appId:t,icons:n,widgets:r}){return{name:ni,setup:o=>{let i=(0,no.createRequire)(import.meta.url);o.view.hooks.modifyEntryOption.tapPromise({name:ni,stage:o.view.MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY},async({entry:e})=>{let{appDirectory:t,isDev:n,pages:r,widgets:i}=o.context,a=nr(r,t,!1,n);return{entry:e=Object.assign(e,a,nr(i,t,!0,n))}}),o.view.hooks.beforeBuild.tapPromise({name:ni,stage:o.view.BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG},async({buildConfig:e})=>{let{appDirectory:t}=o.context;ne(e,{resolve:{alias:{"@tarojs/components":i.resolve("@doubao-dev/taro-runtime/components",{paths:[t]}),"@tarojs/taro":(0,eJ.dirname)(i.resolve("@doubao-dev/taro-runtime/package.json",{paths:[t]}))}}})}),o.worker.hooks.modifyEntryOption.tapPromise({name:ni,stage:o.worker.MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE},async({entry:n})=>{let{appDirectory:r,isDev:i}=o.context,{app:a}=o.context;return a&&(n.app=function(e,t,n,r,o=!1){var i;let a=`${eK}${tn.sep}app.js`,s=(i=nt(tn.dirname(a),e)).startsWith(".")?i:`./${i}`,l=tl(t);return new nn(a,`
243
177
  import { Applet } from "${l}";
244
178
  import { defineApp } from '${l}';
245
179
  import { APP_ID, getLifecycle, setCurrentId } from '@doubao-dev/taro-runtime/internal';
246
- import App from '${o}';
180
+ import App from '${s}';
247
181
 
248
182
  const lifecycle = getLifecycle(APP_ID);
249
183
 
@@ -279,9 +213,9 @@ const app = defineApp({
279
213
  });
280
214
 
281
215
  new Applet(app, []).bootstrap();
282
- ${i?`
216
+ ${o?`
283
217
  if (import.meta.webpackHot) {
284
218
  import.meta.webpackHot.accept()
285
219
  }
286
220
  `:""}
287
- `)}(s,r,e,t,a)),{entry:n}}),i.worker.hooks.collectMetaData.tapPromise(ni,async({collector:r})=>{r.addAppMeta({name:e,appId:t,icons:n})}),i.view.hooks.collectMetaData.tapPromise({name:ni,stage:i.view.COLLECT_METADATA_STAGE_OPTIMIZE},async({collector:e})=>{let{pages:t,widgets:n}=i.context;Object.entries(t).forEach(([t,n])=>{let{folderName:r}=n;e.addPageMeta(t,{id:t8(t,r),path:t6(t)})}),Object.entries(n).forEach(([t,n])=>{let i,{folderName:a}=n;e.addWidgetMeta(t,(i=t8(t,a),{...r?.[a]??r?.[t]??r?.[i]??{},id:i}))})})}}}(r.experiments.taro)]:[],...r.plugins||[]]),await this.pluginSystem.bootstrap();let y=await s_({options:r,commandType:e,context:this.context,web:"off"!==o,rsbuildPlugins:n},this.pluginSystem);return{userConfig:r,builder:y}}async dev(e){let{builder:t}=await this.prepare(eD.DEV,e,e.rsbuildPlugins),n=await t.startDevServer(),r=rt(n.port),i=this.context.webDebuggerLaunchOptions,a=i?await aq(this.context,{appId:this.context.appId,appDirectory:this.appDirectory,artifactOrigin:r,env:{...this.context.env,...i.env??{}},mcpEndpoint:i.mcpEndpoint,mcpHeaders:i.mcpHeaders,openBrowser:ny(this.context.webMode)?()=>void 0:i.openBrowser,simulator:i.simulator}):void 0,s=async()=>{tT.info("Shutting down..."),await a?.close(),await n.server.close(),tT.info("dev server closed")};return{host:r,...a?{webDebugger:a}:{},closeServer:s}}async build(e){let{builder:t}=await this.prepare(eD.BUILD,e,e.rsbuildPlugins);try{await t.build()}finally{if(e.skipCleanupRootPath||tp()){if(e.archive&&e.channel){let{channel:t}=e;await t4({channelName:t,manifest:this.context.manifest,rootPath:this.rootPath})}}else te.rmSync(this.rootPath,{recursive:!0,force:!0})}}async analyze(e){let{builder:t}=await this.prepare(eD.ANALYZE,e);await t.build()}async perf(e){let{builder:t}=await this.prepare(eD.PERF,e);await t.build()}async deploy(e){let{builder:t}=await this.prepare(eD.DEPLOY,e),n=e.deployType||t5.NORMAL;if(this.context.deploy={...this.context.deploy,...e.appId?{appId:e.appId}:{},...e.versionCode?{versionCode:e.versionCode}:{}},await this.pluginSystem.callDeployHooks("beforeDeploy",{config:this.context.deploy}),!this.context.deploy.doubaoAppsPlatform&&!this.context.deploy.selfBuilt){if(n!==t5.NORMAL)return void tC.error("Please use deploy plugin in doubao.config.ts");let r=e.token?void 0:await this.context.getLoginCookie();if(!e.token&&!r)throw Error("Doubao Apps Platform 部署需要登录,请运行 `doubao login` 后重试。");return await t.build(),await os({...e.versionTag?{versionTag:e.versionTag}:{},...e.appId?{appKey:e.appId}:{},manifest:this.context.manifest,rootPath:this.rootPath,internal:this.context.internal,needAuth:!0,...r?{cookie:r}:{},...e.token?{token:e.token}:{}})}(e.build||n===t5.NORMAL)&&await t.build();try{await this.pluginSystem.callDeployHooks("deploy",{deployType:n})}finally{await this.pluginSystem.callDeployHooks("afterDeploy",{})}}async run(e,t){switch(e){case tj.DEV:return await this.dev(t);case tj.BUILD:return await this.build(t);case tj.ANALYZE:return await this.analyze(t);case tj.PERF:return await this.perf(t);case tj.DEPLOY:return await this.deploy(t)}}async getUserConfig(e){if(!this._userConfig){let t=(0,E.loadEnv)({cwd:this.appDirectory,mode:e.envMode}),n=await sA({cwd:this.appDirectory,customConfigFile:e.config});this._env=t.parsed,n.source||={},n.source.define={...t.publicVars,...n.source.define},e.debugDriver&&(n.debugDriver=e.debugDriver),void 0!==e.skipAdbForegroundAppWatch&&(n.skipAdbForegroundAppWatch=e.skipAdbForegroundAppWatch),this._userConfig=n}return this._userConfig}async getAppConfig(){if(!this._appConfigLoaded){let e=await this.getUserConfig({});if(e.experiments?.taro)return this._appConfig=await sO({cwd:this.appDirectory}),this._appConfigLoaded=!0,this._appConfig;this._appConfig=await sC({cwd:this.appDirectory}),this._appConfigLoaded=!0}return this._appConfig}async analyzeConvention(e,t){let{pages:n,widgets:r,auth:i}=await sR(e,t),{app:a,tools:s}=await sD(e);return{pages:n,widgets:r,auth:i,app:a,tools:s}}}async function ol({appKey:e,versionTag:t,cloudBuildSource:n,runner:r,config:i,variables:a,properties:s,internal:o,domainId:l,cookie:p}){return await is({internal:o,domainId:l,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/cloud_build/create_job`,method:"POST",body:JSON.stringify({cloud_build_source:n,runner:r,config:i,variables:a,properties:s}),headers:{"Content-Type":"application/json",...p?{Cookie:p}:{}}})}async function op({appKey:e,jobId:t,reason:n,internal:r,domainId:i,cookie:a}){return await is({internal:r,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/cancel`,method:"POST",body:JSON.stringify({reason:n}),headers:{"Content-Type":"application/json",...a?{Cookie:a}:{}}})}async function od({appKey:e,jobId:t,internal:n,domainId:r,cookie:i}){return await is({internal:n,domainId:r,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}`,method:"GET",headers:i?{Cookie:i}:void 0})}async function oc({appKey:e,jobId:t,start:n,end:r,internal:i,domainId:a,cookie:s}){return await is({internal:i,domainId:a,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/logs`,query:{start:n,end:r},method:"GET",headers:s?{Cookie:s}:void 0})}async function ou({appKey:e,filename:t,sha256:n,category:r,internal:i,domainId:a,cookie:s,signal:o}){return await is({internal:i,domainId:a,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/start`,method:"POST",body:JSON.stringify({filename:t,sha256:n,category:r}),headers:{"Content-Type":"application/json",...s?{Cookie:s}:{}},signal:o})}async function oh({appKey:e,uploadToken:t,size:n,internal:r,domainId:i,cookie:a,signal:s}){return await is({internal:r,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/finish`,method:"POST",body:JSON.stringify({upload_token:t,size:n}),headers:{"Content-Type":"application/json",...a?{Cookie:a}:{}},signal:s})}async function om({appId:e,category:t,filePath:n,filename:r=tt.basename(n),...i}){let a=new Uint8Array(te.readFileSync(n)),s=(0,iU.createHash)("sha256").update(a).digest("hex"),o=(await ou({appKey:e,filename:r,sha256:s,category:t,...i})).data;if(!o?.upload_url||!o.upload_token)throw Error("File upload session is incomplete");await og({uploadUrl:o.upload_url,body:new Blob([a]),headers:o.upload_headers||{},signal:i.signal});let l=await oh({appKey:e,uploadToken:o.upload_token,size:a.byteLength,...i});if(!l.data?.stored_file_id)throw Error("File upload finish response did not return stored_file_id");return l.data}async function og({uploadUrl:e,body:t,headers:n,signal:r}){let i=await ii(e,{method:"PUT",body:t,headers:n,signal:r}),a=i.headers.get("x-tt-logid")||"";if(!i.ok){let e=await i.text();throw Error([`File upload failed with HTTP ${i.status}`,e?`message: ${e}`:"",a?`log_id: ${a}`:""].filter(Boolean).join(", "))}}(ek=eH||(eH={}))[ek.WAITING=0]="WAITING",ek[ek.QUEUED=1]="QUEUED",ek[ek.RUNNING=2]="RUNNING",ek[ek.PENDING=3]="PENDING",ek[ek.SUCCESS=4]="SUCCESS",ek[ek.FAIL=5]="FAIL",ek[ek.CANCELED=6]="CANCELED",ek[ek.TIMEOUT=7]="TIMEOUT",ek[ek.UNKNOWN=8]="UNKNOWN",(eN=eG||(eG={}))[eN.UNKNOWN=0]="UNKNOWN",eN[eN.SOURCE=1]="SOURCE",eN[eN.ARTIFACT=2]="ARTIFACT";let of=g("../../../node_modules/.pnpm/ora@5.4.1/node_modules/ora/index.js"),oy=new Set([eH.SUCCESS,eH.FAIL,eH.CANCELED,eH.TIMEOUT]);class ob{options;cwd;appDir;internal;env;secretEnv;appInfo;constructor(e,t){this.options=e,this.cwd=t,this.appDir=tt.resolve(e.appDir||t),(0,E.loadEnv)({cwd:this.appDir,mode:e.envMode}),this.internal=((e=process.cwd())=>ts(e)===tn)(this.appDir)}async start({versionTag:e,logs:t,runner:n,config:r,variables:i,properties:a}={}){this.resolveEnv(),this.resolveSecretEnv();let s=await this.upload();if(!s)throw Error("Cloud upload did not return stored_file_id");let o=await this.build({sourceRef:s,versionTag:e,runner:n,config:r,variables:i,properties:a});return t&&await this.waitForBuildJob({jobId:o}),o}async package({outputDir:e}={}){let t={appDir:this.appDir,internal:this.internal,outputDir:e?tt.resolve(this.cwd,e):void 0},n=await this.runWithSpinner("Preparing cloud build source...",e=>N({...t,onProgress:e}));if(this.logSourceDiagnostics(n),tA.success("Cloud build source archive created",{archivePath:n.archivePath}),n.blockers.length>0)throw Error(n.blockers.join("\n"));return n.archivePath}async upload({packOnly:e,outputDir:t}={}){if(e)return void await this.package({outputDir:t});let n={appDir:this.appDir,internal:this.internal},r=await this.resolveAppId("upload"),i=await this.resolveCookie(),a=await this.runWithSpinner("Preparing cloud build source...",e=>N({...n,onProgress:e}));if(this.logSourceDiagnostics(a),a.blockers.length>0)throw Error(a.blockers.join("\n"));let s=(await this.runWithSpinner("Uploading cloud build source...",()=>om({appId:r,category:eG.SOURCE,filePath:a.archivePath,internal:this.internal,cookie:i}))).stored_file_id;if(!s)throw Error("Cloud build source upload did not return stored_file_id");return tA.success("Cloud build source uploaded",{storedFileId:s}),s}async build({sourceRef:e,versionTag:t,runner:n,config:r,variables:i,properties:a}={}){let s;if(!e)throw Error("Cloud build requires --source-ref.");let{appId:o,appConfig:l}=await this.resolveAppInfo();if(!o)throw Error("Cloud build requires appId in doubao.config.ts or src/app.config.ts.");try{s=JSON.parse(te.readFileSync(tt.resolve(this.appDir,"package.json"),"utf-8")).version}catch{s=void 0}let p=t||l.version||s;if(!p)throw Error("Cloud build requires --version-tag or version in src/app.config.ts/package.json.");let d=await this.resolveCookie(),c=(await this.runWithSpinner("Creating cloud build job...",()=>ol({appKey:o,versionTag:p,cloudBuildSource:{type:"stored_file",ref:e},runner:n,config:r,variables:this.resolveBuildVariables(i),properties:a,internal:this.internal,cookie:d}))).data;if(!c?.job_id)throw Error("Cloud build create_job response did not return job_id");let u=eH[c.status]||String(c.status);return tA.success("Cloud build job created",{jobId:c.job_id}),tA.info("Cloud build status",{status:u}),c.job_id}async cancel({jobId:e,reason:t}){if(!e)throw Error("Cloud cancel requires job id.");let n=await this.resolveAppId("cancel"),r=await this.resolveCookie(),i=await this.runWithSpinner("Canceling cloud build job...",()=>op({appKey:n,jobId:e,reason:t||"Canceled by doubao CLI",internal:this.internal,cookie:r})),a=i.data?.job_id;if(!a)throw Error("Cloud build cancel response did not return job_id");return tA.success("Cloud build job canceled",{jobId:a}),a}async getStatus({jobId:e}){if(!e)throw Error("Cloud status requires job id.");let t=await this.resolveAppId("build"),n=await this.resolveCookie(),r=(await od({appKey:t,jobId:e,internal:this.internal,cookie:n})).data;if(!r)throw Error("Cloud build status response did not return data");let i=eH[r.status]||String(r.status);return tA.info("Cloud build job",{jobId:r.job_id}),tA.info("Cloud build status",{status:i}),r}async log({jobId:e,start:t,end:n}){if(!e)throw Error("Cloud log requires job id.");let r=Number(t??1),i=Number(n??r+200-1);if(!Number.isInteger(r)||!Number.isInteger(i)||r<1||i<r)throw Error("Cloud log requires a valid line range.");let a=await this.resolveAppId("log"),s=await this.resolveCookie(),o=(await oc({appKey:a,jobId:e,start:r,end:i,internal:this.internal,cookie:s})).data;if(!o)throw Error("Cloud build log response did not return data");return this.printLogLines(o.lines),tA.info("Cloud build logs fetched",{start:o.start??r,end:o.end??i,totalLineCount:o.total_line_count}),o}async waitForBuildJob({jobId:e}){let t=await this.resolveAppId("build"),n=await this.resolveCookie(),r=of("Waiting for cloud build to finish...").start(),i=!1;try{for(;;){let a=await od({appKey:t,jobId:e,internal:this.internal,cookie:n}),s=a.data?.status,o=void 0===s?"UNKNOWN":eH[s]||String(s);if(r.text=`Cloud build status: ${o}`,void 0!==s&&oy.has(s)){if(s===eH.SUCCESS){r.succeed(`Cloud build status: ${o}`),i=!0;return}throw r.fail(`Cloud build status: ${o}`),i=!0,await this.printFailureLogs({appId:t,jobId:e,cookie:n}),Error(`Cloud build ended with status: ${o}`)}await new Promise(e=>setTimeout(e,5e3))}}catch(e){throw i||r.fail(),e}}async printFailureLogs({appId:e,jobId:t,cookie:n}){let r=1,i=0,a=!1;try{for(tA.info("Fetching cloud build failure logs");i<1e3&&r<=1e3;){let s=Math.min(r+200-1,1e3),o=(await oc({appKey:e,jobId:t,start:r,end:s,internal:this.internal,cookie:n})).data;if(!o||0===o.lines.length)break;this.printLogLines(o.lines),i+=o.lines.length;let l=o.lines.at(-1)?.line_number,p=void 0!==l&&l>=r?l+1:void 0!==o.end&&o.end>=r?o.end+1:r,d=p>r;if(!(a=o.has_more_after&&d))break;r=p}a&&tA.warn("Cloud build failure logs truncated",{limit:1e3,jobId:t})}catch(e){tA.warn("Failed to fetch cloud build failure logs",{reason:s2(e)})}}async resolveCookie(){return await sZ(this.options,{internal:this.internal})}resolveBuildVariables(e){let t=new Map;for(let[e,n]of Object.entries(this.resolveEnv()))t.set(e,{name:e,value:n,env_var_name:e});for(let[e,n]of Object.entries(this.resolveSecretEnv()))t.set(e,{name:e,value:n,env_var_name:e,is_secret:!0});for(let n of e||[])t.set(n.env_var_name||n.name,n);return t.size>0?Array.from(t.values()):void 0}resolveEnv(){return this.options.env?(this.env??=o_(this.resolveAppPath(this.options.env),"Env"),this.env):{}}resolveSecretEnv(){return this.options.secretEnv?(this.secretEnv??=o_(this.resolveAppPath(this.options.secretEnv),"Secret env"),this.secretEnv):{}}resolveAppPath(e){return tt.isAbsolute(e)?e:tt.resolve(this.appDir,e)}async resolveAppId(e){let{appId:t}=await this.resolveAppInfo();if(!t)throw Error(`Cloud ${e} requires appId in doubao.config.ts or src/app.config.ts.`);return t}async resolveAppInfo(){if(this.appInfo)return this.appInfo;let e=await sA({cwd:this.appDir,customConfigFile:this.options.config}),t=await sC({cwd:this.appDir})??{};return this.appInfo={appId:e.experiments?.taro?.appId?e.experiments?.taro?.appId:t.appId,appConfig:t},this.appInfo}logSourceDiagnostics(e){for(let t of e.warnings)tA.warn(t);for(let t of e.blockers)tA.error(t)}printLogLines(e){for(let t of e)console.log(t.content)}async runWithSpinner(e,t){let n=of(e).start();try{let e=await t(e=>{n.text=e});return n.succeed(),e}catch(e){throw n.fail(),e}}}function o_(e,t){if(!te.existsSync(e))throw Error(`${t} file does not exist: ${e}`);return function(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith("#"))continue;let r=e.startsWith("export ")?e.slice(7).trimStart():e,i=r.indexOf("=");if(i<=0)continue;let a=r.slice(0,i).trim();/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(a)&&(t[a]=function(e){let t=e[0];if(('"'===t||"'"===t)&&e.endsWith(t))return e.slice(1,-1);let n=e.indexOf(" #");return -1===n?e:e.slice(0,n).trimEnd()}(r.slice(i+1).trim()))}return t}(te.readFileSync(e,"utf8"))}async function ow(e){let t=await tP(e);if(!t)throw Error("未检测到可用的 Android 设备。");return t}function ov({compileHooks:e,output:t}){let n=new Map,r={percentage:0},i=()=>{if(0===n.size)return;let i=[...n.values()].reduce((e,t)=>t.percentage<e.percentage?t:e);(i.percentage!==r.percentage||i.stage!==r.stage)&&(r=i,t?.onProgress?.(i),e?.onCompileProgress?.(i.percentage,i.stage??""))},a=e=>{for(let t of(n.clear(),e))n.set(t,{percentage:0});r={percentage:0}};return[{name:"DoubaoAppsDevPlugin",setup(r){(t?.progressBar!==void 0||t?.printLogs===!1)&&r.modifyRsbuildConfig((e,{mergeRsbuildConfig:n})=>n(e,{...t?.printLogs===!1?{logLevel:"silent"}:{},...t?.progressBar!==void 0?{dev:{progressBar:t.progressBar}}:{}})),(t?.onProgress||e?.onCompileProgress)&&(r.modifyRspackConfig((e,{appendPlugins:t,environment:r,environments:s})=>{0===n.size&&a(Object.keys(s)),t(new E.rspack.ProgressPlugin((e,t)=>{n.set(r.name,{percentage:Math.max(0,Math.min(1,e)),...t?{stage:t}:{}}),i()}))}),r.onBeforeDevCompile(({environments:e})=>{a(Object.keys(e))})),r.onDevCompileDone(()=>{if(n.size>0){for(let e of n.keys())n.set(e,{percentage:1,stage:"done"});i()}e?.onDevCompileDone?.()})}}]}class oE{appDirectory;launcher;constructor(e,t=oo){this.appDirectory=e,this.launcher=new t(e)}createCloudBuildLauncher(e={}){return new ob(e,this.appDirectory||process.cwd())}async create(e){await ep(e)}async dev(e={}){var t,n;let{compileHooks:r,output:i,simulator:a,...s}=e,o=a;if("object"==typeof a){let{businessTemplatesPath:e,manifestPath:t,skillPath:n,targetOrigin:r,...i}=a;o={...i,simulator:{businessTemplatesPath:e,manifestPath:t,skillPath:n,targetOrigin:r}}}let l=()=>this.launcher.dev({...s,...void 0!==o?{openWebDebugger:o}:{},rsbuildPlugins:ov({compileHooks:r,output:i}),signingEncryptionOptions:e.signingEncryptionOptions});if(!i)return await l();let p=(t={printLogs:i.printLogs,onLog:i.onLog},em.push(t),()=>{let e=em.lastIndexOf(t);e>=0&&em.splice(e,1)}),d=E.logger.level;!1===i.printLogs&&(E.logger.level="silent");let c=!0,u=()=>{c&&(c=!1,E.logger.level=d,p())};try{let e=await (n={printLogs:i.printLogs,onLog:i.onLog},eh.run(n,l));if(e&&"function"==typeof e.closeServer){let t=e.closeServer.bind(e);e.closeServer=async()=>{try{await t()}finally{u()}}}else u();return e}catch(e){throw u(),e}}async build(e={}){process.env.NODE_ENV="production";let{compileHooks:t,...n}=e;await this.launcher.build({...n,rsbuildPlugins:ov({compileHooks:t}),signingEncryptionOptions:e.signingEncryptionOptions,versionTag:e.versionTag})}async discoverWidgets(){return Object.values(this.launcher.context.metadata.getData().widgets).filter(({id:e})=>!e9(e))}async discoverPages(){return Object.values(this.launcher.context.metadata.getData().pages)}async discoverTools(){return Object.values(this.launcher.context.metadata.getData().tools)}async pushWidget(e){let{widgetId:t,deviceId:n,botId:r,widgetData:i,debugDriver:a,skipAdbForegroundAppWatch:s}=e,o=await ow({debugDriver:a,deviceId:n,skipAdbForegroundAppWatch:s}),l=this.launcher.context.metadata.appId;o.pushWidget({appId:l,widgetId:t,widgetData:i,botId:r})}async openPage(e){let{pageId:t,pageData:n,pageSettings:r,mode:i,debugDriver:a,deviceId:s,skipAdbForegroundAppWatch:o}=e,l=await ow({debugDriver:a,deviceId:s,skipAdbForegroundAppWatch:o}),p=this.launcher.context.metadata.appId;l.openPage({appId:p,pageId:t,pageData:n,pageSettings:r,mode:i})}async callTool(e){let{toolId:t,toolData:n,debugDriver:r,deviceId:i,skipAdbForegroundAppWatch:a}=e,s=await ow({debugDriver:r,deviceId:i,skipAdbForegroundAppWatch:a}),o=this.launcher.context.metadata.appId;s.callTool({appId:o,toolId:t,toolData:n})}async executeDebugScene(e){let{matchedScene:t,variables:n,deviceId:r,debugDriver:i,skipAdbForegroundAppWatch:a}=e,s=this.launcher.context.metadata.appId,o=await ow({debugDriver:i,deviceId:r,skipAdbForegroundAppWatch:a});await tR({matchedScene:t,appId:s,driver:o,variables:n})}async getDebugScenes(){let e=await t$(this.appDirectory||process.cwd());return await Promise.all(e.map(async e=>({...e,content:await tD(e.path)})))}async cloud(e={}){let{versionTag:t,logs:n,runner:r,createJobConfig:i,variables:a,properties:s,...o}=e;return await this.createCloudBuildLauncher(o).start({versionTag:t,logs:n,runner:r,config:i,variables:a,properties:s})}async cloudUpload(e={}){let{packOnly:t,outputDir:n,...r}=e;return await this.createCloudBuildLauncher(r).upload({packOnly:t,outputDir:n})}async cloudPackage(e={}){let{outputDir:t,...n}=e;return await this.createCloudBuildLauncher(n).package({outputDir:t})}async cloudBuild(e){let{sourceRef:t,versionTag:n,runner:r,createJobConfig:i,variables:a,properties:s,...o}=e;return await this.createCloudBuildLauncher(o).build({sourceRef:t,versionTag:n,runner:r,config:i,variables:a,properties:s})}async cloudCancel(e){let{jobId:t,reason:n,...r}=e;return await this.createCloudBuildLauncher(r).cancel({jobId:t,reason:n})}async cloudGetStatus(e){let{jobId:t,...n}=e;return await this.createCloudBuildLauncher(n).getStatus({jobId:t})}async cloudLog(e){let{jobId:t,start:n,end:r,...i}=e;return await this.createCloudBuildLauncher(i).log({jobId:t,start:n,end:r})}async deploy(e){let{versionTag:t,cookie:n,token:r,appKey:i,signingEncryptionOptions:a}=e;if(!n&&!r)throw Error("Doubao Apps SDK 部署需要 Cookie 或 Developer Open Build Token。");process.env.NODE_ENV="production",await this.launcher.build({skipCleanupRootPath:!0,cookie:n,signingEncryptionOptions:a,token:r,versionTag:t});let{manifest:s}=this.launcher.context;try{return await os({versionTag:t,...i?{appKey:i}:{},manifest:s,rootPath:this.launcher.rootPath,internal:e.internal??this.launcher.context.internal,cookie:n,token:r})}finally{tp()||t1.rmSync(this.launcher.rootPath,{recursive:!0,force:!0})}}}export{oE as DoubaoAppsSDK,s2 as error_getErrorMessage};
221
+ `)}(a,r,e,t,i)),{entry:n}}),o.worker.hooks.collectMetaData.tapPromise(ni,async({collector:r})=>{r.addAppMeta({name:e,appId:t,icons:n})}),o.view.hooks.collectMetaData.tapPromise({name:ni,stage:o.view.COLLECT_METADATA_STAGE_OPTIMIZE},async({collector:e})=>{let{pages:t,widgets:n}=o.context;Object.entries(t).forEach(([t,n])=>{let{folderName:r}=n;e.addPageMeta(t,{id:t8(t,r),path:t6(t)})}),Object.entries(n).forEach(([t,n])=>{let o,{folderName:i}=n;e.addWidgetMeta(t,(o=t8(t,i),{...r?.[i]??r?.[t]??r?.[o]??{},id:o}))})})}}}(o.experiments.taro)]:[],...o.plugins||[]]);let x=Date.now();await this.pluginSystem.bootstrap(),this.context.compileLifecycle.prepareDurations.pluginBootstrapMs=Date.now()-x,this.context.compileLifecycle.builderInitStartTime=Date.now();let A=await a1({options:o,commandType:e,context:this.context,web:p,rsbuildPlugins:n},this.pluginSystem);return{userConfig:o,builder:A}}catch(t){throw aD.report({appDirectory:this.appDirectory,context:this.context===r?void 0:this.context,scene:e===eR.DEV?"dev_initial":e,status:"failed",errorStage:"prepare",error:t}),t}}async dev(e){let{builder:t}=await this.prepare(eR.DEV,e,e.rsbuildPlugins),n=await t.startDevServer(),r=rr(n.port),o=this.context.webDebuggerLaunchOptions,i=o?await an(this.context,{appId:this.context.appId,appDirectory:this.appDirectory,artifactOrigin:r,env:{...this.context.env,...o.env??{}},mcpEndpoint:o.mcpEndpoint,mcpHeaders:o.mcpHeaders,openBrowser:o.openBrowser,simulator:o.simulator,toolsConfigReader:this.context.toolsResources?.readToolsJson,toolsConfigSourcePath:this.context.toolsResources?.toolsSourcePath,simulatorManifestReader:o.simulator?.manifestPath?void 0:this.context.toolsResources?.readManifestYaml,simulatorManifestSourcePath:o.simulator?.manifestPath?void 0:this.context.toolsResources?.manifestSourcePath,simulatorSkillReader:o.simulator?.skillPath?void 0:this.context.toolsResources?.readSkillMarkdown,simulatorSkillSourcePath:o.simulator?.skillPath?void 0:this.context.toolsResources?.skillDocumentPath}):void 0,a=async()=>{tO.info("Shutting down...");try{await i?.close(),await n.server.close()}finally{await aD.flush()}tO.info("dev server closed")};return{host:r,...i?{webDebugger:i}:{},closeServer:a}}async build(e){let{builder:t}=await this.prepare(eR.BUILD,e,e.rsbuildPlugins);try{await t.build()}finally{if(e.skipCleanupRootPath||tc()){if(e.archive&&e.channel){let{channel:t}=e;await t4({channelName:t,manifest:this.context.manifest,rootPath:this.rootPath})}}else tt.rmSync(this.rootPath,{recursive:!0,force:!0})}}async analyze(e){let{builder:t}=await this.prepare(eR.ANALYZE,e);await t.build()}async perf(e){let{builder:t}=await this.prepare(eR.PERF,e);await t.build()}async deploy(e){let{builder:t}=await this.prepare(eR.DEPLOY,e),n=e.deployType||t9.NORMAL;if(this.context.deploy={...this.context.deploy,...e.appId?{appId:e.appId}:{},...e.versionCode?{versionCode:e.versionCode}:{}},await this.pluginSystem.callDeployHooks("beforeDeploy",{config:this.context.deploy}),!this.context.deploy.doubaoAppsPlatform&&!this.context.deploy.selfBuilt){if(n!==t9.NORMAL)return void tC.error("Please use deploy plugin in doubao.config.ts");let r=e.token?void 0:await this.context.getLoginCookie();if(!e.token&&!r)throw Error("Doubao Apps Platform 部署需要登录,请运行 `doubao login` 后重试。");return await t.build(),await sX({...e.versionTag?{versionTag:e.versionTag}:{},...e.appId?{appKey:e.appId}:{},manifest:this.context.manifest,rootPath:this.rootPath,internal:this.context.internal,needAuth:!0,...r?{cookie:r}:{},...e.token?{token:e.token}:{}})}(e.build||n===t9.NORMAL)&&await t.build();try{await this.pluginSystem.callDeployHooks("deploy",{deployType:n})}finally{await this.pluginSystem.callDeployHooks("afterDeploy",{})}}async run(e,t){switch(e){case tj.DEV:return await this.dev(t);case tj.BUILD:return await this.build(t);case tj.ANALYZE:return await this.analyze(t);case tj.PERF:return await this.perf(t);case tj.DEPLOY:return await this.deploy(t)}}async getUserConfig(e){if(!this._userConfig){let t=(0,E.loadEnv)({cwd:this.appDirectory,mode:e.envMode}),n=await a8({cwd:this.appDirectory,customConfigFile:e.config});this._env=t.parsed,n.source||={},n.source.define={...t.publicVars,...n.source.define},e.debugDriver&&(n.debugDriver=e.debugDriver),void 0!==e.skipAdbForegroundAppWatch&&(n.skipAdbForegroundAppWatch=e.skipAdbForegroundAppWatch),this._userConfig=n}return this._userConfig}async getAppConfig(){if(!this._appConfigLoaded){let e=await this.getUserConfig({});if(e.experiments?.taro)return this._appConfig=await se({cwd:this.appDirectory}),this._appConfigLoaded=!0,this._appConfig;this._appConfig=await a6({cwd:this.appDirectory}),this._appConfigLoaded=!0}return this._appConfig}async analyzeConvention(e,t){let{pages:n,widgets:r,auth:o}=await ss(e,t),{app:i,tools:a}=await sa(e);return{pages:n,widgets:r,auth:o,app:i,tools:a}}}async function sQ({appKey:e,versionTag:t,cloudBuildSource:n,runner:r,config:o,variables:i,properties:a,internal:s,domainId:l,cookie:p}){return await os({internal:s,domainId:l,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/cloud_build/create_job`,method:"POST",body:JSON.stringify({cloud_build_source:n,runner:r,config:o,variables:i,properties:a}),headers:{"Content-Type":"application/json",...p?{Cookie:p}:{}}})}async function s0({appKey:e,jobId:t,reason:n,internal:r,domainId:o,cookie:i}){return await os({internal:r,domainId:o,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/cancel`,method:"POST",body:JSON.stringify({reason:n}),headers:{"Content-Type":"application/json",...i?{Cookie:i}:{}}})}async function s1({appKey:e,jobId:t,internal:n,domainId:r,cookie:o}){return await os({internal:n,domainId:r,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}`,method:"GET",headers:o?{Cookie:o}:void 0})}async function s2({appKey:e,jobId:t,start:n,end:r,internal:o,domainId:i,cookie:a}){return await os({internal:o,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/logs`,query:{start:n,end:r},method:"GET",headers:a?{Cookie:a}:void 0})}async function s3({appKey:e,filename:t,sha256:n,category:r,internal:o,domainId:i,cookie:a,signal:s}){return await os({internal:o,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/start`,method:"POST",body:JSON.stringify({filename:t,sha256:n,category:r}),headers:{"Content-Type":"application/json",...a?{Cookie:a}:{}},signal:s})}async function s4({appKey:e,uploadToken:t,size:n,internal:r,domainId:o,cookie:i,signal:a}){return await os({internal:r,domainId:o,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/finish`,method:"POST",body:JSON.stringify({upload_token:t,size:n}),headers:{"Content-Type":"application/json",...i?{Cookie:i}:{}},signal:a})}async function s5({appId:e,category:t,filePath:n,filename:r=tn.basename(n),...o}){let i=new Uint8Array(tt.readFileSync(n)),a=(0,od.createHash)("sha256").update(i).digest("hex"),s=(await s3({appKey:e,filename:r,sha256:a,category:t,...o})).data;if(!s?.upload_url||!s.upload_token)throw Error("File upload session is incomplete");await s9({uploadUrl:s.upload_url,body:new Blob([i]),headers:s.upload_headers||{},signal:o.signal});let l=await s4({appKey:e,uploadToken:s.upload_token,size:i.byteLength,...o});if(!l.data?.stored_file_id)throw Error("File upload finish response did not return stored_file_id");return l.data}async function s9({uploadUrl:e,body:t,headers:n,signal:r}){let o=await oi(e,{method:"PUT",body:t,headers:n,signal:r}),i=o.headers.get("x-tt-logid")||"";if(!o.ok){let e=await o.text();throw Error([`File upload failed with HTTP ${o.status}`,e?`message: ${e}`:"",i?`log_id: ${i}`:""].filter(Boolean).join(", "))}}(ek=eH||(eH={}))[ek.WAITING=0]="WAITING",ek[ek.QUEUED=1]="QUEUED",ek[ek.RUNNING=2]="RUNNING",ek[ek.PENDING=3]="PENDING",ek[ek.SUCCESS=4]="SUCCESS",ek[ek.FAIL=5]="FAIL",ek[ek.CANCELED=6]="CANCELED",ek[ek.TIMEOUT=7]="TIMEOUT",ek[ek.UNKNOWN=8]="UNKNOWN",(eD=eG||(eG={}))[eD.UNKNOWN=0]="UNKNOWN",eD[eD.SOURCE=1]="SOURCE",eD[eD.ARTIFACT=2]="ARTIFACT";let s8=f("../../../node_modules/.pnpm/ora@5.4.1/node_modules/ora/index.js"),s6=new Set([eH.SUCCESS,eH.FAIL,eH.CANCELED,eH.TIMEOUT]);class s7{options;cwd;appDir;internal;env;secretEnv;appInfo;constructor(e,t){this.options=e,this.cwd=t,this.appDir=tn.resolve(e.appDir||t),(0,E.loadEnv)({cwd:this.appDir,mode:e.envMode}),this.internal=((e=process.cwd())=>ts(e)===tr)(this.appDir)}async start({versionTag:e,logs:t,runner:n,config:r,variables:o,properties:i}={}){this.resolveEnv(),this.resolveSecretEnv();let a=await this.upload();if(!a)throw Error("Cloud upload did not return stored_file_id");let s=await this.build({sourceRef:a,versionTag:e,runner:n,config:r,variables:o,properties:i});return t&&await this.waitForBuildJob({jobId:s}),s}async package({outputDir:e}={}){let t={appDir:this.appDir,internal:this.internal,outputDir:e?tn.resolve(this.cwd,e):void 0},n=await this.runWithSpinner("Preparing cloud build source...",e=>N({...t,onProgress:e}));if(this.logSourceDiagnostics(n),tT.success("Cloud build source archive created",{archivePath:n.archivePath}),n.blockers.length>0)throw Error(n.blockers.join("\n"));return n.archivePath}async upload({packOnly:e,outputDir:t}={}){if(e)return void await this.package({outputDir:t});let n={appDir:this.appDir,internal:this.internal},r=await this.resolveAppId("upload"),o=await this.resolveCookie(),i=await this.runWithSpinner("Preparing cloud build source...",e=>N({...n,onProgress:e}));if(this.logSourceDiagnostics(i),i.blockers.length>0)throw Error(i.blockers.join("\n"));let a=(await this.runWithSpinner("Uploading cloud build source...",()=>s5({appId:r,category:eG.SOURCE,filePath:i.archivePath,internal:this.internal,cookie:o}))).stored_file_id;if(!a)throw Error("Cloud build source upload did not return stored_file_id");return tT.success("Cloud build source uploaded",{storedFileId:a}),a}async build({sourceRef:e,versionTag:t,runner:n,config:r,variables:o,properties:i}={}){let a;if(!e)throw Error("Cloud build requires --source-ref.");let{appId:s,appConfig:l}=await this.resolveAppInfo();if(!s)throw Error("Cloud build requires appId in doubao.config.ts or src/app.config.ts.");try{a=JSON.parse(tt.readFileSync(tn.resolve(this.appDir,"package.json"),"utf-8")).version}catch{a=void 0}let p=t||l.version||a;if(!p)throw Error("Cloud build requires --version-tag or version in src/app.config.ts/package.json.");let c=await this.resolveCookie(),d=(await this.runWithSpinner("Creating cloud build job...",()=>sQ({appKey:s,versionTag:p,cloudBuildSource:{type:"stored_file",ref:e},runner:n,config:r,variables:this.resolveBuildVariables(o),properties:i,internal:this.internal,cookie:c}))).data;if(!d?.job_id)throw Error("Cloud build create_job response did not return job_id");let u=eH[d.status]||String(d.status);return tT.success("Cloud build job created",{jobId:d.job_id}),tT.info("Cloud build status",{status:u}),d.job_id}async cancel({jobId:e,reason:t}){if(!e)throw Error("Cloud cancel requires job id.");let n=await this.resolveAppId("cancel"),r=await this.resolveCookie(),o=await this.runWithSpinner("Canceling cloud build job...",()=>s0({appKey:n,jobId:e,reason:t||"Canceled by doubao CLI",internal:this.internal,cookie:r})),i=o.data?.job_id;if(!i)throw Error("Cloud build cancel response did not return job_id");return tT.success("Cloud build job canceled",{jobId:i}),i}async getStatus({jobId:e}){if(!e)throw Error("Cloud status requires job id.");let t=await this.resolveAppId("build"),n=await this.resolveCookie(),r=(await s1({appKey:t,jobId:e,internal:this.internal,cookie:n})).data;if(!r)throw Error("Cloud build status response did not return data");let o=eH[r.status]||String(r.status);return tT.info("Cloud build job",{jobId:r.job_id}),tT.info("Cloud build status",{status:o}),r}async log({jobId:e,start:t,end:n}){if(!e)throw Error("Cloud log requires job id.");let r=Number(t??1),o=Number(n??r+200-1);if(!Number.isInteger(r)||!Number.isInteger(o)||r<1||o<r)throw Error("Cloud log requires a valid line range.");let i=await this.resolveAppId("log"),a=await this.resolveCookie(),s=(await s2({appKey:i,jobId:e,start:r,end:o,internal:this.internal,cookie:a})).data;if(!s)throw Error("Cloud build log response did not return data");return this.printLogLines(s.lines),tT.info("Cloud build logs fetched",{start:s.start??r,end:s.end??o,totalLineCount:s.total_line_count}),s}async waitForBuildJob({jobId:e}){let t=await this.resolveAppId("build"),n=await this.resolveCookie(),r=s8("Waiting for cloud build to finish...").start(),o=!1;try{for(;;){let i=await s1({appKey:t,jobId:e,internal:this.internal,cookie:n}),a=i.data?.status,s=void 0===a?"UNKNOWN":eH[a]||String(a);if(r.text=`Cloud build status: ${s}`,void 0!==a&&s6.has(a)){if(a===eH.SUCCESS){r.succeed(`Cloud build status: ${s}`),o=!0;return}throw r.fail(`Cloud build status: ${s}`),o=!0,await this.printFailureLogs({appId:t,jobId:e,cookie:n}),Error(`Cloud build ended with status: ${s}`)}await new Promise(e=>setTimeout(e,5e3))}}catch(e){throw o||r.fail(),e}}async printFailureLogs({appId:e,jobId:t,cookie:n}){let r=1,o=0,i=!1;try{for(tT.info("Fetching cloud build failure logs");o<1e3&&r<=1e3;){let a=Math.min(r+200-1,1e3),s=(await s2({appKey:e,jobId:t,start:r,end:a,internal:this.internal,cookie:n})).data;if(!s||0===s.lines.length)break;this.printLogLines(s.lines),o+=s.lines.length;let l=s.lines.at(-1)?.line_number,p=void 0!==l&&l>=r?l+1:void 0!==s.end&&s.end>=r?s.end+1:r,c=p>r;if(!(i=s.has_more_after&&c))break;r=p}i&&tT.warn("Cloud build failure logs truncated",{limit:1e3,jobId:t})}catch(e){tT.warn("Failed to fetch cloud build failure logs",{reason:sM(e)})}}async resolveCookie(){return await s$(this.options,{internal:this.internal})}resolveBuildVariables(e){let t=new Map;for(let[e,n]of Object.entries(this.resolveEnv()))t.set(e,{name:e,value:n,env_var_name:e});for(let[e,n]of Object.entries(this.resolveSecretEnv()))t.set(e,{name:e,value:n,env_var_name:e,is_secret:!0});for(let n of e||[])t.set(n.env_var_name||n.name,n);return t.size>0?Array.from(t.values()):void 0}resolveEnv(){return this.options.env?(this.env??=le(this.resolveAppPath(this.options.env),"Env"),this.env):{}}resolveSecretEnv(){return this.options.secretEnv?(this.secretEnv??=le(this.resolveAppPath(this.options.secretEnv),"Secret env"),this.secretEnv):{}}resolveAppPath(e){return tn.isAbsolute(e)?e:tn.resolve(this.appDir,e)}async resolveAppId(e){let{appId:t}=await this.resolveAppInfo();if(!t)throw Error(`Cloud ${e} requires appId in doubao.config.ts or src/app.config.ts.`);return t}async resolveAppInfo(){if(this.appInfo)return this.appInfo;let e=await a8({cwd:this.appDir,customConfigFile:this.options.config}),t=await a6({cwd:this.appDir})??{};return this.appInfo={appId:e.experiments?.taro?.appId?e.experiments?.taro?.appId:t.appId,appConfig:t},this.appInfo}logSourceDiagnostics(e){for(let t of e.warnings)tT.warn(t);for(let t of e.blockers)tT.error(t)}printLogLines(e){for(let t of e)console.log(t.content)}async runWithSpinner(e,t){let n=s8(e).start();try{let e=await t(e=>{n.text=e});return n.succeed(),e}catch(e){throw n.fail(),e}}}function le(e,t){if(!tt.existsSync(e))throw Error(`${t} file does not exist: ${e}`);return function(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith("#"))continue;let r=e.startsWith("export ")?e.slice(7).trimStart():e,o=r.indexOf("=");if(o<=0)continue;let i=r.slice(0,o).trim();/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)&&(t[i]=function(e){let t=e[0];if(('"'===t||"'"===t)&&e.endsWith(t))return e.slice(1,-1);let n=e.indexOf(" #");return -1===n?e:e.slice(0,n).trimEnd()}(r.slice(o+1).trim()))}return t}(tt.readFileSync(e,"utf8"))}async function lt(e){let t=await tk(e);if(!t)throw Error("未检测到可用的 Android 设备。");return t}function ln({compileHooks:e,output:t}){let n=new Map,r={percentage:0},o=()=>{if(0===n.size)return;let o=[...n.values()].reduce((e,t)=>t.percentage<e.percentage?t:e);(o.percentage!==r.percentage||o.stage!==r.stage)&&(r=o,t?.onProgress?.(o),e?.onCompileProgress?.(o.percentage,o.stage??""))},i=e=>{for(let t of(n.clear(),e))n.set(t,{percentage:0});r={percentage:0}};return[{name:"DoubaoAppsDevPlugin",setup(r){(t?.progressBar!==void 0||t?.printLogs===!1)&&r.modifyRsbuildConfig((e,{mergeRsbuildConfig:n})=>n(e,{...t?.printLogs===!1?{logLevel:"silent"}:{},...t?.progressBar!==void 0?{dev:{progressBar:t.progressBar}}:{}})),(t?.onProgress||e?.onCompileProgress)&&(r.modifyRspackConfig((e,{appendPlugins:t,environment:r,environments:a})=>{0===n.size&&i(Object.keys(a)),t(new E.rspack.ProgressPlugin((e,t)=>{n.set(r.name,{percentage:Math.max(0,Math.min(1,e)),...t?{stage:t}:{}}),o()}))}),r.onBeforeDevCompile(({environments:e})=>{i(Object.keys(e))})),r.onDevCompileDone(()=>{if(n.size>0){for(let e of n.keys())n.set(e,{percentage:1,stage:"done"});o()}e?.onDevCompileDone?.()})}}]}class lr{appDirectory;launcher;constructor(e,t=sZ){this.appDirectory=e,this.launcher=new t(e)}createCloudBuildLauncher(e={}){return new s7(e,this.appDirectory||process.cwd())}async create(e){await ep(e)}async dev(e={}){var t,n;let{compileHooks:r,output:o,simulator:i,...a}=e,s=i;if("object"==typeof i){let{businessTemplatesPath:e,manifestPath:t,skillPath:n,targetOrigin:r,...o}=i;s={...o,simulator:{businessTemplatesPath:e,manifestPath:t,skillPath:n,targetOrigin:r}}}let l=()=>this.launcher.dev({...a,...void 0!==s?{openWebDebugger:s}:{},rsbuildPlugins:ln({compileHooks:r,output:o}),signingEncryptionOptions:e.signingEncryptionOptions});if(!o)return await l();let p=(t={printLogs:o.printLogs,onLog:o.onLog},eh.push(t),()=>{let e=eh.lastIndexOf(t);e>=0&&eh.splice(e,1)}),c=E.logger.level;!1===o.printLogs&&(E.logger.level="silent");let d=!0,u=()=>{d&&(d=!1,E.logger.level=c,p())};try{let e=await (n={printLogs:o.printLogs,onLog:o.onLog},em.run(n,l));if(e&&"function"==typeof e.closeServer){let t=e.closeServer.bind(e);e.closeServer=async()=>{try{await t()}finally{u()}}}else u();return e}catch(e){throw u(),e}}async build(e={}){process.env.NODE_ENV="production";let{compileHooks:t,...n}=e;await this.launcher.build({...n,rsbuildPlugins:ln({compileHooks:t}),signingEncryptionOptions:e.signingEncryptionOptions,versionTag:e.versionTag})}async discoverWidgets(){return Object.values(this.launcher.context.metadata.getData().widgets).filter(({id:e})=>!e9(e))}async discoverPages(){return Object.values(this.launcher.context.metadata.getData().pages)}async discoverTools(){return Object.values(this.launcher.context.metadata.getData().tools)}async pushWidget(e){let{widgetId:t,deviceId:n,botId:r,widgetData:o,debugDriver:i,skipAdbForegroundAppWatch:a}=e,s=await lt({debugDriver:i,deviceId:n,skipAdbForegroundAppWatch:a}),l=this.launcher.context.metadata.appId;s.pushWidget({appId:l,widgetId:t,widgetData:o,botId:r})}async openPage(e){let{pageId:t,pageData:n,pageSettings:r,mode:o,debugDriver:i,deviceId:a,skipAdbForegroundAppWatch:s}=e,l=await lt({debugDriver:i,deviceId:a,skipAdbForegroundAppWatch:s}),p=this.launcher.context.metadata.appId;l.openPage({appId:p,pageId:t,pageData:n,pageSettings:r,mode:o})}async callTool(e){let{toolId:t,toolData:n,debugDriver:r,deviceId:o,skipAdbForegroundAppWatch:i}=e,a=await lt({debugDriver:r,deviceId:o,skipAdbForegroundAppWatch:i}),s=this.launcher.context.metadata.appId;a.callTool({appId:s,toolId:t,toolData:n})}async executeDebugScene(e){let{matchedScene:t,variables:n,deviceId:r,debugDriver:o,skipAdbForegroundAppWatch:i}=e,a=this.launcher.context.metadata.appId,s=await lt({debugDriver:o,deviceId:r,skipAdbForegroundAppWatch:i});await tN({matchedScene:t,appId:a,driver:s,variables:n})}async getDebugScenes(){let e=await t$(this.appDirectory||process.cwd());return await Promise.all(e.map(async e=>({...e,content:await tR(e.path)})))}async cloud(e={}){let{versionTag:t,logs:n,runner:r,createJobConfig:o,variables:i,properties:a,...s}=e;return await this.createCloudBuildLauncher(s).start({versionTag:t,logs:n,runner:r,config:o,variables:i,properties:a})}async cloudUpload(e={}){let{packOnly:t,outputDir:n,...r}=e;return await this.createCloudBuildLauncher(r).upload({packOnly:t,outputDir:n})}async cloudPackage(e={}){let{outputDir:t,...n}=e;return await this.createCloudBuildLauncher(n).package({outputDir:t})}async cloudBuild(e){let{sourceRef:t,versionTag:n,runner:r,createJobConfig:o,variables:i,properties:a,...s}=e;return await this.createCloudBuildLauncher(s).build({sourceRef:t,versionTag:n,runner:r,config:o,variables:i,properties:a})}async cloudCancel(e){let{jobId:t,reason:n,...r}=e;return await this.createCloudBuildLauncher(r).cancel({jobId:t,reason:n})}async cloudGetStatus(e){let{jobId:t,...n}=e;return await this.createCloudBuildLauncher(n).getStatus({jobId:t})}async cloudLog(e){let{jobId:t,start:n,end:r,...o}=e;return await this.createCloudBuildLauncher(o).log({jobId:t,start:n,end:r})}async deploy(e){let{versionTag:t,cookie:n,token:r,appKey:o,signingEncryptionOptions:i}=e;if(!n&&!r)throw Error("Doubao Apps SDK 部署需要 Cookie 或 Developer Open Build Token。");process.env.NODE_ENV="production",await this.launcher.build({skipCleanupRootPath:!0,cookie:n,signingEncryptionOptions:i,token:r,versionTag:t});let{manifest:a}=this.launcher.context;try{return await sX({versionTag:t,...o?{appKey:o}:{},manifest:a,rootPath:this.launcher.rootPath,internal:e.internal??this.launcher.context.internal,cookie:n,token:r})}finally{tc()||t1.rmSync(this.launcher.rootPath,{recursive:!0,force:!0})}}}export{lr as DoubaoAppsSDK,sM as error_getErrorMessage};