@doubao-dev/cli 0.0.33 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2168.js +2 -2
- package/dist/4931.js +1 -1
- package/dist/{8079.js → 6427.js} +3 -3
- package/dist/{9667.js → 8981.js} +2 -2
- package/dist/@byted-doubao-apps/kit.js +1 -1
- package/dist/@byted-doubao-apps/login.js +1 -1
- package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
- package/dist/@byted-doubao-apps/template-starter/package.json +3 -3
- package/dist/assets/web-sdk-debugger/__doubao_web_sdk_native_modules/applet-bridge-module-core.js +1 -1
- package/dist/assets/web-sdk-debugger/index.html +1 -1
- package/dist/assets/web-sdk-debugger/static/js/index.9f626ba3a2.js +44 -0
- package/dist/assets/web-sdk-debugger/wsd/doubao-apps-api.template.js +0 -0
- package/dist/assets/web-sdk-debugger/wsd/doubao-apps-framework.template.js +0 -0
- package/dist/check.js +1 -1
- package/dist/dev-shell.js +1 -1
- package/dist/dev.js +4 -4
- package/dist/init.js +1 -1
- package/dist/ink.js +1 -1
- package/dist/prompt.js +1 -1
- package/dist/run.js +1 -1
- package/dist/sdk.js +42 -42
- package/dist/sdk~1.js +28 -28
- package/package.json +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/06-/350/267/257/347/224/261.md +2 -2
- package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +2 -2
- package/dist/assets/web-sdk-debugger/static/js/index.d1bb36b355.js +0 -44
- /package/dist/{9091.js → 3688.js} +0 -0
- /package/dist/{9667.js.LICENSE.txt → 8981.js.LICENSE.txt} +0 -0
package/dist/sdk.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*! LICENSE: sdk.js.LICENSE.txt */
|
|
2
|
-
let e,t,n,r,a,o,i;import"node:module";import{LAYERS as s,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 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_node_timers_promises_namespaceObject as _,core_namespaceObject as v,external_node_process_namespaceObject as w,external_better_opn_namespaceObject as S,promises_namespaceObject as E}from"./7945.js";import{schemas_number as x,schemas_enum as A,McpServer as T,unknown as C,dist_esm as I,schemas_string as P,schemas_object as O,createMcpHandler as D,pluginReactAlias as k,schemas_boolean as $,toNodeHandler as R,lodash_es_get as N,lodash_es_merge as L,schemas_array as M,record as j,getWebSdkDebuggerDistPath as B,eraseLines as U,lodash_es_mergeWith as F,pluginExternalBundle as H}from"./7417.js";import{external_node_module_namespaceObject as W}from"./3551.js";import{parseDebugScene as V,isRecord as G,getDebugSceneVariableEntries as q,BoxType as J,normalizeHttpEndpoint as K,parseSandboxSimulatorToolCallEvent as z,TitleType as Y,RenderType as X,AUTH_META as Z,normalizeWidgetSourceEntry as Q,resolveDebugScene as ee,execaCommand as et,APP_DEVELOPER_ORIGIN as en}from"./9667.js";import{walk_simple as er}from"./7526.js";import"./4525.js";import"./yaml.js";import{VIRTUAL_INJECTED_FILE as ea,DEPLOY_PACKAGE as eo,getPPEEnvironmentHeader as ei,deployLogger as es,VIRTUAL_INJECTED_STYLE_FILE as el,CONVENTIONAL_FILE_NAME_PRIVACY as ep,isExternalBundleDisabled as ed,isInternal as ec,isDebugMode as eu,ENTRY_FILE_TSX as em,configLogger as eh,loggers_buildLogger as ef,isAppTemplateJsDisabled as eg,CONVENTIONAL_FILE_NAME_LOGIN as ey,MANIFEST_FILE as eb,resolveCachedLoginCookie as e_,resolveWebDebuggerMcpEndpoint as ev,ENTRY_FILE_TS as ew,APP_PACKAGE_NAME as eS,MANIFEST_SIGN_FILE as eE,VIRTUAL_INJECTED_STYLE_CONTENT as ex,isDebugDriverName as eA,loadAppConfig as eT,CONVENTIONAL_DIR_NAME_WIDGET as eC,getErrorMessage as eI,FRAMEWORK_REACT_EXTERNAL_LIBRARY_NAMES as eP,resolveFrameworkPackage as eO,command_ECommand as eD,AI_MANIFEST as ek,CLIENT_TOOL_RUNTIME_ENTRY_KEY as e$,isDebugLogEnabled as eR,buildLogger as eN,SCM_DEPLOY_PACKAGE_FOLDER as eL,MCP_PRIVACY_LOGIN_CARD as eM,CloudBuildLauncher as ej,requestDoubaoAppsPlatform as eB,runWithLoggerOutput as eU,resolveLoginCookie as eF,fetchDoubaoAppsPlatform as eH,resolveConfigFile as eW,logger as eV,WIDGETS as eG,TMP_DIR as eq,DebugDriverType as eJ,DEBUG_DRIVER_NAMES as eK,devServerLogger as ez,cloneNormalizedAppConfig as eY,EXPIRED_WIDGET as eX,INTERNAL_FRAMEWORK_PACKAGE as eZ,isGenerateLoginCardDisabled as eQ,Command as e0,loadConfig as e1,DEK_FILE_NAME as e2,PUBLIC_FRAMEWORK_PACKAGE as e3,getLocalAreaNetworkUrl as e4,isInternalWidgetId as e9,PRIVACY as e5,isSelfContainedBuild as e8,FRAMEWORK_PACKAGE_NAMES as e6,importConfig as e7,APP_CONFIG_NAME as te,loadDevSettings as tt,DOUBAO_APP_OUTPUT_FOLDER as tn,getFrameworkComponentsPackage as tr,getSigningEncryptionOptions as ta,getRequestPPELane as to,getLocalAreaNetworkAddress as ti,getFrameworkApiPackage as ts}from"./8079.js";import tl from"./inquirer.js";import{source as tp,TeaUploader as td}from"./9091.js";import{wrapper as tc}from"./wrapper.js";import{create as tu}from"./@byted-doubao-apps/create.js";f.add({"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_@emnapi+core@1.11.3_@emnapi+runtime@1.11._28bf6d6aa3ad40a32bf1b29e9284bc7c/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-bootstrap.js"(e,t,n){e.exports=n.p+"static/assets/web-view-proxy-bootstrap.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_@emnapi+core@1.11.3_@emnapi+runtime@1.11._28bf6d6aa3ad40a32bf1b29e9284bc7c/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.3.0-rc.2_@emnapi+core@1.11.3_@emnapi+runtime@1.11._28bf6d6aa3ad40a32bf1b29e9284bc7c/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.3.0-rc.2_@emnapi+core@1.11.3_@emnapi+runtime@1.11.3_@lynx-js+t_6d8f76398c53265c49c93c59fc05a8c2/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"}});class tm{}function th(e,t=3e3){return et(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===eS.DOUBAO||t===eS.PLAYGROUND)&&(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 tv(){let e=await t_();if(e.length>1){let{device:t}=await tl.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 tm{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,eS.DOUBAO);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,eS.DOUBAO)!==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,a=`shell am broadcast -a com.bytedance.applet.SET_APPLET_DEBUG_HOST --es appletName ${n} --es appletHost ${t} --es appletType 1 --es isSigned ${r}`;eu()&&console.log(tp.dim(`adb -s ${this.deviceId} ${a}`)),await tf(this.deviceId,a)}async openPage(e){let{appId:t,pageId:n,pageData:r,pageSettings:a,mode:o}=e,i=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageName ${n} --es appletPageData '${r}' --es appletPageSettings '${a}' --es mode '${o}'`;eu()&&console.log(tp.dim(`adb -s ${this.deviceId} ${i}`)),await tf(this.deviceId,i)}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}'`;eu()&&console.log(tp.dim(`adb -s ${this.deviceId} ${r}`)),await tf(this.deviceId,r)}async pushWidget(e){let{appId:t,widgetId:n,widgetData:r,botId:a}=e,o=`shell am broadcast -a com.bytedance.applet.START_APPLET_WIDGET --es appletName ${t} --es widgetName ${n} --es widgetData '${r}' --es botId ${a||process.env.DEBUG_BOT_ID}`;eu()&&console.log(tp.dim(`adb -s ${this.deviceId} ${o}`)),await tf(this.deviceId,o)}async callTool(e){let{appId:t,toolId:n,toolData:r}=e,a=`shell am broadcast -a com.bytedance.applet.CALL_TOOL --es appletName ${t} --es toolName '${n}' --es toolData '${r}'`;eu()&&console.log(tp.dim(`adb -s ${this.deviceId} ${a}`)),await tf(this.deviceId,a)}}class tS extends tm{async load(e){}async openPage(e){}async openPageUrl(e){}async pushWidget(e){}async callTool(e){}}class tE{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:a}=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 a({runType:"rspeedy",openWebview:this.options.devtool});let o=r();this.debugDriver=o,o.getAllAppClients().forEach(e=>this.onConnect(e,n)),o.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){ez.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 tx extends tm{server;constructor(){super(),this.server=new tE({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:a,mode:o}=e;this.server.sendMessage({method:"Applet_OpenPage",params:{appletName:t,appletPageName:n,appletPageData:r,appletPageSettings:a,mode:o}})}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:a}=e;this.server.sendMessage({method:"Applet_OpenWidget",params:{appletName:t,widgetName:n,widgetData:r,botId:a||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 tA(t={}){if(!e){let n=t.debugDriver??eJ.Adb;if(!eA(n))throw Error(`无效的调试驱动 "${n}",可选值:${eK.join(", ")}。`);switch(n){case eJ.Hdt:e=new tx;break;case eJ.DevTools:e=new tS;break;case eJ.Adb:{let n=t.deviceId??await tv();n&&(e=new tw(n,{skipForegroundAppWatch:t.skipAdbForegroundAppWatch}));break}default:throw Error(`无效的调试驱动 "${n}",可选值:${eK.join(", ")}。`)}}return e}let tT=f("node:fs/promises"),tC=f("node:path");async function tI(e){let t=(0,tC.join)(e,"debug-scene");try{return(await (0,tT.readdir)(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>({name:e.name.slice(0,-5),path:(0,tC.join)(t,e.name)}))}catch{return[]}}async function tP(e){try{return V(JSON.parse(await (0,tT.readFile)(e,"utf8")))}catch(t){return eu()&&console.warn(`[DoubaoApps] 加载调试场景 "${e}" 失败:${t instanceof Error?t.message:String(t)}`),null}}async function tO(e,t){let{matchedScene:n,appId:r,driver:a,variables:o}=e,i=t??await tP(n.path);if(!i)return;let s=ee(i,o);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 a.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 a.pushWidget(t)}else{let e=JSON.stringify(s.resolvedInput),t={appId:r,toolId:s.id,toolData:e};await a.callTool(t)}}let tD="https://lf3-static.bytednsdoc.com/obj/eden-cn/777eh7nuptpfnuhd/default.svg";function tk(e){if("string"==typeof e){let t=e.length>0?e:tD;return{"1x":t,"2x":t,"3x":t}}return{"1x":e?.["1x"]||tD,"2x":e?.["2x"]||tD,"3x":e?.["3x"]||tD}}function t$(e){let t=Object.keys(e);return t.sort(),t.reduce((t,n)=>(t[n]=e[n],t),{})}class tR{get metadata(){return this._metadata}toString(){return JSON.stringify(this._metadata,null,2)}}class tN extends tR{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,chat:r.chat}}}class tL extends tR{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,n,r=[]){let a=this._metadata;return{widgetId:a.id,name:a.name,description:a.description,keywords:a.keywords,digest:t,prop:a.prop,entry:e,renderType:n,border:a.border,appSettings:r,boxType:"full_box"===a.boxType?J.FULL_BOX:J.INBOX,titleType:a.titleType?tL.TITLE_TYPE_MAP[a.titleType]:void 0}}}tL.TITLE_TYPE_MAP={none:2,normal:0,float:1};class tM extends tR{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 tj extends tR{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,chat:this._metadata.chat,keywords:this._metadata.keywords,icons:tk(this._metadata.icons),digest:t,prop:"",tools:Object.values(e).map(e=>e.toManifest()),appRuntimeEntry:n,appRuntimeType:r}}}class tB{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 tj(e)}addToolMeta(e,t){this.metadata.tools[e]?this.metadata.tools[e].assign(t):this.metadata.tools[e]=new tM(t)}addPageMeta(e,t){this.metadata.pages[e]?this.metadata.pages[e].assign(t):this.metadata.pages[e]=new tN(t)}addWidgetMeta(e,t){this.metadata.widgets[e]?this.metadata.widgets[e].assign(t):this.metadata.widgets[e]=new tL(t)}getData(){let{tools:e,pages:t,widgets:n,app:r}=this.metadata;return{app:r.metadata??{},tools:t$(Object.fromEntries(Object.keys(e).map(t=>[t,e[t].metadata]))),pages:t$(Object.fromEntries(Object.keys(t).map(e=>[e,t[e].metadata]))),widgets:t$(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:t$(e),pages:t$(t),widgets:t$(n)}}clearData(){this.metadata={app:{},pages:{},tools:{},widgets:{}}}}let tU={MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE:1e3,MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY:2e3,MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE:3e3},tF={BEFORE_BUILD_STAGE_CREATE_CONFIG:1e3,BEFORE_BUILD_STAGE_MODIFY_BUILD_CONFIG:2e3,BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG:3e3},tH={COLLECT_METADATA_STAGE_START:1e3,COLLECT_METADATA_STAGE_PROCESS_METADATA:2e3,COLLECT_METADATA_STAGE_OPTIMIZE:3e3,COLLECT_METADATA_STAGE_FINISH:4e3},tW={...tU,...tF,...tH},tV={...tU,...tF,...tH};(nP=nD||(nD={}))[nP.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS=1e3]="BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS",nP[nP.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS=2e3]="BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS",nP[nP.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=3e3]="BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS",nP[nP.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS=3999]="BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS",nP[nP.AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS=4e3]="AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS",nP[nP.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS=5e3]="AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS",nP[nP.AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=6e3]="AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS";let tG=f("../../../node_modules/.pnpm/tapable@2.2.1/node_modules/tapable/lib/index.js");function tq(){return{modifyEnvironment:new tG.FU(["arg0"]),modifyEntryOption:new tG.BD(["arg0"]),beforeBuild:new tG.FU(["arg0"]),collectMetaData:new tG.FU(["arg0"]),build:new tG.FU(["arg0"]),afterBuild:new tG.FU(["arg0"])}}function tJ({hooks:e,stages:t}){return{hooks:e,...t}}class tK{constructor(e,t=[]){this.plugins=[],this.api={...{worker:tJ({hooks:tq(),stages:tV}),view:tJ({hooks:tq(),stages:tW}),assets:tJ({hooks:{beforeEmit:new tG.FU(["arg0"]),afterEmit:new tG.FU(["arg0"])},stages:nD}),deploy:tJ({hooks:{beforeDeploy:new tG.FU(["arg0"]),deploy:new tG.FU(["arg0"]),afterDeploy:new tG.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=N(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 tz=f("fs"),tY=f("path"),tX=f("../../../node_modules/.pnpm/archiver@7.0.1/node_modules/archiver/index.js");function tZ(e,t,n,r){return new Promise((a,o)=>{let i=tz.createWriteStream(e),s=tX("zip",{zlib:{level:9}});s.pipe(i),s.directory(t,n??!1),i.on("close",()=>{r?.deleteResource&&tz.rmSync(t,{recursive:!0}),eN.success("Compiled artifacts packaged",{file:tY.basename(e)}),a("")}),s.on("error",e=>{eN.error("An error occurred during packaging",{error:e}),o(e)}),s.finalize()})}let tQ=f("node:fs");async function t0({channelName:e,manifest:t,rootPath:n}){let r=tC.resolve(n),a=tC.resolve(n,tn),o=tC.resolve(a,t.packageName),i={outputFolder:a,transformFolder:o,manifest:t};tQ.existsSync(a)&&tQ.rmSync(a,{recursive:!0}),tQ.mkdirSync(a),tQ.mkdirSync(o),function(e,t){let{transformFolder:n,manifest:r}=t,{applet:a,widgets:o}=r,i=tC.resolve(e,"base"),s=tC.resolve(n,"base");tQ.mkdirSync(s),tQ.cpSync(i,s,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0});let l=tC.resolve(e,a.appletId),p=tC.resolve(n,a.appletId);tQ.mkdirSync(p),a.pages.length>0&&tQ.cpSync(l,p,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0}),o.forEach(t=>{let r=tC.resolve(e,t.widgetId),a=tC.resolve(n,t.widgetId);tQ.mkdirSync(a),tQ.cpSync(r,a,{filter:e=>null===e.match(/(.)*\.map$/),recursive:!0})});let d=tC.resolve(e,`web_${r.versionCode}`);if(tQ.existsSync(d)){let e=tC.resolve(n,`web_${r.versionCode}`);tQ.cpSync(d,e,{recursive:!0})}}(r,i);let s=await t1(e,i);return eN.debug("Package resource created",{packageResource:s}),{packageResource:s}}async function t1(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:a}=t,{applet:o,widgets:i,packageName:s,versionCode:l}=n,p=tC.resolve(r,eo),d=tC.resolve(p,e),c=tC.resolve(d,s);tQ.mkdirSync(p),tQ.mkdirSync(d),tQ.mkdirSync(c),tQ.cpSync(a,c,{recursive:!0});let u={},m=tQ.readdirSync(c).filter(e=>tQ.statSync(tC.resolve(c,e)).isDirectory()),h=tC.resolve(p,`${e}.zip`);try{if(await Promise.all(m.map(e=>{if(e===`web_${l}`)return Promise.resolve();if("base"===e)return tZ(tC.resolve(c,`${e}_${l}.zip`),tC.resolve(c,e),e,{deleteResource:!0});if(e===o.appletId){let t=`${e}_${o.digest}.zip`;return u[o.appletId]=t,tZ(tC.resolve(c,t),tC.resolve(c,e),e,{deleteResource:!0})}let t=i.find(t=>t.widgetId===e);if(t){let n=`${e}_${t.digest}.zip`;return u[t.widgetId]=n,tZ(tC.resolve(c,n),tC.resolve(c,e),e,{deleteResource:!0})}return eN.error("Invalid package directory",{directory:e}),Promise.resolve()})),await tZ(h,d,e),process.env.BUILD_VERSION){let e=tC.resolve(r,eL),t=tC.resolve(e,s);tQ.mkdirSync(e),tQ.mkdirSync(t),tQ.cpSync(c,t,{recursive:!0})}return eN.success("Deploy package archived",{destination:h}),{resource:h,fileNames:u}}catch(e){throw Error(`ERROR: Archive the deploy-package failed. ${e}`)}}(nO=nk||(nk={})).NORMAL="normal",nO.SELF_BUILT_CREATE="selfBuiltCreate",nO.SELF_BUILT_PUBLISH="selfBuiltPublish",nO.SELF_BUILT_CHECK_STATUS="selfBuiltCheckStatus",nO.SELF_BUILT_STOP="selfBuiltStop",nO.SELF_BUILT_ROLLBACK="selfBuiltRollback";let t2={NORMAL:nk.NORMAL,SELF_BUILT_CREATE:nk.SELF_BUILT_CREATE,SELF_BUILT_PUBLISH:nk.SELF_BUILT_PUBLISH,SELF_BUILT_CHECK_STATUS:nk.SELF_BUILT_CHECK_STATUS,SELF_BUILT_STOP:nk.SELF_BUILT_STOP,SELF_BUILT_ROLLBACK:nk.SELF_BUILT_ROLLBACK};function t3(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 t4(e,t){let[n]=(t??e).split(/[?#]/,1),r=n.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"");return r?`/${r}`:"/"}function t9(e,t,n){let r=t4(t).slice(1);return`${e}/${r}/${n}`}function t5(e,...t){return F(e,...t,(e,t,n)=>Array.isArray(e)?e.concat(t):Buffer.isBuffer(t)?t:void 0)}let t8=(e,t)=>tC.relative(e,t).replaceAll(tC.sep,"/");class t6{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=tY.dirname(this._filename);(0,tz.existsSync)(t)||(0,tz.mkdirSync)(t,{recursive:!0}),(0,tz.writeFileSync)(this._filename,this.toString(),e)}return this._filename}}function t7(e,t,n=!1,r=!1){return Object.keys(e).reduce((a,o)=>{let{filename:i,isVirtualFile:s,isSpecial:l}=e[o];if(s||l)return a;let p=`${eq}${tC.sep}${o}${tC.extname(i)}`,d=t8(tC.join(t,p,".."),i),c=eO(t),u=n?"defineWidget":"definePage";return a[o]=new t6(p),a[o].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"}]}),a[o].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 d,rspack as c}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_node_timers_promises_namespaceObject as _,core_namespaceObject as v,external_node_process_namespaceObject as w,external_better_opn_namespaceObject as S,promises_namespaceObject as E}from"./7945.js";import{schemas_number as x,schemas_enum as A,McpServer as T,unknown as C,dist_esm as I,schemas_string as P,schemas_object as O,createMcpHandler as D,pluginReactAlias as k,schemas_boolean as $,toNodeHandler as R,lodash_es_get as N,lodash_es_merge as L,schemas_array as M,record as j,getWebSdkDebuggerDistPath as B,eraseLines as U,lodash_es_mergeWith as F,pluginExternalBundle as H}from"./7417.js";import{external_node_module_namespaceObject as W}from"./3551.js";import{parseDebugScene as V,isRecord as G,getDebugSceneVariableEntries as q,BoxType as J,normalizeHttpEndpoint as K,parseSandboxSimulatorToolCallEvent as z,TitleType as Y,RenderType as X,AUTH_META as Z,normalizeWidgetSourceEntry as Q,resolveDebugScene as ee,execaCommand as et,APP_DEVELOPER_ORIGIN as en}from"./8981.js";import{walk_simple as er}from"./7526.js";import"./4525.js";import"./yaml.js";import{VIRTUAL_INJECTED_FILE as eo,DEPLOY_PACKAGE as ei,getPPEEnvironmentHeader as ea,deployLogger as es,VIRTUAL_INJECTED_STYLE_FILE as el,CONVENTIONAL_FILE_NAME_PRIVACY as ep,isExternalBundleDisabled as ed,isInternal as ec,isDebugMode as eu,ENTRY_FILE_TSX as em,configLogger as eh,loggers_buildLogger as ef,isAppTemplateJsDisabled as eg,CONVENTIONAL_FILE_NAME_LOGIN as ey,MANIFEST_FILE as eb,resolveCachedLoginCookie as e_,resolveWebDebuggerMcpEndpoint as ev,ENTRY_FILE_TS as ew,APP_PACKAGE_NAME as eS,MANIFEST_SIGN_FILE as eE,VIRTUAL_INJECTED_STYLE_CONTENT as ex,isDebugDriverName as eA,loadAppConfig as eT,CONVENTIONAL_DIR_NAME_WIDGET as eC,getErrorMessage as eI,FRAMEWORK_REACT_EXTERNAL_LIBRARY_NAMES as eP,resolveFrameworkPackage as eO,command_ECommand as eD,AI_MANIFEST as ek,CLIENT_TOOL_RUNTIME_ENTRY_KEY as e$,isDebugLogEnabled as eR,buildLogger as eN,SCM_DEPLOY_PACKAGE_FOLDER as eL,MCP_PRIVACY_LOGIN_CARD as eM,CloudBuildLauncher as ej,requestDoubaoAppsPlatform as eB,runWithLoggerOutput as eU,resolveLoginCookie as eF,fetchDoubaoAppsPlatform as eH,resolveConfigFile as eW,logger as eV,WIDGETS as eG,TMP_DIR as eq,DebugDriverType as eJ,DEBUG_DRIVER_NAMES as eK,devServerLogger as ez,cloneNormalizedAppConfig as eY,EXPIRED_WIDGET as eX,INTERNAL_FRAMEWORK_PACKAGE as eZ,isGenerateLoginCardDisabled as eQ,Command as e0,loadConfig as e1,DEK_FILE_NAME as e2,PUBLIC_FRAMEWORK_PACKAGE as e3,getLocalAreaNetworkUrl as e4,isInternalWidgetId as e5,PRIVACY as e9,isSelfContainedBuild as e8,FRAMEWORK_PACKAGE_NAMES as e7,importConfig as e6,APP_CONFIG_NAME as te,loadDevSettings as tt,DOUBAO_APP_OUTPUT_FOLDER as tn,getFrameworkComponentsPackage as tr,getSigningEncryptionOptions as to,getRequestPPELane as ti,getLocalAreaNetworkAddress as ta,getFrameworkApiPackage as ts}from"./6427.js";import tl from"./inquirer.js";import{source as tp,TeaUploader as td}from"./3688.js";import{wrapper as tc}from"./wrapper.js";import{create as tu}from"./@byted-doubao-apps/create.js";f.add({"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11._f1ff5025b08d10e5d2b82ef6fc84d557/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-bootstrap.js"(e,t,n){e.exports=n.p+"static/assets/web-view-proxy-bootstrap.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11._f1ff5025b08d10e5d2b82ef6fc84d557/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.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11._f1ff5025b08d10e5d2b82ef6fc84d557/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.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11.3_@lynx-js+t_74cfcecd4de87dca5f35abdf10f99dcc/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"}});class tm{}function th(e,t=3e3){return et(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===eS.DOUBAO||t===eS.PLAYGROUND)&&(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 tv(){let e=await t_();if(e.length>1){let{device:t}=await tl.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 tm{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,eS.DOUBAO);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,eS.DOUBAO)!==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}`;eu()&&console.log(tp.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}'`;eu()&&console.log(tp.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}'`;eu()&&console.log(tp.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}`;eu()&&console.log(tp.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}'`;eu()&&console.log(tp.dim(`adb -s ${this.deviceId} ${o}`)),await tf(this.deviceId,o)}}class tS extends tm{async load(e){}async openPage(e){}async openPageUrl(e){}async pushWidget(e){}async callTool(e){}}class tE{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){ez.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 tx extends tm{server;constructor(){super(),this.server=new tE({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 tA(t={}){if(!e){let n=t.debugDriver??eJ.Adb;if(!eA(n))throw Error(`无效的调试驱动 "${n}",可选值:${eK.join(", ")}。`);switch(n){case eJ.Hdt:e=new tx;break;case eJ.DevTools:e=new tS;break;case eJ.Adb:{let n=t.deviceId??await tv();n&&(e=new tw(n,{skipForegroundAppWatch:t.skipAdbForegroundAppWatch}));break}default:throw Error(`无效的调试驱动 "${n}",可选值:${eK.join(", ")}。`)}}return e}let tT=f("node:fs/promises"),tC=f("node:path");async function tI(e){let t=(0,tC.join)(e,"debug-scene");try{return(await (0,tT.readdir)(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>({name:e.name.slice(0,-5),path:(0,tC.join)(t,e.name)}))}catch{return[]}}async function tP(e){try{return V(JSON.parse(await (0,tT.readFile)(e,"utf8")))}catch(t){return eu()&&console.warn(`[DoubaoApps] 加载调试场景 "${e}" 失败:${t instanceof Error?t.message:String(t)}`),null}}async function tO(e,t){let{matchedScene:n,appId:r,driver:o,variables:i}=e,a=t??await tP(n.path);if(!a)return;let s=ee(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 tD="https://lf3-static.bytednsdoc.com/obj/eden-cn/777eh7nuptpfnuhd/default.svg";function tk(e){if("string"==typeof e){let t=e.length>0?e:tD;return{"1x":t,"2x":t,"3x":t}}return{"1x":e?.["1x"]||tD,"2x":e?.["2x"]||tD,"3x":e?.["3x"]||tD}}function t$(e){let t=Object.keys(e);return t.sort(),t.reduce((t,n)=>(t[n]=e[n],t),{})}class tR{get metadata(){return this._metadata}toString(){return JSON.stringify(this._metadata,null,2)}}class tN extends tR{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,chat:r.chat}}}class tL extends tR{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?J.FULL_BOX:J.INBOX,titleType:o.titleType?tL.TITLE_TYPE_MAP[o.titleType]:void 0}}}tL.TITLE_TYPE_MAP={none:2,normal:0,float:1};class tM extends tR{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 tj extends tR{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,chat:this._metadata.chat,keywords:this._metadata.keywords,icons:tk(this._metadata.icons),digest:t,prop:"",tools:Object.values(e).map(e=>e.toManifest()),appRuntimeEntry:n,appRuntimeType:r}}}class tB{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 tj(e)}addToolMeta(e,t){this.metadata.tools[e]?this.metadata.tools[e].assign(t):this.metadata.tools[e]=new tM(t)}addPageMeta(e,t){this.metadata.pages[e]?this.metadata.pages[e].assign(t):this.metadata.pages[e]=new tN(t)}addWidgetMeta(e,t){this.metadata.widgets[e]?this.metadata.widgets[e].assign(t):this.metadata.widgets[e]=new tL(t)}getData(){let{tools:e,pages:t,widgets:n,app:r}=this.metadata;return{app:r.metadata??{},tools:t$(Object.fromEntries(Object.keys(e).map(t=>[t,e[t].metadata]))),pages:t$(Object.fromEntries(Object.keys(t).map(e=>[e,t[e].metadata]))),widgets:t$(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:t$(e),pages:t$(t),widgets:t$(n)}}clearData(){this.metadata={app:{},pages:{},tools:{},widgets:{}}}}let tU={MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE:1e3,MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY:2e3,MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE:3e3},tF={BEFORE_BUILD_STAGE_CREATE_CONFIG:1e3,BEFORE_BUILD_STAGE_MODIFY_BUILD_CONFIG:2e3,BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG:3e3},tH={COLLECT_METADATA_STAGE_START:1e3,COLLECT_METADATA_STAGE_PROCESS_METADATA:2e3,COLLECT_METADATA_STAGE_OPTIMIZE:3e3,COLLECT_METADATA_STAGE_FINISH:4e3},tW={...tU,...tF,...tH},tV={...tU,...tF,...tH};(nP=nD||(nD={}))[nP.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS=1e3]="BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS",nP[nP.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS=2e3]="BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS",nP[nP.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=3e3]="BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS",nP[nP.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS=3999]="BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS",nP[nP.AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS=4e3]="AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS",nP[nP.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS=5e3]="AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS",nP[nP.AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=6e3]="AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS";let tG=f("../../../node_modules/.pnpm/tapable@2.2.1/node_modules/tapable/lib/index.js");function tq(){return{modifyEnvironment:new tG.FU(["arg0"]),modifyEntryOption:new tG.BD(["arg0"]),beforeBuild:new tG.FU(["arg0"]),collectMetaData:new tG.FU(["arg0"]),build:new tG.FU(["arg0"]),afterBuild:new tG.FU(["arg0"])}}function tJ({hooks:e,stages:t}){return{hooks:e,...t}}class tK{constructor(e,t=[]){this.plugins=[],this.api={...{worker:tJ({hooks:tq(),stages:tV}),view:tJ({hooks:tq(),stages:tW}),assets:tJ({hooks:{beforeEmit:new tG.FU(["arg0"]),afterEmit:new tG.FU(["arg0"])},stages:nD}),deploy:tJ({hooks:{beforeDeploy:new tG.FU(["arg0"]),deploy:new tG.FU(["arg0"]),afterDeploy:new tG.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=N(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 tz=f("fs"),tY=f("path"),tX=f("../../../node_modules/.pnpm/archiver@7.0.1/node_modules/archiver/index.js");function tZ(e,t,n,r){return new Promise((o,i)=>{let a=tz.createWriteStream(e),s=tX("zip",{zlib:{level:9}});s.pipe(a),s.directory(t,n??!1),a.on("close",()=>{r?.deleteResource&&tz.rmSync(t,{recursive:!0}),eN.success("Compiled artifacts packaged",{file:tY.basename(e)}),o("")}),s.on("error",e=>{eN.error("An error occurred during packaging",{error:e}),i(e)}),s.finalize()})}let tQ=f("node:fs");async function t0({channelName:e,manifest:t,rootPath:n}){let r=tC.resolve(n),o=tC.resolve(n,tn),i=tC.resolve(o,t.packageName),a={outputFolder:o,transformFolder:i,manifest:t};tQ.existsSync(o)&&tQ.rmSync(o,{recursive:!0}),tQ.mkdirSync(o),tQ.mkdirSync(i),function(e,t){let{transformFolder:n,manifest:r}=t,{applet:o,widgets:i}=r,a=tC.resolve(e,"base"),s=tC.resolve(n,"base");tQ.mkdirSync(s),tQ.cpSync(a,s,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0});let l=tC.resolve(e,o.appletId),p=tC.resolve(n,o.appletId);tQ.mkdirSync(p),o.pages.length>0&&tQ.cpSync(l,p,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0}),i.forEach(t=>{let r=tC.resolve(e,t.widgetId),o=tC.resolve(n,t.widgetId);tQ.mkdirSync(o),tQ.cpSync(r,o,{filter:e=>null===e.match(/(.)*\.map$/),recursive:!0})});let d=tC.resolve(e,`web_${r.versionCode}`);if(tQ.existsSync(d)){let e=tC.resolve(n,`web_${r.versionCode}`);tQ.cpSync(d,e,{recursive:!0})}}(r,a);let s=await t1(e,a);return eN.debug("Package resource created",{packageResource:s}),{packageResource:s}}async function t1(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=tC.resolve(r,ei),d=tC.resolve(p,e),c=tC.resolve(d,s);tQ.mkdirSync(p),tQ.mkdirSync(d),tQ.mkdirSync(c),tQ.cpSync(o,c,{recursive:!0});let u={},m=tQ.readdirSync(c).filter(e=>tQ.statSync(tC.resolve(c,e)).isDirectory()),h=tC.resolve(p,`${e}.zip`);try{if(await Promise.all(m.map(e=>{if(e===`web_${l}`)return Promise.resolve();if("base"===e)return tZ(tC.resolve(c,`${e}_${l}.zip`),tC.resolve(c,e),e,{deleteResource:!0});if(e===i.appletId){let t=`${e}_${i.digest}.zip`;return u[i.appletId]=t,tZ(tC.resolve(c,t),tC.resolve(c,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,tZ(tC.resolve(c,n),tC.resolve(c,e),e,{deleteResource:!0})}return eN.error("Invalid package directory",{directory:e}),Promise.resolve()})),await tZ(h,d,e),process.env.BUILD_VERSION){let e=tC.resolve(r,eL),t=tC.resolve(e,s);tQ.mkdirSync(e),tQ.mkdirSync(t),tQ.cpSync(c,t,{recursive:!0})}return eN.success("Deploy package archived",{destination:h}),{resource:h,fileNames:u}}catch(e){throw Error(`ERROR: Archive the deploy-package failed. ${e}`)}}(nO=nk||(nk={})).NORMAL="normal",nO.SELF_BUILT_CREATE="selfBuiltCreate",nO.SELF_BUILT_PUBLISH="selfBuiltPublish",nO.SELF_BUILT_CHECK_STATUS="selfBuiltCheckStatus",nO.SELF_BUILT_STOP="selfBuiltStop",nO.SELF_BUILT_ROLLBACK="selfBuiltRollback";let t2={NORMAL:nk.NORMAL,SELF_BUILT_CREATE:nk.SELF_BUILT_CREATE,SELF_BUILT_PUBLISH:nk.SELF_BUILT_PUBLISH,SELF_BUILT_CHECK_STATUS:nk.SELF_BUILT_CHECK_STATUS,SELF_BUILT_STOP:nk.SELF_BUILT_STOP,SELF_BUILT_ROLLBACK:nk.SELF_BUILT_ROLLBACK};function t3(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 t4(e,t){let[n]=(t??e).split(/[?#]/,1),r=n.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"");return r?`/${r}`:"/"}function t5(e,t,n){let r=t4(t).slice(1);return`${e}/${r}/${n}`}function t9(e,...t){return F(e,...t,(e,t,n)=>Array.isArray(e)?e.concat(t):Buffer.isBuffer(t)?t:void 0)}let t8=(e,t)=>tC.relative(e,t).replaceAll(tC.sep,"/");class t7{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=tY.dirname(this._filename);(0,tz.existsSync)(t)||(0,tz.mkdirSync)(t,{recursive:!0}),(0,tz.writeFileSync)(this._filename,this.toString(),e)}return this._filename}}function t6(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=`${eq}${tC.sep}${i}${tC.extname(a)}`,d=t8(tC.join(t,p,".."),a),c=eO(t),u=n?"defineWidget":"definePage";return o[i]=new t7(p),o[i].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"}]}),o[i].appendContent(`
|
|
3
3
|
const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
|
|
4
4
|
|
|
5
5
|
const View = ${u}({
|
|
@@ -14,54 +14,54 @@ root.render(<FC />);`,r?`
|
|
|
14
14
|
if (import.meta.webpackHot) {
|
|
15
15
|
import.meta.webpackHot.accept()
|
|
16
16
|
}
|
|
17
|
-
`:""),
|
|
18
|
-
`;i.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 no(e){let t=tC.posix.basename(e);return"background.js"===t||"main-thread.js"===t||/^background\.[^/]+\.js$/.test(t)||/^main-thread\.[^/]+\.js$/.test(t)}function ni(e){let t=e.replaceAll("\\","/");return t.split("/").some(e=>e.startsWith("__doubao_web__"))&&no(t)}class ns{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(ns.name,t=>{t.hooks.processAssets.tapPromise({name:ns.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{await na({compiler:e,compilation:t,assets:n,...this.options})})})}}let nl="index.web.bundle",np="base/app.web.bundle",nd="base/client-tool/index.web.bundle";function nc(e){return`__doubao_web__${e.replaceAll("\\","/").replaceAll("/","__")}`}function nu(e,t,n){return t[n]?.id??t3(n,e[n]?.folderName)}function nm(e){return!!e?.internal}function nh(e={},t={},n="configured"){return"all"===n?e:function(e={},t={}){return Object.fromEntries(Object.entries(e).filter(([e,n])=>nm(n)||!!t[e]?.web))}(e,t)}class nf{apply(e){e.hooks.thisCompilation.tap(nf.name,t=>{t.hooks.processAssets.tapPromise({name:nf.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{let n=ng(t,"app"),r=n?t.getAsset(n):void 0;if(!n||!r)throw Error("Worker entry asset was not emitted.");await ny(t,e,n,np);let a=ng(t,e$);a&&await ny(t,e,a,nd)})})}}function ng(e,t){let n=e.entrypoints.get(t)?.getEntrypointChunk();return[...n?.files??[]].find(t=>t.endsWith(".js")&&!e.getAsset(t)?.info?.hotModuleReplacement)}async function ny(e,t,n,r){let a=e.getAsset(n);if(!a)throw Error(`Worker entry asset was not emitted: ${n}`);e.emitAsset(r,new t.webpack.sources.RawSource(await nb(a.source.source().toString())));let o=e.getAsset(`${n}.map`);o&&e.emitAsset(`${r}.map`,o.source,o.info),e.deleteAsset(n)}async function nb(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 n_{options;recordNativeAppAssetPaths;constructor(e,t){this.options=e,this.recordNativeAppAssetPaths=t}apply(e){new e.webpack.experiments.VirtualModulesPlugin({[ea]:"",[el]:ex,...Object.fromEntries(Object.entries(this.options.entry).map(([,e])=>[e.filename,e.toString()]))}).apply(e),e.hooks.make.tapPromise(n_.name,async()=>{await this.options.pluginSystem.callWorkerHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(n_.name,t=>{t.hooks.optimizeTree.tapPromise(n_.name,async()=>{await this.options.pluginSystem.callWorkerHooks("build",{metadata:this.options.context.metadata,fileDependencies:t.fileDependencies})}),t.hooks.processAssets.tapPromise({name:n_.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{var r,a,o;let i,s=ng(t,"app");if(!s||!t.getAsset(s))throw Error("Worker entry asset was not emitted.");this.recordNativeAppAssetPaths&&(r=t,a=this.options.context,o=s,a.setAppAssetPath(o),i=`${o}.map`,r.getAsset(i)&&a.setAppMapAssetPath(i)),await na({compiler:e,compilation:t,assets:n,metadata:this.options.context.metadata,resolveAppInfo:()=>this.options.context.resolveAppInfo(),shouldInjectAsset:e=>e===s})})}),e.hooks.done.tapPromise(n_.name,async e=>{await this.options.pluginSystem.callWorkerHooks("afterBuild",{stats:e})})}}let nv=f("node:os"),nw=f("process"),nS=f("../../../node_modules/.pnpm/@lynx-js+type-config@4.1.3/node_modules/@lynx-js/type-config/index.js");var nE,nx,nA,nT,nC,nI,nP,nO,nD,nk,n$,nR,nN,nL,nM,nj,nB={},nU={};function nF(e){var t=nU[e];if(void 0!==t)return t.exports;var n=nU[e]={exports:{}};return nB[e](n,n.exports,nF),n.exports}nF.m=nB,nF.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return nF.d(t,{a:t}),t},nF.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)nF.o(t,r)&&!nF.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},nF.add=function(e){Object.assign(nF.m,e)},nF.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),nF.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 a=t.length,o=-1;++o<a;){var i=t[o];i in e&&(n[i]=e[i])}return n}},"../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js"(e){let t=nw||{},n=t.argv||[],r=t.env||{},a=!(r.NO_COLOR||n.includes("--no-color"))&&(!!r.FORCE_COLOR||n.includes("--color")||"win32"===t.platform||(t.stdout||{}).isTTY&&"dumb"!==r.TERM||!!r.CI),o=(e,t,n=e)=>r=>{let a=""+r,o=a.indexOf(t,e.length);return~o?e+i(a,t,n,o)+t:e+a+t},i=(e,t,n,r)=>{let a="",o=0;do a+=e.substring(o,r)+n,o=r+t.length,r=e.indexOf(t,o);while(~r);return a+e.substring(o)},s=(e=a)=>{let t=e?o:()=>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 nH=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 nW=globalThis.navigator?.userAgentData?.platform;function nV(e,t=globalThis.Deno?globalThis.Deno.args:w.argv){let n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),a=t.indexOf("--");return -1!==r&&(-1===a||r<a)}"macOS"===nW||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform,"Windows"===nW||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform,"Linux"===nW||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform,"iOS"===nW||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),"Android"===nW||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform,nH||w.env.TERM_PROGRAM,nH||w.platform,nH||w.cwd;let{env:nG}=w;function nq(e,n={}){var r;return 0!==(r=function(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let a=function(){if(!("FORCE_COLOR"in nG))return;if("true"===nG.FORCE_COLOR)return 1;if("false"===nG.FORCE_COLOR)return 0;if(0===nG.FORCE_COLOR.length)return 1;let e=Math.min(Number.parseInt(nG.FORCE_COLOR,10),3);if([0,1,2,3].includes(e))return e}();void 0!==a&&(t=a);let o=r?t:a;if(0===o)return 0;if(r){if(nV("color=16m")||nV("color=full")||nV("color=truecolor"))return 3;if(nV("color=256"))return 2}if("TF_BUILD"in nG&&"AGENT_NAME"in nG)return 1;if(e&&!n&&void 0===o)return 0;let i=o||0;if("dumb"===nG.TERM)return i;if("win32"===w.platform){let e=nv.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in nG)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(e=>e in nG)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(e=>e in nG)||"codeship"===nG.CI_NAME?1:i;if("TEAMCITY_VERSION"in nG)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(nG.TEAMCITY_VERSION);if("truecolor"===nG.COLORTERM||"xterm-kitty"===nG.TERM||"xterm-ghostty"===nG.TERM||"wezterm"===nG.TERM)return 3;if("TERM_PROGRAM"in nG){let e=Number.parseInt((nG.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(nG.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(nG.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(nG.TERM)||"COLORTERM"in nG?1:i}(e,{streamIsTTY:e&&e.isTTY,...n}))&&{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function nJ(e,t=nw.argv){let n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),a=t.indexOf("--");return -1!==r&&(-1===a||r<a)}function nK(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 nz(e){let{CI:t,CURSOR_TRACE_ID:n,FORCE_HYPERLINK:r,NETLIFY:a,TEAMCITY_VERSION:o,TERM_PROGRAM:i,TERM_PROGRAM_VERSION:s,VTE_VERSION:l,TERM:p}=w.env;if(r)return!(r.length>0&&0===Number.parseInt(r,10));if(nJ("no-hyperlink")||nJ("no-hyperlinks")||nJ("hyperlink=false")||nJ("hyperlink=never"))return!1;if(nJ("hyperlink=true")||nJ("hyperlink=always")||a)return!0;if(!nq(e)||e&&!e.isTTY)return!1;if("WT_SESSION"in w.env)return!0;if("win32"===w.platform||t||o)return!1;if(i){let e=nK(s);switch(i){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=nK(l);return e.major>0||e.minor>=50}switch(p){case"alacritty":case"xterm-kitty":return!0}return!1}nV("no-color")||nV("no-colors")||nV("color=false")||nV("color=never")?t=0:(nV("color")||nV("colors")||nV("color=true")||nV("color=always"))&&(t=1),nq({isTTY:y.isatty(1)}),nq({isTTY:y.isatty(2)});let nY={stdout:nz(w.stdout),stderr:nz(w.stderr)};function nX(e,t,{target:n="stdout",...r}={}){return nY[n]?["\x1b]","8",";",";",t,"\x07",e,"\x1b]","8",";",";","\x07"].join(""):!1===r.fallback?e:"function"==typeof r.fallback?r.fallback(e,t):`${e} ${t}`}nX.isSupported=nY.stdout,nX.stderr=(e,t,n={})=>nX(e,t,{target:"stderr",...n}),nX.stderr.isSupported=nY.stderr;let nZ=nF("../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js");var nQ=nF.n(nZ);class n0{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,...nQ()(t,this.options.compilerOptionsKeys)},e.encodeData.sourceContent.config={...e.encodeData.sourceContent.config,...nQ()(t,this.options.configKeys)},e})})}}let n1=e=>n2.has(e),n2=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"]);(nE=n$||(n$={}))[nE.Start=0]="Start",nE[nE.Property=1]="Property",nE[nE.StringKey=2]="StringKey",nE[nE.NumberKey=3]="NumberKey";let n3=nF("../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js");var n4=nF.n(n3);let n9=Object.assign(i=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=a=[],o=(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\`.
|
|
17
|
+
`:""),o},{})}let ne=f("module"),nt="doubao:plugin:taro";class nn extends t7{toString(){return this.contents.join("\n").trim()}}async function nr({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 nn(`.${tC.sep}app.js`,"")}});return{entry:r}}async function no({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.${ek} = ${JSON.stringify({package:l?.appKey||s.appId,appId:l?.appKey||s.appId,name:l?.appName||s.name,icons:l?.iconUrl?tk(l.iconUrl):s.icons})};
|
|
18
|
+
`;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 ni(e){let t=tC.posix.basename(e);return"background.js"===t||"main-thread.js"===t||/^background\.[^/]+\.js$/.test(t)||/^main-thread\.[^/]+\.js$/.test(t)}function na(e){let t=e.replaceAll("\\","/");return t.split("/").some(e=>e.startsWith("__doubao_web__"))&&ni(t)}class ns{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(ns.name,t=>{t.hooks.processAssets.tapPromise({name:ns.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{await no({compiler:e,compilation:t,assets:n,...this.options})})})}}let nl="index.web.bundle",np="base/app.web.bundle",nd="base/client-tool/index.web.bundle";function nc(e){return`__doubao_web__${e.replaceAll("\\","/").replaceAll("/","__")}`}function nu(e,t,n){return t[n]?.id??t3(n,e[n]?.folderName)}function nm(e){return!!e?.internal}function nh(e={},t={},n="configured"){return"all"===n?e:function(e={},t={}){return Object.fromEntries(Object.entries(e).filter(([e,n])=>nm(n)||!!t[e]?.web))}(e,t)}class nf{apply(e){e.hooks.thisCompilation.tap(nf.name,t=>{t.hooks.processAssets.tapPromise({name:nf.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{let n=ng(t,"app"),r=n?t.getAsset(n):void 0;if(!n||!r)throw Error("Worker entry asset was not emitted.");await ny(t,e,n,np);let o=ng(t,e$);o&&await ny(t,e,o,nd)})})}}function ng(e,t){let n=e.entrypoints.get(t)?.getEntrypointChunk();return[...n?.files??[]].find(t=>t.endsWith(".js")&&!e.getAsset(t)?.info?.hotModuleReplacement)}async function ny(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 nb(o.source.source().toString())));let i=e.getAsset(`${n}.map`);i&&e.emitAsset(`${r}.map`,i.source,i.info),e.deleteAsset(n)}async function nb(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 n_{options;recordNativeAppAssetPaths;constructor(e,t){this.options=e,this.recordNativeAppAssetPaths=t}apply(e){new e.webpack.experiments.VirtualModulesPlugin({[eo]:"",[el]:ex,...Object.fromEntries(Object.entries(this.options.entry).map(([,e])=>[e.filename,e.toString()]))}).apply(e),e.hooks.make.tapPromise(n_.name,async()=>{await this.options.pluginSystem.callWorkerHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(n_.name,t=>{t.hooks.optimizeTree.tapPromise(n_.name,async()=>{await this.options.pluginSystem.callWorkerHooks("build",{metadata:this.options.context.metadata,fileDependencies:t.fileDependencies})}),t.hooks.processAssets.tapPromise({name:n_.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async n=>{var r,o,i;let a,s=ng(t,"app");if(!s||!t.getAsset(s))throw Error("Worker entry asset was not emitted.");this.recordNativeAppAssetPaths&&(r=t,o=this.options.context,i=s,o.setAppAssetPath(i),a=`${i}.map`,r.getAsset(a)&&o.setAppMapAssetPath(a)),await no({compiler:e,compilation:t,assets:n,metadata:this.options.context.metadata,resolveAppInfo:()=>this.options.context.resolveAppInfo(),shouldInjectAsset:e=>e===s})})}),e.hooks.done.tapPromise(n_.name,async e=>{await this.options.pluginSystem.callWorkerHooks("afterBuild",{stats:e})})}}let nv=f("node:os"),nw=f("process"),nS=f("../../../node_modules/.pnpm/@lynx-js+type-config@4.1.3/node_modules/@lynx-js/type-config/index.js");var nE,nx,nA,nT,nC,nI,nP,nO,nD,nk,n$,nR,nN,nL,nM,nj,nB={},nU={};function nF(e){var t=nU[e];if(void 0!==t)return t.exports;var n=nU[e]={exports:{}};return nB[e](n,n.exports,nF),n.exports}nF.m=nB,nF.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return nF.d(t,{a:t}),t},nF.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)nF.o(t,r)&&!nF.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},nF.add=function(e){Object.assign(nF.m,e)},nF.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),nF.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=nw||{},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 nH=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 nW=globalThis.navigator?.userAgentData?.platform;function nV(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"===nW||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform,"Windows"===nW||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform,"Linux"===nW||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform,"iOS"===nW||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),"Android"===nW||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform,nH||w.env.TERM_PROGRAM,nH||w.platform,nH||w.cwd;let{env:nG}=w;function nq(e,n={}){var r;return 0!==(r=function(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let o=function(){if(!("FORCE_COLOR"in nG))return;if("true"===nG.FORCE_COLOR)return 1;if("false"===nG.FORCE_COLOR)return 0;if(0===nG.FORCE_COLOR.length)return 1;let e=Math.min(Number.parseInt(nG.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(nV("color=16m")||nV("color=full")||nV("color=truecolor"))return 3;if(nV("color=256"))return 2}if("TF_BUILD"in nG&&"AGENT_NAME"in nG)return 1;if(e&&!n&&void 0===i)return 0;let a=i||0;if("dumb"===nG.TERM)return a;if("win32"===w.platform){let e=nv.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in nG)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(e=>e in nG)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(e=>e in nG)||"codeship"===nG.CI_NAME?1:a;if("TEAMCITY_VERSION"in nG)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(nG.TEAMCITY_VERSION);if("truecolor"===nG.COLORTERM||"xterm-kitty"===nG.TERM||"xterm-ghostty"===nG.TERM||"wezterm"===nG.TERM)return 3;if("TERM_PROGRAM"in nG){let e=Number.parseInt((nG.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(nG.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(nG.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(nG.TERM)||"COLORTERM"in nG?1:a}(e,{streamIsTTY:e&&e.isTTY,...n}))&&{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function nJ(e,t=nw.argv){let n=e.startsWith("-")?"":1===e.length?"-":"--",r=t.indexOf(n+e),o=t.indexOf("--");return -1!==r&&(-1===o||r<o)}function nK(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 nz(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(nJ("no-hyperlink")||nJ("no-hyperlinks")||nJ("hyperlink=false")||nJ("hyperlink=never"))return!1;if(nJ("hyperlink=true")||nJ("hyperlink=always")||o)return!0;if(!nq(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=nK(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=nK(l);return e.major>0||e.minor>=50}switch(p){case"alacritty":case"xterm-kitty":return!0}return!1}nV("no-color")||nV("no-colors")||nV("color=false")||nV("color=never")?t=0:(nV("color")||nV("colors")||nV("color=true")||nV("color=always"))&&(t=1),nq({isTTY:y.isatty(1)}),nq({isTTY:y.isatty(2)});let nY={stdout:nz(w.stdout),stderr:nz(w.stderr)};function nX(e,t,{target:n="stdout",...r}={}){return nY[n]?["\x1b]","8",";",";",t,"\x07",e,"\x1b]","8",";",";","\x07"].join(""):!1===r.fallback?e:"function"==typeof r.fallback?r.fallback(e,t):`${e} ${t}`}nX.isSupported=nY.stdout,nX.stderr=(e,t,n={})=>nX(e,t,{target:"stderr",...n}),nX.stderr.isSupported=nY.stderr;let nZ=nF("../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js");var nQ=nF.n(nZ);class n0{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,...nQ()(t,this.options.compilerOptionsKeys)},e.encodeData.sourceContent.config={...e.encodeData.sourceContent.config,...nQ()(t,this.options.configKeys)},e})})}}let n1=e=>n2.has(e),n2=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"]);(nE=n$||(n$={}))[nE.Start=0]="Start",nE[nE.Property=1]="Property",nE[nE.StringKey=2]="StringKey",nE[nE.NumberKey=3]="NumberKey";let n3=nF("../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js");var n4=nF.n(n3);let n5=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\`.
|
|
19
19
|
|
|
20
|
-
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)||
|
|
20
|
+
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===n1(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.
|
|
21
21
|
|
|
22
|
-
Please remove the property next time.`})}).every(e=>e)].every(e=>e))(e,t+"",!0)||
|
|
22
|
+
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=n$.Start,o=5;for(;o<e.length-1;){let i=e[++o];if(r===n$.Property?"."===i||"["===i?(t.push({key:n}),r=n$.Start):o===e.length-1?(n+=i,t.push({key:n}),o++,r=n$.Start):n+=i:r===n$.StringKey?'"'===i?(t.push({key:JSON.parse(n+i)}),o+=2,r=n$.Start):"\\"===i?(n+=e[o],n+=e[++o]):n+=i:r===n$.NumberKey&&("]"===i?(t.push({key:Number.parseInt(n)}),o++,r=n$.Start):n+=i),r===n$.Start&&o<e.length-1){let t=e[o];if(n="","["===t)'"'===e[o+1]?(r=n$.StringKey,o++,n='"'):r=n$.NumberKey;else if("."===t)r=n$.Property;else throw Error("Unreachable: pointer points invalid character")}}if(r!==n$.Start)throw Error(`Failed to parse path: ${JSON.stringify(e)}`);return t})(e.path)}))}}}});function n9(e){let t=n5(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: \`${n4().red(t)}\``,""]:[`Invalid config on \`${n4().red(t)}\`.`,` - Expect to be ${n4().green(e)}`,` - Got: ${n4().red((r=n,Object.prototype.toString.call(r).replace(/^\[object\s+([a-z]+)\]$/i,"$1").toLowerCase()))}`,""]})).join("\n"))}let n8={"lynx:react":"@lynx-js/react-rsbuild-plugin"};function n7(e){return e?.type==="Identifier"}function n6(e){return e?.type==="StringLiteral"}function re(e){return e?.type==="NumericLiteral"}function rt(e){return e?.type==="BooleanLiteral"}function rn(e){return e?.type==="ObjectExpression"}function rr(e){return e?.type==="ArrayExpression"}function ro(e){return e?.type==="KeyValueProperty"}let ri=e=>{if(rn(e)){let t={};for(let n of e.properties){if(n?.type==="SpreadElement"||!ro(n))return null;let{key:e,value:r}=n;if(!n7(e)&&!n6(e))return null;let o=e.value;rn(r)||rr(r)?t[o]=ri(r):n6(r)||re(r)||rt(r)?t[o]=r.value:n7(r)&&(t[o]=r)}return t}if(rr(e)){let t=[];for(let n of e.elements){if(!n||n.spread)return null;let e=n.expression;rn(e)||rr(e)?t.push(ri(e)):n6(e)||re(e)||rt(e)?t.push(e.value):n7(e)&&t.push(e)}return t}},ra=f("../../../node_modules/.pnpm/@swc+core@1.15.11_@swc+helpers@0.5.23/node_modules/@swc/core/index.js");function rs(e,t,n){let{widgets:r,pages:o,collector:i,define:a,onDeprecatedAIMeta:s}=n,l=o[t],p=r[t],d=e;return(l||p)&&(a&&Object.keys(a).length>0&&(d=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)),er((0,ra.parseSync)(d,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(n7(e.callee)&&["defineWidget","definePage"].includes(e.callee.value)){let n=e.arguments[0]?.expression;if(rn(n)){for(let e of n.properties)if(ro(e)&&n7(e.key)&&"aiMeta"===e.key.value){let n=ri(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))}}}n7(e.callee)&&e.callee.value in Z&&(p&&i.addWidgetMeta(p,Z[e.callee.value]),l&&i.addPageMeta(l,Z[e.callee.value]))}})),e}let rl=/[/\\]/;function rp(e,t){t.forEach(([t,{id:n}])=>{if(n&&rl.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 rd({pages:e,widgets:t,entries:n,collector:r,normalizedAppConfig:o,define:i}){let a=new tB,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),eh.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,d=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?rs(r.toString(),e,l):void eh.warn("Cannot find virtual file",{file:t})}return rs(tz.readFileSync(e,"utf-8"),e,l)})).catch(e=>{eh.error("Failed to collect view metadata",{error:e})});let c=a.getData(),u=Z.defineLoginPage,m=t4("",u.path),h=Object.entries(e).map(([e,t])=>{let n=c.pages[e],{web:r,...o}=p[e]??{},i=n?.path,a=t.isLoginPage||void 0!==i&&t4(e,i)===m;return[e,{id:t3(e,t.folderName),...n,...o,...a?u:{},path:t4(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(", ")}`);rp("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:t3(e,t.folderName),...c.widgets[e],...r}]});rp("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:
|
|
23
23
|
${t.map(e=>`- ${e}`).join("\n")}`).join("\n\n");throw Error(`${r}
|
|
24
24
|
|
|
25
|
-
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 rc=f("os"),ru=`base/${e2}`;async function rm({encryption:e}){let t=tz.mkdtempSync(tY.join(rc.tmpdir(),"doubao-keystore-")),n=tY.join(t,e2);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 tz.readFileSync(n)}finally{tz.rmSync(t,{recursive:!0,force:!0})}}let rh=f("../../../node_modules/.pnpm/@byted-lynx+tasm@4.4.40_debug@4.4.3/node_modules/@byted-lynx/tasm/index.js");class rf{options;isGenerateKeystore=!1;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(rf.name,t=>{t.hooks.processAssets.tapPromise({name:rf.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(),
|
|
25
|
+
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 rc=f("os"),ru=`base/${e2}`;async function rm({encryption:e}){let t=tz.mkdtempSync(tY.join(rc.tmpdir(),"doubao-keystore-")),n=tY.join(t,e2);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 tz.readFileSync(n)}finally{tz.rmSync(t,{recursive:!0,force:!0})}}let rh=f("../../../node_modules/.pnpm/@byted-lynx+tasm@4.4.40_debug@4.4.3/node_modules/@byted-lynx/tasm/index.js");class rf{options;isGenerateKeystore=!1;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(rf.name,t=>{t.hooks.processAssets.tapPromise({name:rf.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(),o=ng(t,e$);for(let e of[r,o].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(ru)?t.updateAsset(ru,e):t.emitAsset(ru,e)}eu()&&e===r&&t.emitAsset(`${tY.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=t9(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 rm({encryption:{...n.encryption}})}):{buffer:i,encodeOptions:r,debugInfo:a}}let i=(0,rh.getEncodeMode)(),{buffer:a}=await i(r);return{buffer:a,encodeOptions:r}}}function rg(e,t,r,o,i){let a=!1;return{name:rg.name,apply(s){let l=new s.webpack.experiments.VirtualModulesPlugin;l.apply(s),s.hooks.thisCompilation.tap(rg.name,()=>{Object.keys(r).forEach(e=>{l.writeModule(r[e].filename,r[e].toString())})}),s.hooks.thisCompilation.tap(rg.name,r=>{let l,p=()=>{void 0!==l&&i?.(Math.max(0,Date.now()-l))},d=e.getLynxTemplatePluginHooks(r);d.beforeEncode.tapPromise(rg.name,async e=>(l??=Date.now(),e.encodeData.sourceContent.config=L({},e.encodeData.sourceContent.config,{mapContainerType:1,trailNewImage:!0}),e)),d.encode.tapPromise({name:rg.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(),d=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=tC.posix.basename(n);return e.widgets[`widgets/${o}`]?.id??e.pages[`pages/${o}`]?.path}(o,e.intermediate),c=o.app.appId,u=t9(l,{signing:{extra_config:{app_id:c,bundle_id:d}},encryption:{salt:c}}),{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 rm({encryption:{...u.encryption}}),t=new s.webpack.sources.RawSource(e,!1);r.getAsset(ru)?r.updateAsset(ru,t):r.emitAsset(ru,t)}return p(),{buffer:m,debugInfo:h}}let{buffer:d,lepus_debug:c}=await (n??=new h({filename:new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11.3_@lynx-js+t_74cfcecd4de87dca5f35abdf10f99dcc/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"),f.b).href,maxThreads:(0,nv.availableParallelism)()})).run({encodeOptions:i});return p(),{buffer:Buffer.from(d),debugInfo:c}})}),s.hooks.failed.tap(rg.name,e=>{ef.error("Failed to bundle template",{error:e})})}}}class ry{static _instance;listeners=[];stdinListener;nextIndex=0;static get instance(){return ry._instance??=new ry}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 rb(e){if(!(e instanceof Error&&"ExitPromptError"===e.name))throw e}function r_(e){ry.instance.stop(),e().catch(rb).finally(()=>ry.instance.start())}let rv=eV.child("simulator"),rw=f("node:http"),rS={"Cross-Origin-Opener-Policy":"same-origin","Cross-Origin-Embedder-Policy":"credentialless"},rE=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),rx=new Set([...rE,"cookie","host","origin","referer"]),rA=/authorization|cookie|token|secret|password|credential|private[-_]?key|(?:^|[-_])api[-_]?key(?:$|[-_])|(?:^|[-_])dek(?:$|[-_])/i,rT="X-DBX-Sandbox-Session-ID",rC="x-tt-logid";function rI(e){try{return new URL(e.url??"/","http://localhost")}catch{return}}function rP(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 rO(e,t,n={}){let r={};for(let[t,n]of Object.entries(e))void 0===n||rx.has(t.toLowerCase())||(r[t]=n);return{...r,...n,host:t.host}}function rD(e,t=[]){let n={};for(let[t,r]of Object.entries(e))void 0===r||rE.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 rk(e,t=[]){let n=rD(Object.fromEntries(e),t);return delete n["content-encoding"],delete n["content-length"],n}function r$(e,t={}){Object.entries({...rS,...t}).forEach(([t,n])=>{void 0!==n&&e.setHeader(t,n)})}function rR(e,t,n,r){r$(e,r),e.writeHead(t,{"Content-Type":"text/plain; charset=utf-8"}),e.end(n)}function rN(e,t,n,r){let o=JSON.stringify(n);r$(e,r),e.writeHead(t,{"Content-Length":Buffer.byteLength(o),"Content-Type":"application/json; charset=utf-8"}),e.end(o)}function rL(e,t,n){return new Promise((r,o)=>{let i=[],a=0,s=!1;e.on("data",r=>{if(s)return;let l=Uint8Array.from(Buffer.isBuffer(r)?r:Buffer.from(r));if((a+=l.byteLength)>n){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.push(l)}),e.once("end",()=>{if(s)return;s=!0;let e=new Uint8Array(a),t=0;for(let n of i)e.set(n,t),t+=n.byteLength;r(e)}),e.once("aborted",()=>{s||(s=!0,o(Error("Request aborted")))}),e.once("error",e=>{s||(s=!0,o(e))})})}function rM(e,t,n){return rL(e,t,n).then(e=>Buffer.from(e).toString("utf8"))}function rj(e){return e.arrayBuffer().then(e=>Buffer.from(e))}function rB(e){return Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>{let n=rA.test(e)?"[REDACTED]":Array.isArray(t)?t.join(", "):t;return` ${e}: ${n}`}).join("\n")}function rU(e){return("string"==typeof e||void 0===e?e:e.toString("utf8"))||"(no content)"}function rF({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a}){"applet0930"===process.env.DEBUG&&rv.info(`${e} ${a.pathname}${a.search} ${(i>=500?tp.red:i>=400?tp.yellow:tp.green)(String(i))}
|
|
26
26
|
Request headers:
|
|
27
27
|
${rB(n)}
|
|
28
28
|
Request body: ${rU(t)}
|
|
29
29
|
|
|
30
30
|
Response headers:
|
|
31
|
-
${rB(Object.fromEntries(
|
|
32
|
-
Response body: ${rU(r)}`)}function rH(e,t){let n=new AbortController,r=()=>n.abort();return e.once("aborted",r),t.once("close",()=>{e.off("aborted",r),t.writableEnded||r()}),(e.aborted||t.destroyed)&&r(),n.signal}function rW(e,t,n){let r,a=("https:"===n.targetUrl.protocol?b:rw).request(n.targetUrl,{headers:n.requestHeaders,method:e.method},e=>{(r=e,t.destroyed||t.writableEnded)?e.destroy():(r$(t,n.commonHeaders),t.writeHead(e.statusCode??500,n.createResponseHeaders?.(e.headers)??rD(e.headers)),e.pipe(t))}),o=()=>{a.destroy(),r?.destroy()};a.once("error",e=>{if(!t.destroyed&&!t.writableEnded){if(t.headersSent)return void t.destroy(e);rR(t,502,`${n.errorMessage}: ${e.message}`,n.commonHeaders)}}),e.once("aborted",()=>{o()}),t.once("close",()=>{t.writableEnded||o()}),e.pipe(a)}async function rV(e,t,n){let r=t.find(({match:t})=>"string"==typeof t?e.url.pathname===t:t(e.url));await (r?.handle??n)(e)}function rG(e,t){return(n,r)=>{let a=rI(n);a?rV({request:n,response:r,url:a},e,t).catch(e=>(function(e,t){if(rv.error("处理 Web SDK 调试器请求失败",{error:t}),!e.destroyed&&!e.writableEnded){if(e.headersSent)return void e.destroy(t instanceof Error?t:void 0);rR(e,500,"Internal server error")}})(r,e)):rR(r,400,"Bad request")}}let rq="/__mcp_proxy",rJ=f("../../../node_modules/.pnpm/ws@8.21.2/node_modules/ws/lib/websocket-server.js");function rK(e,t,n){e.readyState!==tc.OPEN||e.bufferedAmount>0xa00000?e.terminate():e.send(JSON.stringify({type:t,data:n}))}let rz=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","TOOL_CALL_FAILED","COMMAND_TIMEOUT"]);class rY extends Error{code;constructor(e,t){super(t),this.name="DebuggerControlError",this.code=e}}function rX(e){return"render_page"===e||"render_widget"===e}function rZ(e){return"number"==typeof e&&Number.isFinite(e)}function rQ(e){return"number"==typeof e&&Number.isInteger(e)&&e>=1&&e<=9999}function r0(e){if("submit_chat_query"===e.type)return 12e4;if("execute_sandbox_tool_call"===e.type){let t=e.toolCall?.tool_call?.deadline_ms;if("number"==typeof t&&Number.isFinite(t))return Math.max(1,t-Date.now()+1e3)}return 15e3}class r1{clients=new Map;lastSnapshotAtByClientId=new Map;snapshotStore;snapshotsByClientId=new Map;nextCommandId=0;constructor(e){this.snapshotStore=e}registerClient(e,t){let n=this.getSnapshotStore(e),r=this.clients.get(e);r&&this.disconnectClient(r,"Debugger control connection was replaced");let a={clientId:e,lastSnapshotAtMs:this.lastSnapshotAtByClientId.get(e)??0,parallelJobs:new Map,queue:[],socket:t};this.clients.set(e,a),this.snapshotsByClientId.set(e,n),t.once("close",()=>{this.disconnectClient(a,"Debugger control connection was closed",!1)})}getSnapshotStore(e){return this.snapshotsByClientId.get(e)??{}}noteSnapshot(e){if(!e)return;let t=this.getSnapshotStore(e);Object.assign(t,this.snapshotStore),this.snapshotsByClientId.set(e,t);let n=Date.now();this.lastSnapshotAtByClientId.set(e,n);let r=this.clients.get(e);r&&(r.lastSnapshotAtMs=n)}execute(e,t,n){let r=void 0!==n?this.clients.get(n):"execute_sandbox_tool_call"===e?this.getToolCallClient():this.getActiveClient();if(!r||r.socket.readyState!==tc.OPEN)return Promise.reject(new rY("DEBUGGER_NOT_CONNECTED","execute_sandbox_tool_call"===e?"No Web SDK debugger is connected":"No Web SDK debugger with a stored snapshot is connected"));let a=`control-${Date.now()}-${++this.nextCommandId}`;return new Promise((n,o)=>{let i={command:{...t,commandId:a,type:e},reject:o,resolve:n};"execute_sandbox_tool_call"===e?this.startParallelJob(r,i):(r.queue.push(i),this.flushClient(r))})}handleResult(e){var t,n;let r,a=e.clientId?.trim(),o=e.commandId?.trim(),i=a?this.clients.get(a):void 0,s=o?i?.parallelJobs.get(o):void 0,l=s??i?.activeJob;if(!i||!l||l.command.commandId!==o)return!1;if(!0===e.ok&&rX(l.command.type)&&(t=e.snapshot,t.snapshot.command_id===o&&t.snapshot.runtime_snapshot)?(this.snapshotStore.snapshot=e.snapshot,this.snapshotStore.updatedAtMs=Date.now(),this.noteSnapshot(a),r={target:e.target}):!0===e.ok&&!rX(l.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("execute_sandbox_tool_call"===e)return!0===t.reported&&t.request_id?.trim()&&t.tool_call_id?.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(rZ)?t:void 0;if("scroll_to"===e)return[t.x,t.y,t.maxX,t.maxY,t.viewportWidth,t.viewportHeight].every(e=>rZ(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&&rZ(t.width)&&rZ(t.height)&&(void 0===t.uid||t.uid?.trim())?t:void 0}}}(l.command.type,e.result),"take_snapshot"===l.command.type&&r&&"runtimeSnapshot"in r&&this.storeRuntimeSnapshot(i.clientId,r.runtimeSnapshot)),r)l.resolve(r);else{let t=e.error??{},r=t.code?.trim(),a=r&&rz.has(r)?r:void 0;l.reject(new rY(a??(rX(n=l.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":"execute_sandbox_tool_call"===n?"TOOL_CALL_FAILED":"take_screenshot"===n?"SCREENSHOT_FAILED":"INSPECTION_FAILED"),t.message?.trim()||"Debugger control command failed"))}return l.timeout&&clearTimeout(l.timeout),s?i.parallelJobs.delete(o):i.activeJob=void 0,this.flushClient(i),!0}getActiveClient(){return[...this.clients.values()].filter(e=>e.socket.readyState===tc.OPEN&&e.lastSnapshotAtMs>0).sort((e,t)=>t.lastSnapshotAtMs-e.lastSnapshotAtMs)[0]}storeRuntimeSnapshot(e,t){let n=this.getSnapshotStore(e).snapshot,r=n?.snapshot;if(!n||!r||r.client_id!==e)return;let a=n.debug_snapshot,{root:o,...i}=t,s=Date.now();this.snapshotStore.snapshot={...n,stored_at:new Date(s).toISOString(),stored_at_ms:s,snapshot:{...r,runtime_snapshot:t},...a?{debug_snapshot:{...a,runtime_snapshot:i}}:{}},this.snapshotStore.updatedAtMs=s,this.noteSnapshot(e)}getConnectedClient(){return[...this.clients.values()].reverse().find(e=>e.socket.readyState===tc.OPEN)}getToolCallClient(){return[...this.clients.values()].reverse().find(e=>e.socket.readyState===tc.OPEN&&e.activeJob?.command.type==="submit_chat_query")??this.getActiveClient()??this.getConnectedClient()}startParallelJob(e,t){let n=t.command.commandId;e.parallelJobs.set(n,t),t.timeout=setTimeout(()=>{e.parallelJobs.delete(n)&&t.reject(new rY("TOOL_CALL_FAILED","Debugger control command timed out"))},r0(t.command));try{rK(e.socket,"control",t.command)}catch{this.disconnectClient(e,"Debugger control connection was closed")}}flushClient(e){if(e.activeJob||e.socket.readyState!==tc.OPEN)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 rY("CHAT_TIMEOUT","Debugger control command timed out"));try{rK(e.socket,"control",{commandId:t.command.commandId,type:"cancel_chat_query"})}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 rY(rX(t.command.type)?"RENDER_TIMEOUT":"COMMAND_TIMEOUT","Debugger control command timed out")),this.flushClient(e)}},r0(t.command));try{rK(e.socket,"control",t.command)}catch{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),this.snapshotsByClientId.delete(e.clientId);let r=new rY("DEBUGGER_DISCONNECTED",t);for(let t of(e.activeJob?.timeout&&clearTimeout(e.activeJob.timeout),e.activeJob?.reject(r),e.activeJob=void 0,e.parallelJobs.values()))t.timeout&&clearTimeout(t.timeout),t.reject(r);for(let t of(e.parallelJobs.clear(),e.queue.splice(0)))t.reject(r);n&&e.socket.readyState===tc.OPEN&&e.socket.close()}}let r2=["page","widget","app"],r3=["log","info","warn","error","debug","eval"],r4=new Set(["id","class","role","title","href","src","type","name","value","placeholder","disabled","checked","selected"]);function r9(e,t){let n=t.pageIdx??0,r=t.pageSize??50,a=n*r,o=e.slice(a,a+r);return{pageIdx:n,pageSize:r,total:e.length,hasMore:a+o.length<e.length,items:o}}function r5(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 r8(e){return e.value??e.unserializableValue??e.description??e.type??""}function r6(e,t){var n,r;let a;return(n=e,"all"===(r=t)?r2:"page"===r||"widget"===r||"app"===r?[r]:(a=n.context,a?.page_id||a?.page_path?["page","app"]:a?.widget_id?["widget"]:r2)).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 a;let o,i,s,l;return a=r.updatedAtMs,o=e.url??e.location?.url,i=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(r8).filter(Boolean).join(" "),...o?{url:o}:{},...void 0===i?{}:{lineNumber:i},...void 0===s?{}:{columnNumber:s},...void 0===a?{}:{updatedAtMs:a},entry:e}})})}function r7(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 ae(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 at={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},an={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},ar={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1};function aa(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 ao(e,t={}){try{return await e()}catch(e){return function(e,t={}){let n=e instanceof rY?e:new rY("INSPECTION_FAILED",String(e));return aa({...t,error:{code:n.code,message:n.message}},{isError:!0})}(e,t)}}function ai(e,t,n,r){let a=O(n.inputSchema);e.registerTool(t,{...n,inputSchema:a},r)}let as="/__wsd_mcp";async function al({request:e,response:t,url:n},r,a){if("OPTIONS"===e.method){r$(t),t.writeHead(204),t.end();return}if("POST"!==e.method)return void rR(t,405,"Method not allowed");let o=n.searchParams.get("clientId")??void 0,i=void 0===o?r:a.getSnapshotStore(o),s=D(()=>{let e,t;return e=new T({name:"doubao-web-sdk-debugger-log",version:"0.0.1"}),t=async e=>{var t;let n=r5(i);if(!n.stored)return aa(n);let r=r9((t=n.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,a;return n=e.category??[],r=e.event?.trim(),a=e.requestId?.trim(),(0===n.length||n.includes(t.category))&&(!r||t.event===r)&&(!a||t.requestId===a)}),e);return aa({stored:!0,storedAt:n.storedAt,updatedAtMs:n.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,events:r.items})},ai(e,"list_chat_messages",{annotations:at,description:"List conversation messages in chronological order from the latest debugger snapshot, including message content and generation status.",inputSchema:{}},async()=>{let e=r5(i);if(!e.stored)return aa(e);let t=i.snapshot?.debug_snapshot?.simulator??e.snapshot.simulator;return aa({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,streamStatus:t?.stream_status,messages:t?.messages??[]})}),ai(e,"list_console_messages",{annotations:at,description:"List runtime console messages captured by the Doubao Web SDK debugger.",inputSchema:{levels:M(A(r3)).optional(),pageIdx:x().int().min(0).optional(),pageSize:x().int().min(1).max(200).optional(),query:P().optional(),target:A(["current","page","widget","app","all"]).optional()}},async e=>{let t=r5(i);if(!t.stored)return aa(t);let n=r9(r6(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 aa({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,total:n.total,pageIdx:n.pageIdx,pageSize:n.pageSize,hasMore:n.hasMore,messages:n.items.map(({entry:e,...t})=>t)})}),ai(e,"get_console_message",{annotations:at,description:"Get one full runtime console message, including args and stack trace.",inputSchema:{msgid:P()}},async e=>{let t=r5(i);if(!t.stored)return aa(t);let n=r6(t.snapshot,"all").find(t=>t.msgid===e.msgid);return aa({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,found:!!n,...n?{message:n}:{msgid:e.msgid}})}),ai(e,"get_log_snapshot",{annotations:at,description:"Return the latest compact debugger log snapshot.",inputSchema:{}},async()=>{let e=r5(i);return e.stored?aa({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,snapshot:e.snapshot}):aa(e)}),ai(e,"list_render_targets",{annotations:at,description:"List Page and Widget targets that can be rendered by the Web SDK debugger.",inputSchema:{type:A(["all","page","widget"]).optional()}},async e=>{var t,n;let r,a=r5(i);return a.stored?aa({stored:!0,storedAt:a.storedAt,updatedAtMs:a.updatedAtMs,...(t=a.snapshot,n=e.type??"all",r=t.render_targets??{},{pages:"widget"===n?[]:(r.pages??[]).map(e=>ae(e,"page")).filter(Boolean),widgets:"page"===n?[]:(r.widgets??[]).map(e=>ae(e,"widget")).filter(Boolean),...r.currentTarget?{currentTarget:r.currentTarget}:{}})}):aa(a)}),ai(e,"take_snapshot",{annotations:at,description:"Capture and return a fresh text snapshot of the currently rendered Page or Widget card.",inputSchema:{target:A(["current","page","widget"]).optional(),verbose:$().optional()}},e=>ao(async()=>{let t=function(e,t){var n,r;let a,o,i,s=e.runtime_snapshot;if(!s?.target)return{available:!1,reason:"NO_RUNTIME_SNAPSHOT"};let l=s.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(!s.root)return{available:!1,reason:"NO_RENDERED_TARGET",currentTarget:l};let c=s.selectedUid,u=(n=s.root,r=!0===t.verbose,a=[],o=0,(i=(e,t)=>{var n,s;let{name:l,uid:p}=e;if(!p||!l)return;o+=1;let d=" ".repeat(t);if("text"===e.type)return void a.push(`${d}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||r4.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===c&&u.push("[selected]"),a.push(`${d}${u.join(" ")}`),e.children??[]))i(n,t+1)})(n,0),{actualNodeCount:o,text:a.join("\n")});return{available:!0,target:l,nodeCount:s.nodeCount??u.actualNodeCount,...c?{selectedUid:c}:{},truncated:!0===s.truncated,snapshot:u.text,snapshotUpdatedAtMs:s.updatedAtMs}}({runtime_snapshot:(await a.execute("take_snapshot",{target:e.target??"current"},o)).runtimeSnapshot},e),n=r5(i),r={stored:n.stored,...n.stored?{storedAt:n.storedAt,updatedAtMs:n.updatedAtMs}:{},...t};return aa(r,{text:t.available?t.snapshot:JSON.stringify(r,null,2)})},{available:!1,stored:!1})),ai(e,"get_computed_style",{annotations:at,description:"Get computed CSS styles for an element uid in the current Page or Widget target.",inputSchema:{properties:M(P().min(1)).max(100).optional(),uid:P().min(1)}},({properties:e,uid:t})=>ao(async()=>aa(await a.execute("get_computed_style",{uid:t,...e?{properties:e}:{}},o)))),ai(e,"get_element_rect",{annotations:at,description:"Get x, y, width, and height for an element uid in the emulated viewport.",inputSchema:{uid:P().min(1)}},({uid:e})=>ao(async()=>aa(await a.execute("get_element_rect",{uid:e},o)))),ai(e,"take_screenshot",{annotations:at,description:"Take a screenshot of the current Page or Widget target, or of one element uid.",inputSchema:{format:A(["png","jpeg","webp"]).optional(),quality:x().min(0).max(100).optional(),uid:P().min(1).optional()}},({format:e="png",quality:t,uid:n})=>ao(async()=>{let r=await a.execute("take_screenshot",{format:e,...void 0!==t?{quality:t}:{},...n?{uid:n}:{}},o),{data:i,...s}=r;return aa({captured:!0,...s},{image:{data:i,mimeType:r.mimeType}})},{captured:!1})),ai(e,"scroll_to",{annotations:ar,description:"Scroll a Page or Widget container to absolute coordinates, or return its current scroll position.",inputSchema:{uid:P().min(1).optional(),x:x().min(0).optional(),y:x().min(0).optional()}},({uid:e,x:t,y:n})=>ao(async()=>aa({scrolled:!0,...await a.execute("scroll_to",{uid:e,x:t,y:n},o)}),{scrolled:!1})),ai(e,"set_viewport",{annotations:ar,description:"Set the current Page or Widget emulated viewport size.",inputSchema:{height:x().int().min(1).max(9999),width:x().int().min(1).max(9999)}},({height:e,width:t})=>ao(async()=>aa({updated:!0,viewport:await a.execute("set_viewport",{height:e,width:t},o)}),{updated:!1})),ai(e,"render_page",{annotations:an,description:"Render a Page route in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{url:P().min(1)}},({url:e})=>ao(async()=>aa({rendered:!0,target:(await a.execute("render_page",{url:e},o)).target}),{rendered:!1})),ai(e,"render_widget",{annotations:an,description:"Render a Widget card in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{structuredContent:j(P(),C()).optional(),widgetId:P().min(1)}},({structuredContent:e,widgetId:t})=>ao(async()=>aa({rendered:!0,target:(await a.execute("render_widget",{structuredContent:e??{},widgetId:t},o)).target}),{rendered:!1})),ai(e,"submit_chat_query",{annotations:an,description:"Submit a chat query through the connected Web SDK debugger and wait for the simulator response to complete.",inputSchema:{query:P().trim().min(1)}},({query:e})=>ao(async()=>aa({submitted:!0,...await a.execute("submit_chat_query",{query:e},o)}),{submitted:!1})),ai(e,"list_agent_trace_events",{annotations:at,description:"List Agent-side simulator and runtime trace events captured by the debugger.",inputSchema:{category:M(P()).optional(),event:P().optional(),pageIdx:x().int().min(0).optional(),pageSize:x().int().min(1).max(200).optional(),requestId:P().optional()}},t),ai(e,"list_agent_tool_calls",{annotations:at,description:"List Agent-side simulator tool calls captured by the debugger.",inputSchema:{pageIdx:x().int().min(0).optional(),pageSize:x().int().min(1).max(200).optional(),query:P().optional(),requestId:P().optional(),status:M(P()).optional(),toolName:P().optional()}},async e=>{var t;let n=r5(i);if(!n.stored)return aa(n);let r=r9((t=n.snapshot,(t.simulator?.tool_calls??[]).map(r7)).filter(t=>{let n,r,a,o;return n=e.requestId?.trim(),r=e.toolName?.trim(),a=e.status??[],o=e.query?.trim().toLowerCase(),(!n||t.requestId===n)&&(!r||t.toolName===r)&&(!(a.length>0)||!!a.includes(t.status))&&(!o||[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(o)))}),e);return aa({stored:!0,storedAt:n.storedAt,updatedAtMs:n.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,toolCalls:r.items})}),e}),l=R(s);try{await l(e,t)}catch(e){t.headersSent?t.destroy(e instanceof Error?e:void 0):rR(t,500,e instanceof Error?e.message:String(e))}finally{await s.close().catch(()=>void 0)}}let ap="/__web_sdk_debug_scenes",ad="/__web_sdk_widget_view_data_templates",ac={"Cache-Control":"no-cache"};async function au(e,t){try{let n=await t?.()??{templatesByEntry:{},templatesByWidget:{}};rN(e,200,n,ac)}catch(t){rv.error("加载 Widget viewData 模板失败",{error:t}),rN(e,500,{templatesByEntry:{},templatesByWidget:{}},ac)}}let am=f("node:crypto"),ah="/__dbx_real_device_debug",af=`${ah}/state`,ag=`${ah}/start`,ay=`${ah}/cancel`,ab=`${ah}/qr`;class a_{accessToken;provider;getDebugContext(){if(this.provider&&this.accessToken)return{stateEndpoint:af,startEndpoint:ag,cancelEndpoint:ay,qrEndpoint:ab,accessToken:this.accessToken,pollIntervalMs:500}}setProvider(e){this.provider=e,this.accessToken=e?am.randomBytes(32).toString("hex"):void 0}dispose(){this.setProvider(void 0)}getRequestRoutes(){return[{match:e=>e.pathname.startsWith(ah),handle:({request:e,response:t,url:n})=>this.serveRequest(e,t,n)}]}async serveRequest(e,t,n){if(!this.validateRequest(e,t))return;let r=this.provider;if(!r)return this.writeError(t,503,"REAL_DEVICE_DEBUG_UNAVAILABLE","Physical device debugging is unavailable");let a=await this.readJsonBody(e,t);if(a)try{if(n.pathname===af||n.pathname===ag){if(Object.keys(a).length>0)return this.writeError(t,400,"INVALID_REQUEST","Unexpected request fields");let e=n.pathname===af?await r.getState():await r.start();rN(t,200,e);return}if(n.pathname===ay){let e=a.operationId;if("string"!=typeof e||!e||1!==Object.keys(a).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid operationId");rN(t,200,await r.cancel(e));return}if(n.pathname===ab){let{operationId:e,kind:n}=a;if("string"!=typeof e||!e||"modern"!==n&&"legacy"!==n||2!==Object.keys(a).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid QR request");let o=await r.getQrImage(e,n);if(!o)return this.writeError(t,404,"QR_NOT_FOUND","QR image is unavailable");r$(t),t.writeHead(200,{"Content-Length":o.body.byteLength,"Content-Type":o.contentType}),t.end(o.body);return}return this.writeError(t,404,"NOT_FOUND","Not found")}catch{return this.writeError(t,500,"REAL_DEVICE_DEBUG_FAILED","Physical device debugging failed")}}validateRequest(e,t){var n,r;let a,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))return this.writeError(t,403,"FORBIDDEN_HOST","Forbidden host"),!1;let s=e.headers["x-dbx-real-device-token"];if("string"!=typeof s||!this.accessToken||(n=s,r=this.accessToken,o=(a=new TextEncoder).encode(n),i=a.encode(r),!(o.length===i.length&&am.timingSafeEqual(o,i))))return this.writeError(t,401,"UNAUTHORIZED","Unauthorized"),!1;if("POST"!==e.method)return this.writeError(t,405,"METHOD_NOT_ALLOWED","Method must be POST"),!1;if(!(e.headers["content-type"]?.toLowerCase()??"").startsWith("application/json"))return this.writeError(t,415,"UNSUPPORTED_MEDIA_TYPE","Content-Type must be application/json"),!1;let l=e.headers.origin;return!l||l===`http://${e.headers.host}`||(this.writeError(t,403,"FORBIDDEN_ORIGIN","Forbidden origin"),!1)}async readJsonBody(e,t){let n,r;try{n=await rM(e,t,4096)}catch{return this.writeError(t,413,"PAYLOAD_TOO_LARGE","Request body is too large")}if(!n.trim())return{};try{r=JSON.parse(n)}catch{return this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body")}return!r||"object"!=typeof r||Array.isArray(r)?this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body"):r}writeError(e,t,n,r){e.writableEnded||e.destroyed||rN(e,t,{error:{code:n,message:r}})}}let av={"Cache-Control":"no-cache"};async function aw({request:e,response:t,url:n},r,a){let o;if("OPTIONS"===e.method){r$(t,av),t.writeHead(204),t.end();return}if("GET"===e.method){let e;return void rN(t,200,function(e,t){if(!e?.debug_snapshot)return e;let{debug_snapshot:n,...r}=e;return t?{...r,snapshot:n}:r}(r.snapshot,null!=(e=n.searchParams.get("DEBUG"))&&"0"!==e&&"false"!==e.toLowerCase())??{stored:!1},av)}if("POST"!==e.method)return void rN(t,405,{error:"Method not allowed"},av);try{o=JSON.parse(await rM(e,t,0xa00000))}catch(e){rN(t,400,{error:e.message},av);return}aS(r,a,o),rN(t,200,{ok:!0,updated_at_ms:r.updatedAtMs},av)}function aS(e,t,n){var r;let a,o="string"==typeof(a=(r=n).snapshot.client_id??r.debug_snapshot?.client_id)&&a.trim()?a.trim():void 0;n=function(e,t){let n=e?.snapshot,r=t.snapshot,a=n?.runtime_snapshot,o=r.runtime_snapshot;if(!n||!a||n.client_id!==r.client_id)return t;if(!o){var i;let e;if(i=a.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),i&&e&&(1===Object.keys(e).length?e.type!==i.type:JSON.stringify(e)!==JSON.stringify(i)))return t;let{root:n,...o}=a;return{...t,snapshot:{...r,runtime_snapshot:a},...t.debug_snapshot?{debug_snapshot:{...t.debug_snapshot,runtime_snapshot:o}}:{}}}return Object.hasOwn(o,"root")||!Object.hasOwn(a,"root")||a.updatedAtMs!==o.updatedAtMs||JSON.stringify(a.target)!==JSON.stringify(o.target)?t:{...t,snapshot:{...r,runtime_snapshot:{...o,root:a.root}}}}(o?t.getSnapshotStore(o).snapshot:e.snapshot,n),e.snapshot=n,e.updatedAtMs=Date.now(),t.noteSnapshot(o)}let aE="/app_developer/api/sandbox/",ax=`${aE}session/business_info/update`,aA=new Set([`${aE}resources/notices/pull`,`${aE}resources/tasks/pull`]),aT={"Access-Control-Expose-Headers":rC},aC=new Set;function aI(e,t,n,r,a,o){if("applet0930"!==process.env.DEBUG)return!1;let i=`${a[rT]??""} ${e} ${t.pathname}`,s=aA.has(t.pathname);if(s&&n>=500){if(aC.has(i))return!1;aC.add(i)}else s&&n<500&&aC.delete(i);let l=Number(process.hrtime.bigint()-r)/1e6;return rv.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:l,headers:a,logId:o}),!0}function aP({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:a,statusCode:o,targetUrl:i}){rF({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:a,statusCode:o,targetUrl:i})}function aO(e,t,n){return n&&!(aA.has(e.pathname)&&t>=500)}function aD(e,t){if(e.pathname!==ax||!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 ak({method:e,request:t,requestBody:n,requestHeaders:r,response:a,targetUrl:o,usePlatformFetch:i}){let s=process.hrtime.bigint(),l=rH(t,a);try{let t,p=i?await eH({internal:!0,path:`${o.pathname}${o.search}`,method:e,body:n,headers:r,signal:l}):await fetch(o,{body:"GET"===e||"HEAD"===e?void 0:n,headers:r,method:e,signal:l}),d=aI(e,o,p.status,s,r,p.headers.get(rC)??void 0);if(a.destroyed||a.writableEnded)return void p.body?.cancel().catch(()=>void 0);let c=await rj(p);return aO(o,p.status,d)&&aP({method:e,requestBody:aD(o,n),requestHeaders:r,responseBody:c,responseHeaders:p.headers,statusCode:p.status,targetUrl:o}),a.destroyed||a.writableEnded||(t=rk(p.headers,[rC]),r$(a,aT),a.writeHead(p.status,t),a.end(c)),{body:c,ok:p.ok}}catch(p){if(a.destroyed||a.writableEnded||l.aborted)return;let t=`Failed to proxy sandbox request: ${p instanceof Error?p.message:String(p)}`,i=aI(e,o,502,s,r);aO(o,502,i)&&aP({method:e,requestBody:aD(o,n),requestHeaders:r,responseBody:t,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:o}),rR(a,502,t,aT)}}async function a$(e,t,n={}){let r;if("POST"!==e.method)return void rR(t,405,"Method not allowed",aT);try{r=JSON.parse(await rM(e,t,0xa00000))}catch(e){rR(t,400,`Invalid sandbox proxy payload: ${e.message}`,aT);return}let a=function(e,t){if(!e.url)return;let n=new URL(e.url,t);if(!n.pathname.startsWith(aE))return;let r=new URL(`${n.pathname}${n.search}`,t);var a=e.params;if(a)for(let[e,t]of Object.entries(a))null!=t&&r.searchParams.set(e,String(t));return r}(r,n.targetOrigin??en);if(!a)return void rR(t,404,"Sandbox endpoint not found",aT);if(!n.sandboxSessionId)return void rN(t,200,{code:-1,message:"无法模拟平台服务:当前未获取到开发者登录态或 Sandbox session 创建失败。"},aT);let o=function(e,t,n,r){if(t.pathname.startsWith(`${aE}session/`)&&t.pathname!==`${aE}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 a={...e.data};return t.pathname.startsWith(`${aE}jsb/`)&&"app_key"in a&&(a.app_key=n),t.pathname===`${aE}passport/open/auth`&&"client_key"in a&&(a.client_key=n),JSON.stringify(a)}(r,a,n.sandboxAppId,n.sandboxSessionId),i=r.method||"POST",s=function(e,t,n,r,a){let o=Object.fromEntries(Object.entries(rO({...e.headers,...n,...void 0===r?{}:{"content-length":String(Buffer.byteLength(r))},"content-type":"application/json"},t,{...ei(),...a?{[rT]:a}:{}})).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(o))"accept-encoding"===e.toLowerCase()&&delete o[e];return o["accept-encoding"]="identity",o}(e,a,r.headers,o,n.sandboxSessionId),l=await ak({method:i,request:e,requestBody:o,requestHeaders:s,response:t,targetUrl:a,usePlatformFetch:!n.targetOrigin});if(a.pathname===ax&&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 aR=f("node:util"),aN="/app_developer/api/sandbox/bridge/events",aL="/app_developer/api/sandbox/bridge/response",aM=new Set(["connection","content-length","host"]),aj=new Set(["heartbeat"]),aB=[500,1e3,2e3,5e3],aU=0;function aF(e){return e.length<=8?e:`${e.slice(0,4)}...${e.slice(-4)}`}function aH(e,t=new Headers,n=""){return{response:e,responseHeaders:Object.fromEntries(t),statusText:n}}async function aW(e){let t,n,r=e.request_id||"";if(!r)return aH({error_message:"bridge request_id is required",http_status:0,request_id:r,success:!1});if(!e.path?.startsWith("/"))return aH({error_message:`invalid bridge request path: ${e.path??""}`,http_status:0,request_id:r,success:!1});let a=function(e){if(e.origin)try{var t;return new URL(e.path??"/",(t=e.origin).endsWith("/")?t:`${t}/`)}catch{return}}(e);if(!a)return aH({error_message:`invalid bridge request origin: ${e.origin??""}`,http_status:0,request_id:r,success:!1});let o=(e.method||"GET").toUpperCase(),i=function(e){let t={};for(let[n,r]of Object.entries(e??{}))!n||aM.has(n.toLowerCase())||(t[n]=r);return t}(e.headers),s="GET"===o||"HEAD"===o?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(a,{body:s,headers:i,method:o,redirect:"manual",signal:l.signal}),t=await e.text();return d={method:o,requestBody:s,requestHeaders:i,responseBody:t,responseHeaders:e.headers,statusCode:e.status,targetUrl:a},rF(d),aH({body:t,http_status:e.status,request_id:r,success:!0},e.headers,e.statusText)}catch(e){return rF({method:o,requestBody:s,requestHeaders:i,responseBody:e instanceof Error?e.message:String(e),responseHeaders:new Headers,statusCode:0,targetUrl:a}),aH({error_message:e instanceof Error?e.message:String(e),http_status:0,request_id:r,success:!1})}finally{clearTimeout(p)}}function aV(e,t=new Set){if(Array.isArray(e)){for(let n of e)aV(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}aV(r,t)}return[...t]}function aG(e,t){e.onLog?.(t)}function aq(e){try{return JSON.parse(e)}catch{return}}function aJ({detail:e,requestHeaders:t,status:n,targetUrl:r}){if("applet0930"===process.env.DEBUG){if("number"==typeof n)return void rv.request({method:"CONNECT",url:r.pathname,statusCode:n,headers:t,context:{detail:e}});rv.info("Bridge connection pending",{url:r.pathname,detail:e,ppe:to(t)})}}function aK(e,t={}){"applet0930"===process.env.DEBUG&&rv.info(e,t)}async function az(e,t){let n=JSON.stringify({sandbox_session_id:e.sandboxSessionId,...t}),r={"content-type":"application/json",[rT]:e.sandboxSessionId,...ei()};if(e.targetOrigin){let t=new URL(aL,e.targetOrigin),a=await fetch(t,{body:n,headers:r,method:"POST"}),o=await a.text();if(rF({method:"POST",requestBody:n,requestHeaders:r,responseBody:o,responseHeaders:a.headers,statusCode:a.status,targetUrl:t}),!a.ok)throw Error(`upload bridge response failed: ${a.status} ${o}`);return{responseBody:o,responseHeaders:Object.fromEntries(a.headers),responsePayload:aq(o)}}let a=new URL(aL,en),o=await eH({body:n,headers:r,internal:!0,method:"POST",path:aL}),i=await o.text();if(rF({method:"POST",requestBody:n,requestHeaders:r,responseBody:i,responseHeaders:o.headers,statusCode:o.status,targetUrl:a}),!o.ok)throw Error(`upload bridge response failed: ${o.status} ${i}`);return{responseBody:i,responseHeaders:Object.fromEntries(o.headers),responsePayload:aq(i)}}async function aY(e,t){let n;try{n=JSON.parse(t)}catch(e){rv.warn("Sandbox Bridge request parse failed",{reason:e.message});return}let r=Date.now(),a=`bridge-${r}-${++aU}`,o=n.request_id||"",i={id:a,request:n,requestId:o,sandboxSessionId:e.sandboxSessionId,timestamp:r};aG(e,{...i,logIds:aV(n),status:"pending",updatedAtMs:r});let s=await aW(n),l={...s.response,headers:s.responseHeaders,status_text:s.statusText};try{let t=await az(e,s.response);aG(e,{...i,logIds:aV([n,l,t]),response:l,status:s.response.success?"success":"error",updatedAtMs:Date.now()})}catch(t){throw aG(e,{...i,errorMessage:t instanceof Error?t.message:String(t),logIds:aV([n,l]),response:l,status:"error",updatedAtMs:Date.now()}),t}}async function aX(e,t,n){let r={sandbox_session_id:e.sandboxSessionId},a=new URL(`${aN}?sandbox_session_id=${encodeURIComponent(e.sandboxSessionId)}`,en),o=(d=e.sandboxSessionId,{accept:"text/event-stream",host:a.host,[rT]:d,...ei()});aJ({detail:`host=${o.host} session=${aF(e.sandboxSessionId)}`,requestHeaders:o,status:"pending",targetUrl:a}),aK("bridge/events request",{headers:{accept:o.accept,host:o.host,[rT]:aF(e.sandboxSessionId),"x-tt-env":o["x-tt-env"],"x-use-ppe":o["x-use-ppe"]},path:aN,query:r});let i=await eH({headers:o,internal:!0,method:"GET",path:aN,query:r,signal:t});if(aJ({detail:`content-type=${i.headers.get("content-type")??""}`,requestHeaders:o,status:i.status,targetUrl:a}),!i.ok||!i.body){let e=await i.text().catch(()=>"");rF({method:"GET",requestBody:void 0,requestHeaders:o,responseBody:e,responseHeaders:i.headers,statusCode:i.status,targetUrl:a}),rv.warn("Sandbox Bridge events request failed",{status:i.status,body:e.slice(0,500)});let t=Error(`Sandbox Bridge SSE failed: ${i.status} ${e}`);throw t.status=i.status,t}rF({method:"GET",requestBody:void 0,requestHeaders:o,responseBody:"",responseHeaders:i.headers,statusCode:i.status,targetUrl:a}),n?.();let s=i.body.getReader(),l=new aR.TextDecoder,p="";for(;!t.aborted;){let{done:t,value:n}=await s.read();if(t){aK("bridge/events stream ended",{session:aF(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||aj.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);rv.info("Bridge event received",{event:e.name,requestId:n,ppe:to(t)}),rv.info(`Event detail
|
|
33
|
-
${e.data}`)}(s,o),"bridge_request"===s.name){var d,c=i.headers,u=i.status;rF({method:`EVENT ${s.name}`,requestBody:s.data,requestHeaders:o,responseBody:"",responseHeaders:c,statusCode:u,targetUrl:a}),aY(e,s.data).catch(e=>{rv.warn("Sandbox Bridge request failed",{reason:e.message})})}else if("TOOL_CALL"===s.name){let t=z(aq(s.data));t?Promise.resolve(e.onSimulatorToolCall?.(t)).catch(e=>{rv.warn("Sandbox tool call forwarding failed",{reason:e instanceof Error?e.message:String(e),requestId:t.request_id,toolCallId:t.tool_call.tool_call_id})}):rv.warn("Sandbox tool call event parse failed")}else if("sandbox_resource_changed"===s.name){let t=function(e){let t=aq(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,a=n?.action,o=n?.resource_id,i=n?.revision;if(("notice"===r||"task"===r)&&("upsert"===a||"remove"===a)&&"string"==typeof o&&o&&("number"==typeof i||"string"==typeof i))return{action:a,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:o,revision:i}}(s.data);t?e.onResourceChanged?.(t):rv.warn("Sandbox resource event parse failed")}else if("card_delta"===s.name){let t=function(e){let t=aq(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"}):rv.warn("Sandbox simulator event parse failed",{event:s.name})}else if("get_simulator_card_snapshots"===s.name){let t=aq(s.data);t&&"object"==typeof t&&!Array.isArray(t)?e.onSimulatorEvent?.({payload:t,type:s.name}):rv.warn("Sandbox simulator event parse failed",{event:s.name})}r=p.search(/\r?\n\r?\n/)}}}async function aZ(e,t){let n=0,r=!1;for(;!t.aborted;){try{await aX(e,t,()=>{r=!1,e.onConnectionStatusChange?.("connected")}),n=0}catch(n){if(t.aborted)return;let e=n.status;if(r||(rv.warn("无法接收来自平台服务的请求",{reason:n.message}),r=!0),401===e||403===e||404===e)return}e.onConnectionStatusChange?.("reconnecting"),await (0,_.setTimeout)(aB[Math.min(n,aB.length-1)],void 0,{signal:t}).catch(()=>void 0),n+=1}}let aQ=f("node:net"),a0="/__web_sdk_sandbox_bridge_logs",a1="DOUBAO_APPS_SANDBOX_BRIDGE_ORIGINS",a2="/app_developer/api/sandbox/session/business_info/update";function a3(e){if(!e)return!1;try{return tQ.statSync(e).isFile()}catch{return!1}}async function a4({body:e,headers:t,method:n,sandboxPath:r,targetOrigin:a,targetUrl:o}){let i=new AbortController,s=setTimeout(()=>i.abort(),3e4);try{return a?await fetch(o,{body:e,headers:t,method:n,signal:i.signal}):await eH({internal:!0,path:r,body:e,headers:t,method:n,signal:i.signal})}catch(e){if(i.signal.aborted)throw Error(`Sandbox session 请求超时(30000ms):${o}`);throw e}finally{clearTimeout(s)}}function a9(e,t){return(e?.[t]??process.env[t])?.trim()??""}function a5(e,t,n,r,a,o){if("applet0930"!==process.env.DEBUG)return;let i=Number(process.hrtime.bigint()-r)/1e6;rv.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:i,headers:a,logId:o})}function a8({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:a,statusCode:o,targetUrl:i}){rF({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:a,statusCode:o,targetUrl:i})}async function a6(e,t,n,r,a,o){let i,s,l="/app_developer/api/sandbox/session/create",p="POST",d=function(){let e=new Set;for(let t of(process.env[a1]??"").split(",")){let n=t.trim();if(n)try{let t=new URL(n),r=t.hostname.replace(/^\[|\]$/g,"").toLowerCase(),a="localhost"===r||"::1"===r||4===(0,aQ.isIP)(r)&&r.startsWith("127.");if("http:"!==t.protocol&&"https:"!==t.protocol||!a)throw Error("only loopback HTTP(S) origins are allowed");e.add(t.origin)}catch(e){throw Error(`${a1} contains an invalid origin: ${n} (${e instanceof Error?e.message:String(e)})`)}}return[...e]}(),c=JSON.stringify({sandbox_project_id:e,manifest:n?.()??(a3(t)?tQ.readFileSync(t,"utf8"):""),business_templates:a3(r)?tQ.readFileSync(r,"utf8"):"",...o?{app_id:o}:{},...d.length>0?{bridge_origins:d}:{}}),u={"content-type":"application/json",...ei()},m=new URL(l,a??en),h=process.hrtime.bigint();try{i=await a4({body:c,headers:u,method:p,sandboxPath:l,targetOrigin:a,targetUrl:m})}catch(t){let e=`创建 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw a5(p,m,502,h,u),a8({method:p,requestBody:c,requestHeaders:u,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:m}),t}let f=i.headers.get(rC)||"",g=await i.text();a5(p,m,i.status,h,u,f),a8({method:p,requestBody:c,requestHeaders:u,responseBody:g,responseHeaders:i.headers,statusCode:i.status,targetUrl:m});try{s=JSON.parse(g||"{}")}catch{throw Error(`创建 Sandbox session 失败:HTTP ${i.status} ${i.statusText||g||"响应不是有效 JSON"}${f?`,log_id=${f}`:""}`)}if(!i.ok||0!==s.code)throw Error(`创建 Sandbox session 失败:${s.message||i.statusText||i.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 a7(e,t,n,r,a,o){try{return await a6(e,t,n,r,a,o)}catch(e){return rv.warn(`Sandbox 平台服务模拟已跳过:${e instanceof Error?e.message:String(e)}`),{appId:"",sessionId:""}}}function oe(){return{csrUploaded:!1,phoneNumberUploaded:!1}}function ot(e){return{csrUploaded:!!e,phoneNumberUploaded:!0}}async function on(e,t){let n,r,a="/app_developer/api/sandbox/session/business_info/get",o="POST",i=JSON.stringify({sandbox_session_id:e}),s={"content-type":"application/json",...ei()},l=new URL(a,t??en),p=process.hrtime.bigint();try{n=await a4({body:i,headers:s,method:o,sandboxPath:a,targetOrigin:t,targetUrl:l})}catch(e){throw a5(o,l,502,p,s),e}let d=n.headers.get(rC)||"",c=await n.text();a5(o,l,n.status,p,s,d);try{r=JSON.parse(c||"{}")}catch{throw a8({method:o,requestBody:i,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${d?`,log_id=${d}`:""}`)}let u={csrUploaded:!!r.data?.csr_pem?.trim(),phoneNumberUploaded:!!r.data?.phone_num?.trim()};if(a8({method:o,requestBody:i,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||d?`,log_id=${r.log_id||d}`:""}`);return u}async function or(e,t){if(!e)return oe();try{return await on(e,t)}catch(e){return rv.warn(`Sandbox session 信息查询已跳过:${e instanceof Error?e.message:String(e)}`),oe()}}async function oa(e,t,n){let r,a,o="POST",i=JSON.stringify({...e.csrPem?{csr_pem:e.csrPem}:{},phone_num:e.phoneNum,sandbox_session_id:t}),s={"content-type":"application/json",...ei(),[rT]:t},l=new URL(a2,n??en),p=process.hrtime.bigint();try{r=await a4({body:i,headers:s,method:o,sandboxPath:a2,targetOrigin:n,targetUrl:l})}catch(e){throw a5(o,l,502,p,s),e}let d=r.headers.get(rC)||"",c=await r.text();a5(o,l,r.status,p,s,d),a8({method:o,requestBody:JSON.stringify({...e.csrPem?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]",sandbox_session_id:t}),requestHeaders:s,responseBody:c,responseHeaders:r.headers,statusCode:r.status,targetUrl:l});try{a=JSON.parse(c||"{}")}catch{throw Error(`更新 Sandbox session 信息失败:HTTP ${r.status} 响应不是有效 JSON${d?`,log_id=${d}`:""}`)}if(!r.ok||void 0!==a.code&&0!==a.code)throw Error(`更新 Sandbox session 信息失败:${a.message||r.statusText||r.status}${a.log_id||d?`,log_id=${a.log_id||d}`:""}`)}async function oo(e,t,n,r){if(e&&t.phoneNum&&(!n||t.csrPem))try{return await oa({...t.csrPem?{csrPem:t.csrPem}:{},phoneNum:t.phoneNum},e,r),rv.info("Sandbox business info 已自动上传",{sessionId:e}),ot(t.csrPem)}catch(e){rv.warn(`Sandbox business info 自动上传已跳过:${e instanceof Error?e.message:String(e)}`);return}}async function oi(e,t){let n,r="/app_developer/api/sandbox/session/revoke",a="POST",o=JSON.stringify({sandbox_session_id:e}),i={"content-type":"application/json",...ei()},s=new URL(r,t??en),l=process.hrtime.bigint();try{n=await a4({body:o,headers:i,method:a,sandboxPath:r,targetOrigin:t,targetUrl:s})}catch(t){let e=`撤回 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw a5(a,s,502,l,i),a8({method:a,requestBody:o,requestHeaders:i,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:s}),t}let p=n.headers.get(rC)||"",d=await n.text();a5(a,s,n.status,l,i,p),a8({method:a,requestBody:o,requestHeaders:i,responseBody:d,responseHeaders:n.headers,statusCode:n.status,targetUrl:s});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 os(e){if(e.recreatePromise)return e.recreatePromise;e.recreatePromise=(async()=>{var t;let n=e.sandboxSessionId;n&&await oi(n,e.sandboxTargetOrigin),e.bridge?.close(),e.bridge=void 0;let r=await a6(e.sandboxProjectId,e.simulatorManifestPath,e.simulatorManifestReader,e.simulatorBusinessTemplatesPath,e.sandboxTargetOrigin,e.sandboxSessionAppId),a=r.sessionId,o=!e.sandboxSessionAppId,i=await oo(a,e.businessInfoInput,o,e.sandboxTargetOrigin)??await or(a,e.sandboxTargetOrigin);return e.sandboxAppId=r.appId,e.sandboxSessionId=a,e.businessInfo=i,(t=e).resourceConnectionStatus="connecting",t.resourceEventSequence=0,t.resourceEvents.length=0,t.simulatorEventSequence=0,t.simulatorEvents.length=0,t.resourceGeneration+=1,od(t),e.bridge=oc(e,a),rv.info("Sandbox session 已重建",{sessionId:a}),{...r,businessInfoUploaded:i.phoneNumberUploaded&&(!o||i.csrUploaded)}})();try{return await e.recreatePromise}finally{e.recreatePromise=void 0}}function ol(e){return{bridgeLogs:e.bridgeLogs,bridgeLogsUpdatedAtMs:e.bridgeLogsUpdatedAtMs,connectionStatus:e.resourceConnectionStatus,events:e.resourceEvents,generation:e.resourceGeneration,instanceId:e.resourceInstanceId,simulatorEvents:e.simulatorEvents,updatedAtMs:e.resourceEventsUpdatedAtMs}}function op(e){clearTimeout(e.logBroadcastTimer),e.logBroadcastTimer=void 0;let t=ol(e);for(let n of e.eventListeners)n(t)}function od(e){e.resourceEventsUpdatedAtMs=Math.max(Date.now(),e.resourceEventsUpdatedAtMs+1),op(e)}function oc(e,t){var n={onConnectionStatusChange:t=>{e.resourceConnectionStatus!==t&&(e.resourceConnectionStatus=t,od(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),e.logBroadcastTimer??=setTimeout(()=>op(e),50)},onResourceChanged:t=>{e.resourceEvents.push({...t,sequence:++e.resourceEventSequence}),e.resourceEvents.length>200&&e.resourceEvents.splice(0,e.resourceEvents.length-200),od(e)},onSimulatorEvent:t=>{e.simulatorEvents.push({...t,sequence:++e.simulatorEventSequence}),e.simulatorEvents.length>200&&e.simulatorEvents.splice(0,e.simulatorEvents.length-200),od(e)},onSimulatorToolCall:e.onSimulatorToolCall,sandboxSessionId:t,targetOrigin:e.sandboxTargetOrigin};if(!n.sandboxSessionId)return void rv.warn("Sandbox Bridge skipped: missing sandbox session id");let r=new AbortController;return aK("start sandbox bridge",{session:aF(n.sandboxSessionId)}),n.onConnectionStatusChange?.("connecting"),aZ(n,r.signal),{close:()=>r.abort()}}function ou(e){e.bridgeLogs.length=0,e.bridgeLogsUpdatedAtMs=Math.max(Date.now(),e.bridgeLogsUpdatedAtMs+1),op(e)}async function om(e,t,n){if("POST"!==e.method)return void rR(t,405,"Method not allowed");if(!n)return void rR(t,503,"Sandbox session is not initialized");try{let r=await rM(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 rR(t,400,"Invalid Sandbox business info");n.businessInfoInput={..."string"==typeof e.csrPem&&e.csrPem.trim()?{csrPem:e.csrPem.trim()}:{},phoneNum:e.phoneNum.trim()}}let a=await os(n);rN(t,200,{code:0,data:{sandbox_appid:a.appId,business_info_uploaded:a.businessInfoUploaded,sandbox_session_id:a.sessionId},message:"ok"})}catch(e){rR(t,500,e.message)}}function oh(e){let t=e.appId?.trim(),n=t&&!t.startsWith("doubao-sandbox-app-")?t:void 0,r=function(e){let t=tC.resolve(e??process.cwd()),n=t;try{n=tQ.realpathSync.native(t)}catch{}return(0,am.createHash)("sha256").update(n).digest("hex")}(e.appDirectory),a=function(e,t){let n=a9(e,"DOUBAO_SANDBOX_PHONE_NUM"),r=a9(e,"DOUBAO_SANDBOX_CSR_FILE"),a=function(e,t){if(!e)return;let n=tC.isAbsolute(e)?e:tC.resolve(t??process.cwd(),e);return a3(n)?n:void 0}(r,t),o="";if(r&&!a)rv.warn(`Sandbox CSR 文件不存在:${r}`);else if(a)try{o=tQ.readFileSync(a,"utf8").trim()}catch(e){rv.warn(`Sandbox CSR 文件读取失败:${e instanceof Error?e.message:String(e)}`)}return{...n?{phoneNum:n}:{},...o?{csrPem:o}:{}}}(e.env,e.appDirectory),o=`${a.phoneNum??""}\0${a.csrPem??""}`;return{businessInfoInput:a,businessInfoInputKey:o,businessTemplatesPath:e.businessTemplatesPath,key:JSON.stringify([o,r,n,e.targetOrigin,e.businessTemplatesPath,e.manifestPath]),manifestReader:e.manifestReader,manifestPath:e.manifestPath,onSimulatorToolCall:e.onSimulatorToolCall,projectId:r,sessionAppId:n,targetOrigin:e.targetOrigin}}class of{configKey;manifestReader;state;constructor(e,t,n){this.state=e,this.configKey=t,this.manifestReader=n}static async start(e){let t=oh(e),n=await a7(t.projectId,t.manifestPath,t.manifestReader,t.businessTemplatesPath,t.targetOrigin,t.sessionAppId),r=!t.sessionAppId,a={bridgeLogs:[],bridgeLogsUpdatedAtMs:0,businessInfo:await oo(n.sessionId,t.businessInfoInput,r,t.targetOrigin)??await or(n.sessionId,t.targetOrigin),businessInfoInput:t.businessInfoInput,eventListeners:new Set,onSimulatorToolCall:t.onSimulatorToolCall,resourceConnectionStatus:"connecting",resourceEventSequence:0,resourceEvents:[],resourceEventsUpdatedAtMs:0,resourceGeneration:1,resourceInstanceId:(0,am.randomUUID)(),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},o=new of(a,t.key,t.manifestReader);return a.bridge=n.sessionId?oc(a,n.sessionId):void 0,o}get sessionId(){return this.state.sandboxSessionId}close(){this.state.bridge?.close(),clearTimeout(this.state.logBroadcastTimer),this.state.eventListeners.clear()}subscribeEvents(e){return this.state.eventListeners.add(e),e(ol(this.state)),()=>{this.state.eventListeners.delete(e)}}clearBridgeLogs(){ou(this.state)}matches(e){let t=oh(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,am.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:a0,sandboxEventsAvailable:!0,...this.state.businessInfoInput.csrPem?{sandboxCsrPem:this.state.businessInfoInput.csrPem}:{},...this.state.businessInfoInput.phoneNum?{sandboxPhoneNum:this.state.businessInfoInput.phoneNum}:{}}}getRequestRoutes(){return[{match:a0,handle:({request:e,response:t})=>{var n;return n=this.state,void("GET"!==e.method&&"DELETE"!==e.method?rR(t,405,"Method not allowed"):("DELETE"===e.method&&n&&ou(n),rN(t,200,{logs:n?.bridgeLogs??[],updatedAtMs:n?.bridgeLogsUpdatedAtMs??0},{"Cache-Control":"no-cache"})))}},{match:"/__web_sdk_sandbox_resource_events",handle:({request:e,response:t})=>{var n;return n=this.state,void("GET"!==e.method?rR(t,405,"Method not allowed"):rN(t,200,{connectionStatus:n?.resourceConnectionStatus??"connecting",events:n?.resourceEvents??[],generation:n?.resourceGeneration??0,simulatorEvents:n?.simulatorEvents??[],updatedAtMs:n?.resourceEventsUpdatedAtMs??0},{"Cache-Control":"no-cache"}))}},{match:"/__web_sdk_sandbox_proxy__",handle:({request:e,response:t})=>a$(e,t,{onBusinessInfoUpdated:e=>{this.state.businessInfo=ot(e?.csrPem),e&&(this.state.businessInfoInput=e)},sandboxAppId:this.state.sandboxAppId,sandboxSessionId:this.state.sandboxSessionId,targetOrigin:this.state.sandboxTargetOrigin})},{match:"/__web_sdk_sandbox_session_recreate__",handle:({request:e,response:t})=>om(e,t,this.state)}]}}function og(e,t){return e.relativePath<t.relativePath?-1:+(e.relativePath>t.relativePath)}let oy="/__tools/tools.json",ob="/__events/events.json",o_="manifest.yaml",ov="skill";function ow(e){if(!e)return!1;try{return tQ.statSync(e).isFile()}catch{return!1}}function oS(e,t){if(!e)return;let n=tC.isAbsolute(e)?e:tC.resolve(t??process.cwd(),e);return ow(n)?n:void 0}function oE(e,t){if(e&&t)return tC.relative(t,e).split(tC.sep).join("/")||"."}function ox(e){let t=tC.resolve(e);for(;;){if(ow(tC.join(t,o_)))return t;let e=tC.dirname(t);if(e===t)return;t=e}}function oA(e){try{return tQ.lstatSync(e),!0}catch{return!1}}function oT(e,t,n,r){let a;if(!t.reader&&ow(t.sourcePath)){var o;let n,a=tQ.statSync(t.sourcePath);r$(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":a.size,"Content-Type":r}),o=t.sourcePath,(n=tQ.createReadStream(o)).once("error",()=>e.destroy()),n.pipe(e);return}try{a=t.reader?.()}catch{a=void 0}void 0===a?rR(e,404,`${n} not found`):(r$(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":Buffer.byteLength(a),"Content-Type":r}),e.end(a))}function oC(e,t){return function(e){let t,n;if(!e)return{layout:"missing",entries:[]};let r=tC.resolve(e);try{t=tQ.lstatSync(r)}catch(e){if("ENOENT"===e.code)return{directory:r,layout:"missing",entries:[]};return{directory:r,layout:"invalid",entries:[],error:`skill path cannot be inspected: ${r}: ${e.message}`}}if(t.isSymbolicLink()||!t.isDirectory())return{directory:r,layout:"invalid",entries:[],error:`skill path must be a non-symlink directory: ${r}`};try{var a;let e;a=r,e=[],function t(n){for(let r of tQ.readdirSync(n,{withFileTypes:!0})){if(r.isSymbolicLink())continue;let o=tC.join(n,r.name);r.isDirectory()?t(o):r.isFile()&&"SKILL.md"===r.name&&e.push(function(e,t){let n=tC.relative(e,t).split(tC.sep).join("/");return{content:tQ.readFileSync(t,"utf8"),relativePath:n}}(a,o))}}(a),n=e}catch(e){return{directory:r,layout:"invalid",entries:[],error:`skill directory is not readable: ${r}: ${e.message}`}}return n.sort(og),n.length>0?{directory:r,layout:"resolved",entries:n}:{directory:r,layout:"missing",entries:[]}}(function(e,t){if(t){if(!t)return;if(tC.isAbsolute(t))return t;let n=e?ox(e):void 0,r=[e,n,process.cwd()].map(e=>tC.resolve(e??process.cwd(),t));return[...new Set(r)].find(oA)??r[0]}if(!e)return;let n=ox(e);return[...new Set([n?tC.join(n,ov):void 0,tC.join(e,ov),tC.join(process.cwd(),ov)].filter(Boolean))].find(oA)}(e,t))}class oI{appDirectory;businessTemplatesPath;manifestPath;manifestReader;eventsConfigReader;eventsConfigSource;toolsConfigReader;toolsConfigSource;manifestSource;skillsDirectory;sourceKey;constructor(e){var t,n,r;this.appDirectory=e.appDirectory,this.manifestPath=e.manifestPath?oS(e.manifestPath,e.appDirectory):e.manifestSourcePath??(e.manifestReader?void 0:function(e){if(!e)return;let t=ox(e);return[...new Set([t?tC.join(t,o_):void 0,tC.join(process.cwd(),o_)].filter(Boolean))].find(ow)}(e.appDirectory)),this.businessTemplatesPath=(t=this.manifestPath,n=e.businessTemplatesPath,r=e.appDirectory,n?oS(n,r):t?oS(tC.join(tC.dirname(t),"business-templates.yaml"),r):void 0),this.manifestReader=e.manifestReader,this.eventsConfigReader=e.eventsConfigReader,this.toolsConfigReader=e.toolsConfigReader,this.eventsConfigSource={reader:e.eventsConfigReader,sourcePath:e.eventsConfigSourcePath},this.skillsDirectory=e.skillsDirectory;let a=oC(e.appDirectory,this.skillsDirectory);if(e.skillsDirectory&&"resolved"!==a.layout)throw Error(a.error??`Simulator skills directory contains no runtime Skill: ${e.skillsDirectory}`);this.toolsConfigSource={reader:e.toolsConfigReader,sourcePath:e.toolsConfigSourcePath},this.manifestSource={reader:e.manifestReader,sourcePath:e.manifestSourcePath??this.manifestPath},this.sourceKey=JSON.stringify([this.appDirectory,this.businessTemplatesPath,this.manifestPath,this.eventsConfigSource.sourcePath,this.toolsConfigSource.sourcePath,this.manifestSource.sourcePath,this.skillsDirectory])}matches(e){let t=new oI(e);return this.sourceKey===t.sourceKey&&this.eventsConfigReader===t.eventsConfigReader&&this.toolsConfigReader===t.toolsConfigReader&&this.manifestReader===t.manifestReader}getDebugContext(){let e=oC(this.appDirectory,this.skillsDirectory),t="resolved"===e.layout?e.directory:void 0,n=oE(this.businessTemplatesPath,this.appDirectory),r=oE(this.eventsConfigSource.sourcePath,this.appDirectory),a=oE(this.toolsConfigSource.sourcePath,this.appDirectory),o=oE(this.manifestSource.sourcePath,this.appDirectory),i=oE(t,this.appDirectory);return{...this.eventsConfigSource.reader||this.eventsConfigSource.sourcePath?{eventsConfigUrl:ob,...this.eventsConfigSource.sourcePath?{eventsConfigOriginalUrl:this.eventsConfigSource.sourcePath,...r?{eventsConfigRelativePath:r}:{}}:{}}:{},...this.toolsConfigSource.sourcePath?{toolsConfigOriginalUrl:this.toolsConfigSource.sourcePath,toolsConfigUrl:oy,...a?{toolsConfigRelativePath:a}:{}}:{},...this.manifestSource.sourcePath?{simulatorManifestOriginalUrl:this.manifestSource.sourcePath,...o?{simulatorManifestRelativePath:o}:{}}:{},...this.businessTemplatesPath?{simulatorBusinessTemplatesOriginalUrl:this.businessTemplatesPath,...n?{simulatorBusinessTemplatesRelativePath:n}:{}}:{},...t?{simulatorSkillsDirectoryOriginalUrl:t,...i?{simulatorSkillsDirectoryRelativePath:i}:{}}:{}}}getRequestRoutes(){return[{match:ob,handle:({response:e})=>oT(e,this.eventsConfigSource,"Events config","application/json; charset=utf-8")},{match:oy,handle:({response:e})=>oT(e,this.toolsConfigSource,"Tools config","application/json; charset=utf-8")},{match:"/__simulator_manifest/manifest.yaml",handle:({response:e})=>oT(e,this.manifestSource,"Simulator manifest","application/yaml; charset=utf-8")},{match:"/__simulator_skills/index.json",handle:({response:e})=>{let t;"missing"===(t=oC(this.appDirectory,this.skillsDirectory)).layout?rR(e,404,"Simulator skills directory not found"):"invalid"===t.layout?rR(e,422,t.error??"Invalid simulator Skill layout"):rN(e,200,{skills:t.entries},{"Cache-Control":"no-cache"})}}]}}let oP=f("node:stream"),oO="/app_developer/api",oD=`${oO}/simulator/images/upload`,ok=new Set([`${oO}/simulator/chat`,oD,`${oO}/simulator/tool/report`]),o$={"Access-Control-Expose-Headers":rC};async function oR(e,t,n,r){if(!ok.has(n.pathname))return void rR(t,404,"未找到模拟器接口",o$);let a=r.targetOrigin??en,o=new URL(`${n.pathname}${n.search}`,a),i=rH(e,t);try{var s;let a=e.method??"GET",l=process.hrtime.bigint(),p=function(e,t,n){return Object.fromEntries(Object.entries(rO(e.headers,t,{...ei(),...n?{[rT]:n}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]))}(e,o,r.getSandboxSessionId?.()),d=await oN(e,t,n,a),c=r.targetOrigin?await fetch(o,{body:d,headers:p,method:a,signal:i}):await eH({internal:!0,path:`${n.pathname}${n.search}`,method:a,body:d,headers:p,signal:i});if(function(e,t,n,r,a,o){if("applet0930"!==process.env.DEBUG)return;let i=Number(process.hrtime.bigint()-r)/1e6;rv.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:i,headers:a,logId:o})}(a,n,c.status,l,p,c.headers.get(rC)??void 0),t.destroyed||t.writableEnded)return void c.body?.cancel().catch(()=>void 0);await oL({method:a,requestBody:(s=d)instanceof Uint8Array?`(binary, ${s.byteLength} bytes)`:s,requestHeaders:p,requestUrl:n,response:t,upstreamResponse:c})}catch(e){if(t.destroyed||t.writableEnded||i.aborted)return;rR(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,o$)}}async function oN(e,t,n,r){if("GET"!==r&&"HEAD"!==r)return n.pathname===oD?await rL(e,t,0xb00000):await rM(e,t,0xb00000)}async function oL({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:a,upstreamResponse:o}){var i,s;if(r$(a,o$),a.writeHead(o.status,rk(o.headers,[rC])),i=r,s=o,i.pathname===`${oO}/simulator/chat`||s.headers.get("content-type")?.toLowerCase().includes("text/event-stream")===!0)return void await oM({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:a,upstreamResponse:o});if("applet0930"!==process.env.DEBUG)return o.body?void await (0,g.pipeline)(oP.Readable.fromWeb(o.body),a):void a.end();let l=await rj(o);rF({method:e,requestBody:t,requestHeaders:n,responseBody:l,responseHeaders:o.headers,statusCode:o.status,targetUrl:r}),a.end(l)}async function oM({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:a,upstreamResponse:o}){if(!o.body){rF({method:e,requestBody:t,requestHeaders:n,responseBody:"",responseHeaders:o.headers,statusCode:o.status,targetUrl:r}),a.end();return}let i=oP.Readable.fromWeb(o.body);if("applet0930"!==process.env.DEBUG)return void await (0,g.pipeline)(i,a);rF({method:e,requestBody:t,requestHeaders:n,responseBody:"(event stream)",responseHeaders:o.headers,statusCode:o.status,targetUrl:r});let s=new oP.Transform({transform(e,t,n){let a;try{a=String(e).split("\n\n").filter(Boolean)}catch(t){return rv.error(`failed to decode event stream chunk: ${t?.toString()}`),n(null,e)}for(let e of a)rv.info(`Event from ${r.pathname}${r.search}
|
|
34
|
-
${e}`);n(null,e)}});await (0,g.pipeline)(
|
|
31
|
+
${rB(Object.fromEntries(o))}
|
|
32
|
+
Response body: ${rU(r)}`)}function rH(e,t){let n=new AbortController,r=()=>n.abort();return e.once("aborted",r),t.once("close",()=>{e.off("aborted",r),t.writableEnded||r()}),(e.aborted||t.destroyed)&&r(),n.signal}function rW(e,t,n){let r,o=("https:"===n.targetUrl.protocol?b:rw).request(n.targetUrl,{headers:n.requestHeaders,method:e.method},e=>{(r=e,t.destroyed||t.writableEnded)?e.destroy():(r$(t,n.commonHeaders),t.writeHead(e.statusCode??500,n.createResponseHeaders?.(e.headers)??rD(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);rR(t,502,`${n.errorMessage}: ${e.message}`,n.commonHeaders)}}),e.once("aborted",()=>{i()}),t.once("close",()=>{t.writableEnded||i()}),e.pipe(o)}async function rV(e,t,n){let r=t.find(({match:t})=>"string"==typeof t?e.url.pathname===t:t(e.url));await (r?.handle??n)(e)}function rG(e,t){return(n,r)=>{let o=rI(n);o?rV({request:n,response:r,url:o},e,t).catch(e=>(function(e,t){if(rv.error("处理 Web SDK 调试器请求失败",{error:t}),!e.destroyed&&!e.writableEnded){if(e.headersSent)return void e.destroy(t instanceof Error?t:void 0);rR(e,500,"Internal server error")}})(r,e)):rR(r,400,"Bad request")}}let rq="/__mcp_proxy",rJ=f("../../../node_modules/.pnpm/ws@8.21.2/node_modules/ws/lib/websocket-server.js");function rK(e,t,n){e.readyState!==tc.OPEN||e.bufferedAmount>0xa00000?e.terminate():e.send(JSON.stringify({type:t,data:n}))}let rz=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","TOOL_CALL_FAILED","COMMAND_TIMEOUT"]);class rY extends Error{code;constructor(e,t){super(t),this.name="DebuggerControlError",this.code=e}}function rX(e){return"render_page"===e||"render_widget"===e}function rZ(e){return"number"==typeof e&&Number.isFinite(e)}function rQ(e){return"number"==typeof e&&Number.isInteger(e)&&e>=1&&e<=9999}function r0(e){if("submit_chat_query"===e.type)return 12e4;if("execute_sandbox_tool_call"===e.type){let t=e.toolCall?.tool_call?.deadline_ms;if("number"==typeof t&&Number.isFinite(t))return Math.max(1,t-Date.now()+1e3)}return 15e3}class r1{clients=new Map;lastSnapshotAtByClientId=new Map;snapshotStore;snapshotsByClientId=new Map;nextCommandId=0;constructor(e){this.snapshotStore=e}registerClient(e,t){let n=this.getSnapshotStore(e),r=this.clients.get(e);r&&this.disconnectClient(r,"Debugger control connection was replaced");let o={clientId:e,lastSnapshotAtMs:this.lastSnapshotAtByClientId.get(e)??0,parallelJobs:new Map,queue:[],socket:t};this.clients.set(e,o),this.snapshotsByClientId.set(e,n),t.once("close",()=>{this.disconnectClient(o,"Debugger control connection was closed",!1)})}getSnapshotStore(e){return this.snapshotsByClientId.get(e)??{}}noteSnapshot(e){if(!e)return;let t=this.getSnapshotStore(e);Object.assign(t,this.snapshotStore),this.snapshotsByClientId.set(e,t);let n=Date.now();this.lastSnapshotAtByClientId.set(e,n);let r=this.clients.get(e);r&&(r.lastSnapshotAtMs=n)}execute(e,t,n){let r=void 0!==n?this.clients.get(n):"execute_sandbox_tool_call"===e?this.getToolCallClient():this.getActiveClient();if(!r||r.socket.readyState!==tc.OPEN)return Promise.reject(new rY("DEBUGGER_NOT_CONNECTED","execute_sandbox_tool_call"===e?"No Web SDK debugger is connected":"No Web SDK debugger with a stored snapshot is connected"));let o=`control-${Date.now()}-${++this.nextCommandId}`;return new Promise((n,i)=>{let a={command:{...t,commandId:o,type:e},reject:i,resolve:n};"execute_sandbox_tool_call"===e?this.startParallelJob(r,a):(r.queue.push(a),this.flushClient(r))})}handleResult(e){var t,n;let r,o=e.clientId?.trim(),i=e.commandId?.trim(),a=o?this.clients.get(o):void 0,s=i?a?.parallelJobs.get(i):void 0,l=s??a?.activeJob;if(!a||!l||l.command.commandId!==i)return!1;if(!0===e.ok&&rX(l.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&&!rX(l.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("execute_sandbox_tool_call"===e)return!0===t.reported&&t.request_id?.trim()&&t.tool_call_id?.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(rZ)?t:void 0;if("scroll_to"===e)return[t.x,t.y,t.maxX,t.maxY,t.viewportWidth,t.viewportHeight].every(e=>rZ(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&&rZ(t.width)&&rZ(t.height)&&(void 0===t.uid||t.uid?.trim())?t:void 0}}}(l.command.type,e.result),"take_snapshot"===l.command.type&&r&&"runtimeSnapshot"in r&&this.storeRuntimeSnapshot(a.clientId,r.runtimeSnapshot)),r)l.resolve(r);else{let t=e.error??{},r=t.code?.trim(),o=r&&rz.has(r)?r:void 0;l.reject(new rY(o??(rX(n=l.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":"execute_sandbox_tool_call"===n?"TOOL_CALL_FAILED":"take_screenshot"===n?"SCREENSHOT_FAILED":"INSPECTION_FAILED"),t.message?.trim()||"Debugger control command failed"))}return l.timeout&&clearTimeout(l.timeout),s?a.parallelJobs.delete(i):a.activeJob=void 0,this.flushClient(a),!0}getActiveClient(){return[...this.clients.values()].filter(e=>e.socket.readyState===tc.OPEN&&e.lastSnapshotAtMs>0).sort((e,t)=>t.lastSnapshotAtMs-e.lastSnapshotAtMs)[0]}storeRuntimeSnapshot(e,t){let n=this.getSnapshotStore(e).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)}getConnectedClient(){return[...this.clients.values()].reverse().find(e=>e.socket.readyState===tc.OPEN)}getToolCallClient(){return[...this.clients.values()].reverse().find(e=>e.socket.readyState===tc.OPEN&&e.activeJob?.command.type==="submit_chat_query")??this.getActiveClient()??this.getConnectedClient()}startParallelJob(e,t){let n=t.command.commandId;e.parallelJobs.set(n,t),t.timeout=setTimeout(()=>{e.parallelJobs.delete(n)&&t.reject(new rY("TOOL_CALL_FAILED","Debugger control command timed out"))},r0(t.command));try{rK(e.socket,"control",t.command)}catch{this.disconnectClient(e,"Debugger control connection was closed")}}flushClient(e){if(e.activeJob||e.socket.readyState!==tc.OPEN)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 rY("CHAT_TIMEOUT","Debugger control command timed out"));try{rK(e.socket,"control",{commandId:t.command.commandId,type:"cancel_chat_query"})}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 rY(rX(t.command.type)?"RENDER_TIMEOUT":"COMMAND_TIMEOUT","Debugger control command timed out")),this.flushClient(e)}},r0(t.command));try{rK(e.socket,"control",t.command)}catch{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),this.snapshotsByClientId.delete(e.clientId);let r=new rY("DEBUGGER_DISCONNECTED",t);for(let t of(e.activeJob?.timeout&&clearTimeout(e.activeJob.timeout),e.activeJob?.reject(r),e.activeJob=void 0,e.parallelJobs.values()))t.timeout&&clearTimeout(t.timeout),t.reject(r);for(let t of(e.parallelJobs.clear(),e.queue.splice(0)))t.reject(r);n&&e.socket.readyState===tc.OPEN&&e.socket.close()}}let r2=["page","widget","app"],r3=["log","info","warn","error","debug","eval"],r4=new Set(["id","class","role","title","href","src","type","name","value","placeholder","disabled","checked","selected"]);function r5(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 r9(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 r8(e){return e.value??e.unserializableValue??e.description??e.type??""}function r7(e,t){var n,r;let o;return(n=e,"all"===(r=t)?r2:"page"===r||"widget"===r||"app"===r?[r]:(o=n.context,o?.page_id||o?.page_path?["page","app"]:o?.widget_id?["widget"]:r2)).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(r8).filter(Boolean).join(" "),...i?{url:i}:{},...void 0===a?{}:{lineNumber:a},...void 0===s?{}:{columnNumber:s},...void 0===o?{}:{updatedAtMs:o},entry:e}})})}function r6(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 oe(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 ot={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},on={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},or={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1};function oo(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 oi(e,t={}){try{return await e()}catch(e){return function(e,t={}){let n=e instanceof rY?e:new rY("INSPECTION_FAILED",String(e));return oo({...t,error:{code:n.code,message:n.message}},{isError:!0})}(e,t)}}function oa(e,t,n,r){let o=O(n.inputSchema);e.registerTool(t,{...n,inputSchema:o},r)}let os="/__wsd_mcp";async function ol({request:e,response:t,url:n},r,o){if("OPTIONS"===e.method){r$(t),t.writeHead(204),t.end();return}if("POST"!==e.method)return void rR(t,405,"Method not allowed");let i=n.searchParams.get("clientId")??void 0,a=void 0===i?r:o.getSnapshotStore(i),s=D(()=>{let e,t;return e=new T({name:"doubao-web-sdk-debugger-log",version:"0.0.1"}),t=async e=>{var t;let n=r9(a);if(!n.stored)return oo(n);let r=r5((t=n.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 oo({stored:!0,storedAt:n.storedAt,updatedAtMs:n.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,events:r.items})},oa(e,"list_chat_messages",{annotations:ot,description:"List conversation messages in chronological order from the latest debugger snapshot, including message content and generation status.",inputSchema:{}},async()=>{let e=r9(a);if(!e.stored)return oo(e);let t=a.snapshot?.debug_snapshot?.simulator??e.snapshot.simulator;return oo({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,streamStatus:t?.stream_status,messages:t?.messages??[]})}),oa(e,"list_console_messages",{annotations:ot,description:"List runtime console messages captured by the Doubao Web SDK debugger.",inputSchema:{levels:M(A(r3)).optional(),pageIdx:x().int().min(0).optional(),pageSize:x().int().min(1).max(200).optional(),query:P().optional(),target:A(["current","page","widget","app","all"]).optional()}},async e=>{let t=r9(a);if(!t.stored)return oo(t);let n=r5(r7(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 oo({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,total:n.total,pageIdx:n.pageIdx,pageSize:n.pageSize,hasMore:n.hasMore,messages:n.items.map(({entry:e,...t})=>t)})}),oa(e,"get_console_message",{annotations:ot,description:"Get one full runtime console message, including args and stack trace.",inputSchema:{msgid:P()}},async e=>{let t=r9(a);if(!t.stored)return oo(t);let n=r7(t.snapshot,"all").find(t=>t.msgid===e.msgid);return oo({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,found:!!n,...n?{message:n}:{msgid:e.msgid}})}),oa(e,"get_log_snapshot",{annotations:ot,description:"Return the latest compact debugger log snapshot.",inputSchema:{}},async()=>{let e=r9(a);return e.stored?oo({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,snapshot:e.snapshot}):oo(e)}),oa(e,"list_render_targets",{annotations:ot,description:"List Page and Widget targets that can be rendered by the Web SDK debugger.",inputSchema:{type:A(["all","page","widget"]).optional()}},async e=>{var t,n;let r,o=r9(a);return o.stored?oo({stored:!0,storedAt:o.storedAt,updatedAtMs:o.updatedAtMs,...(t=o.snapshot,n=e.type??"all",r=t.render_targets??{},{pages:"widget"===n?[]:(r.pages??[]).map(e=>oe(e,"page")).filter(Boolean),widgets:"page"===n?[]:(r.widgets??[]).map(e=>oe(e,"widget")).filter(Boolean),...r.currentTarget?{currentTarget:r.currentTarget}:{}})}):oo(o)}),oa(e,"take_snapshot",{annotations:ot,description:"Capture and return a fresh text snapshot of the currently rendered Page or Widget card.",inputSchema:{target:A(["current","page","widget"]).optional(),verbose:$().optional()}},e=>oi(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,d=t.target??"current";if(("page"===d||"widget"===d)&&p!==d)return{available:!1,reason:"TARGET_MISMATCH",requestedTarget:d,currentTarget:l};if(!s.root)return{available:!1,reason:"NO_RENDERED_TARGET",currentTarget:l};let c=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 d=" ".repeat(t);if("text"===e.type)return void o.push(`${d}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||r4.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===c&&u.push("[selected]"),o.push(`${d}${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,...c?{selectedUid:c}:{},truncated:!0===s.truncated,snapshot:u.text,snapshotUpdatedAtMs:s.updatedAtMs}}({runtime_snapshot:(await o.execute("take_snapshot",{target:e.target??"current"},i)).runtimeSnapshot},e),n=r9(a),r={stored:n.stored,...n.stored?{storedAt:n.storedAt,updatedAtMs:n.updatedAtMs}:{},...t};return oo(r,{text:t.available?t.snapshot:JSON.stringify(r,null,2)})},{available:!1,stored:!1})),oa(e,"get_computed_style",{annotations:ot,description:"Get computed CSS styles for an element uid in the current Page or Widget target.",inputSchema:{properties:M(P().min(1)).max(100).optional(),uid:P().min(1)}},({properties:e,uid:t})=>oi(async()=>oo(await o.execute("get_computed_style",{uid:t,...e?{properties:e}:{}},i)))),oa(e,"get_element_rect",{annotations:ot,description:"Get x, y, width, and height for an element uid in the emulated viewport.",inputSchema:{uid:P().min(1)}},({uid:e})=>oi(async()=>oo(await o.execute("get_element_rect",{uid:e},i)))),oa(e,"take_screenshot",{annotations:ot,description:"Take a screenshot of the current Page or Widget target, or of one element uid.",inputSchema:{format:A(["png","jpeg","webp"]).optional(),quality:x().min(0).max(100).optional(),uid:P().min(1).optional()}},({format:e="png",quality:t,uid:n})=>oi(async()=>{let r=await o.execute("take_screenshot",{format:e,...void 0!==t?{quality:t}:{},...n?{uid:n}:{}},i),{data:a,...s}=r;return oo({captured:!0,...s},{image:{data:a,mimeType:r.mimeType}})},{captured:!1})),oa(e,"scroll_to",{annotations:or,description:"Scroll a Page or Widget container to absolute coordinates, or return its current scroll position.",inputSchema:{uid:P().min(1).optional(),x:x().min(0).optional(),y:x().min(0).optional()}},({uid:e,x:t,y:n})=>oi(async()=>oo({scrolled:!0,...await o.execute("scroll_to",{uid:e,x:t,y:n},i)}),{scrolled:!1})),oa(e,"set_viewport",{annotations:or,description:"Set the current Page or Widget emulated viewport size.",inputSchema:{height:x().int().min(1).max(9999),width:x().int().min(1).max(9999)}},({height:e,width:t})=>oi(async()=>oo({updated:!0,viewport:await o.execute("set_viewport",{height:e,width:t},i)}),{updated:!1})),oa(e,"render_page",{annotations:on,description:"Render a Page route in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{url:P().min(1)}},({url:e})=>oi(async()=>oo({rendered:!0,target:(await o.execute("render_page",{url:e},i)).target}),{rendered:!1})),oa(e,"render_widget",{annotations:on,description:"Render a Widget card in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{structuredContent:j(P(),C()).optional(),widgetId:P().min(1)}},({structuredContent:e,widgetId:t})=>oi(async()=>oo({rendered:!0,target:(await o.execute("render_widget",{structuredContent:e??{},widgetId:t},i)).target}),{rendered:!1})),oa(e,"submit_chat_query",{annotations:on,description:"Submit a chat query through the connected Web SDK debugger and wait for the simulator response to complete.",inputSchema:{query:P().trim().min(1)}},({query:e})=>oi(async()=>oo({submitted:!0,...await o.execute("submit_chat_query",{query:e},i)}),{submitted:!1})),oa(e,"list_agent_trace_events",{annotations:ot,description:"List Agent-side simulator and runtime trace events captured by the debugger.",inputSchema:{category:M(P()).optional(),event:P().optional(),pageIdx:x().int().min(0).optional(),pageSize:x().int().min(1).max(200).optional(),requestId:P().optional()}},t),oa(e,"list_agent_tool_calls",{annotations:ot,description:"List Agent-side simulator tool calls captured by the debugger.",inputSchema:{pageIdx:x().int().min(0).optional(),pageSize:x().int().min(1).max(200).optional(),query:P().optional(),requestId:P().optional(),status:M(P()).optional(),toolName:P().optional()}},async e=>{var t;let n=r9(a);if(!n.stored)return oo(n);let r=r5((t=n.snapshot,(t.simulator?.tool_calls??[]).map(r6)).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 oo({stored:!0,storedAt:n.storedAt,updatedAtMs:n.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,toolCalls:r.items})}),e}),l=R(s);try{await l(e,t)}catch(e){t.headersSent?t.destroy(e instanceof Error?e:void 0):rR(t,500,e instanceof Error?e.message:String(e))}finally{await s.close().catch(()=>void 0)}}let op="/__web_sdk_debug_scenes",od="/__web_sdk_widget_view_data_templates",oc={"Cache-Control":"no-cache"};async function ou(e,t){try{let n=await t?.()??{templatesByEntry:{},templatesByWidget:{}};rN(e,200,n,oc)}catch(t){rv.error("加载 Widget viewData 模板失败",{error:t}),rN(e,500,{templatesByEntry:{},templatesByWidget:{}},oc)}}let om=f("node:crypto"),oh="/__dbx_real_device_debug",of=`${oh}/state`,og=`${oh}/start`,oy=`${oh}/cancel`,ob=`${oh}/qr`;class o_{accessToken;provider;getDebugContext(){if(this.provider&&this.accessToken)return{stateEndpoint:of,startEndpoint:og,cancelEndpoint:oy,qrEndpoint:ob,accessToken:this.accessToken,pollIntervalMs:500}}setProvider(e){this.provider=e,this.accessToken=e?om.randomBytes(32).toString("hex"):void 0}dispose(){this.setProvider(void 0)}getRequestRoutes(){return[{match:e=>e.pathname.startsWith(oh),handle:({request:e,response:t,url:n})=>this.serveRequest(e,t,n)}]}async serveRequest(e,t,n){if(!this.validateRequest(e,t))return;let r=this.provider;if(!r)return this.writeError(t,503,"REAL_DEVICE_DEBUG_UNAVAILABLE","Physical device debugging is unavailable");let o=await this.readJsonBody(e,t);if(o)try{if(n.pathname===of||n.pathname===og){if(Object.keys(o).length>0)return this.writeError(t,400,"INVALID_REQUEST","Unexpected request fields");let e=n.pathname===of?await r.getState():await r.start();rN(t,200,e);return}if(n.pathname===oy){let e=o.operationId;if("string"!=typeof e||!e||1!==Object.keys(o).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid operationId");rN(t,200,await r.cancel(e));return}if(n.pathname===ob){let{operationId:e,kind:n}=o;if("string"!=typeof e||!e||"modern"!==n&&"legacy"!==n||2!==Object.keys(o).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid QR request");let i=await r.getQrImage(e,n);if(!i)return this.writeError(t,404,"QR_NOT_FOUND","QR image is unavailable");r$(t),t.writeHead(200,{"Content-Length":i.body.byteLength,"Content-Type":i.contentType}),t.end(i.body);return}return this.writeError(t,404,"NOT_FOUND","Not found")}catch{return this.writeError(t,500,"REAL_DEVICE_DEBUG_FAILED","Physical device debugging failed")}}validateRequest(e,t){var n,r;let o,i,a;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))return this.writeError(t,403,"FORBIDDEN_HOST","Forbidden host"),!1;let s=e.headers["x-dbx-real-device-token"];if("string"!=typeof s||!this.accessToken||(n=s,r=this.accessToken,i=(o=new TextEncoder).encode(n),a=o.encode(r),!(i.length===a.length&&om.timingSafeEqual(i,a))))return this.writeError(t,401,"UNAUTHORIZED","Unauthorized"),!1;if("POST"!==e.method)return this.writeError(t,405,"METHOD_NOT_ALLOWED","Method must be POST"),!1;if(!(e.headers["content-type"]?.toLowerCase()??"").startsWith("application/json"))return this.writeError(t,415,"UNSUPPORTED_MEDIA_TYPE","Content-Type must be application/json"),!1;let l=e.headers.origin;return!l||l===`http://${e.headers.host}`||(this.writeError(t,403,"FORBIDDEN_ORIGIN","Forbidden origin"),!1)}async readJsonBody(e,t){let n,r;try{n=await rM(e,t,4096)}catch{return this.writeError(t,413,"PAYLOAD_TOO_LARGE","Request body is too large")}if(!n.trim())return{};try{r=JSON.parse(n)}catch{return this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body")}return!r||"object"!=typeof r||Array.isArray(r)?this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body"):r}writeError(e,t,n,r){e.writableEnded||e.destroyed||rN(e,t,{error:{code:n,message:r}})}}let ov={"Cache-Control":"no-cache"};async function ow({request:e,response:t,url:n},r,o){let i;if("OPTIONS"===e.method){r$(t,ov),t.writeHead(204),t.end();return}if("GET"===e.method){let e;return void rN(t,200,function(e,t){if(!e?.debug_snapshot)return e;let{debug_snapshot:n,...r}=e;return t?{...r,snapshot:n}:r}(r.snapshot,null!=(e=n.searchParams.get("DEBUG"))&&"0"!==e&&"false"!==e.toLowerCase())??{stored:!1},ov)}if("POST"!==e.method)return void rN(t,405,{error:"Method not allowed"},ov);try{i=JSON.parse(await rM(e,t,0xa00000))}catch(e){rN(t,400,{error:e.message},ov);return}oS(r,o,i),rN(t,200,{ok:!0,updated_at_ms:r.updatedAtMs},ov)}function oS(e,t,n){var r;let o,i="string"==typeof(o=(r=n).snapshot.client_id??r.debug_snapshot?.client_id)&&o.trim()?o.trim():void 0;n=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}}}}(i?t.getSnapshotStore(i).snapshot:e.snapshot,n),e.snapshot=n,e.updatedAtMs=Date.now(),t.noteSnapshot(i)}let oE="/app_developer/api/sandbox/",ox=`${oE}session/business_info/update`,oA=new Set([`${oE}resources/notices/pull`,`${oE}resources/tasks/pull`]),oT={"Access-Control-Expose-Headers":rC},oC=new Set;function oI(e,t,n,r,o,i){if("applet0930"!==process.env.DEBUG)return!1;let a=`${o[rT]??""} ${e} ${t.pathname}`,s=oA.has(t.pathname);if(s&&n>=500){if(oC.has(a))return!1;oC.add(a)}else s&&n<500&&oC.delete(a);let l=Number(process.hrtime.bigint()-r)/1e6;return rv.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:l,headers:o,logId:i}),!0}function oP({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a}){rF({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a})}function oO(e,t,n){return n&&!(oA.has(e.pathname)&&t>=500)}function oD(e,t){if(e.pathname!==ox||!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=process.hrtime.bigint(),l=rH(t,o);try{let t,p=a?await eH({internal:!0,path:`${i.pathname}${i.search}`,method:e,body:n,headers:r,signal:l}):await fetch(i,{body:"GET"===e||"HEAD"===e?void 0:n,headers:r,method:e,signal:l}),d=oI(e,i,p.status,s,r,p.headers.get(rC)??void 0);if(o.destroyed||o.writableEnded)return void p.body?.cancel().catch(()=>void 0);let c=await rj(p);return oO(i,p.status,d)&&oP({method:e,requestBody:oD(i,n),requestHeaders:r,responseBody:c,responseHeaders:p.headers,statusCode:p.status,targetUrl:i}),o.destroyed||o.writableEnded||(t=rk(p.headers,[rC]),r$(o,oT),o.writeHead(p.status,t),o.end(c)),{body:c,ok:p.ok}}catch(p){if(o.destroyed||o.writableEnded||l.aborted)return;let t=`Failed to proxy sandbox request: ${p instanceof Error?p.message:String(p)}`,a=oI(e,i,502,s,r);oO(i,502,a)&&oP({method:e,requestBody:oD(i,n),requestHeaders:r,responseBody:t,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:i}),rR(o,502,t,oT)}}async function o$(e,t,n={}){let r;if("POST"!==e.method)return void rR(t,405,"Method not allowed",oT);try{r=JSON.parse(await rM(e,t,0xa00000))}catch(e){rR(t,400,`Invalid sandbox proxy payload: ${e.message}`,oT);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??en);if(!o)return void rR(t,404,"Sandbox endpoint not found",oT);if(!n.sandboxSessionId)return void rN(t,200,{code:-1,message:"无法模拟平台服务:当前未获取到开发者登录态或 Sandbox session 创建失败。"},oT);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(rO({...e.headers,...n,...void 0===r?{}:{"content-length":String(Buffer.byteLength(r))},"content-type":"application/json"},t,{...ea(),...o?{[rT]: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===ox&&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 oR=f("node:util"),oN="/app_developer/api/sandbox/bridge/events",oL="/app_developer/api/sandbox/bridge/response",oM=new Set(["connection","content-length","host"]),oj=new Set(["heartbeat"]),oB=[500,1e3,2e3,5e3],oU=0;function oF(e){return e.length<=8?e:`${e.slice(0,4)}...${e.slice(-4)}`}function oH(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 oH({error_message:"bridge request_id is required",http_status:0,request_id:r,success:!1});if(!e.path?.startsWith("/"))return oH({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 oH({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||oM.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 d;let e=await fetch(o,{body:s,headers:a,method:i,redirect:"manual",signal:l.signal}),t=await e.text();return d={method:i,requestBody:s,requestHeaders:a,responseBody:t,responseHeaders:e.headers,statusCode:e.status,targetUrl:o},rF(d),oH({body:t,http_status:e.status,request_id:r,success:!0},e.headers,e.statusText)}catch(e){return rF({method:i,requestBody:s,requestHeaders:a,responseBody:e instanceof Error?e.message:String(e),responseHeaders:new Headers,statusCode:0,targetUrl:o}),oH({error_message:e instanceof Error?e.message:String(e),http_status:0,request_id:r,success:!1})}finally{clearTimeout(p)}}function oV(e,t=new Set){if(Array.isArray(e)){for(let n of e)oV(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}oV(r,t)}return[...t]}function oG(e,t){e.onLog?.(t)}function oq(e){try{return JSON.parse(e)}catch{return}}function oJ({detail:e,requestHeaders:t,status:n,targetUrl:r}){if("applet0930"===process.env.DEBUG){if("number"==typeof n)return void rv.request({method:"CONNECT",url:r.pathname,statusCode:n,headers:t,context:{detail:e}});rv.info("Bridge connection pending",{url:r.pathname,detail:e,ppe:ti(t)})}}function oK(e,t={}){"applet0930"===process.env.DEBUG&&rv.info(e,t)}async function oz(e,t){let n=JSON.stringify({sandbox_session_id:e.sandboxSessionId,...t}),r={"content-type":"application/json",[rT]:e.sandboxSessionId,...ea()};if(e.targetOrigin){let t=new URL(oL,e.targetOrigin),o=await fetch(t,{body:n,headers:r,method:"POST"}),i=await o.text();if(rF({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:oq(i)}}let o=new URL(oL,en),i=await eH({body:n,headers:r,internal:!0,method:"POST",path:oL}),a=await i.text();if(rF({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:oq(a)}}async function oY(e,t){let n;try{n=JSON.parse(t)}catch(e){rv.warn("Sandbox Bridge request parse failed",{reason:e.message});return}let r=Date.now(),o=`bridge-${r}-${++oU}`,i=n.request_id||"",a={id:o,request:n,requestId:i,sandboxSessionId:e.sandboxSessionId,timestamp:r};oG(e,{...a,logIds:oV(n),status:"pending",updatedAtMs:r});let s=await oW(n),l={...s.response,headers:s.responseHeaders,status_text:s.statusText};try{let t=await oz(e,s.response);oG(e,{...a,logIds:oV([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:oV([n,l]),response:l,status:"error",updatedAtMs:Date.now()}),t}}async function oX(e,t,n){let r={sandbox_session_id:e.sandboxSessionId},o=new URL(`${oN}?sandbox_session_id=${encodeURIComponent(e.sandboxSessionId)}`,en),i=(d=e.sandboxSessionId,{accept:"text/event-stream",host:o.host,[rT]:d,...ea()});oJ({detail:`host=${i.host} session=${oF(e.sandboxSessionId)}`,requestHeaders:i,status:"pending",targetUrl:o}),oK("bridge/events request",{headers:{accept:i.accept,host:i.host,[rT]:oF(e.sandboxSessionId),"x-tt-env":i["x-tt-env"],"x-use-ppe":i["x-use-ppe"]},path:oN,query:r});let a=await eH({headers:i,internal:!0,method:"GET",path:oN,query:r,signal:t});if(oJ({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(()=>"");rF({method:"GET",requestBody:void 0,requestHeaders:i,responseBody:e,responseHeaders:a.headers,statusCode:a.status,targetUrl:o}),rv.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}rF({method:"GET",requestBody:void 0,requestHeaders:i,responseBody:"",responseHeaders:a.headers,statusCode:a.status,targetUrl:o}),n?.();let s=a.body.getReader(),l=new oR.TextDecoder,p="";for(;!t.aborted;){let{done:t,value:n}=await s.read();if(t){oK("bridge/events stream ended",{session:oF(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||oj.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);rv.info("Bridge event received",{event:e.name,requestId:n,ppe:ti(t)}),rv.info(`Event detail
|
|
33
|
+
${e.data}`)}(s,i),"bridge_request"===s.name){var d,c=a.headers,u=a.status;rF({method:`EVENT ${s.name}`,requestBody:s.data,requestHeaders:i,responseBody:"",responseHeaders:c,statusCode:u,targetUrl:o}),oY(e,s.data).catch(e=>{rv.warn("Sandbox Bridge request failed",{reason:e.message})})}else if("TOOL_CALL"===s.name){let t=z(oq(s.data));t?Promise.resolve(e.onSimulatorToolCall?.(t)).catch(e=>{rv.warn("Sandbox tool call forwarding failed",{reason:e instanceof Error?e.message:String(e),requestId:t.request_id,toolCallId:t.tool_call.tool_call_id})}):rv.warn("Sandbox tool call event parse failed")}else if("sandbox_resource_changed"===s.name){let t=function(e){let t=oq(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):rv.warn("Sandbox resource event parse failed")}else if("card_delta"===s.name){let t=function(e){let t=oq(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"}):rv.warn("Sandbox simulator event parse failed",{event:s.name})}else if("get_simulator_card_snapshots"===s.name){let t=oq(s.data);t&&"object"==typeof t&&!Array.isArray(t)?e.onSimulatorEvent?.({payload:t,type:s.name}):rv.warn("Sandbox simulator event parse failed",{event:s.name})}r=p.search(/\r?\n\r?\n/)}}}async function oZ(e,t){let n=0,r=!1;for(;!t.aborted;){try{await oX(e,t,()=>{r=!1,e.onConnectionStatusChange?.("connected")}),n=0}catch(n){if(t.aborted)return;let e=n.status;if(r||(rv.warn("无法接收来自平台服务的请求",{reason:n.message}),r=!0),401===e||403===e||404===e)return}e.onConnectionStatusChange?.("reconnecting"),await (0,_.setTimeout)(oB[Math.min(n,oB.length-1)],void 0,{signal:t}).catch(()=>void 0),n+=1}}let oQ=f("node:net"),o0="/__web_sdk_sandbox_bridge_logs",o1="DOUBAO_APPS_SANDBOX_BRIDGE_ORIGINS",o2="/app_developer/api/sandbox/session/business_info/update";function o3(e){if(!e)return!1;try{return tQ.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 eH({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;rv.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}){rF({method:e,requestBody:t,requestHeaders:n,responseBody:r,responseHeaders:o,statusCode:i,targetUrl:a})}async function o7(e,t,n,r,o,i){let a,s,l="/app_developer/api/sandbox/session/create",p="POST",d=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,oQ.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]}(),c=JSON.stringify({sandbox_project_id:e,manifest:n?.()??(o3(t)?tQ.readFileSync(t,"utf8"):""),business_templates:o3(r)?tQ.readFileSync(r,"utf8"):"",...i?{app_id:i}:{},...d.length>0?{bridge_origins:d}:{}}),u={"content-type":"application/json",...ea()},m=new URL(l,o??en),h=process.hrtime.bigint();try{a=await o4({body:c,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:c,requestHeaders:u,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:m}),t}let f=a.headers.get(rC)||"",g=await a.text();o9(p,m,a.status,h,u,f),o8({method:p,requestBody:c,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 o6(e,t,n,r,o,i){try{return await o7(e,t,n,r,o,i)}catch(e){return rv.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",...ea()},l=new URL(o,t??en),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 d=n.headers.get(rC)||"",c=await n.text();o9(i,l,n.status,p,s,d);try{r=JSON.parse(c||"{}")}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${d?`,log_id=${d}`:""}`)}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||d?`,log_id=${r.log_id||d}`:""}`);return u}async function io(e,t){if(!e)return ie();try{return await ir(e,t)}catch(e){return rv.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",...ea(),[rT]:t},l=new URL(o2,n??en),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 d=r.headers.get(rC)||"",c=await r.text();o9(i,l,r.status,p,s,d),o8({method:i,requestBody:JSON.stringify({...e.csrPem?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]",sandbox_session_id:t}),requestHeaders:s,responseBody:c,responseHeaders:r.headers,statusCode:r.status,targetUrl:l});try{o=JSON.parse(c||"{}")}catch{throw Error(`更新 Sandbox session 信息失败:HTTP ${r.status} 响应不是有效 JSON${d?`,log_id=${d}`:""}`)}if(!r.ok||void 0!==o.code&&0!==o.code)throw Error(`更新 Sandbox session 信息失败:${o.message||r.statusText||r.status}${o.log_id||d?`,log_id=${o.log_id||d}`:""}`)}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),rv.info("Sandbox business info 已自动上传",{sessionId:e}),it(t.csrPem)}catch(e){rv.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",...ea()},s=new URL(r,t??en),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(rC)||"",d=await n.text();o9(o,s,n.status,l,a,p),o8({method:o,requestBody:i,requestHeaders:a,responseBody:d,responseHeaders:n.headers,statusCode:n.status,targetUrl:s});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 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 o7(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,ic(t),e.bridge=iu(e,o),rv.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){return{bridgeLogs:e.bridgeLogs,bridgeLogsUpdatedAtMs:e.bridgeLogsUpdatedAtMs,connectionStatus:e.resourceConnectionStatus,events:e.resourceEvents,generation:e.resourceGeneration,instanceId:e.resourceInstanceId,simulatorEvents:e.simulatorEvents,updatedAtMs:e.resourceEventsUpdatedAtMs}}function id(e){clearTimeout(e.logBroadcastTimer),e.logBroadcastTimer=void 0;let t=ip(e);for(let n of e.eventListeners)n(t)}function ic(e){e.resourceEventsUpdatedAtMs=Math.max(Date.now(),e.resourceEventsUpdatedAtMs+1),id(e)}function iu(e,t){var n={onConnectionStatusChange:t=>{e.resourceConnectionStatus!==t&&(e.resourceConnectionStatus=t,ic(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),e.logBroadcastTimer??=setTimeout(()=>id(e),50)},onResourceChanged:t=>{e.resourceEvents.push({...t,sequence:++e.resourceEventSequence}),e.resourceEvents.length>200&&e.resourceEvents.splice(0,e.resourceEvents.length-200),ic(e)},onSimulatorEvent:t=>{e.simulatorEvents.push({...t,sequence:++e.simulatorEventSequence}),e.simulatorEvents.length>200&&e.simulatorEvents.splice(0,e.simulatorEvents.length-200),ic(e)},onSimulatorToolCall:e.onSimulatorToolCall,sandboxSessionId:t,targetOrigin:e.sandboxTargetOrigin};if(!n.sandboxSessionId)return void rv.warn("Sandbox Bridge skipped: missing sandbox session id");let r=new AbortController;return oK("start sandbox bridge",{session:oF(n.sandboxSessionId)}),n.onConnectionStatusChange?.("connecting"),oZ(n,r.signal),{close:()=>r.abort()}}function im(e){e.bridgeLogs.length=0,e.bridgeLogsUpdatedAtMs=Math.max(Date.now(),e.bridgeLogsUpdatedAtMs+1),id(e)}async function ih(e,t,n){if("POST"!==e.method)return void rR(t,405,"Method not allowed");if(!n)return void rR(t,503,"Sandbox session is not initialized");try{let r=await rM(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 rR(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);rN(t,200,{code:0,data:{sandbox_appid:o.appId,business_info_uploaded:o.businessInfoUploaded,sandbox_session_id:o.sessionId},message:"ok"})}catch(e){rR(t,500,e.message)}}function ig(e){let t=e.appId?.trim(),n=t&&!t.startsWith("doubao-sandbox-app-")?t:void 0,r=function(e){let t=tC.resolve(e??process.cwd()),n=t;try{n=tQ.realpathSync.native(t)}catch{}return(0,om.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=tC.isAbsolute(e)?e:tC.resolve(t??process.cwd(),e);return o3(n)?n:void 0}(r,t),i="";if(r&&!o)rv.warn(`Sandbox CSR 文件不存在:${r}`);else if(o)try{i=tQ.readFileSync(o,"utf8").trim()}catch(e){rv.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,onSimulatorToolCall:e.onSimulatorToolCall,projectId:r,sessionAppId:n,targetOrigin:e.targetOrigin}}class iy{configKey;manifestReader;state;constructor(e,t,n){this.state=e,this.configKey=t,this.manifestReader=n}static async start(e){let t=ig(e),n=await o6(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,eventListeners:new Set,onSimulatorToolCall:t.onSimulatorToolCall,resourceConnectionStatus:"connecting",resourceEventSequence:0,resourceEvents:[],resourceEventsUpdatedAtMs:0,resourceGeneration:1,resourceInstanceId:(0,om.randomUUID)(),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 iy(o,t.key,t.manifestReader);return o.bridge=n.sessionId?iu(o,n.sessionId):void 0,i}get sessionId(){return this.state.sandboxSessionId}close(){this.state.bridge?.close(),clearTimeout(this.state.logBroadcastTimer),this.state.eventListeners.clear()}subscribeEvents(e){return this.state.eventListeners.add(e),e(ip(this.state)),()=>{this.state.eventListeners.delete(e)}}clearBridgeLogs(){im(this.state)}matches(e){let t=ig(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,om.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:o0,sandboxEventsAvailable:!0,...this.state.businessInfoInput.csrPem?{sandboxCsrPem:this.state.businessInfoInput.csrPem}:{},...this.state.businessInfoInput.phoneNum?{sandboxPhoneNum:this.state.businessInfoInput.phoneNum}:{}}}getRequestRoutes(){return[{match:o0,handle:({request:e,response:t})=>{var n;return n=this.state,void("GET"!==e.method&&"DELETE"!==e.method?rR(t,405,"Method not allowed"):("DELETE"===e.method&&n&&im(n),rN(t,200,{logs:n?.bridgeLogs??[],updatedAtMs:n?.bridgeLogsUpdatedAtMs??0},{"Cache-Control":"no-cache"})))}},{match:"/__web_sdk_sandbox_resource_events",handle:({request:e,response:t})=>{var n;return n=this.state,void("GET"!==e.method?rR(t,405,"Method not allowed"):rN(t,200,{connectionStatus:n?.resourceConnectionStatus??"connecting",events:n?.resourceEvents??[],generation:n?.resourceGeneration??0,simulatorEvents:n?.simulatorEvents??[],updatedAtMs:n?.resourceEventsUpdatedAtMs??0},{"Cache-Control":"no-cache"}))}},{match:"/__web_sdk_sandbox_proxy__",handle:({request:e,response:t})=>o$(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})},{match:"/__web_sdk_sandbox_session_recreate__",handle:({request:e,response:t})=>ih(e,t,this.state)}]}}function ib(e,t){return e.relativePath<t.relativePath?-1:+(e.relativePath>t.relativePath)}let i_="/__tools/tools.json",iv="/__events/events.json",iw="manifest.yaml",iS="skill";function iE(e){if(!e)return!1;try{return tQ.statSync(e).isFile()}catch{return!1}}function ix(e,t){if(!e)return;let n=tC.isAbsolute(e)?e:tC.resolve(t??process.cwd(),e);return iE(n)?n:void 0}function iA(e,t){if(e&&t)return tC.relative(t,e).split(tC.sep).join("/")||"."}function iT(e){let t=tC.resolve(e);for(;;){if(iE(tC.join(t,iw)))return t;let e=tC.dirname(t);if(e===t)return;t=e}}function iC(e){try{return tQ.lstatSync(e),!0}catch{return!1}}function iI(e,t,n,r){let o;if(!t.reader&&iE(t.sourcePath)){var i;let n,o=tQ.statSync(t.sourcePath);r$(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":o.size,"Content-Type":r}),i=t.sourcePath,(n=tQ.createReadStream(i)).once("error",()=>e.destroy()),n.pipe(e);return}try{o=t.reader?.()}catch{o=void 0}void 0===o?rR(e,404,`${n} not found`):(r$(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":Buffer.byteLength(o),"Content-Type":r}),e.end(o))}function iP(e,t){return function(e){let t,n;if(!e)return{layout:"missing",entries:[]};let r=tC.resolve(e);try{t=tQ.lstatSync(r)}catch(e){if("ENOENT"===e.code)return{directory:r,layout:"missing",entries:[]};return{directory:r,layout:"invalid",entries:[],error:`skill path cannot be inspected: ${r}: ${e.message}`}}if(t.isSymbolicLink()||!t.isDirectory())return{directory:r,layout:"invalid",entries:[],error:`skill path must be a non-symlink directory: ${r}`};try{var o;let e;o=r,e=[],function t(n){for(let r of tQ.readdirSync(n,{withFileTypes:!0})){if(r.isSymbolicLink())continue;let i=tC.join(n,r.name);r.isDirectory()?t(i):r.isFile()&&"SKILL.md"===r.name&&e.push(function(e,t){let n=tC.relative(e,t).split(tC.sep).join("/");return{content:tQ.readFileSync(t,"utf8"),relativePath:n}}(o,i))}}(o),n=e}catch(e){return{directory:r,layout:"invalid",entries:[],error:`skill directory is not readable: ${r}: ${e.message}`}}return n.sort(ib),n.length>0?{directory:r,layout:"resolved",entries:n}:{directory:r,layout:"missing",entries:[]}}(function(e,t){if(t){if(!t)return;if(tC.isAbsolute(t))return t;let n=e?iT(e):void 0,r=[e,n,process.cwd()].map(e=>tC.resolve(e??process.cwd(),t));return[...new Set(r)].find(iC)??r[0]}if(!e)return;let n=iT(e);return[...new Set([n?tC.join(n,iS):void 0,tC.join(e,iS),tC.join(process.cwd(),iS)].filter(Boolean))].find(iC)}(e,t))}class iO{appDirectory;businessTemplatesPath;manifestPath;manifestReader;eventsConfigReader;eventsConfigSource;toolsConfigReader;toolsConfigSource;manifestSource;skillsDirectory;sourceKey;constructor(e){var t,n,r;this.appDirectory=e.appDirectory,this.manifestPath=e.manifestPath?ix(e.manifestPath,e.appDirectory):e.manifestSourcePath??(e.manifestReader?void 0:function(e){if(!e)return;let t=iT(e);return[...new Set([t?tC.join(t,iw):void 0,tC.join(process.cwd(),iw)].filter(Boolean))].find(iE)}(e.appDirectory)),this.businessTemplatesPath=(t=this.manifestPath,n=e.businessTemplatesPath,r=e.appDirectory,n?ix(n,r):t?ix(tC.join(tC.dirname(t),"business-templates.yaml"),r):void 0),this.manifestReader=e.manifestReader,this.eventsConfigReader=e.eventsConfigReader,this.toolsConfigReader=e.toolsConfigReader,this.eventsConfigSource={reader:e.eventsConfigReader,sourcePath:e.eventsConfigSourcePath},this.skillsDirectory=e.skillsDirectory;let o=iP(e.appDirectory,this.skillsDirectory);if(e.skillsDirectory&&"resolved"!==o.layout)throw Error(o.error??`Simulator skills directory contains no runtime Skill: ${e.skillsDirectory}`);this.toolsConfigSource={reader:e.toolsConfigReader,sourcePath:e.toolsConfigSourcePath},this.manifestSource={reader:e.manifestReader,sourcePath:e.manifestSourcePath??this.manifestPath},this.sourceKey=JSON.stringify([this.appDirectory,this.businessTemplatesPath,this.manifestPath,this.eventsConfigSource.sourcePath,this.toolsConfigSource.sourcePath,this.manifestSource.sourcePath,this.skillsDirectory])}matches(e){let t=new iO(e);return this.sourceKey===t.sourceKey&&this.eventsConfigReader===t.eventsConfigReader&&this.toolsConfigReader===t.toolsConfigReader&&this.manifestReader===t.manifestReader}getDebugContext(){let e=iP(this.appDirectory,this.skillsDirectory),t="resolved"===e.layout?e.directory:void 0,n=iA(this.businessTemplatesPath,this.appDirectory),r=iA(this.eventsConfigSource.sourcePath,this.appDirectory),o=iA(this.toolsConfigSource.sourcePath,this.appDirectory),i=iA(this.manifestSource.sourcePath,this.appDirectory),a=iA(t,this.appDirectory);return{...this.eventsConfigSource.reader||this.eventsConfigSource.sourcePath?{eventsConfigUrl:iv,...this.eventsConfigSource.sourcePath?{eventsConfigOriginalUrl:this.eventsConfigSource.sourcePath,...r?{eventsConfigRelativePath:r}:{}}:{}}:{},...this.toolsConfigSource.sourcePath?{toolsConfigOriginalUrl:this.toolsConfigSource.sourcePath,toolsConfigUrl:i_,...o?{toolsConfigRelativePath:o}:{}}:{},...this.manifestSource.sourcePath?{simulatorManifestOriginalUrl:this.manifestSource.sourcePath,...i?{simulatorManifestRelativePath:i}:{}}:{},...this.businessTemplatesPath?{simulatorBusinessTemplatesOriginalUrl:this.businessTemplatesPath,...n?{simulatorBusinessTemplatesRelativePath:n}:{}}:{},...t?{simulatorSkillsDirectoryOriginalUrl:t,...a?{simulatorSkillsDirectoryRelativePath:a}:{}}:{}}}getRequestRoutes(){return[{match:iv,handle:({response:e})=>iI(e,this.eventsConfigSource,"Events config","application/json; charset=utf-8")},{match:i_,handle:({response:e})=>iI(e,this.toolsConfigSource,"Tools config","application/json; charset=utf-8")},{match:"/__simulator_manifest/manifest.yaml",handle:({response:e})=>iI(e,this.manifestSource,"Simulator manifest","application/yaml; charset=utf-8")},{match:"/__simulator_skills/index.json",handle:({response:e})=>{let t;"missing"===(t=iP(this.appDirectory,this.skillsDirectory)).layout?rR(e,404,"Simulator skills directory not found"):"invalid"===t.layout?rR(e,422,t.error??"Invalid simulator Skill layout"):rN(e,200,{skills:t.entries},{"Cache-Control":"no-cache"})}}]}}let iD=f("node:stream"),ik="/app_developer/api",i$=`${ik}/simulator/images/upload`,iR=new Set([`${ik}/simulator/chat`,i$,`${ik}/simulator/tool/report`]),iN={"Access-Control-Expose-Headers":rC};async function iL(e,t,n,r){if(!iR.has(n.pathname))return void rR(t,404,"未找到模拟器接口",iN);let o=r.targetOrigin??en,i=new URL(`${n.pathname}${n.search}`,o),a=rH(e,t);try{var s;let o=e.method??"GET",l=process.hrtime.bigint(),p=function(e,t,n){return Object.fromEntries(Object.entries(rO(e.headers,t,{...ea(),...n?{[rT]:n}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]))}(e,i,r.getSandboxSessionId?.()),d=await iM(e,t,n,o),c=r.targetOrigin?await fetch(i,{body:d,headers:p,method:o,signal:a}):await eH({internal:!0,path:`${n.pathname}${n.search}`,method:o,body:d,headers:p,signal:a});if(function(e,t,n,r,o,i){if("applet0930"!==process.env.DEBUG)return;let a=Number(process.hrtime.bigint()-r)/1e6;rv.request({method:e,url:`${t.pathname}${t.search}`,statusCode:n,durationMs:a,headers:o,logId:i})}(o,n,c.status,l,p,c.headers.get(rC)??void 0),t.destroyed||t.writableEnded)return void c.body?.cancel().catch(()=>void 0);await ij({method:o,requestBody:(s=d)instanceof Uint8Array?`(binary, ${s.byteLength} bytes)`:s,requestHeaders:p,requestUrl:n,response:t,upstreamResponse:c})}catch(e){if(t.destroyed||t.writableEnded||a.aborted)return;rR(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,iN)}}async function iM(e,t,n,r){if("GET"!==r&&"HEAD"!==r)return n.pathname===i$?await rL(e,t,0xb00000):await rM(e,t,0xb00000)}async function ij({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:o,upstreamResponse:i}){var a,s;if(r$(o,iN),o.writeHead(i.status,rk(i.headers,[rC])),a=r,s=i,a.pathname===`${ik}/simulator/chat`||s.headers.get("content-type")?.toLowerCase().includes("text/event-stream")===!0)return void await iB({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)(iD.Readable.fromWeb(i.body),o):void o.end();let l=await rj(i);rF({method:e,requestBody:t,requestHeaders:n,responseBody:l,responseHeaders:i.headers,statusCode:i.status,targetUrl:r}),o.end(l)}async function iB({method:e,requestBody:t,requestHeaders:n,requestUrl:r,response:o,upstreamResponse:i}){if(!i.body){rF({method:e,requestBody:t,requestHeaders:n,responseBody:"",responseHeaders:i.headers,statusCode:i.status,targetUrl:r}),o.end();return}let a=iD.Readable.fromWeb(i.body);if("applet0930"!==process.env.DEBUG)return void await (0,g.pipeline)(a,o);rF({method:e,requestBody:t,requestHeaders:n,responseBody:"(event stream)",responseHeaders:i.headers,statusCode:i.status,targetUrl:r});let s=new iD.Transform({transform(e,t,n){let o;try{o=String(e).split("\n\n").filter(Boolean)}catch(t){return rv.error(`failed to decode event stream chunk: ${t?.toString()}`),n(null,e)}for(let e of o)rv.info(`Event from ${r.pathname}${r.search}
|
|
34
|
+
${e}`);n(null,e)}});await (0,g.pipeline)(a,s,o)}async function iU(e,t){if("POST"!==e.method)return void rN(t,405,{message:"Method Not Allowed"});let n=rH(e,t);try{var r,o;let i,a,s,l=JSON.parse(await rM(e,t,0xa00000)),p=rP(l.url),d=(l.method??"GET").toUpperCase(),c=(r=l.header,a=new Headers(r??{"content-type":"application/json"}),["connection","content-length","host","origin","referer"].forEach(e=>a.delete(e)),a),u=await fetch(p,{signal:n,body:"GET"!==d&&"HEAD"!==d?function(e,t){let n=e.data;if(null==n)return;if("base64"===e.dataEncoding&&"string"==typeof n){var r;let e;return e=new ArrayBuffer((r=Buffer.from(n,"base64")).byteLength),new Uint8Array(e).set(r),e}if("string"==typeof n)return n;let o=t.get("content-type")?.toLowerCase()??"";if(o.includes("application/x-www-form-urlencoded")&&"object"==typeof n){let e=new URLSearchParams;return Object.entries(n).forEach(([t,n])=>{e.set(t,String(n))}),e.toString()}return o.includes("application/json")||"object"==typeof n?JSON.stringify(n):String(n)}(l,c):void 0,headers:c,method:d}),m="arraybuffer"===l.dataType||"arraybuffer"===l.responseType;if(m)i=Buffer.from(await u.arrayBuffer()).toString("base64");else{let e=await u.text();i="string"===l.dataType||0===e.length?e:JSON.parse(e)}rN(t,200,{data:i,dataEncoding:m?"base64":void 0,header:(o=u.headers,s={},o.forEach((e,t)=>{s[t]=e}),s),statusCode:u.status})}catch(e){if(n.aborted||t.destroyed)return;rN(t,500,{message:e instanceof Error?e.message:String(e)})}}let iF=f("../../../node_modules/.pnpm/send@1.2.0/node_modules/send/index.js"),iH="/__web_artifacts",iW="/wsd";function iV(e,t,n,r,o={}){r$(t,o.headers),iF(e,r,{root:n}).once("error",r=>{if(404===r.statusCode&&o.fallbackPath)return void iV(e,t,n,o.fallbackPath,{headers:o.headers});if(t.headersSent)return void t.destroy(r);let i=r.statusCode??500;rR(t,i,rw.STATUS_CODES[i]??"Internal Server Error")}).pipe(t)}let iG="/__webview",iq=`${iG}/client.js`,iJ=`${iG}/page`,iK=`${iG}/runtime`,iz=`${iG}/sw.js`,iY="x-doubao-web-view-target",iX="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",iZ=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11._f1ff5025b08d10e5d2b82ef6fc84d557/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-bootstrap.js"),f.b),iQ=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11._f1ff5025b08d10e5d2b82ef6fc84d557/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-page-client.js"),f.b),i0=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.3_@emnapi+core@1.11.3_@emnapi+runtime@1.11._f1ff5025b08d10e5d2b82ef6fc84d557/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-service-worker.js"),f.b);function i1(e,t,n,r=!1){if("GET"!==e.method&&"HEAD"!==e.method)return void rR(t,405,"Method Not Allowed");let o=tQ.readFileSync(n,"utf8");r$(t,{"Cross-Origin-Resource-Policy":"cross-origin"}),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)}function i2(e,t){let n=e.searchParams.get("parentOrigin")??t[0];if(!t.includes(n))throw Error("Invalid WebView parent origin");return n}async function i3(e,t,n,r){if("GET"!==e.method&&"HEAD"!==e.method)return void rR(t,405,"Method Not Allowed");let o=rH(e,t);try{let i=i2(n,r),a=rP(n.searchParams.get("url")??void 0),s=await fetch(a,{signal:o,headers:{"user-agent":iX,..."string"==typeof e.headers.accept?{accept:e.headers.accept}:{},..."string"==typeof e.headers["accept-language"]?{"accept-language":e.headers["accept-language"]}:{}},method:e.method}),l=s.url?new URL(s.url):a;l.hash=a.hash;let p=s.headers.get("content-type")??"",d=rk(s.headers);if(d["cache-control"]="no-cache",d["cross-origin-resource-policy"]="cross-origin",d["x-doubao-web-view-parent-origin"]=i,"HEAD"===e.method||!p.includes("text/html")){let n="HEAD"===e.method?void 0:Buffer.from(await s.arrayBuffer());r$(t),t.writeHead(s.status,{...d,[iY]:l.toString(),...n?{"content-length":n.byteLength}:{}}),t.end(n);return}let c=function(e,t,n){let r=new URLSearchParams({mobileUserAgent:iX,originalPath:`${t.pathname}${t.search}${t.hash}`,parentOrigin:n}).toString().replaceAll("&","&"),o=`<script src="${iq}?${r}"></script>`,i=/<head[^>]*>/i.exec(e);if(i){let t=i.index+i[0].length;return`${e.slice(0,t)}${o}${e.slice(t)}`}return`${o}${e}`}(await s.text(),l,i);r$(t),t.writeHead(s.status,{...d,[iY]:l.toString(),"content-length":Buffer.byteLength(c)}),t.end(c)}catch(e){if(o.aborted||t.destroyed)return;rR(t,502,`代理 web-view 页面失败: ${e instanceof Error?e.message:String(e)}`)}}async function i4(e){let t=new URL(e).toString();try{await S(t)}catch(e){rv.error("打开 Web 模拟器失败",{error:e}),rv.info("请手动打开 Web 模拟器(本地)",{url:t})}}async function i5(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 i9(e){var t;let n=await I(9e3),r=rw.createServer(rG((t=[`http://127.0.0.1:${n}`,`http://localhost:${n}`],[{match:`${iG}/bootstrap`,handle:({request:e,response:n,url:r})=>{if("GET"!==e.method&&"HEAD"!==e.method)return void rR(n,405,"Method Not Allowed");try{rP(r.searchParams.get("url")??void 0),i2(r,t)}catch{rR(n,400,"Invalid WebView URL");return}r$(n,{"Cross-Origin-Resource-Policy":"cross-origin"}),n.writeHead(200,{"cache-control":"no-store","content-type":"text/html; charset=utf-8"}),n.end("HEAD"===e.method?void 0:'<!doctype html><meta charset="utf-8"><script src="/__webview/bootstrap.js"><\/script>')}},{match:`${iG}/bootstrap.js`,handle:({request:e,response:t})=>i1(e,t,iZ)},{match:iz,handle:({request:e,response:t})=>i1(e,t,i0,!0)},{match:iq,handle:({request:e,response:t})=>i1(e,t,iQ)},{match:iK,handle:({request:e,response:t,url:n})=>(function(e,t,n){let r;try{r=rP(n.searchParams.get("url")??void 0)}catch(e){rR(t,400,`无效的 web-view 请求地址: ${e instanceof Error?e.message:String(e)}`);return}let o=rO(e.headers,r,{"user-agent":iX});for(let e of Object.keys(o))e.startsWith("sec-fetch-")&&delete o[e];rW(e,t,{createResponseHeaders:e=>{let t=rD(e),n=Array.isArray(e.location)?e.location[0]:e.location;if(n&&URL.canParse(n,r)){let e=new URL(n,r);t.location=`${iK}?url=${encodeURIComponent(e.toString())}`}return t["cache-control"]="no-cache",t},errorMessage:"代理 web-view 运行时请求失败",requestHeaders:o,targetUrl:r})})(e,t,n)},{match:iJ,handle:({request:e,response:n,url:r})=>i3(e,n,r,t)}]),({response:e})=>{rR(e,404,"WebView resource not found")}));await i5(r,0);let o=r.address(),i=`http://127.0.0.1:${o.port}`,a=rw.createServer(function({webViewOrigin:e,artifactOrigin:t,debugScenes:n,debuggerProtocol:r,distPath:o,getWidgetViewDataTemplates:i,mcpEndpoint:a,mcpHeaders:s,physicalDeviceDebugGateway:l,sandboxRuntime:p,simulatorAssets:d,simulatorTargetOrigin:c}){var u;let m={routes:[{match:e=>e.pathname.startsWith(iH),handle:({request:e,response:n,url:r})=>{let o,i;return o=r.pathname.replace(iH,"")||"/",i=new URL(`${o}${r.search}`,t),void rW(e,n,{createResponseHeaders:e=>({...rD(e),"cache-control":"no-cache"}),errorMessage:"代理 Web 产物失败",requestHeaders:rO(e.headers,i),targetUrl:i})}},{match:e=>e.pathname===iW||e.pathname.startsWith(`${iW}/`),handle:({request:e,response:t,url:n})=>{let r;!(r=n.pathname.slice(`${iW}/`.length))||r!==tC.basename(r)?rR(t,404,"Not found"):iV(e,t,tC.join(o,"wsd"),r,{headers:{"Cache-Control":"no-cache"}})}},{match:"/__web_sdk_request_proxy__",handle:({request:e,response:t})=>iU(e,t)},{match:"/__webview/page",handle:({request:t,response:n,url:r})=>{"GET"!==t.method&&"HEAD"!==t.method?rR(n,405,"Method Not Allowed"):(r$(n),n.writeHead(302,{"cache-control":"no-store",location:`${e}/__webview/bootstrap${r.search}`}),n.end())}},{match:"/__webview/sw.js",handle:({response:e})=>{r$(e),e.writeHead(200,{"cache-control":"no-store","content-type":"text/javascript","service-worker-allowed":"/"}),e.end(`self.addEventListener('install', e => e.waitUntil(self.skipWaiting()));
|
|
35
35
|
self.addEventListener('activate', e => e.waitUntil((async () => {
|
|
36
36
|
await self.clients.claim();
|
|
37
37
|
await self.registration.unregister();
|
|
38
|
-
})()));`)}},{match:e=>e.pathname.startsWith("/__doubao_web_sdk_native_modules"),handle:({request:e,response:t,url:n})=>
|
|
39
|
-
|
|
40
|
-
${
|
|
41
|
-
`),l.forEach(e=>{console.log(` - ${
|
|
42
|
-
${
|
|
43
|
-
`),d.forEach(e=>{let t=
|
|
44
|
-
${
|
|
45
|
-
`),s.forEach(e=>console.log(` - ${
|
|
46
|
-
${
|
|
47
|
-
`),
|
|
48
|
-
${
|
|
49
|
-
${
|
|
38
|
+
})()));`)}},{match:e=>e.pathname.startsWith("/__doubao_web_sdk_native_modules"),handle:({request:e,response:t,url:n})=>iV(e,t,o,n.pathname)},{match:e=>e.pathname.startsWith("/__"),handle:({response:e})=>rR(e,404,"Debugger resource not found")}],fallback:({request:e,response:t,url:n})=>iV(e,t,o,n.pathname,{fallbackPath:"/index.html"})};return rG([...(u={artifactOrigin:t,webViewOrigin:e,debugScenes:n,getWidgetViewDataTemplates:i,mcpEndpoint:a,physicalDeviceDebugGateway:l,sandboxRuntime:p,simulatorAssets:d},[{match:"/__web_sdk_debug_context",handle:({request:e,response:t})=>{let n,r;return r="string"==typeof(n=e.headers.host)&&n?`http://${n}`:void 0,void rN(t,200,{homeDir:nv.homedir(),webViewOrigin:u.webViewOrigin,launchDir:u.simulatorAssets.appDirectory,debugScenesEndpoint:op,widgetViewDataTemplatesEndpoint:od,debuggerMcpEndpoint:r?new URL(os,r).toString():os,manifestOriginalUrl:new URL("/base/manifest.json",u.artifactOrigin).toString(),...u.mcpEndpoint?{mcpOriginalEndpoint:u.mcpEndpoint,mcpProxyEndpoint:rq}:{},realDeviceDebug:u.physicalDeviceDebugGateway?.getDebugContext(),...u.simulatorAssets.getDebugContext(),...u.sandboxRuntime.getDebugContext()},oc)}},{match:op,handle:({response:e})=>rN(e,200,u.debugScenes??{errors:[],scenes:[]},oc)},{match:od,handle:({response:e})=>ou(e,u.getWidgetViewDataTemplates)}]),...l.getRequestRoutes(),...r,...function(e={}){return[{match:e=>e.pathname===ik||e.pathname.startsWith(`${ik}/`),handle:({request:t,response:n,url:r})=>iL(t,n,r,e)}]}({getSandboxSessionId:()=>p.sessionId,targetOrigin:c}),...p.getRequestRoutes(),...function(e={}){return[{match:rq,handle:({request:t,response:n,url:r})=>(function(e,t,n={},r=rI(e)){let o=K(n.targetEndpoint);if(!r)return void rR(t,400,"Bad request");if(!o)return void rR(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);rW(e,t,{createResponseHeaders:rD,errorMessage:"代理 MCP 请求失败",requestHeaders:rO(e.headers,i,{...ea(),...n.headers}),targetUrl:i})})(t,n,e,r)}]}({headers:s,targetEndpoint:a}),...d.getRequestRoutes(),...m.routes],m.fallback)}({...e,webViewOrigin:i})),s=e.debuggerProtocol.attachConnection(a,e.sandboxRuntime);try{await i5(a,n)}catch(e){throw s(),await i8(r),e}return{origin:`http://127.0.0.1:${n}`,server:a,webViewServer:r,closeConnections:s}}async function i8(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{physicalDeviceDebugGateway:e,sandboxRuntime:t,server:n,webViewServer:o,closeConnections:i}=r;r=void 0,i(),e.dispose(),t.close(),await Promise.all([i8(n),i8(o)])}async function i6(e){let t,{targetOrigin:n,...o}=e.simulator??{},i={appDirectory:e.appDirectory,eventsConfigReader:e.eventsConfigReader,eventsConfigSourcePath:e.eventsConfigSourcePath,toolsConfigReader:e.toolsConfigReader,toolsConfigSourcePath:e.toolsConfigSourcePath,manifestReader:e.simulatorManifestReader,manifestSourcePath:e.simulatorManifestSourcePath,...o},a=new iO(i);try{var s,l;let o,p,d=K(e.mcpEndpoint),c={appDirectory:e.appDirectory,appId:e.appId,businessTemplatesPath:a.businessTemplatesPath,env:e.env,manifestReader:e.simulatorManifestReader,manifestPath:a.manifestPath,targetOrigin:e.sandboxTargetOrigin};if(s=r,s?.server.listening){if(r?.artifactOrigin===e.artifactOrigin&&r.mcpEndpoint===d&&r.simulatorAssets.matches(i)&&r.getWidgetViewDataTemplates===e.getWidgetViewDataTemplates&&r.sandboxRuntime.matches(c)&&r.simulatorTargetOrigin===n)return r;await i7()}let u={distPath:l=e.debuggerDistPath,indexPath:tC.join(l,"index.html")};if(!tQ.existsSync(u.indexPath))return void rv.error("Web 模拟器资源缺失,请联系框架开发者。");let m=(o={},p=new r1(o),Object.assign([{match:"/__agent_trace",handle:e=>ow(e,o,p)},{match:os,handle:e=>ol(e,o,p)}],{attachConnection:(e,t)=>{var n;let r,i,a,s;return n=e=>oS(o,p,e),r=new rJ({noServer:!0,maxPayload:0xa00000}),i=new Set,a=(o,a,s)=>{let l,d=e.address().port,c=o.headers.host;try{l=new URL(o.url??"/","http://127.0.0.1")}catch{a.destroy();return}let u=l.searchParams.get("clientId")?.trim();c!==`127.0.0.1:${d}`&&c!==`localhost:${d}`||void 0!==o.headers.origin&&o.headers.origin!==`http://${c}`?a.end("HTTP/1.1 403 Forbidden\r\nConnection: close\r\n\r\n"):"/__wsd_connection"!==l.pathname||!u||u.length>128?a.end("HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n"):r.handleUpgrade(o,a,s,e=>{p.registerClient(u,e),i.add(e),e.on("pong",()=>i.add(e)),e.on("error",()=>e.close());let r=t.subscribeEvents(t=>rK(e,"sandbox",t));e.once("close",()=>{i.delete(e),r()}),e.on("message",(r,o)=>{try{let e=o?void 0:JSON.parse(r.toString());if(!G(e))throw Error("Invalid debugger message");if("snapshot"===e.type&&G(e.data)&&G(e.data.snapshot))n({...e.data,...G(e.data.debug_snapshot)?{debug_snapshot:{...e.data.debug_snapshot,client_id:u}}:{},snapshot:{...e.data.snapshot,client_id:u}});else if("control_result"===e.type&&G(e.data))p.handleResult({...e.data,clientId:u});else if("clear_sandbox_logs"===e.type)t.clearBridgeLogs();else throw Error("Unknown debugger message")}catch{e.close(1008,"Invalid debugger message")}})})},e.on("upgrade",a),(s=setInterval(()=>{for(let e of r.clients)i.delete(e)?e.ping():e.terminate()},3e4)).unref(),()=>{for(let t of(clearInterval(s),e.off("upgrade",a),r.clients))t.terminate();r.close()}},executeSandboxToolCall:e=>p.execute("execute_sandbox_tool_call",{toolCall:e})})),h=await iy.start({...c,onSimulatorToolCall:async e=>{await m.executeSandboxToolCall(e)}});t=h;let f=new o_,{origin:g,server:y,webViewServer:b,closeConnections:_}=await i9({artifactOrigin:e.artifactOrigin,debugScenes:e.debugScenes,debuggerProtocol:m,distPath:u.distPath,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:d,mcpHeaders:e.mcpHeaders,physicalDeviceDebugGateway:f,sandboxRuntime:h,simulatorAssets:a,simulatorTargetOrigin:n}),v=()=>{y.close(),b.close()};y.once("close",()=>{process.off("exit",v)}),process.once("exit",v);let w=new URL(g).toString();return r={artifactOrigin:e.artifactOrigin,close:()=>i7(),debuggerMcpEndpoint:new URL(os,g).toString(),getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:d,open:()=>i4(w),origin:g,physicalDeviceDebugGateway:f,sandboxRuntime:h,get sandboxSessionId(){return h.sessionId},server:y,webViewServer:b,closeConnections:_,setRealDeviceDebugProvider(e){f.setProvider(e)},simulatorAssets:a,simulatorTargetOrigin:n,url:w}}catch(e){t?.close(),rv.error("启动 Web SDK 调试器失败",{error:e});return}}async function ae(e,t){let n={errors:[],scenes:[]};if(!e)return n;for(let r of(await tI(e)).sort((e,t)=>e.name.localeCompare(t.name))){let e=await tP(r.path);e&&function(e,t){let n=ee(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 at(e,t){let n=e.metadata.getData(),r=e.widgets,o=await ae(e.appDirectory,{widgetIds:new Set(Object.keys(r).map(e=>nu(r,n.widgets,e)))});return i6({...t,debuggerDistPath:t.debuggerDistPath??B(),debugScenes:o,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates})}function an(e){return!!(e&&!/<%=?\s*appId\s*%>/.test(e))}function ar(e){if(!(e instanceof Error))return!1;try{let t=JSON.parse(e.message);return t?.code===0x2fb1799}catch{return!1}}async function ao(e){an(e.appId)&&(await e.getCachedLoginCookie().catch(()=>void 0)||ez.warn(e.appId.startsWith("db_")?"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `dbx auth login` 后重新启动开发服务。":"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `npx doubao login` 后重新启动开发服务。"))}let ai=e=>tp.bgHex("#9873b9")(tp.italic(tp.black(` ${e} `))),aa=e=>tp.bgBlueBright(tp.italic(tp.black(` ${e} `))),as=e=>tp.bold(tp.blueBright(e)),al=[{command:"d",description:"选择调试场景 / pages / widgets"},{command:"web",description:"打开 Web 模拟器"}],ap={page:"页面",scene:"调试场景",widget:"组件"};function ad(e){console.log(` ${as(e.command.padEnd(21))} ${tp.gray(`- ${e.description}`)}`)}async function ac(e){let t=q(e);if(0!==t.length)return await tl.prompt(t.map(([e,t])=>({type:"input",name:e,message:`请输入调试场景变量 "${e}" 的值:`,default:t??void 0})))}async function au({matchedScene:e,appId:t,driver:n}){let r=await tP(e.path);if(!r)return;let o=await ac(r);await tO({matchedScene:e,appId:t,driver:n,variables:o},r)}async function am(e,t,n,r,o,i,{interactive:a=!0}={}){if(await o.load({appletUrl:t,appId:e,isSigned:i}),!a)return;let s=await tI(process.cwd()),l=Object.values(n),p=Object.values(r),d=p.filter(({id:e})=>!e5(e));return l.length>0&&(console.log(`
|
|
39
|
+
|
|
40
|
+
${aa("可用 pages 列表")}
|
|
41
|
+
`),l.forEach(e=>{console.log(` - ${as(e.path)}`)})),d.length>0&&(console.log(`
|
|
42
|
+
${aa("可用 widgets 列表")}
|
|
43
|
+
`),d.forEach(e=>{let t=as(e.id);console.log(` - ${t}`)})),s.length>0&&(console.log(`
|
|
44
|
+
${aa("可用调试场景")}
|
|
45
|
+
`),s.forEach(e=>console.log(` - ${as(e.name)}`))),console.log(`
|
|
46
|
+
${aa("可以继续执行以下命令:")}
|
|
47
|
+
`),al.forEach(ad),console.log("\n"),ry.instance.addListener(t=>{let n=t.trim();if("d"===n){let t=[...s.map(e=>({type:"scene",id:e.name})),...d.map(e=>({type:"widget",id:e.id})),...l.map(e=>({type:"page",id:e.path}))];if(0===t.length)return console.log(`
|
|
48
|
+
${aa("暂无可用的页面、组件或调试场景")}`),!0;r_(async()=>{let{selectedEntry:n}=await tl.prompt([{type:"search",name:"selectedEntry",message:"请选择调试目标:",source:e=>t.filter(t=>`${ap[t.type]} ${t.type} ${t.id}`.toLowerCase().includes(e?.toLowerCase()??"")).map(e=>({name:`${tp.gray(ap[e.type])}: ${e.id}`,short:`${ap[e.type]} \xb7 ${e.id}`,value:e}))}]);if("scene"===n.type){let t=s.find(e=>e.name===n.id);t&&await au({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?r_(async()=>{await au({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 ah({appId:e,appletUrl:t,pages:n,widgets:r,driver:o,isSigned:i,isDisposed:a}){let s=await tv();if(a())return;if(!s)return void ez.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");let l=await tb(s).catch(e=>(a()||ez.error("重新启动应用失败",{error:e}),!1));if(a())return;if(!l)return void setTimeout(()=>{a()||ez.info("请确认应用已经启动。\n")},1e3);if(await new Promise(e=>{setTimeout(e,5e3)}),a())return;if(!o)return void ez.error("调试驱动尚未就绪。");let p=await am(e,t,n,r,o,i);a()&&p?.()}async function af({context:e,port:t,driver:n,isSigned:r,onCleanupReady:o}){let i,a,{host:s,artifactOrigin:l}=await e.resolveDevServer(t);e.devServerAbort.signal.throwIfAborted();let p=e.metadata.getData(),d=p.app.appId,c=async()=>{let t,n=await (t=e.webDebuggerLaunchOptions,at(e,{appId:e.appId,appDirectory:e.appDirectory,artifactOrigin:l,env:{...e.env,...t?.env??{}},mcpEndpoint:t?.mcpEndpoint??ev(),mcpHeaders:t?.mcpHeaders,simulator:t?.simulator,eventsConfigReader:e.eventsResources?.readJson,eventsConfigSourcePath:e.eventsResources?.sourcePath,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}));await n?.open()};if(e.devServerInteractive){let t;t=function(e={}){let t={name:"Doubao Apps SDK",...e},n=t.name?`${t.name} 开发服务`:"",r=t.origin?`正在监听 ${tp.gray(t.origin)}。`:"已启动。";return`
|
|
49
|
+
${as(n)}${r}
|
|
50
50
|
`}(),eR()||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):tp.bold(tp.gray(e));return` - ${tp.bgWhiteBright(tp.italic(tp.black(` ${r} `)))}: ${tp.gray(n.startsWith("http")?tp.underline(n):n)}`}).join("\n");return`
|
|
51
|
-
${
|
|
51
|
+
${ai("豆包应用服务信息")}:
|
|
52
52
|
|
|
53
53
|
${n}
|
|
54
54
|
|
|
55
55
|
`}return`
|
|
56
|
-
${
|
|
56
|
+
${ai("豆包应用服务信息")}:
|
|
57
57
|
|
|
58
|
-
调试服务未运行。`})(d,s)),await ia(e)}let u=(o=!1,i=[],{add(e){e&&(o?e():i.push(e))},cleanup:()=>{o=!0,i.splice(0).forEach(e=>e())},isDisposed:()=>o});if(e.devServerInteractive){let t={context:e,appId:d,appletUrl:s,pages:p.pages,widgets:p.widgets,driver:n,isSigned:r,openWebDebugger:c,isDisposed:u.isDisposed};u.add(ry.instance.addListener(e=>{let n=e.trim().toLowerCase();return("r"===n||"web"===n)&&(process.stdout.write(U(2)),"r"===n?ih(t).catch(rb):t.openWebDebugger(),!0)},"devCommands",-1))}a(u.cleanup);try{if(!n){e.devServerInteractive&&ez.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");return}u.add(await im(d,s,p.pages,p.widgets,n,r,{interactive:e.devServerInteractive}))}catch(e){throw u.cleanup(),e}}let iy=(e,t,n)=>{if(!eu())return void n();let r=process.hrtime.bigint(),a=e.method,o=e.url;t.on("finish",()=>{let e=Number(process.hrtime.bigint()-r)/1e6,n=o?new URL(o,"http://localhost").pathname:"",i=t.statusCode;ez.request({method:a||"UNKNOWN",url:n,statusCode:i,durationMs:e})}),n()},ib=new Set(["EACCES","EPERM"]),i_=new Set(["MODULE_NOT_FOUND","ERR_MODULE_NOT_FOUND"]),iv=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT","ERR_REQUEST_TIMEOUT"]),iw=new Set(["ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETUNREACH","ENOTFOUND","EAI_AGAIN","EPIPE"]),iS=new Set(["EEXIST","EISDIR","EMFILE","ENOENT","ENOSPC","ENOTDIR","EROFS"]),iE={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 ix(e,t){if(!e||"object"!=typeof e||!(t in e))return;let n=e[t];return"string"==typeof n?n:void 0}function iA(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(iA);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[]}}function iT(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 iC(e,t){Object.assign(e,iT(t))}function iI(e,{scene:t,commandStartTime:n,compileStartTime:r}){let a=e.commandStartTime===n,o=e.prepareDurations,i=e.builderInitStartTime,s=e.appInfoDurationMs,l=e.appInfoMeasured;a&&void 0!==i&&(o.builderInitMs=Math.max(0,r-i)),iC(e,n),e.scene=t,e.compileStartTime=r,a&&(e.prepareDurations=o,e.appInfoDurationMs=s,e.appInfoMeasured=l)}function iP(e,t,n){e.compilePhaseEndTimes[t]=Math.max(e.compilePhaseEndTimes[t]??0,n)}function iO(e){return Math.max(0,Math.round(Number.isFinite(e)?e:0))}let iD=new class{uploader;constructor(e){this.uploader=e}async report(e){try{var t,n;let r,a,o,i,s,l,p,d=e.context?.compileLifecycle;if(d){if(d.reported)return;d.reported=!0}let c="dev_initial"===e.scene||"hot_update"===e.scene?"dev":e.scene,u={appDirectory:e.appDirectory,targetAppId:function(e){try{let t=e?.appId;return it(t)?t:void 0}catch{return}}(e.context),scene:e.scene,command:c},m="failed"===e.status?{...u,status:e.status,errorStage:e.errorStage,error:iA(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,a=!!r?.signing.enabled,o=!!r?.encryption.enabled,a&&o?"signing_and_encryption":a?"signing":o?"encryption":"none"),durations:(t=e.context.compileLifecycle,n=e.compileEndTime,i=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-i,prepareMs:s-i,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 td).upload(function(e,t){let n={kit_compile_id:function(){let e="unknown";try{e=(0,nv.userInfo)().username||e}catch{}return`${Date.now()}_${e}_${(0,am.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=iO(e.durations.totalMs),n.kit_prepare_ms=iO(e.durations.prepareMs),n.kit_compile_ms=iO(e.durations.compileMs),n.kit_config_load_ms=iO(e.durations.configLoadMs),n.kit_project_scan_ms=iO(e.durations.projectScanMs),n.kit_context_bootstrap_ms=iO(e.durations.contextBootstrapMs),n.kit_app_info_ms=iO(e.durations.appInfoMs),n.kit_app_template_process_ms=iO(e.durations.appTemplateProcessMs),n.kit_view_template_process_ms=iO(e.durations.viewTemplateProcessMs),n.kit_plugin_bootstrap_ms=iO(e.durations.pluginBootstrapMs),n.kit_builder_init_ms=iO(e.durations.builderInitMs),n.kit_module_process_ms=iO(e.durations.moduleProcessMs),n.kit_asset_process_ms=iO(e.durations.assetProcessMs),n.kit_output_write_ms=iO(e.durations.outputWriteMs);else{n.kit_error_type=function(e){let t=ix(e,"code")?.toUpperCase();if(t){if(ib.has(t))return"permission_error";if(i_.has(t))return"dependency_error";if(iv.has(t))return"timeout_error";if(iw.has(t))return"network_error";if(iS.has(t))return"filesystem_error"}let n="string"==typeof e?e:ix(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=ix(e,"name");return r&&iE[r]||"unknown_error"}(e.error),e.errorStage&&(n.kit_error_stage=e.errorStage);let a=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(a){var r;let e=(r=t.appDirectory,(0,aR.stripVTControlCharacters)(a).replaceAll(tC.resolve(r),"<project>").replaceAll((0,nv.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:"0.3.0-rc.2",runEnv:process.env.BUILD_VERSION?"SCM":process.env.CI_REPO_NAME?"CI":"LOCAL"}))}};function ik(e,t,n){n?.hasErrors()?iD.report({appDirectory:e.appDirectory,context:e,scene:t,status:"failed",errorStage:"compile",error:iA(n)[0]}):iD.report({appDirectory:e.appDirectory,context:e,scene:t,status:"success",compileEndTime:Date.now()})}let i$=f("crypto");class iR{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,i$.createHash("sha256").update("string"==typeof e?e:new DataView(e.buffer,e.byteOffset,e.byteLength)).digest("hex").substring(0,8))}}class iN extends iR{constructor(e,t){super(e,t),this._manifest={applet:{pages:[],tools:[]},widgets:[]};try{this._manifest=L(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,settings:this._manifest.settings,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){L(this._manifest,e)}setSCMVersion(e){this._manifest.scmVersion=e}setVersionCode(e){this._manifest.versionCode=e}setAppletManifest(e){this._manifest.applet=e}mergeAppletManifest(e){L(this._manifest.applet,e)}setRenderType(e=X.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 iL{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 iN(e,JSON.stringify({}))),this.getAsset(e)}}class iM{options;constructor(e){this.options=e}apply(e){let t,{pluginSystem:n}=this.options;e.hooks.thisCompilation.tap({name:iM.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},r=>{r.hooks.processAssets.tapPromise({name:iM.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{t=new iL,r.getAssets().forEach(e=>{let n=new iR(e.name,e.source.source(),e.info.contenthash?.[0]);t.addAsset(e.name,n)});let{entrypoints:a}=r,o={};a.forEach((e,n)=>{o[n]=e.getFiles().map(e=>{let n=t.getAsset(e);if(!n)throw Error(`Asset ${e} not found`);return new iR(n.source,n.content,n.hashCode)})});let i=this.options.context.appId;i&&tQ.mkdirSync(tC.join(this.options.context.rootPath,i),{recursive:!0}),await n.callAssetsHooks("beforeEmit",{assets:t,chunks:o}),Object.keys(t.getAssets()).forEach(n=>{let a=t.getAsset(n);if(!a)return;let{source:o,destination:i}=a;if(!o||!i)return;r.getAsset(o)?r.renameAsset(o,i):r.emitAsset(i,new e.rspack.sources.RawSource(a.content));let s=r.getAsset(`${o}.map`);s&&r.renameAsset(s.name,`${i}.map`)}),await n.callAssetsHooks("afterEmit",{assets:{...t.getAssets()}})})})}}let ij=new Set(["@doubao-dev/template","@byted-doubao-apps/template"]);class iB{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(iB.name,e=>{e.hooks.finishModules.tap(iB.name,()=>{let t=new Map,n=r=>{if(!r)return!1;let a=t.get(r);if(void 0!==a)return a;if(function(e){var t;let n=e.resourceResolveData?.descriptionFileData?.name;if("string"==typeof n&&ij.has(n))return!0;let r=(t=e.resource,t?.split(/[?#]/)[0].replace(/\\/g,"/"));return[...ij].some(e=>r?.includes(`/node_modules/${e}/`))}(r))return t.set(r,!0),!0;for(let a of(t.set(r,!1),e.moduleGraph.getOutgoingConnections(r)))if(n(a.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 iU{options;constructor(e){this.options=e}apply(e){e.hooks.make.tapPromise(iU.name,async()=>{await this.options.pluginSystem.callViewHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(iU.name,e=>{e.hooks.optimizeTree.tapPromise(iU.name,async t=>{await this.options.pluginSystem.callViewHooks("build",{metadata:this.options.context.metadata,fileDependencies:e.fileDependencies})})}),e.hooks.done.tapPromise(iU.name,async e=>{await this.options.pluginSystem.callViewHooks("afterBuild",{stats:e})})}}function iF(e){return e.replaceAll("\\","/")}function iH(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 iW{context;constructor(e){this.context=e}apply(e){e.hooks.thisCompilation.tap(iW.name,t=>{t.hooks.processAssets.tapPromise({name:iW.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{var e,n;let r=this.context.metadata.getData(),a=this.context.command===eD.DEV?"all":"configured",o=nh(this.context.pages,this.context.normalizedAppConfig.pages.entries,a),i=nh(this.context.widgets,this.context.normalizedAppConfig.widgets.entries,a),s=r.app.appId||this.context.appId;if(!s&&Object.keys(o).length>0)throw Error("appId is required to resolve Web page entry paths");s&&(e=r.pages,Object.keys(o).forEach(n=>{let r=iF(n),a=nc(r);iH(t,`${a}/template.js`,t9(s,e[n]?.path??t4(r),nl),`${a}/background.js.map`)})),n=r.widgets,Object.keys(i).forEach(e=>{var r;let a=nc(iF(e));iH(t,`${a}/template.js`,(r=nu(i,n,e),`${r}/${nl}`),`${a}/background.js.map`)})})})}}class iV{entry;constructor(e){this.entry=e}apply(e){let t=new e.webpack.experiments.VirtualModulesPlugin;t.apply(e),e.hooks.thisCompilation.tap(iV.name,()=>{t.writeModule(ea,""),t.writeModule(el,ex),Object.values(this.entry).forEach(e=>{t.writeModule(e.filename,e.toString())})})}}function iG(e,t){return e.isIdentifier(t)?t.text:e.isPropertyAccessExpression(t)?t.name.text:void 0}let iq={templatesByEntry:{},templatesByWidget:{}},iJ="/doubao-apps-framework.template.js",iK="/doubao-apps-api.template.js",iz=(e,t)=>{let n=(e,n,r)=>({libraryName:r,url:t?`/wsd${e}`:e,background:{sectionPath:n},mainThread:{sectionPath:`${n}__main-thread`},async:!!t});return{"@byted-doubao-apps/bridge-base":n(iK,"api"),"@byted-doubao-apps/open-api":n(iK,"api"),...Object.fromEntries(Object.entries(eP).map(([t,r])=>[t,n(e?"/doubao-apps-react-dev.template.js":"/doubao-apps-react.template.js","reactLynx",["reactLynx",r])])),[ts(eZ)]:n(iK,"api"),[ts(e3)]:n(iK,"api"),[eZ]:n(iJ,"framework"),[e3]:n(iJ,"framework"),"@byted-doubao-apps/components":n(iJ,"components"),[tr(eZ)]:n(iJ,"components"),[tr(e3)]:n(iJ,"components")}},iY=f("node:url"),iX=(0,W.createRequire)(import.meta.url);function iZ(e,t){for(let n of e)try{return iX.resolve(n,{paths:t})}catch{}throw Error(`Cannot resolve package from candidates: ${e.join(", ")}`)}class iQ{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,a,o;let{appDirectory:i,command:p,metadata:h,rootPath:f}=e.context,g=e.context.environment,y=e8();await this.pluginSystem.callViewHooks("modifyEnvironment",{environment:g}),e.context.setEnvironment(g);let b=p===eD.DEV,_=await this.createEntry(),v=eO(i),w=[i,tC.dirname((0,iY.fileURLToPath)(import.meta.url))],S=iX.resolve("@lynx-js/react/transform"),E=b?"all":"configured",x=nh(e.context.pages,e.context.normalizedAppConfig.pages.entries,E),A=new Set([...Object.keys(nh(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,E)),...Object.keys(x)]),T=A.size>0;T&&await rd({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,__DOUBAO__:JSON.stringify(!0),__MAIN_PROCESS__:JSON.stringify(!1),__DOUBAO_APPS_WEB__:JSON.stringify(!1),__VERSION_TAG__:JSON.stringify(e.context.versionTag)??"undefined",__LEPUS__:JSON.stringify(!1),"process.env":"({})"}},I=e=>[ea,el,e.filename],P={...C,entry:Object.fromEntries(Object.entries(_).map(([e,t])=>[e,I(t)]))},O=Object.fromEntries(Object.entries(_).filter(([e])=>A.has(e))),D=new Map(Object.keys(O).map(e=>[nc(e),e])),$={...P,entry:Object.fromEntries(Object.entries(O).map(([e,t])=>[nc(e),I(t)])),define:{...P.define,__DOUBAO_APPS_WEB__:JSON.stringify(!0),__LYNXVIEW__:JSON.stringify(!0)}},R=[...ed()?[]:[H({externals:iz(b),globalObject:"lynx"})]],N=[function({metadata:e,resolveAppInfo:t}){return{name:"ai-manifest-plugin",setup(n){n.modifyBundlerChain((n,r)=>{let a=r?.environment?.name==="web"?ni:no;n.plugin(ns.name).use(ns,[{metadata:e,resolveAppInfo:t,shouldInjectAsset:a}])})}}}({metadata:h,resolveAppInfo:()=>e.context.resolveAppInfo()})],L={source:P,plugins:R},M=[function e({metadata:t,entry:n,resolveSigningEncryptionOptions:r,onProcessDuration:a}){return{name:e.name,setup(e){e.modifyBundlerChain((o,i)=>{if(i?.environment?.name==="web")return;let s=e.useExposed(Symbol.for("LynxTemplatePlugin"));o.plugin(rg.name).use(rg,[s.LynxTemplatePlugin,t,n,r,a])})}}}({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 a=r?.environment?.name;n.plugin("template-widget-entry-plugin").use(iB,[{markTemplateWidgetEntry:t=>{e.addTemplateWidgetEntry(t)},normalizeEntryName:e=>t?.(e,a)}])})}}}({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(iM,[r])})}}),...p===eD.DEV&&T?[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,W.createRequire)(tC.join(e,"package.json"));try{t=n.resolve("typescript")}catch(e){return}return n(t)}(e);if(!r)return{templatesByEntry:{},templatesByWidget:{}};let a=[...new Set(Object.values(t).map(({filename:e})=>e))],o=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,tQ.existsSync);if(!r)return n;let a=e.readConfigFile(r,e.sys.readFile);return a.error?n:{...e.parseJsonConfigFileContent(a.config,e.sys,tC.dirname(r)).options,...n}}(r,e),rootNames:a}),i=o.getTypeChecker(),s=Object.fromEntries(Object.entries(t).map(([e,{filename:t}])=>{let n,a=o.getSourceFile(t);return[Q(e),a?(n={},!function e(t){if(r.isCallExpression(t)&&("getViewData"===iG(r,t.expression)||"useViewData"===iG(r,t.expression))&&t.typeArguments?.[0]){let e=i.getTypeFromTypeNode(t.typeArguments[0]);for(let a of i.getPropertiesOfType(e)){let o=a.valueDeclaration??a.declarations?.[0]??t;n[a.getName()]=function e(t,n,r,a,o){let i=(n.isUnion()?n.types:[n]).filter(e=>!(e.flags&(t.TypeFlags.Undefined|t.TypeFlags.Never)));if(i.some(e=>e.flags&t.TypeFlags.Null))return null;if(i.some(e=>e.flags&t.TypeFlags.StringLike))return"";if(i.some(e=>e.flags&(t.TypeFlags.NumberLike|t.TypeFlags.BigIntLike)))return 0;if(i.some(e=>e.flags&t.TypeFlags.BooleanLike))return!1;if(i.some(e=>r.isArrayType(e)||r.isTupleType(e)))return[];let s=i.find(e=>e.flags&t.TypeFlags.Object);if(!s||o.has(s))return{};o.add(s);let l=Object.fromEntries(r.getPropertiesOfType(s).map(n=>{let i=n.valueDeclaration??n.declarations?.[0]??a;return[n.getName(),e(t,r.getTypeOfSymbolAtLocation(n,i),r,i,o)]}));return o.delete(s),l}(r,i.getTypeOfSymbolAtLocation(a,o),i,o,new Set([e]))}}r.forEachChild(t,e)}(a),n):{}]})),l=Object.fromEntries(Object.keys(t).map(e=>{let r=Q(e);return[nu(t,n,e),s[r]??{}]}));return{templatesByEntry:s,templatesByWidget:l}}(e.appDirectory,e.widgets,e.metadata.getData().widgets)}catch{t=iq}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,a=!1;t.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t(e,{server:{setup({server:e}){e.middlewares.use(iy)}}})),t.onAfterCreateCompiler(({compiler:t})=>{for(let n of"compilers"in t?t.compilers:[t])n.hooks.failed.tap("DevServerLogPlugin",t=>e.finishInitialDevCompile(t))}),t.onAfterDevCompile(async({stats:o})=>{if(o.hasErrors())return void e.finishInitialDevCompile(Error(o.toString({all:!1,errors:!0,colors:!1})));if(r)return;let{devServer:i}=t.context;if(!i)return;r=!0;let s=await tA({debugDriver:e.userConfig.debugDriver,skipAdbForegroundAppWatch:e.userConfig.skipAdbForegroundAppWatch}).catch(rb);a||(e.finishInitialDevCompile(),ig({context:e,port:i.port,driver:s,isSigned:e.isSignedEncryption,onCleanupReady(e){a?e():n=e}}).catch(e=>{a||ez.error("Failed to initialize dev server actions",{error:e})}))}),t.onCloseDevServer(()=>{a=!0,e.devServerAbort.abort(),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,()=>{iP(e.compileLifecycle,"moduleProcess",Date.now())}),r.hooks.emit.tap(t,()=>{iP(e.compileLifecycle,"assetProcess",Date.now())}),r.hooks.failed.tap(t,t=>{iD.report({appDirectory:e.appDirectory,context:e,scene:e.compileLifecycle.scene??(e.command===eD.DEV?"dev_initial":e.command),status:"failed",errorStage:"compile",error:t})})}),e.command!==eD.DEV){let t=e.command;n.onBeforeBuild(()=>{let n=Date.now();iI(e.compileLifecycle,{scene:t,commandStartTime:e.compileLifecycle.commandStartTime??n,compileStartTime:n})}),n.onAfterBuild(({stats:n})=>{ik(e,t,n)})}else n.onBeforeDevCompile(({isFirstCompile:t})=>{let n=Date.now();iI(e.compileLifecycle,{scene:t?"dev_initial":"hot_update",commandStartTime:t?e.compileLifecycle.commandStartTime??n:n,compileStartTime:n})}),n.onAfterDevCompile(({stats:t})=>{ik(e,e.compileLifecycle.scene??"dev_initial",t)})}}}({context:e.context}),..."true"===process.env.BYTED_RSDOCTOR?[{name:"doubao-apps:byted-rsdoctor",setup(e){e.onBeforeCreateCompiler(({bundlerConfigs:e})=>{let{BytedRsdoctorPlugin:t}=iX(iZ(["@byted/rsdoctor"],w));for(let n of e)n.plugins??=[],n.plugins.push(new t({disableClientServer:!0,supports:{banner:!0}}))})}}]:[],(r=this.pluginSystem,a=e.context,{name:"view-hooks-plugin",setup(e){e.modifyBundlerChain((e,t)=>{t?.environment?.name==="web"||e.plugin("view-hooks-plugin").use(iU,[{pluginSystem:r,context:a}])})}}),(({getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:n,metadata:r,resolveSigningEncryptionOptions:a,onProcessDuration:o})=>({name:"lynx:encode-worker",async setup(i){eg()||i.modifyBundlerChain((i,s)=>{s?.environment?.name!=="web"&&i.plugin(rf.name).use(rf,[{getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:n,metadata:r,resolveSigningEncryptionOptions:a,onProcessDuration:o}]).end()})}}))({getAppAssetPath:()=>e.context.appAssetPath,getAppMapAssetPath:()=>e.context.appMapAssetPath,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(iV.name).use(iV,[O])})}},(o=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=o.appDirectory,n=tC.resolve(t),r.moduleFilenameTemplate=({absoluteResourcePath:e,query:t=""})=>{let r=tC.relative(n,e),a=".."!==r&&!r.startsWith(`..${tC.sep}`)&&!tC.isAbsolute(r),o=a?iF(r):iF(e).replace(/^\/+/,"");return`${a?"file":"webpack"}:///${o}${t}`},e}),e.plugin(iW.name).use(iW,[o])}}})}})],B=d({mode:p===eD.DEV?"development":"production",environments:T?{lynx:L,web:{source:$,output:{distPath:{css:"",js:"base/web-common"},cleanDistPath:!1,filename:{assets:"[name]/web.bundle"},sourceMap:{js:!!b&&"cheap-module-source-map",css:!1}},plugins:[H({externals:iz(p===eD.DEV,!0),globalObject:"lynx"})]}}:{lynx:L},tools:{rspack:{module:{rules:[{enforce:"pre",test:/\.(t|j)sx$/,loader:function(e,t,n=tC.join(tC.dirname((0,iY.fileURLToPath)(import.meta.url)),"components-loader.js"),r=iZ){let a=t===e3?["@doubao-dev/kit/components-loader","@byted-doubao-apps/kit/components-loader"]:["@byted-doubao-apps/kit/components-loader","@doubao-dev/kit/components-loader"];try{return r(a,e)}catch(e){if((0,tQ.existsSync)(n))return n;throw e}}(w,v),options:{frameworkPackage:v}}]},plugins:[new c.BannerPlugin({banner:'"use registerWorkletInternal";',raw:!0,entryOnly:!0,stage:c.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE+1,test:/\.js$/})]}},source:{...C,entry:{}},server:{cors:!0,host:e.context.devServerHost},dev:{writeToDisk:eu(),hmr:p===eD.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:eu(),...ed()&&!y?{chunkSplit:{strategy:"split-by-experience"}}:{}},...y?{splitChunks:!1}:{},plugins:[{name:"replace-lynx-react-alias",setup(e){k({LAYERS:s,lazy:!1,rootPath:tC.dirname((0,iY.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:v,oldRuntimePkg:[],legacySlot:!0},enableCSSInheritance:!0,shake:{pkgName:[...e6]}}),{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:S}))}})}},function(e){let{compilerOptionsKeys:t=nS.compilerOptionsKeys,configKeys:n=nS.configKeys,validate:r=n5,dslPluginName2PkgName:a=n8,upgradeRspeedyLink:o="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(i=>{let s=r.useExposed(Symbol.for("LynxTemplatePlugin"));if(!s){let e="Rspeedy and plugins";throw Object.entries(a).forEach(([t,n])=>{r.isPluginExists(t)&&(e=n)}),Error(`\
|
|
58
|
+
调试服务未运行。`})(d,s)),await ao(e)}let u=(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:d,appletUrl:s,pages:p.pages,widgets:p.widgets,driver:n,isSigned:r,openWebDebugger:c,isDisposed:u.isDisposed};u.add(ry.instance.addListener(e=>{let n=e.trim().toLowerCase();return("r"===n||"web"===n)&&(process.stdout.write(U(2)),"r"===n?ah(t).catch(rb):t.openWebDebugger(),!0)},"devCommands",-1))}o(u.cleanup);try{if(!n){e.devServerInteractive&&ez.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");return}u.add(await am(d,s,p.pages,p.widgets,n,r,{interactive:e.devServerInteractive}))}catch(e){throw u.cleanup(),e}}let ag=(e,t,n)=>{if(!eu())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;ez.request({method:o||"UNKNOWN",url:n,statusCode:a,durationMs:e})}),n()},ay=new Set(["EACCES","EPERM"]),ab=new Set(["MODULE_NOT_FOUND","ERR_MODULE_NOT_FOUND"]),a_=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT","ERR_REQUEST_TIMEOUT"]),av=new Set(["ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETUNREACH","ENOTFOUND","EAI_AGAIN","EPIPE"]),aw=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 aE(e,t){if(!e||"object"!=typeof e||!(t in e))return;let n=e[t];return"string"==typeof n?n:void 0}function ax(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(ax);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[]}}function aA(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 aT(e,t){Object.assign(e,aA(t))}function aC(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)),aT(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 aP(e){return Math.max(0,Math.round(Number.isFinite(e)?e:0))}let aO=new class{uploader;constructor(e){this.uploader=e}async report(e){try{var t,n;let r,o,i,a,s,l,p,d=e.context?.compileLifecycle;if(d){if(d.reported)return;d.reported=!0}let c="dev_initial"===e.scene||"hot_update"===e.scene?"dev":e.scene,u={appDirectory:e.appDirectory,targetAppId:function(e){try{let t=e?.appId;return an(t)?t:void 0}catch{return}}(e.context),scene:e.scene,command:c},m="failed"===e.status?{...u,status:e.status,errorStage:e.errorStage,error:ax(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 td).upload(function(e,t){let n={kit_compile_id:function(){let e="unknown";try{e=(0,nv.userInfo)().username||e}catch{}return`${Date.now()}_${e}_${(0,om.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=aP(e.durations.totalMs),n.kit_prepare_ms=aP(e.durations.prepareMs),n.kit_compile_ms=aP(e.durations.compileMs),n.kit_config_load_ms=aP(e.durations.configLoadMs),n.kit_project_scan_ms=aP(e.durations.projectScanMs),n.kit_context_bootstrap_ms=aP(e.durations.contextBootstrapMs),n.kit_app_info_ms=aP(e.durations.appInfoMs),n.kit_app_template_process_ms=aP(e.durations.appTemplateProcessMs),n.kit_view_template_process_ms=aP(e.durations.viewTemplateProcessMs),n.kit_plugin_bootstrap_ms=aP(e.durations.pluginBootstrapMs),n.kit_builder_init_ms=aP(e.durations.builderInitMs),n.kit_module_process_ms=aP(e.durations.moduleProcessMs),n.kit_asset_process_ms=aP(e.durations.assetProcessMs),n.kit_output_write_ms=aP(e.durations.outputWriteMs);else{n.kit_error_type=function(e){let t=aE(e,"code")?.toUpperCase();if(t){if(ay.has(t))return"permission_error";if(ab.has(t))return"dependency_error";if(a_.has(t))return"timeout_error";if(av.has(t))return"network_error";if(aw.has(t))return"filesystem_error"}let n="string"==typeof e?e:aE(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=aE(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,oR.stripVTControlCharacters)(o).replaceAll(tC.resolve(r),"<project>").replaceAll((0,nv.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:"0.3.0-rc.3",runEnv:process.env.BUILD_VERSION?"SCM":process.env.CI_REPO_NAME?"CI":"LOCAL"}))}};function aD(e,t,n){n?.hasErrors()?aO.report({appDirectory:e.appDirectory,context:e,scene:t,status:"failed",errorStage:"compile",error:ax(n)[0]}):aO.report({appDirectory:e.appDirectory,context:e,scene:t,status:"success",compileEndTime:Date.now()})}let ak=f("crypto");class a${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,ak.createHash("sha256").update("string"==typeof e?e:new DataView(e.buffer,e.byteOffset,e.byteLength)).digest("hex").substring(0,8))}}class aR extends a${constructor(e,t){super(e,t),this._manifest={applet:{pages:[],tools:[]},widgets:[]};try{this._manifest=L(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,settings:this._manifest.settings,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){L(this._manifest,e)}setSCMVersion(e){this._manifest.scmVersion=e}setVersionCode(e){this._manifest.versionCode=e}setAppletManifest(e){this._manifest.applet=e}mergeAppletManifest(e){L(this._manifest.applet,e)}setRenderType(e=X.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 aN{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 aR(e,JSON.stringify({}))),this.getAsset(e)}}class aL{options;constructor(e){this.options=e}apply(e){let t,{pluginSystem:n}=this.options;e.hooks.thisCompilation.tap({name:aL.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},r=>{r.hooks.processAssets.tapPromise({name:aL.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{t=new aN,r.getAssets().forEach(e=>{let n=new a$(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 a$(n.source,n.content,n.hashCode)})});let a=this.options.context.appId;a&&tQ.mkdirSync(tC.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 aM=new Set(["@doubao-dev/template","@byted-doubao-apps/template"]);class aj{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(aj.name,e=>{e.hooks.finishModules.tap(aj.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&&aM.has(n))return!0;let r=(t=e.resource,t?.split(/[?#]/)[0].replace(/\\/g,"/"));return[...aM].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 aB{options;constructor(e){this.options=e}apply(e){e.hooks.make.tapPromise(aB.name,async()=>{await this.options.pluginSystem.callViewHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(aB.name,e=>{e.hooks.optimizeTree.tapPromise(aB.name,async t=>{await this.options.pluginSystem.callViewHooks("build",{metadata:this.options.context.metadata,fileDependencies:e.fileDependencies})})}),e.hooks.done.tapPromise(aB.name,async e=>{await this.options.pluginSystem.callViewHooks("afterBuild",{stats:e})})}}function aU(e){return e.replaceAll("\\","/")}function aF(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 aH{context;constructor(e){this.context=e}apply(e){e.hooks.thisCompilation.tap(aH.name,t=>{t.hooks.processAssets.tapPromise({name:aH.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{var e,n;let r=this.context.metadata.getData(),o=this.context.command===eD.DEV?"all":"configured",i=nh(this.context.pages,this.context.normalizedAppConfig.pages.entries,o),a=nh(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=aU(n),o=nc(r);aF(t,`${o}/template.js`,t5(s,e[n]?.path??t4(r),nl),`${o}/background.js.map`)})),n=r.widgets,Object.keys(a).forEach(e=>{var r;let o=nc(aU(e));aF(t,`${o}/template.js`,(r=nu(a,n,e),`${r}/${nl}`),`${o}/background.js.map`)})})})}}class aW{entry;constructor(e){this.entry=e}apply(e){let t=new e.webpack.experiments.VirtualModulesPlugin;t.apply(e),e.hooks.thisCompilation.tap(aW.name,()=>{t.writeModule(eo,""),t.writeModule(el,ex),Object.values(this.entry).forEach(e=>{t.writeModule(e.filename,e.toString())})})}}function aV(e,t){return e.isIdentifier(t)?t.text:e.isPropertyAccessExpression(t)?t.name.text:void 0}let aG={templatesByEntry:{},templatesByWidget:{}},aq="/doubao-apps-framework.template.js",aJ="/doubao-apps-api.template.js",aK=(e,t)=>{let n=(e,n,r)=>({libraryName:r,url:t?`/wsd${e}`:e,background:{sectionPath:n},mainThread:{sectionPath:`${n}__main-thread`},async:!!t});return{"@byted-doubao-apps/bridge-base":n(aJ,"api"),"@byted-doubao-apps/open-api":n(aJ,"api"),...Object.fromEntries(Object.entries(eP).map(([t,r])=>[t,n(e?"/doubao-apps-react-dev.template.js":"/doubao-apps-react.template.js","reactLynx",["reactLynx",r])])),[ts(eZ)]:n(aJ,"api"),[ts(e3)]:n(aJ,"api"),[eZ]:n(aq,"framework"),[e3]:n(aq,"framework"),"@byted-doubao-apps/components":n(aq,"components"),[tr(eZ)]:n(aq,"components"),[tr(e3)]:n(aq,"components")}},az=f("node:url"),aY=(0,W.createRequire)(import.meta.url);function aX(e,t){for(let n of e)try{return aY.resolve(n,{paths:t})}catch{}throw Error(`Cannot resolve package from candidates: ${e.join(", ")}`)}class aZ{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=e8();await this.pluginSystem.callViewHooks("modifyEnvironment",{environment:g}),e.context.setEnvironment(g);let b=p===eD.DEV,_=await this.createEntry(),v=eO(a),w=[a,tC.dirname((0,az.fileURLToPath)(import.meta.url))],S=aY.resolve("@lynx-js/react/transform"),E=b?"all":"configured",x=nh(e.context.pages,e.context.normalizedAppConfig.pages.entries,E),A=new Set([...Object.keys(nh(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,E)),...Object.keys(x)]),T=A.size>0;T&&await rd({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,__DOUBAO__:JSON.stringify(!0),__MAIN_PROCESS__:JSON.stringify(!1),__DOUBAO_APPS_WEB__:JSON.stringify(!1),__VERSION_TAG__:JSON.stringify(e.context.versionTag)??"undefined",__LEPUS__:JSON.stringify(!1),"process.env":"({})"}},I=e=>[eo,el,e.filename],P={...C,entry:Object.fromEntries(Object.entries(_).map(([e,t])=>[e,I(t)]))},O=Object.fromEntries(Object.entries(_).filter(([e])=>A.has(e))),D=new Map(Object.keys(O).map(e=>[nc(e),e])),$={...P,entry:Object.fromEntries(Object.entries(O).map(([e,t])=>[nc(e),I(t)])),define:{...P.define,__DOUBAO_APPS_WEB__:JSON.stringify(!0),__LYNXVIEW__:JSON.stringify(!0)}},R=[...ed()?[]:[H({externals:aK(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"?na:ni;n.plugin(ns.name).use(ns,[{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(rg.name).use(rg,[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(aj,[{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(aL,[r])})}}),...p===eD.DEV&&T?[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,W.createRequire)(tC.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,tQ.existsSync);if(!r)return n;let o=e.readConfigFile(r,e.sys.readFile);return o.error?n:{...e.parseJsonConfigFileContent(o.config,e.sys,tC.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[Q(e),o?(n={},!function e(t){if(r.isCallExpression(t)&&("getViewData"===aV(r,t.expression)||"useViewData"===aV(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=Q(e);return[nu(t,n,e),s[r]??{}]}));return{templatesByEntry:s,templatesByWidget:l}}(e.appDirectory,e.widgets,e.metadata.getData().widgets)}catch{t=aG}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(ag)}}})),t.onAfterCreateCompiler(({compiler:t})=>{for(let n of"compilers"in t?t.compilers:[t])n.hooks.failed.tap("DevServerLogPlugin",t=>e.finishInitialDevCompile(t))}),t.onAfterDevCompile(async({stats:i})=>{if(i.hasErrors())return void e.finishInitialDevCompile(Error(i.toString({all:!1,errors:!0,colors:!1})));if(r)return;let{devServer:a}=t.context;if(!a)return;r=!0;let s=await tA({debugDriver:e.userConfig.debugDriver,skipAdbForegroundAppWatch:e.userConfig.skipAdbForegroundAppWatch}).catch(rb);o||(e.finishInitialDevCompile(),af({context:e,port:a.port,driver:s,isSigned:e.isSignedEncryption,onCleanupReady(e){o?e():n=e}}).catch(e=>{o||ez.error("Failed to initialize dev server actions",{error:e})}))}),t.onCloseDevServer(()=>{o=!0,e.devServerAbort.abort(),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=>{aO.report({appDirectory:e.appDirectory,context:e,scene:e.compileLifecycle.scene??(e.command===eD.DEV?"dev_initial":e.command),status:"failed",errorStage:"compile",error:t})})}),e.command!==eD.DEV){let t=e.command;n.onBeforeBuild(()=>{let n=Date.now();aC(e.compileLifecycle,{scene:t,commandStartTime:e.compileLifecycle.commandStartTime??n,compileStartTime:n})}),n.onAfterBuild(({stats:n})=>{aD(e,t,n)})}else n.onBeforeDevCompile(({isFirstCompile:t})=>{let n=Date.now();aC(e.compileLifecycle,{scene:t?"dev_initial":"hot_update",commandStartTime:t?e.compileLifecycle.commandStartTime??n:n,compileStartTime:n})}),n.onAfterDevCompile(({stats:t})=>{aD(e,e.compileLifecycle.scene??"dev_initial",t)})}}}({context:e.context}),..."true"===process.env.BYTED_RSDOCTOR?[{name:"doubao-apps:byted-rsdoctor",setup(e){e.onBeforeCreateCompiler(({bundlerConfigs:e})=>{let{BytedRsdoctorPlugin:t}=aY(aX(["@byted/rsdoctor"],w));for(let n of e){let e=tC.join(n.output?.path??"",`.rsdoctor-${n.name}`);n.plugins??=[],n.plugins.push(new t({disableClientServer:!0,supports:{banner:!0},output:{reportDir:e}}))}})}}]:[],(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(aB,[{pluginSystem:r,context:o}])})}}),(({getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:n,metadata:r,resolveSigningEncryptionOptions:o,onProcessDuration:i})=>({name:"lynx:encode-worker",async setup(a){eg()||a.modifyBundlerChain((a,s)=>{s?.environment?.name!=="web"&&a.plugin(rf.name).use(rf,[{getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:n,metadata:r,resolveSigningEncryptionOptions:o,onProcessDuration:i}]).end()})}}))({getAppAssetPath:()=>e.context.appAssetPath,getAppMapAssetPath:()=>e.context.appMapAssetPath,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(aW.name).use(aW,[O])})}},(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=tC.resolve(t),r.moduleFilenameTemplate=({absoluteResourcePath:e,query:t=""})=>{let r=tC.relative(n,e),o=".."!==r&&!r.startsWith(`..${tC.sep}`)&&!tC.isAbsolute(r),i=o?aU(r):aU(e).replace(/^\/+/,"");return`${o?"file":"webpack"}:///${i}${t}`},e}),e.plugin(aH.name).use(aH,[i])}}})}})],B=d({mode:p===eD.DEV?"development":"production",environments:T?{lynx:L,web:{source:$,output:{distPath:{css:"",js:"base/web-common"},cleanDistPath:!1,filename:{assets:"[name]/web.bundle"},sourceMap:{js:!!b&&"cheap-module-source-map",css:!1}},plugins:[H({externals:aK(p===eD.DEV,!0),globalObject:"lynx"})]}}:{lynx:L},tools:{rspack:{module:{rules:[{enforce:"pre",test:/\.(t|j)sx$/,loader:function(e,t,n=tC.join(tC.dirname((0,az.fileURLToPath)(import.meta.url)),"components-loader.js"),r=aX){let o=t===e3?["@doubao-dev/kit/components-loader","@byted-doubao-apps/kit/components-loader"]:["@byted-doubao-apps/kit/components-loader","@doubao-dev/kit/components-loader"];try{return r(o,e)}catch(e){if((0,tQ.existsSync)(n))return n;throw e}}(w,v),options:{frameworkPackage:v}}]},plugins:[new c.BannerPlugin({banner:'"use registerWorkletInternal";',raw:!0,entryOnly:!0,stage:c.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE+1,test:/\.js$/})]}},source:{...C,entry:{}},server:{cors:!0,host:e.context.devServerHost},dev:{writeToDisk:eu(),hmr:p===eD.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:eu(),...ed()&&!y?{chunkSplit:{strategy:"split-by-experience"}}:{}},...y?{splitChunks:!1}:{},plugins:[{name:"replace-lynx-react-alias",setup(e){k({LAYERS:s,lazy:!1,rootPath:tC.dirname((0,az.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:v,oldRuntimePkg:[],legacySlot:!0},enableCSSInheritance:!0,shake:{pkgName:[...e7]}}),{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:S}))}})}},function(e){let{compilerOptionsKeys:t=nS.compilerOptionsKeys,configKeys:n=nS.configKeys,validate:r=n9,dslPluginName2PkgName:o=n8,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(`\
|
|
59
59
|
[pluginLynxConfig] No \`LynxTemplatePlugin\` exposed to ${nX("the plugin API","https://rsbuild.rs/plugins/dev/core#apiexpose")}.
|
|
60
60
|
|
|
61
61
|
Please upgrade ${e} to latest version.
|
|
62
62
|
|
|
63
|
-
See ${nX(n4().yellow("Upgrade Rspeedy"),
|
|
64
|
-
`)}let{LynxTemplatePlugin:l}=s;
|
|
63
|
+
See ${nX(n4().yellow("Upgrade Rspeedy"),i)} for more details.
|
|
64
|
+
`)}let{LynxTemplatePlugin:l}=s;a.plugin("lynx:config").use(n0,[{LynxTemplatePlugin:l,config:e,compilerOptionsKeys:t,configKeys:n}])})}}}({enableMultiTouch:!0,enableNewGesture:!0,enableCSSInlineVariables:!0,enableSimultaneousTap:!0,enableReloadLifecycle:!0}),m(),u(),...T?[]:R,...N,...M,...T?j:[]]});return await this.pluginSystem.callViewHooks("beforeBuild",{buildConfig:B}),B}}async function aQ(e,t){let n=new aZ(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 a0(e,t){var n;let{entry:r}=await nr({config:e,pluginSystem:t});return await aQ({...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}${eg()?".js":".template.js"}`,import:"web"===i&&"development"===r.mode&&"app"===e?["@lynx-js/webpack-dev-transport/client","@rspack/core/hot/dev-server",t.filename]:t.filename,layer:s.BACKGROUND}}),e.plugins.push(new n_(n,"lynx"===t.name)),"web"===t.name&&e.plugins.push(new nf))})}})]},t)}async function a1(e){let t=globalThis,n=Object.prototype.hasOwnProperty.call(t,"defineAppConfig"),r=t.defineAppConfig;t.defineAppConfig=e=>e;try{return await e6(e)}finally{n?t.defineAppConfig=r:delete t.defineAppConfig}}async function a2({cwd:e=process.cwd()}={}){let t=eW(tY.resolve(e,"src"),te);if(t)try{let e=await a1(t);return{...void 0!==e.darkMode?{darkMode:e.darkMode}:{},...void 0!==e.chat?{chat:e.chat}:{},...Array.isArray(e.pages)?{pages:e.pages}:{},...Array.isArray(e.widgets)?{widgets:e.widgets}:{}}}catch(e){throw eh.error("Failed to load Taro app config file",{path:t}),e}}let a3=async(e,t=tC.basename(e))=>{if(!tQ.existsSync(e))return{};let n={};for(let r of(await tT.readdir(e))){let o=tC.resolve(e,r);if(!tQ.statSync(o).isDirectory())continue;let i=tC.resolve(o,em);tQ.existsSync(i)&&(n[`${t}/${r}/index`]={folderName:`${r}/index`,renderType:X.REACT_LYNX,filename:i})}return n},a4=async(e,t=tC.basename(e))=>{if(!tQ.existsSync(e))return{viewEntries:{},apiEntries:{}};let n=await a3(e,t),r={},o=tC.resolve(e,ey);tQ.existsSync(o)&&(r[`${t}/login`]={filename:o,folderName:e});let i=tC.resolve(e,ep);return tQ.existsSync(i)&&(r[`${t}/${e9}`]={filename:i,folderName:e}),{viewEntries:n,apiEntries:r}},a5=async(e,t)=>tQ.existsSync(e)?(await tT.readdir(e)).reduce((n,r)=>{let o=tC.resolve(e,r);return tQ.statSync(o).isDirectory()&&tQ.existsSync(tC.resolve(o,t))&&(n[r]=tC.resolve(o,t)),n},{}):{};function a9(e){return tC.resolve(e,"app.ts")}function a8(e,t,n,r){let o=`${n}/`;if(!t.startsWith(o))throw Error(`${n} config key must start with "${o}": ${t}`);let i=t.slice(o.length),a=tC.resolve(e,n,`${i}${r}`);if(!tQ.existsSync(a))throw Error(`Configured entry file does not exist for ${t}: ${a}`);return{relativeEntry:i,filename:a}}function a7(e,t){let n=t.entries[e]?.name;if(void 0===n)return t3(e);if("string"!=typeof n||!n.trim())throw Error(`Configured Tool name must be a non-empty string: ${e}`);return n.trim()}let a6=async(e,t={entryNames:[],entries:{}})=>{let n=tC.resolve(e,"tools"),r={...await a5(n,ew)};t.entryNames.forEach(n=>{let{filename:o}=a8(e,n,"tools",".ts"),i=a7(n,t),a=r[i];if(a&&a!==o)throw Error(`Tool name "${i}" is already used by another entry: ${a}`);r[i]=o});let o=a9(e);return{tools:r,app:tQ.existsSync(o)?o:void 0}},se=async(e,t)=>{let n=tC.resolve(e,"pages"),r=tC.resolve(e,eC),o=tC.resolve(e,"auth"),i=tC.resolve(e,"mcp-ui"),[a,s,l,p]=await Promise.all([a3(n),a3(r),a4(i),a4(o)]),d=Object.keys(p.viewEntries).length>0||Object.keys(p.apiEntries).length>0?p:l,c=t.pages,u=t.widgets,m=(t,n,r)=>{let o={...t};return n.forEach(t=>{if(o[t])return;let{relativeEntry:n,filename:i}=a8(e,t,r,".tsx");o[t]={folderName:n,renderType:X.REACT_LYNX,filename:i,isVirtualFile:!1}}),o},h=m(a,c.entryNames,"pages");return{widgets:m(s,u.entryNames,"widgets"),pages:h,auth:d}};function st(e,t,n=!1,r=!1){let o=eO(t);return Object.keys(e).reduce((i,a)=>{let{filename:s}=e[a],l=r&&e[a].isLoginPage?"defineLoginPage":r?"definePage":"defineWidget",p=`${eq}${tC.sep}${a}${tC.extname(s)}`,d=t8(tC.join(t,p,".."),s);return i[a]=new t7(p),i[a].appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:d,importSpecifiers:[{propertyName:"default",name:"ViewEntry"}]},{moduleSpecifier:o,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:l,name:l},{propertyName:"getViewContext",name:"getViewContext"}]}),i[a].appendContent(`
|
|
65
65
|
lynx.__DOUBAO_VIEW_TYPE__ = ${JSON.stringify(r?"page":"widget")};
|
|
66
66
|
|
|
67
67
|
const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
|
|
@@ -77,11 +77,11 @@ const View =
|
|
|
77
77
|
const FC = bootstrapReactLynx(View, viewId, ${JSON.stringify(r)});
|
|
78
78
|
|
|
79
79
|
root.render(<FC />);
|
|
80
|
-
`),n&&
|
|
80
|
+
`),n&&i[a].appendContent(`
|
|
81
81
|
if (import.meta.webpackHot) {
|
|
82
82
|
import.meta.webpackHot.accept()
|
|
83
83
|
}
|
|
84
|
-
`),
|
|
84
|
+
`),i},{})}let sn={name:"AuthPlugin",async setup(e){eQ()||(e.view.hooks.modifyEnvironment.tapPromise(sn.name,async({environment:e})=>{e.useAuth=!0}),e.view.hooks.modifyEntryOption.tapPromise({name:sn.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let n,r,o,i,a,s,l,{isDev:p,auth:d,appDirectory:c}=e.context,u={},m=Object.keys(d.viewEntries).reduce((e,t)=>(e[t]={...d.viewEntries[t],internal:!0,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=eO(c),r=`${eq}${tC.sep}${eG}${tC.sep}${eM}.tsx`,u[o=`${eG}/${eM}`]={filename:r,renderType:X.REACT_LYNX,folderName:eM,isVirtualFile:!0,isSpecial:!0,internal:!0},i=new t7(r),a=tC.join(c,tC.dirname(r)),s=Object.values(d.apiEntries).find(e=>"login"===tC.parse(e.filename).name),l=Object.values(d.apiEntries).find(e=>"privacy"===tC.parse(e.filename).name),s&&i.appendImports({moduleSpecifier:t8(a,s.filename),importSpecifiers:[{propertyName:"default",name:"loginApi"}]}),l&&i.appendImports({moduleSpecifier:t8(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"}]},{moduleSpecifier:`${n}/components`,importSpecifiers:[{propertyName:"MCPAuthCard",name:"MCPAuthCard"}]}),i.appendContent(`
|
|
85
85
|
lynx.__DOUBAO_VIEW_TYPE__ = 'widget';
|
|
86
86
|
|
|
87
87
|
const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
|
|
@@ -105,7 +105,7 @@ root.render(<FC />);
|
|
|
105
105
|
if (import.meta.webpackHot) {
|
|
106
106
|
import.meta.webpackHot.accept()
|
|
107
107
|
}
|
|
108
|
-
`:""),{[
|
|
108
|
+
`:""),{[o]:i}),st(m,c,p,!0)),e.context.appendWidgets(u),{entry:t}}))}};(nx=nR||(nR={}))[nx.DISABLED=0]="DISABLED",nx[nx.ENABLED=1]="ENABLED";let sr="AppletDoubaoAppInfoPlugin",so={name:sr,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sr,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),o=e.context.permissions;r.assignBasicManifest({permissions:void 0===o?Object.fromEntries(n.permissionList.filter(e=>e.status===nR.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)):Object.fromEntries(o.filter(e=>"string"==typeof e?.scope_name&&!!e.scope_name.trim()).map(e=>{let t=e.scope_name.trim();return[t,{desc:"string"==typeof e.description&&e.description?e.description:t,apis:[]}]}))}),n?.appName&&r.mergeAppletManifest({name:n.appName}),n?.iconUrl&&r.mergeAppletManifest({icons:tk(n.iconUrl)})}})}},si={name:"ExpiredWidgetPlugin",async setup(e){e.view.hooks.modifyEntryOption.tapPromise({name:si.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=eO(s),r=`${eq}${tC.sep}${eG}${tC.sep}${eX}.tsx`,l[o=`${eG}/${eX}`]={filename:r,renderType:X.REACT_LYNX,folderName:eX,isVirtualFile:!0,isSpecial:!0,internal:!0},(i=new t7(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(`
|
|
109
109
|
lynx.__DOUBAO_VIEW_TYPE__ = 'widget';
|
|
110
110
|
|
|
111
111
|
const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
|
|
@@ -120,11 +120,11 @@ const View = defineWidget({
|
|
|
120
120
|
|
|
121
121
|
const FC = bootstrapReactLynx(View, viewId);
|
|
122
122
|
root.render(<FC />);
|
|
123
|
-
`,
|
|
123
|
+
`,a?`
|
|
124
124
|
if (import.meta.webpackHot) {
|
|
125
125
|
import.meta.webpackHot.accept()
|
|
126
126
|
}
|
|
127
|
-
`:""),{[
|
|
127
|
+
`:""),{[o]:i})),e.context.appendWidgets(l),{entry:t}})}},sa="LynxPlugin",ss={name:sa,async setup(e){e.view.hooks.modifyEnvironment.tapPromise(sa,async({environment:e})=>{e.useLynx=!0});let t={};e.view.hooks.modifyEntryOption.tapPromise({name:sa,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,st(i,r,o),st(a,r,o,!0)),{entry:n}}),e.view.hooks.collectMetaData.tapPromise({name:sa,stage:e.view.COLLECT_METADATA_STAGE_PROCESS_METADATA},async({collector:n})=>{let{normalizedAppConfig:r,userConfig:o,widgets:i,pages:a}=e.context;await rd({widgets:i,pages:a,entries:t,collector:n,normalizedAppConfig:r,define:o.source?.define})}),e.assets.hooks.beforeEmit.tapPromise({name:sa,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,X.LYNX);i.has(r)&&(l.titleType=Y.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=t5(o.metadata.appId,i.metadata.path,"template.js");s.destination=n,t.getManifestAsset(e.context.manifestAssetPath).appendPage(i.toManifest(n,s.hashCode,X.LYNX))}})}),e.assets.hooks.afterEmit.tapPromise(sa,async({assets:e})=>{}),e.view.hooks.afterBuild.tapPromise(sa,async({stats:e})=>{})}};async function sl(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)),er((0,ra.parseSync)(l,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(n7(e.callee)&&["defineTool","defineApp"].includes(e.callee.value)){let t=e.arguments[0]?.expression;if(rn(t)){for(let e of t.properties)if(ro(e)&&n7(e.key)&&"aiMeta"===e.key.value){let t=ri(e.value);s?i.addToolMeta(s,t):i.addAppMeta({...t,appId:t.appId??t.package})}}}}}))}async function sp({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})}),tz.existsSync(t)?await Promise.all(Object.values({...e,app:t}).filter(e=>/\.(ts|tsx|jsx|js)$/i.test(e)&&tz.existsSync(e)).map(e=>sl(tz.readFileSync(e,"utf-8"),e,i))):eh.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,chat:o?.chat??a.chat,appId:s})}let sd={name:"AppletMainPlugin",setup:async e=>{e.context.app&&(e.worker.hooks.modifyEntryOption.tapPromise("AppletMainPlugin",async({entry:t})=>{var n,r,o;let i,{app:a,tools:s}=e.context,l=Object.fromEntries((n=e.context.normalizedAppConfig.tools).entryNames.map(e=>{let t=a7(e,n),r=s[t];if(!r)throw Error(`Configured Tool entry was not analyzed: ${e}`);return[t,r]}));return Object.assign(t,{app:(r=`${e.context.appDirectory}${tC.sep}${eq}${tC.sep}app.js`,i=(({dirname:e,app:t,tools:n})=>{let r=[],o=[],i=eO(tY.resolve(t,"..",".."));Object.entries(n).forEach(([t,n],i)=>{let a=JSON.stringify(t);r.push(`import Tool${i} from "${t8(e,n)}";`),o.push(`toAppRuntimeTool(Tool${i}, ${a})`)});let a=o.length>0?`function toAppRuntimeTool(tool, id) {
|
|
128
128
|
return typeof tool === 'object' &&
|
|
129
129
|
tool !== null &&
|
|
130
130
|
'__FUNCTIONAL__' in tool &&
|
|
@@ -142,22 +142,22 @@ if (import.meta.webpackHot) {
|
|
|
142
142
|
return tool(typeof input === 'string' ? JSON.parse(input) : input);
|
|
143
143
|
}
|
|
144
144
|
});
|
|
145
|
-
}`:"",s=
|
|
146
|
-
import { ${s} } from "${
|
|
145
|
+
}`:"",s=o.length>0?"Applet, defineTool":"Applet";return`
|
|
146
|
+
import { ${s} } from "${i}";
|
|
147
147
|
import App from "${t8(e,t)}";
|
|
148
148
|
|
|
149
149
|
${r.join("\n")}
|
|
150
150
|
|
|
151
|
-
${
|
|
151
|
+
${a}
|
|
152
152
|
|
|
153
|
-
new Applet(App, [${
|
|
154
|
-
`})({dirname:tY.dirname(r),app:
|
|
153
|
+
new Applet(App, [${o.join(", ")}]).bootstrap();
|
|
154
|
+
`})({dirname:tY.dirname(r),app:a,tools:s}),new t7(r,i))}),Object.keys(l).length>0&&(t[e$]=(o=`${e.context.appDirectory}${tC.sep}${eq}${tC.sep}${e$}.js`,new t7(o,function({appDirectory:e,clientTools:t,dirname:n}){let r=eO(e),o=[],i=[];return Object.entries(t).forEach(([e,t],r)=>{o.push(`import ClientTool${r} from "${t8(n,t)}";`),i.push(`{ name: ${JSON.stringify(e)}, handler: ClientTool${r} }`)}),`
|
|
155
155
|
import { bootstrapClientToolRuntime } from "${r}";
|
|
156
156
|
|
|
157
|
-
${
|
|
157
|
+
${o.join("\n")}
|
|
158
158
|
|
|
159
|
-
bootstrapClientToolRuntime([${
|
|
160
|
-
`}({appDirectory:e.context.appDirectory,clientTools:l,dirname:tC.dirname(a)})))),{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:a,userConfig:o}=e.context;await sc({appConfig:r,tools:a,app:n,collector:t,define:o.source?.define}),e.context.setVersionTag(e.context.metadata.app.version)}),e.assets.hooks.beforeEmit.tapPromise({name:"AppletMainPlugin",stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS},async({assets:t,chunks:n})=>{var r,a;let{app:o,pages:i,tools:s}=e.context.metadata.getInstance(),l=t.getAsset(e.context.appAssetPath),p=n[e$]?.find(({source:e})=>e.endsWith(".js")),d=t.getManifestAsset(e.context.manifestAssetPath),{manifest:c}=d,u=[];c.applet.pages.forEach(e=>{u.push(e.digest)});let m=o.metadata.appId,h=e.context.versionTag;d.assignBasicManifest({manifestVersion:"3.0",packageName:m,appId:m,versionName:h,versionTag:h,scmVersion:process.env.BUILD_VERSION,versionCode:Date.now().toString(),runtimeVersion:"1.0",sourceType:e.context.internal?1:2,settings:e.context.manifestSettings});let f=e.context.appAssetPath,g=e.context.normalizedAppConfig.pages.entryNames[0]??Object.keys(e.context.pages)[0],y=g?i[g]?.metadata.path:void 0,b=o.toManifest({toolsMetadata:s,hashCode:l?.hashCode??(r=l?.hashCode??c?.applet?.digest,a=u.join(""),i$.createHash("sha256").update(r+a).digest("hex").substring(0,8)),appRuntimeEntry:f,appRuntimeType:e.context.environment.useLynx?"lynx":"js"});p&&(b.toolRuntimeEntry=p.source),d.mergeAppletManifest(b),y&&d.mergeAppletManifest({appletEntry:y})}),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})=>{}))}},sm={name:"AppletMainEntryCheckPlugin",setup:async e=>{let{srcDirectory:t}=e.context,n=i6(t);if(!tQ.existsSync(n))throw Error("ENOENT: no such file or directory")}},sh={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)}),a=t.getManifestAsset(e.context.manifestAssetPath),{manifest:o}=a,{buffer:i,status:s,error_msg:l}=await r(Buffer.from(a.content),t5(n,{extra_config:{app_id:o.appId,bundle_id:""},output_mode:"sign_block"}));if(0!==s)throw Error(l);let p=new iR(eE,i);p.destination=eE,t.addAsset(eE,p)}})}},sf="AppletWebManifestPlugin",sg={name:sf,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sf,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-2},async({assets:t})=>{var n,r;let a=e.context.metadata.getData(),o=a.app.appId||e.context.appId,i=e.context.command===eD.DEV?"all":"configured",s=nh(e.context.pages,e.context.normalizedAppConfig.pages.entries,i),l=nh(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,i);if(!o&&Object.keys(s).length>0)throw Error("appId is required to resolve Web page entry paths");let p=o?(n=a.pages,Object.keys(s).map(e=>{let t=n[e]??{},r=t.path??t4(e),a={entry:t9(o,r,nl)},i=nm(s[e]);return{path:r,entryName:e,web:a,debugHidden:i,manifest:{...t,path:r,digest:"",entry:"",renderType:X.LYNX,web:a,...i?{debugHidden:!0}:{}}}})):[],d=(r=a.widgets,Object.keys(l).map(e=>{let{id:t,...n}=r[e]??{},a=t??nu(l,r,e),o={entry:`${a}/${nl}`},i=nm(l[e]);return{id:a,entryName:e,web:o,debugHidden:i,manifest:{...n,widgetId:a,digest:"",entry:"",renderType:X.LYNX,web:o,...i?{debugHidden:!0}:{}}}}));if(0===p.length&&0===d.length&&0===e.context.normalizedAppConfig.tools.entryNames.length)return;let c=t.getManifestAsset(e.context.manifestAssetPath),u=new Map(p.map(e=>[e.path,e])),m=new Set(c.manifest.applet.pages?.map(e=>e.path));for(let e of(c.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)||c.appendPage(e.manifest);let h=new Map(d.map(e=>[e.id,e])),f=new Set(c.manifest.widgets?.map(e=>e.widgetId));for(let t of(c.manifest.widgets?.forEach(e=>{let t=h.get(e.widgetId);t&&(e.web=t.web,t.debugHidden&&(e.debugHidden=!0))}),d))if(!f.has(t.id)){let n=t.manifest;e.context.templateWidgetEntries.has(t.entryName)&&(n.titleType=Y.NONE),c.appendWidget(n)}e.context.app&&(c.manifest.applet.web={appRuntimeEntry:np,...e.context.normalizedAppConfig.tools.entryNames.length>0?{toolRuntimeEntry:nd}:{}})})}};function sy(e,t){let n;if(!e)return{entryNames:[],entries:{}};if(Array.isArray(e))n=e;else if("object"==typeof e)t&&eh.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=[],a={},o=new Set,i=[],s=new Set;return n.forEach(e=>{let t,n;if("string"==typeof e)t=e,n={};else{let{entry:r,...a}=e;if(!r)throw Error('Entry config object must include "entry".');t=r,n=a}o.has(t)?s.has(t)||(i.push(t),s.add(t)):(r.push(t),o.add(t)),a[t]=n}),t&&i.length>0&&eh.warn(`${t} config contains duplicate entries: ${i.join(", ")}. Entries are deduplicated, and the last metadata config takes effect.`),{entryNames:r,entries:a}}class sb{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:a="",appDirectory:o=process.cwd(),rootPath:i="",manifestPath:s="",pages:l={},widgets:p={},auth:d,mcpUI:c,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=a,this._appDirectory=o,this._rootPath=i,this._manifestPath=s,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={...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===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(tQ.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 eb}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}setVersionTag(e){return this.assertInitialized("versionTag"),!this._versionTag&&e&&(this._versionTag=e),this._versionTag}setAuthApi(e){this._auth={viewEntries:{...e.viewEntries},apiEntries:{...e.apiEntries}}}setMcpUIApi(e){this.setAuthApi(e)}get versionTag(){return this.assertInitialized("versionTag"),this._versionTag}}async function s_({internal:e,domainId:t,appLimit:n,appOffset:r,keyWord:a,appKey:o,cookie:i}){return await eB({internal:e,domainId:t,path:"/app_developer/api/apps",query:{app_limit:n,app_offset:r,key_word:a,app_key:o},method:"GET",headers:i?{Cookie:i}:void 0})}async function sv({source:e,internal:t,domainId:n,appLimit:r,appOffset:a,releaseStatus:o,keyWord:i,appKey:s,cookie:l}){return await eB({internal:t,domainId:n,path:"/developer/api/apps",query:{source:e,app_limit:r,app_offset:a,release_status:o,key_word:i,app_key:s},method:"GET",headers:l?{Cookie:l}:void 0})}async function sw({appKey:e,source:t,internal:n,domainId:r,releaseStatus:a,limit:o,offset:i,status:s,keyWord:l,versionTag:p,cookie:d}){return await eB({internal:n,domainId:r,path:`/developer/api/apps/${encodeURIComponent(e)}/version`,query:{source:t,release_status:a,limit:o,offset:i,status:s,key_word:l,version_tag:p},method:"GET",headers:d?{Cookie:d}:void 0})}async function sS({appKey:e,versionTag:t,internal:n,domainId:r,pageSize:a,pageNum:o,cookie:i}){return await eB({internal:n,domainId:r,path:`/developer/api/apps/${encodeURIComponent(e)}/permission/versions/${encodeURIComponent(t)}/permission_list`,query:{page_size:a,page_num:o},method:"GET",headers:i?{Cookie:i}:void 0})}function sE(e){return e.is_latest||e.is_current}function sx(e){return Date.parse(e.updated_at??e.created_at??e.online_at??"")}function sA(e){return Number(e.version_code??e.qr_data?.artifact_version_code)}function sT(e){return e.version_tag}function sC(e,t){eR()&&eh.info(e,t)}async function sI({appKey:e,internal:t=!1,cookie:n,source:r=nj.REQUEST_SOURCE_IDE}){sC("[app-info] 开始获取应用信息",{appKey:e,internal:t,session:n?"present":"absent"});let a=await s_({internal:t,appLimit:1,appOffset:0,appKey:e,cookie:n}).then(({data:t,log_id:n})=>{let r=t?.app_list||[],a=r.find(t=>t.app_key===e);return sC("[app-info] MGetApps 请求完成",{appKey:e,appCount:r.length,exactMatch:!!a,logId:n}),a}).catch(t=>{if(sC("[app-info] MGetApps 请求失败",{appKey:e,reason:eI(t)}),ir(t))throw t}),o=a?void 0:await sv({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)||[],a=r.find(t=>t.app_key===e),o=a||r[0];return sC("[app-info] MGetAppsDeprecated 请求完成",{appKey:e,appCount:r.length,exactMatch:!!a,logId:n}),o?.app_meta}).catch(t=>{sC("[app-info] MGetAppsDeprecated 请求失败",{appKey:e,reason:eI(t)})});if(!a&&!o)throw sC("[app-info] 应用信息查询结束,未找到可用结果",{appKey:e}),Error(`未找到应用 ${e}`);let i=a?void 0:await sw({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(sC("[app-info] MGetAppVersions 请求完成",{appKey:e,versionCount:r.length,logId:n}),0===r.length)return;let a=r.find(sE);return a||r.reduce((e,t)=>{let n,r;return!e||(n=sx(t),r=sx(e),(Number.isNaN(n)&&Number.isNaN(r)?sA(t)-sA(e):(Number.isNaN(n)?-1/0:n)-(Number.isNaN(r)?-1/0:r))>0)?t:e},void 0)}).catch(t=>{sC("[app-info] MGetAppVersions 请求失败",{appKey:e,reason:eI(t)})}),s=a?.current_version_tag||(i?sT(i):""),l=a?.icon_url||(i?i.icon_url:void 0)||o?.icon_url,p=a?.name||o?.name,d=i&&sT(i)===s?i:a?{version_tag:a.current_version_tag,icon_url:a.icon_url,updated_at:a.updated_at,online_at:a.online_at,offline_at:a.offline_at}:{version_tag:s,icon_url:l};if(a||!s||!n)return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:[],permissionTotal:0,version:d};let c=await sS({appKey:e,versionTag:s,pageSize:1e3,pageNum:1,internal:t,cookie:n}).then(t=>(sC("[app-info] FetchAppPermissionList 请求完成",{appKey:e,versionTag:s,permissionTotal:t.data?.total||0,logId:t.log_id}),t)).catch(t=>{throw sC("[app-info] FetchAppPermissionList 请求失败",{appKey:e,versionTag:s,reason:eI(t)}),t});return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:c.data?.permission_list||[],permissionTotal:c.data?.total||0,version:d}}function sP(){return function({fetch:e,getCacheKey:t,ttl:n,timeout:r,cacheFailures:a=!1,now:o=Date.now}){let i=new Map;return function(...s){var l,p;let d,c="string"==typeof(l=t(...s))?l:JSON.stringify(l),u=o(),m=i.get(c);if(m&&m.expiresAt>u)return m.promise;let h=(p=e(...s),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 a||i.get(c)?.promise!==h||i.delete(c),e});return i.set(c,{expiresAt:u+n,promise:h}),h}}({fetch:sI,getCacheKey:({appKey:e,internal:t,cookie:n})=>[e,t,n],ttl:6e4,timeout:1e4,cacheFailures:!0})}async function sO(e="0.0.0.0"){if(!e||e.includes(":"))throw Error("--host must be an IPv4 address or hostname, without a scheme or port; IPv6 is not supported.");return(await (0,E.lookup)(e,{family:4})).address}async function sD(e,t,n){let r=await fetch(`${e}/base/manifest.json`,{signal:AbortSignal.any([n,AbortSignal.timeout(1500)]),redirect:"error"}),a=await r.json();if(!r.ok||t&&a?.appId!==t)throw Error(`Invalid dev manifest at ${e} (HTTP ${r.status}, appId: ${t})`)}async function sk(e,t,n,r){let a,o="0.0.0.0"===t,i=e4(e,o?"127.0.0.1":t),s=AbortSignal.any([r,AbortSignal.timeout(5e3)]);try{for(;;)try{await sD(i,n,s);break}catch(e){a=e,await (0,_.setTimeout)(200,void 0,{signal:s})}}catch{throw r.throwIfAborted(),Error(`Dev server manifest was not ready at ${i}/base/manifest.json within 5000ms after compilation`,{cause:a})}if(!o)return{host:i,artifactOrigin:i};let l=ti().map(t=>e4(e,t)),p=l.map(e=>sD(e,n,r).then(()=>e,()=>void 0)),d=i;for await(let e of p)if(e){d=e;break}return r.throwIfAborted(),d===i?ez.warn(`Dev server is available locally at ${d}. For network devices, check your network or use --host <IP>.`):l.length>1&&ez.info(`Dev server address: ${d}. If your device uses another network, restart with --host <IP>.`),{host:d,artifactOrigin:i}}(nA=nN||(nN={}))[nA.APP_TYPE_MINI_APP=0]="APP_TYPE_MINI_APP",nA[nA.APP_TYPE_NATIVE=1]="APP_TYPE_NATIVE",(nT=nL||(nL={}))[nT.DRAFT=0]="DRAFT",nT[nT.UNDER_REVIEW=1]="UNDER_REVIEW",nT[nT.APPROVED=2]="APPROVED",nT[nT.REJECTED=3]="REJECTED",nT[nT.WITHDRAWN=4]="WITHDRAWN",nT[nT.PUBLISHING=5]="PUBLISHING",nT[nT.PUBLISHED=6]="PUBLISHED",nT[nT.ARCHIVED=7]="ARCHIVED",nT[nT.DELETED=8]="DELETED",(nC=nM||(nM={}))[nC.DRAFT=0]="DRAFT",nC[nC.PUBLISHED=1]="PUBLISHED",nC[nC.ARCHIVED=2]="ARCHIVED",(nI=nj||(nj={}))[nI.REQUEST_SOURCE_PLATFORM=0]="REQUEST_SOURCE_PLATFORM",nI[nI.REQUEST_SOURCE_IDE=1]="REQUEST_SOURCE_IDE",nI[nI.REQUEST_SOURCE_DEVICE=2]="REQUEST_SOURCE_DEVICE",nI[nI.REQUEST_SOURCE_OP_PLATFORM=3]="REQUEST_SOURCE_OP_PLATFORM";class s$ extends sb{devServerInteractive=!0;devServerHost="0.0.0.0";devServerAbort=new AbortController;finishInitialDevCompile;initialDevCompile=new Promise(e=>{this.finishInitialDevCompile=e,this.devServerAbort.signal.addEventListener("abort",()=>e(void 0),{once:!0})});devServerResolution;resolveDevServer(e){return this.devServerResolution??=this.initialDevCompile.then(t=>{if(t)throw t;return this.devServerAbort.signal.throwIfAborted(),sk(e,this.devServerHost,this.appId,this.devServerAbort.signal)})}getWidgetViewDataTemplates;webDebuggerLaunchOptions;compileLifecycle=iT();eventsResources;toolsResources;manifestSettings;_userConfig={};_env={};_appConfig={};_normalizedAppConfig={pages:{entryNames:[],entries:{}},tools:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}};_signingEncryptionOptions;_rawSigningEncryptionOptions;_signingEncryptionOptionsPromise;_disableSigningEncryption=!1;_dek=Buffer.from("");_internal=!1;_fetchCachedAppInfo=sP();_skipAppInfoFetch=!1;_hasWarnedAppInfoFetchFailure=!1;_templateWidgetEntries=new Set;_permissions;get userConfig(){return this._userConfig}get env(){return{...this._env}}get appConfig(){return this._appConfig}get normalizedAppConfig(){return eY(this._normalizedAppConfig)}get templateWidgetEntries(){return new Set(this._templateWidgetEntries)}get permissions(){return this._permissions?.map(e=>({...e}))}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(!it(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 a=await this.getCachedLoginCookie().catch(()=>void 0);try{return Object.assign(r,await this._fetchCachedAppInfo({appKey:t,cookie:a,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(ir(e))return r;return this._hasWarnedAppInfoFetchFailure||(this._hasWarnedAppInfoFetchFailure=!0,eh.warn("从平台获取 Doubao 应用信息失败,将使用本地 `app.config.ts` 配置的数据",{reason:eI(e)})),r}}async bootstrap({srcDirectory:e,appDirectory:t,rootPath:n,userConfig:r,appConfig:a={},normalizedAppConfig:o={pages:{entryNames:[],entries:{}},tools:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}},command:i,metadata:s,signingEncryptionOptions:l,disableSigningEncryption:p,appId:d,versionTag:c,pages:u,widgets:m,auth:h,app:f,tools:g,internal:y,skipAppInfoFetch:b,permissions:_,devServerInteractive:v=!0,env:w={},loginCookieResolver:S,cachedLoginCookieResolver:E}){await super.bootstrap({srcDirectory:e,appDirectory:t,virtualEntryDir:tC.resolve(t,eq),rootPath:n,manifestPath:tC.resolve(`${n}/${eb}`),command:i,metadata:s,versionTag:c,pages:u,widgets:m,auth:h,app:f,tools:g,loginCookieResolver:S,cachedLoginCookieResolver:E});let{icons:x,...A}=a??{};this._userConfig=r,this.devServerInteractive=v,this._env={...w},this._appConfig={...A,...void 0!==d?{appId:d}:{},...void 0!==x?{icons:tk(x)}:{}},this._normalizedAppConfig=o,this._internal=y??ec(t),this._skipAppInfoFetch=!!b,this._permissions=_?.map(e=>({...e})),this._hasWarnedAppInfoFetchFailure=!1,this._templateWidgetEntries=new Set,this._rawSigningEncryptionOptions=l,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0,this._disableSigningEncryption=!!p,this._appId=d??a?.appId,this._dek=Buffer.from(""),this._fetchCachedAppInfo=sP()}async resolveSigningEncryptionOptionsOnce(){let e=this._appId??this.metadata.appId;if(this._signingEncryptionOptions=await ta(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(),eu()&&console.log("DEK base64:",Buffer.from(this.dek.buffer,this.dek.byteOffset,this.dek.byteLength).toString("base64"))}return this.signingEncryptionOptions}}async function sR({appId:e,versionTag:t,versionCode:n,packagePath:r,internal:a,domainId:o,cookie:i,token:s,needAuth:l=!0}){let p=new FormData,d=new Blob([new Uint8Array(tQ.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 eB({internal:a,domainId:s?"sms-external":o,path:c,method:"POST",body:p,headers:{...i?{Cookie:i}:{},...s?{"X-Developer-Open-Build-Token":s}:{}},auth:l&&!s})}async function sN({versionTag:e,appKey:t,manifest:n,rootPath:r,internal:a,needAuth:o=!0,cookie:i,token:s}){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 t0({channelName:"doubao_app",manifest:n,rootPath:r});if(!u)throw Error("Failed to archive package");let m=await sR({appId:t||l||p,versionTag:c,versionCode:d,packagePath:u.resource,internal:a,needAuth:o,cookie:i,token:s});return console.log("Deploy success:",m),m}let sL=f("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),sM="x-db-llm-modifiable",sj="x-db-is-entity-id",sB="x-db-is-refresh-key",sU=["entity_type"];function sF(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function sH(e,t,n){if(!sF(e))throw Error(`Tool "${n}" requires an object ${t}`);return e}function sW(e,t,n,r,a=!1){let o=`Tool "${t}" ${n} property "${r}"`;if(!sF(e)||"string"!=typeof e.type||!e.type.trim())throw Error(`${o} requires a string type`);let i=e.type.trim(),s=e[sM];if(void 0!==s&&"boolean"!=typeof s)throw Error(`${o} ${sM} must be a boolean`);if(s&&"outputSchema"!==n)throw Error(`${o} ${sM} is only supported in outputSchema`);if(s&&"array"!==i)throw Error(`${o} ${sM} is only supported for array fields`);let l=e[sj];if(void 0!==l&&"boolean"!=typeof l)throw Error(`${o} ${sj} must be a boolean`);if(l&&!a)throw Error(`${o} ${sj} is only supported on top-level card output fields`);let p=e[sB];if(void 0!==p&&"boolean"!=typeof p)throw Error(`${o} ${sB} must be a boolean`);if(p&&!a)throw Error(`${o} ${sB} is only supported on top-level card output fields`);let d={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}"`)}(i,o),...s?{llm_modifiable:!0}:{},...l?{is_entity_id:!0}:{},..."string"==typeof e.description&&e.description.trim()?{description:e.description.trim()}:{}};if("object"===i){if(!sF(e.properties))throw Error(`${o} requires object properties`);if(d.properties=Object.fromEntries(Object.entries(e.properties).map(([e,a])=>[e,sW(a,t,n,`${r}.${e}`)])),void 0!==e.required){if(!Array.isArray(e.required)||e.required.some(e=>"string"!=typeof e))throw Error(`${o} required must be a string array`);d.required=e.required}}if("array"===i){if(!sF(e.items))throw Error(`${o} requires object array items`);d.items=sW(e.items,t,n,`${r}[]`)}return d}function sV(e,t,n){let r=e[t];if(void 0===r)return{};if(!sF(r))throw Error(`manifest.yaml ${t} must be an object: ${n}`);return{...r}}function sG(e,t){if(!tQ.existsSync(e)||!tQ.statSync(e).isFile())throw Error(`${t} does not exist: ${e}`);return tQ.readFileSync(e,"utf8")}class sq{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(),a=await this.getUserConfig(t),o={...await this.getAppConfig(),...t.appName?{name:t.appName}:{},...t.appIcon?{icons:tk(t.appIcon)}:{}},i={pages:sy(o?.pages,"pages"),tools:sy(o?.tools,"tools"),widgets:sy(o?.widgets,"widgets")},s=function(e){let t=tC.join(e,"events.json");if(tQ.existsSync(t)&&tQ.statSync(t).isFile())return{readJson:()=>tQ.readFileSync(t,"utf8"),sourcePath:t}}(this.appDirectory),l=function({appDirectory:e,normalizedAppConfig:t}){let n=tC.join(e,"tools.json");if(!tQ.existsSync(n))return;let r=tC.join(e,"manifest.yaml"),a=()=>sG(n,"tools.json"),o=()=>(function({tools:e,manifestPath:t,manifestText:n}){let r=function(e,t){let n;try{n=(0,sL.qg)(e)}catch(e){throw Error(`Failed to parse manifest.yaml: ${t}`,{cause:e})}if(!sF(n))throw Error(`manifest.yaml must contain an object: ${t}`);return n}(n,t),a=sV(r,"tools",t),o=sV(r,"entities",t);for(let t of e){if(t.name in a)throw Error(`Tool "${t.name}" conflicts with a tool in manifest.yaml`);if(a[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||!sF(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,sW(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 o)throw Error(`Tool "${t.name}" conflicts with an entity in manifest.yaml`);o[t.name]={schema:{entity_type:{type:"string",llm_visible:!1},...function(e,t){let n=t.name;if("array"!==e.type||!sF(e.items))throw Error(`Card Tool "${n}" outputSchema must be an array`);if("object"!==e.items.type||!sF(e.items.properties))throw Error(`Card Tool "${n}" outputSchema items must be objects`);let r=e.items.properties,a=sU.find(e=>e in r);if(a)throw Error(`Tool "${n}" outputSchema must not declare reserved field "${a}"`);let o=Object.entries(r).filter(([e,t])=>{if(!sF(t)||void 0===t[sj])return!1;if("boolean"!=typeof t[sj])throw Error(`Tool "${n}" outputSchema property "${e}" ${sj} must be a boolean`);return t[sj]});if(1!==o.length)throw Error(`Card Tool "${n}" outputSchema requires exactly one ${sj} field; found ${o.length}`);let i=Object.entries(r).filter(([e,t])=>{if(!sF(t)||void 0===t[sB])return!1;if("boolean"!=typeof t[sB])throw Error(`Tool "${n}" outputSchema property "${e}" ${sB} must be a boolean`);return t[sB]});if("same_conversation"===t.expirePolicy){let e=o[0]?.[0];if(1!==i.length||i[0]?.[0]!==e)throw Error(`Card Tool "${n}" with expirePolicy "same_conversation" requires ${sB} on its ${sj} field`)}return Object.fromEntries(Object.entries(r).map(([e,t])=>[e,sW(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,sL.As)({...r,tools:a,entities:o})})({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(!sF(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 a=function(e,t,n){if(!sF(e))throw Error(`Tool at index ${t} must be an object: ${n}`);let r="string"==typeof e.name?e.name.trim():"",a="string"==typeof e.description?e.description.trim():"";if(!r||!a)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 o=function(e,t){if(void 0===e)return{};if(!sF(e))throw Error(`Tool "${t}" _meta must be an object`);if(void 0===e.ui)return{};if(!sF(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:a,...o,inputSchema:sH(e.inputSchema,"inputSchema",r),outputSchema:sH(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(a.name))throw Error(`Duplicate Tool name: ${a.name}`);return r.add(a.name),a})}}(a(),n);var r=e.tools;let o=new Set(t.widgets.entryNames.map(e=>t.widgets.entries[e]?.id??t3(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:sG(r,"manifest.yaml")});return o(),{manifestSourcePath:r,readManifestYaml:o,readToolsJson:a,toolsSourcePath:n}}({appDirectory:this.appDirectory,normalizedAppConfig:i}),p=function(e){if(e)return!0===e?{mcpEndpoint:ev()}:{...e,mcpEndpoint:ev({mcpEndpoint:e.mcpEndpoint})}}(t.openWebDebugger),d=Date.now()-r;this.rootPath=tC.resolve(this.appDirectory,"dist"),tQ.existsSync(tC.resolve(this.rootPath))&&tQ.rmSync(tC.resolve(this.rootPath),{recursive:!0,force:!0}),this.context=new s$,iC(this.context.compileLifecycle,r),this.context.compileLifecycle.prepareDurations.configLoadMs=d;let c=tC.resolve(this.appDirectory,"src"),u=Date.now(),{pages:m,widgets:h,auth:f,app:g,tools:y}=await this.analyzeConvention(c,i);this.context.compileLifecycle.prepareDurations.projectScanMs=Date.now()-u;let b=new tB,_=ec(this.appDirectory),v=Date.now();await this.context.bootstrap({srcDirectory:c,appDirectory:this.appDirectory,rootPath:this.rootPath,userConfig:a,env:this._env,appConfig:o,normalizedAppConfig:i,command:e,metadata:b,signingEncryptionOptions:t.signingEncryptionOptions,skipAppInfoFetch:!!t.token,permissions:t.permissions,appId:t.appId,versionTag:t.versionTag,pages:m,widgets:h,auth:f,app:g,tools:y,internal:_,devServerInteractive:t.interactive,loginCookieResolver:()=>eF(t,{internal:_}),cachedLoginCookieResolver:()=>e_(t,_)}),this.context.compileLifecycle.prepareDurations.contextBootstrapMs=Date.now()-v,void 0!==t.host&&(this.context.devServerHost=await sO(t.host)),this.context.webDebuggerLaunchOptions=p,this.context.eventsResources=s,this.context.toolsResources=l,this.pluginSystem=new tK(this.context,[su,sp,sm,sa,sg,si,sh,ss,...a.experiments?.taro?[function({name:e,appId:t,icons:n,widgets:r}){return{name:nt,setup:a=>{let o=(0,ne.createRequire)(import.meta.url);a.view.hooks.modifyEntryOption.tapPromise({name:nt,stage:a.view.MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY},async({entry:e})=>{let{appDirectory:t,isDev:n,pages:r,widgets:o}=a.context,i=t7(r,t,!1,n);return{entry:e=Object.assign(e,i,t7(o,t,!0,n))}}),a.view.hooks.beforeBuild.tapPromise({name:nt,stage:a.view.BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG},async({buildConfig:e})=>{let{appDirectory:t}=a.context;t5(e,{resolve:{alias:{"@tarojs/components":o.resolve("@doubao-dev/taro-runtime/components",{paths:[t]}),"@tarojs/taro":(0,tY.dirname)(o.resolve("@doubao-dev/taro-runtime/package.json",{paths:[t]}))}}})}),a.worker.hooks.modifyEntryOption.tapPromise({name:nt,stage:a.worker.MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE},async({entry:n})=>{let{appDirectory:r,isDev:o}=a.context,{app:i}=a.context;return i&&(n.app=function(e,t,n,r,a=!1){var o;let i=`${eq}${tC.sep}app.js`,s=(o=t8(tC.dirname(i),e)).startsWith(".")?o:`./${o}`,l=eO(t);return new t6(i,`
|
|
159
|
+
bootstrapClientToolRuntime([${i.join(", ")}]);
|
|
160
|
+
`}({appDirectory:e.context.appDirectory,clientTools:l,dirname:tC.dirname(o)})))),{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 sp({appConfig:r,tools:o,app:n,collector:t,define:i.source?.define}),e.context.setVersionTag(e.context.metadata.app.version)}),e.assets.hooks.beforeEmit.tapPromise({name:"AppletMainPlugin",stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS},async({assets:t,chunks:n})=>{var r,o;let{app:i,pages:a,tools:s}=e.context.metadata.getInstance(),l=t.getAsset(e.context.appAssetPath),p=n[e$]?.find(({source:e})=>e.endsWith(".js")),d=t.getManifestAsset(e.context.manifestAssetPath),{manifest:c}=d,u=[];c.applet.pages.forEach(e=>{u.push(e.digest)});let m=i.metadata.appId,h=e.context.versionTag;d.assignBasicManifest({manifestVersion:"3.0",packageName:m,appId:m,versionName:h,versionTag:h,scmVersion:process.env.BUILD_VERSION,versionCode:Date.now().toString(),runtimeVersion:"1.0",sourceType:e.context.internal?1:2,settings:e.context.manifestSettings});let f=e.context.appAssetPath,g=e.context.normalizedAppConfig.pages.entryNames[0]??Object.keys(e.context.pages)[0],y=g?a[g]?.metadata.path:void 0,b=i.toManifest({toolsMetadata:s,hashCode:l?.hashCode??(r=l?.hashCode??c?.applet?.digest,o=u.join(""),ak.createHash("sha256").update(r+o).digest("hex").substring(0,8)),appRuntimeEntry:f,appRuntimeType:e.context.environment.useLynx?"lynx":"js"});p&&(b.toolRuntimeEntry=p.source),d.mergeAppletManifest(b),y&&d.mergeAppletManifest({appletEntry:y})}),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})=>{}))}},sc={name:"AppletMainEntryCheckPlugin",setup:async e=>{let{srcDirectory:t}=e.context,n=a9(t);if(!tQ.existsSync(n))throw Error("ENOENT: no such file or directory")}},su={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),t9(n,{extra_config:{app_id:i.appId,bundle_id:""},output_mode:"sign_block"}));if(0!==s)throw Error(l);let p=new a$(eE,a);p.destination=eE,t.addAsset(eE,p)}})}},sm="AppletWebManifestPlugin",sh={name:sm,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sm,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===eD.DEV?"all":"configured",s=nh(e.context.pages,e.context.normalizedAppConfig.pages.entries,a),l=nh(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??t4(e),o={entry:t5(i,r,nl)},a=nm(s[e]);return{path:r,entryName:e,web:o,debugHidden:a,manifest:{...t,path:r,digest:"",entry:"",renderType:X.LYNX,web:o,...a?{debugHidden:!0}:{}}}})):[],d=(r=o.widgets,Object.keys(l).map(e=>{let{id:t,...n}=r[e]??{},o=t??nu(l,r,e),i={entry:`${o}/${nl}`},a=nm(l[e]);return{id:o,entryName:e,web:i,debugHidden:a,manifest:{...n,widgetId:o,digest:"",entry:"",renderType:X.LYNX,web:i,...a?{debugHidden:!0}:{}}}}));if(0===p.length&&0===d.length&&0===e.context.normalizedAppConfig.tools.entryNames.length)return;let c=t.getManifestAsset(e.context.manifestAssetPath),u=new Map(p.map(e=>[e.path,e])),m=new Set(c.manifest.applet.pages?.map(e=>e.path));for(let e of(c.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)||c.appendPage(e.manifest);let h=new Map(d.map(e=>[e.id,e])),f=new Set(c.manifest.widgets?.map(e=>e.widgetId));for(let t of(c.manifest.widgets?.forEach(e=>{let t=h.get(e.widgetId);t&&(e.web=t.web,t.debugHidden&&(e.debugHidden=!0))}),d))if(!f.has(t.id)){let n=t.manifest;e.context.templateWidgetEntries.has(t.entryName)&&(n.titleType=Y.NONE),c.appendWidget(n)}e.context.app&&(c.manifest.applet.web={appRuntimeEntry:np,...e.context.normalizedAppConfig.tools.entryNames.length>0?{toolRuntimeEntry:nd}:{}})})}};function sf(e,t){let n;if(!e)return{entryNames:[],entries:{}};if(Array.isArray(e))n=e;else if("object"==typeof e)t&&eh.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&&eh.warn(`${t} config contains duplicate entries: ${a.join(", ")}. Entries are deduplicated, and the last metadata config takes effect.`),{entryNames:r,entries:o}}class sg{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:d,mcpUI:c,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=d??c??{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===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(tQ.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 eb}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}setVersionTag(e){return this.assertInitialized("versionTag"),!this._versionTag&&e&&(this._versionTag=e),this._versionTag}setAuthApi(e){this._auth={viewEntries:{...e.viewEntries},apiEntries:{...e.apiEntries}}}setMcpUIApi(e){this.setAuthApi(e)}get versionTag(){return this.assertInitialized("versionTag"),this._versionTag}}async function sy({internal:e,domainId:t,appLimit:n,appOffset:r,keyWord:o,appKey:i,cookie:a}){return await eB({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 eB({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 s_({appKey:e,source:t,internal:n,domainId:r,releaseStatus:o,limit:i,offset:a,status:s,keyWord:l,versionTag:p,cookie:d}){return await eB({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:d?{Cookie:d}:void 0})}async function sv({appKey:e,versionTag:t,internal:n,domainId:r,pageSize:o,pageNum:i,cookie:a}){return await eB({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 sS(e){return Date.parse(e.updated_at??e.created_at??e.online_at??"")}function sE(e){return Number(e.version_code??e.qr_data?.artifact_version_code)}function sx(e){return e.version_tag}function sA(e,t){eR()&&eh.info(e,t)}async function sT({appKey:e,internal:t=!1,cookie:n,source:r=nj.REQUEST_SOURCE_IDE}){sA("[app-info] 开始获取应用信息",{appKey:e,internal:t,session:n?"present":"absent"});let o=await sy({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 sA("[app-info] MGetApps 请求完成",{appKey:e,appCount:r.length,exactMatch:!!o,logId:n}),o}).catch(t=>{if(sA("[app-info] MGetApps 请求失败",{appKey:e,reason:eI(t)}),ar(t))throw t}),i=o?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 sA("[app-info] MGetAppsDeprecated 请求完成",{appKey:e,appCount:r.length,exactMatch:!!o,logId:n}),i?.app_meta}).catch(t=>{sA("[app-info] MGetAppsDeprecated 请求失败",{appKey:e,reason:eI(t)})});if(!o&&!i)throw sA("[app-info] 应用信息查询结束,未找到可用结果",{appKey:e}),Error(`未找到应用 ${e}`);let a=o?void 0:await s_({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(sA("[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=sS(t),r=sS(e),(Number.isNaN(n)&&Number.isNaN(r)?sE(t)-sE(e):(Number.isNaN(n)?-1/0:n)-(Number.isNaN(r)?-1/0:r))>0)?t:e},void 0)}).catch(t=>{sA("[app-info] MGetAppVersions 请求失败",{appKey:e,reason:eI(t)})}),s=o?.current_version_tag||(a?sx(a):""),l=o?.icon_url||(a?a.icon_url:void 0)||i?.icon_url,p=o?.name||i?.name,d=a&&sx(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(o||!s||!n)return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:[],permissionTotal:0,version:d};let c=await sv({appKey:e,versionTag:s,pageSize:1e3,pageNum:1,internal:t,cookie:n}).then(t=>(sA("[app-info] FetchAppPermissionList 请求完成",{appKey:e,versionTag:s,permissionTotal:t.data?.total||0,logId:t.log_id}),t)).catch(t=>{throw sA("[app-info] FetchAppPermissionList 请求失败",{appKey:e,versionTag:s,reason:eI(t)}),t});return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:c.data?.permission_list||[],permissionTotal:c.data?.total||0,version:d}}function sC(){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 d,c="string"==typeof(l=t(...s))?l:JSON.stringify(l),u=i(),m=a.get(c);if(m&&m.expiresAt>u)return m.promise;let h=(p=e(...s),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 o||a.get(c)?.promise!==h||a.delete(c),e});return a.set(c,{expiresAt:u+n,promise:h}),h}}({fetch:sT,getCacheKey:({appKey:e,internal:t,cookie:n})=>[e,t,n],ttl:6e4,timeout:1e4,cacheFailures:!0})}async function sI(e="0.0.0.0"){if(!e||e.includes(":"))throw Error("--host 必须是 IPv4 地址或主机名,不能包含协议或端口;暂不支持 IPv6。");let{address:t}=await (0,E.lookup)(e,{family:4});if("0.0.0.0"!==t)return t;let n=ta()[0];return n||(ez.warn("未找到外部 IPv4 地址,将使用 127.0.0.1,仅支持本机访问。"),"127.0.0.1")}async function sP(e,t,n){let r=await fetch(`${e}/base/manifest.json`,{signal:AbortSignal.any([n,AbortSignal.timeout(1500)]),redirect:"error"}),o=await r.json();if(!r.ok||t&&o?.appId!==t)throw Error(`开发服务器返回的 manifest 无效:${e}(HTTP ${r.status},appId:${t})`)}async function sO(e,t,n,r){let o,i=e4(e,t),a=AbortSignal.any([r,AbortSignal.timeout(5e3)]);try{for(;;)try{await sP(i,n,a);break}catch(e){o=e,await (0,_.setTimeout)(200,void 0,{signal:a})}}catch{throw r.throwIfAborted(),Error(`开发服务器的 manifest 在 5 秒内未就绪:${i}/base/manifest.json。请检查网络,或使用 --host <IP> 指定设备可访问的本机 IP`,{cause:o})}return{host:i,artifactOrigin:i}}(nA=nN||(nN={}))[nA.APP_TYPE_MINI_APP=0]="APP_TYPE_MINI_APP",nA[nA.APP_TYPE_NATIVE=1]="APP_TYPE_NATIVE",(nT=nL||(nL={}))[nT.DRAFT=0]="DRAFT",nT[nT.UNDER_REVIEW=1]="UNDER_REVIEW",nT[nT.APPROVED=2]="APPROVED",nT[nT.REJECTED=3]="REJECTED",nT[nT.WITHDRAWN=4]="WITHDRAWN",nT[nT.PUBLISHING=5]="PUBLISHING",nT[nT.PUBLISHED=6]="PUBLISHED",nT[nT.ARCHIVED=7]="ARCHIVED",nT[nT.DELETED=8]="DELETED",(nC=nM||(nM={}))[nC.DRAFT=0]="DRAFT",nC[nC.PUBLISHED=1]="PUBLISHED",nC[nC.ARCHIVED=2]="ARCHIVED",(nI=nj||(nj={}))[nI.REQUEST_SOURCE_PLATFORM=0]="REQUEST_SOURCE_PLATFORM",nI[nI.REQUEST_SOURCE_IDE=1]="REQUEST_SOURCE_IDE",nI[nI.REQUEST_SOURCE_DEVICE=2]="REQUEST_SOURCE_DEVICE",nI[nI.REQUEST_SOURCE_OP_PLATFORM=3]="REQUEST_SOURCE_OP_PLATFORM";class sD extends sg{devServerInteractive=!0;devServerHost="0.0.0.0";devServerAbort=new AbortController;finishInitialDevCompile;initialDevCompile=new Promise(e=>{this.finishInitialDevCompile=e,this.devServerAbort.signal.addEventListener("abort",()=>e(void 0),{once:!0})});devServerResolution;resolveDevServer(e){return this.devServerResolution??=this.initialDevCompile.then(t=>{if(t)throw t;return this.devServerAbort.signal.throwIfAborted(),sO(e,this.devServerHost,this.appId,this.devServerAbort.signal)})}getWidgetViewDataTemplates;webDebuggerLaunchOptions;compileLifecycle=aA();eventsResources;toolsResources;manifestSettings;_userConfig={};_env={};_appConfig={};_normalizedAppConfig={pages:{entryNames:[],entries:{}},tools:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}};_signingEncryptionOptions;_rawSigningEncryptionOptions;_signingEncryptionOptionsPromise;_disableSigningEncryption=!1;_dek=Buffer.from("");_internal=!1;_fetchCachedAppInfo=sC();_skipAppInfoFetch=!1;_hasWarnedAppInfoFetchFailure=!1;_templateWidgetEntries=new Set;_permissions;get userConfig(){return this._userConfig}get env(){return{...this._env}}get appConfig(){return this._appConfig}get normalizedAppConfig(){return eY(this._normalizedAppConfig)}get templateWidgetEntries(){return new Set(this._templateWidgetEntries)}get permissions(){return this._permissions?.map(e=>({...e}))}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(!an(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!==eD.DEV&&this.command!==eD.BUILD)throw e;if(ar(e))return r;return this._hasWarnedAppInfoFetchFailure||(this._hasWarnedAppInfoFetchFailure=!0,eh.warn("从平台获取 Doubao 应用信息失败,将使用本地 `app.config.ts` 配置的数据",{reason:eI(e)})),r}}async bootstrap({srcDirectory:e,appDirectory:t,rootPath:n,userConfig:r,appConfig:o={},normalizedAppConfig:i={pages:{entryNames:[],entries:{}},tools:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}},command:a,metadata:s,signingEncryptionOptions:l,disableSigningEncryption:p,appId:d,versionTag:c,pages:u,widgets:m,auth:h,app:f,tools:g,internal:y,skipAppInfoFetch:b,permissions:_,devServerInteractive:v=!0,env:w={},loginCookieResolver:S,cachedLoginCookieResolver:E}){await super.bootstrap({srcDirectory:e,appDirectory:t,virtualEntryDir:tC.resolve(t,eq),rootPath:n,manifestPath:tC.resolve(`${n}/${eb}`),command:a,metadata:s,versionTag:c,pages:u,widgets:m,auth:h,app:f,tools:g,loginCookieResolver:S,cachedLoginCookieResolver:E});let{icons:x,...A}=o??{};this._userConfig=r,this.devServerInteractive=v,this._env={...w},this._appConfig={...A,...void 0!==d?{appId:d}:{},...void 0!==x?{icons:tk(x)}:{}},this._normalizedAppConfig=i,this._internal=y??ec(t),this._skipAppInfoFetch=!!b,this._permissions=_?.map(e=>({...e})),this._hasWarnedAppInfoFetchFailure=!1,this._templateWidgetEntries=new Set,this._rawSigningEncryptionOptions=l,this._signingEncryptionOptions=void 0,this._signingEncryptionOptionsPromise=void 0,this._disableSigningEncryption=!!p,this._appId=d??o?.appId,this._dek=Buffer.from(""),this._fetchCachedAppInfo=sC()}async resolveSigningEncryptionOptionsOnce(){let e=this._appId??this.metadata.appId;if(this._signingEncryptionOptions=await to(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(),eu()&&console.log("DEK base64:",Buffer.from(this.dek.buffer,this.dek.byteOffset,this.dek.byteLength).toString("base64"))}return this.signingEncryptionOptions}}async function sk({appId:e,versionTag:t,versionCode:n,packagePath:r,internal:o,domainId:i,cookie:a,token:s,needAuth:l=!0}){let p=new FormData,d=new Blob([new Uint8Array(tQ.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 eB({internal:o,domainId:s?"sms-external":i,path:c,method:"POST",body:p,headers:{...a?{Cookie:a}:{},...s?{"X-Developer-Open-Build-Token":s}:{}},auth:l&&!s})}async function s$({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: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 t0({channelName:"doubao_app",manifest:n,rootPath:r});if(!u)throw Error("Failed to archive package");let m=await sk({appId:t||l||p,versionTag:c,versionCode:d,packagePath:u.resource,internal:o,needAuth:i,cookie:a,token:s});return console.log("Deploy success:",m),m}let sR=f("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),sN="x-db-llm-modifiable",sL="x-db-is-entity-id",sM="x-db-is-refresh-key",sj=["entity_type"];function sB(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function sU(e,t,n){if(!sB(e))throw Error(`Tool "${n}" requires an object ${t}`);return e}function sF(e,t,n,r,o=!1){let i=`Tool "${t}" ${n} property "${r}"`;if(!sB(e)||"string"!=typeof e.type||!e.type.trim())throw Error(`${i} requires a string type`);let a=e.type.trim(),s=e[sN];if(void 0!==s&&"boolean"!=typeof s)throw Error(`${i} ${sN} must be a boolean`);if(s&&"outputSchema"!==n)throw Error(`${i} ${sN} is only supported in outputSchema`);if(s&&"array"!==a)throw Error(`${i} ${sN} is only supported for array fields`);let l=e[sL];if(void 0!==l&&"boolean"!=typeof l)throw Error(`${i} ${sL} must be a boolean`);if(l&&!o)throw Error(`${i} ${sL} is only supported on top-level card output fields`);let p=e[sM];if(void 0!==p&&"boolean"!=typeof p)throw Error(`${i} ${sM} must be a boolean`);if(p&&!o)throw Error(`${i} ${sM} is only supported on top-level card output fields`);let d={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(!sB(e.properties))throw Error(`${i} requires object properties`);if(d.properties=Object.fromEntries(Object.entries(e.properties).map(([e,o])=>[e,sF(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`);d.required=e.required}}if("array"===a){if(!sB(e.items))throw Error(`${i} requires object array items`);d.items=sF(e.items,t,n,`${r}[]`)}return d}function sH(e,t,n){let r=e[t];if(void 0===r)return{};if(!sB(r))throw Error(`manifest.yaml ${t} must be an object: ${n}`);return{...r}}function sW(e,t){if(!tQ.existsSync(e)||!tQ.statSync(e).isFile())throw Error(`${t} does not exist: ${e}`);return tQ.readFileSync(e,"utf8")}class sV{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:tk(t.appIcon)}:{}},a={pages:sf(i?.pages,"pages"),tools:sf(i?.tools,"tools"),widgets:sf(i?.widgets,"widgets")},s=function(e){let t=tC.join(e,"events.json");if(tQ.existsSync(t)&&tQ.statSync(t).isFile())return{readJson:()=>tQ.readFileSync(t,"utf8"),sourcePath:t}}(this.appDirectory),l=function({appDirectory:e,normalizedAppConfig:t}){let n=tC.join(e,"tools.json");if(!tQ.existsSync(n))return;let r=tC.join(e,"manifest.yaml"),o=()=>sW(n,"tools.json"),i=()=>(function({tools:e,manifestPath:t,manifestText:n}){let r=function(e,t){let n;try{n=(0,sR.qg)(e)}catch(e){throw Error(`Failed to parse manifest.yaml: ${t}`,{cause:e})}if(!sB(n))throw Error(`manifest.yaml must contain an object: ${t}`);return n}(n,t),o=sH(r,"tools",t),i=sH(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||!sB(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,sF(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||!sB(e.items))throw Error(`Card Tool "${n}" outputSchema must be an array`);if("object"!==e.items.type||!sB(e.items.properties))throw Error(`Card Tool "${n}" outputSchema items must be objects`);let r=e.items.properties,o=sj.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(!sB(t)||void 0===t[sL])return!1;if("boolean"!=typeof t[sL])throw Error(`Tool "${n}" outputSchema property "${e}" ${sL} must be a boolean`);return t[sL]});if(1!==i.length)throw Error(`Card Tool "${n}" outputSchema requires exactly one ${sL} field; found ${i.length}`);let a=Object.entries(r).filter(([e,t])=>{if(!sB(t)||void 0===t[sM])return!1;if("boolean"!=typeof t[sM])throw Error(`Tool "${n}" outputSchema property "${e}" ${sM} must be a boolean`);return t[sM]});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 ${sM} on its ${sL} field`)}return Object.fromEntries(Object.entries(r).map(([e,t])=>[e,sF(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,sR.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(!sB(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(!sB(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(!sB(e))throw Error(`Tool "${t}" _meta must be an object`);if(void 0===e.ui)return{};if(!sB(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:sU(e.inputSchema,"inputSchema",r),outputSchema:sU(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})}}(o(),n);var r=e.tools;let i=new Set(t.widgets.entryNames.map(e=>t.widgets.entries[e]?.id??t3(e)));for(let e of r)if(e.widgetId&&!i.has(e.widgetId))throw Error(`Tool "${e.name}" references widgetId "${e.widgetId}" not declared in app.config.ts`);return e})().tools,manifestPath:r,manifestText:sW(r,"manifest.yaml")});return i(),{manifestSourcePath:r,readManifestYaml:i,readToolsJson:o,toolsSourcePath:n}}({appDirectory:this.appDirectory,normalizedAppConfig:a}),p=function(e){if(e)return!0===e?{mcpEndpoint:ev()}:{...e,mcpEndpoint:ev({mcpEndpoint:e.mcpEndpoint})}}(t.openWebDebugger),d=Date.now()-r;this.rootPath=tC.resolve(this.appDirectory,"dist"),tQ.existsSync(tC.resolve(this.rootPath))&&tQ.rmSync(tC.resolve(this.rootPath),{recursive:!0,force:!0}),this.context=new sD,aT(this.context.compileLifecycle,r),this.context.compileLifecycle.prepareDurations.configLoadMs=d;let c=tC.resolve(this.appDirectory,"src"),u=Date.now(),{pages:m,widgets:h,auth:f,app:g,tools:y}=await this.analyzeConvention(c,a);this.context.compileLifecycle.prepareDurations.projectScanMs=Date.now()-u;let b=new tB,_=ec(this.appDirectory),v=Date.now();await this.context.bootstrap({srcDirectory:c,appDirectory:this.appDirectory,rootPath:this.rootPath,userConfig:o,env:this._env,appConfig:i,normalizedAppConfig:a,command:e,metadata:b,signingEncryptionOptions:t.signingEncryptionOptions,skipAppInfoFetch:!!t.token,permissions:t.permissions,appId:t.appId,versionTag:t.versionTag,pages:m,widgets:h,auth:f,app:g,tools:y,internal:_,devServerInteractive:t.interactive,loginCookieResolver:()=>eF(t,{internal:_}),cachedLoginCookieResolver:()=>e_(t,_)}),this.context.compileLifecycle.prepareDurations.contextBootstrapMs=Date.now()-v,(e===eD.DEV||void 0!==t.host)&&(this.context.devServerHost=await sI(t.host)),this.context.webDebuggerLaunchOptions=p,this.context.eventsResources=s,this.context.toolsResources=l,this.pluginSystem=new tK(this.context,[sd,ss,sc,sn,sh,so,su,si,...o.experiments?.taro?[function({name:e,appId:t,icons:n,widgets:r}){return{name:nt,setup:o=>{let i=(0,ne.createRequire)(import.meta.url);o.view.hooks.modifyEntryOption.tapPromise({name:nt,stage:o.view.MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY},async({entry:e})=>{let{appDirectory:t,isDev:n,pages:r,widgets:i}=o.context,a=t6(r,t,!1,n);return{entry:e=Object.assign(e,a,t6(i,t,!0,n))}}),o.view.hooks.beforeBuild.tapPromise({name:nt,stage:o.view.BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG},async({buildConfig:e})=>{let{appDirectory:t}=o.context;t9(e,{resolve:{alias:{"@tarojs/components":i.resolve("@doubao-dev/taro-runtime/components",{paths:[t]}),"@tarojs/taro":(0,tY.dirname)(i.resolve("@doubao-dev/taro-runtime/package.json",{paths:[t]}))}}})}),o.worker.hooks.modifyEntryOption.tapPromise({name:nt,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=`${eq}${tC.sep}app.js`,s=(i=t8(tC.dirname(a),e)).startsWith(".")?i:`./${i}`,l=eO(t);return new t7(a,`
|
|
161
161
|
import { Applet } from "${l}";
|
|
162
162
|
import { defineApp } from '${l}';
|
|
163
163
|
import { APP_ID, getLifecycle, setCurrentId } from '@doubao-dev/taro-runtime/internal';
|
|
@@ -197,9 +197,9 @@ const app = defineApp({
|
|
|
197
197
|
});
|
|
198
198
|
|
|
199
199
|
new Applet(app, []).bootstrap();
|
|
200
|
-
${
|
|
200
|
+
${o?`
|
|
201
201
|
if (import.meta.webpackHot) {
|
|
202
202
|
import.meta.webpackHot.accept()
|
|
203
203
|
}
|
|
204
204
|
`:""}
|
|
205
|
-
`)}(i,r,e,t,o)),{entry:n}}),a.worker.hooks.collectMetaData.tapPromise(nt,async({collector:r})=>{r.addAppMeta({name:e,appId:t,icons:n})}),a.view.hooks.collectMetaData.tapPromise({name:nt,stage:a.view.COLLECT_METADATA_STAGE_OPTIMIZE},async({collector:e})=>{let{pages:t,widgets:n}=a.context;Object.entries(t).forEach(([t,n])=>{let{folderName:r}=n;e.addPageMeta(t,{id:t3(t,r),path:t4(t)})}),Object.entries(n).forEach(([t,n])=>{let a,{folderName:o}=n;e.addWidgetMeta(t,(a=t3(t,o),{...r?.[o]??r?.[t]??r?.[a]??{},id:a}))})})}}}(a.experiments.taro)]:[],...a.plugins||[]]);let w=Date.now();await this.pluginSystem.bootstrap(),this.context.compileLifecycle.prepareDurations.pluginBootstrapMs=Date.now()-w,this.context.setVersionTag(o.version),this.context.compileLifecycle.builderInitStartTime=Date.now();let S=await i1({options:a,commandType:e,context:this.context,rsbuildPlugins:n},this.pluginSystem);return{userConfig:a,builder:S}}catch(t){throw iD.report({appDirectory:this.appDirectory,context:this.context===r?void 0:this.context,scene:e===eD.DEV?"dev_initial":e,status:"failed",errorStage:"prepare",error:t}),t}}async dev(e){let t,n,{builder:r}=await this.prepare(eD.DEV,e,e.rsbuildPlugins);this.context.manifestSettings=tt({cwd:this.appDirectory});let a=await r.startDevServer(),o=this.context.webDebuggerLaunchOptions;try{let e=await this.context.resolveDevServer(a.port);t=e.host,n=o?await ie(this.context,{appId:this.context.appId,appDirectory:this.appDirectory,artifactOrigin:e.artifactOrigin,env:{...this.context.env,...o.env??{}},mcpEndpoint:o.mcpEndpoint,mcpHeaders:o.mcpHeaders,simulator:o.simulator,eventsConfigReader:this.context.eventsResources?.readJson,eventsConfigSourcePath:this.context.eventsResources?.sourcePath,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}):void 0}catch(e){throw await a.server.close(),e}let i=async()=>{ez.info("Shutting down...");try{await n?.close(),await a.server.close()}finally{await iD.flush()}ez.info("dev server closed")};return{host:t,devServerReady:!0,...n?{webDebugger:n}:{},closeServer:i}}async build(e){let{builder:t}=await this.prepare(eD.BUILD,e,e.rsbuildPlugins);try{await t.build(),this.copyWebAssetsToRoot()}finally{if(e.skipCleanupRootPath||eu()){if(e.archive&&e.channel){let{channel:t}=e;await t0({channelName:t,manifest:this.context.manifest,rootPath:this.rootPath})}}else tQ.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||t2.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!==t2.NORMAL)return void es.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(),this.copyWebAssetsToRoot(),await sN({...this.context.versionTag?{versionTag:this.context.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===t2.NORMAL)&&(await t.build(),this.copyWebAssetsToRoot());try{await this.pluginSystem.callDeployHooks("deploy",{deployType:n})}finally{await this.pluginSystem.callDeployHooks("afterDeploy",{})}}async run(e,t){switch(e){case e0.DEV:return await this.dev(t);case e0.BUILD:return await this.build(t);case e0.ANALYZE:return await this.analyze(t);case e0.PERF:return await this.perf(t);case e0.DEPLOY:return await this.deploy(t)}}async getUserConfig(e){if(!this._userConfig){let t=(0,v.loadEnv)({cwd:this.appDirectory,mode:e.envMode}),n=await e1({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}copyWebAssetsToRoot(){if(!this.context)return;let e=[this.context.manifest?.applet.web?.appRuntimeEntry,...this.context.manifest?.applet.pages?.map(e=>e.web?.entry)??[],...this.context.manifest?.widgets?.map(e=>e.web?.entry)??[]].filter(e=>!!e);if(0===e.length)return;let t=tC.resolve(this.appDirectory,"dist");for(let n of e){let e=tC.resolve(t,n);if(e!==t&&!e.startsWith(`${t}${tC.sep}`))throw Error(`Web artifact path escapes the Web output root: ${n}`);if(!tQ.existsSync(e))throw Error(`Web artifact is missing after build: ${e}`);let r=tC.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`,n);tQ.mkdirSync(tC.dirname(r),{recursive:!0}),tQ.copyFileSync(e,r)}let n=tC.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`),r=tC.resolve(n,"base","manifest.json");tQ.mkdirSync(tC.dirname(r),{recursive:!0}),tQ.writeFileSync(r,JSON.stringify(this.context.manifest),"utf-8")}async getAppConfig(){if(!this._appConfigLoaded){let e=await this.getUserConfig({});if(e.experiments?.taro)return this._appConfig=await i3({cwd:this.appDirectory}),this._appConfigLoaded=!0,this._appConfig;this._appConfig=await eT({cwd:this.appDirectory}),this._appConfigLoaded=!0}return this._appConfig}async analyzeConvention(e,t){let{pages:n,widgets:r,auth:a}=await sn(e,t),{app:o,tools:i}=await st(e,t.tools);return{pages:n,widgets:r,auth:a,app:o,tools:i}}}async function sJ(e){let t=await tA(e);if(!t)throw Error("未检测到可用的 Android 设备。");return t}function sK({compileHooks:e,output:t}){let n=new Map,r={percentage:0},a=()=>{if(0===n.size)return;let e=[...n.values()].reduce((e,t)=>t.percentage<e.percentage?t:e);(e.percentage!==r.percentage||e.stage!==r.stage)&&(r=e,t?.onProgress?.(e))},o=e=>{for(let t of(n.clear(),e))n.set(t,{percentage:0});r={percentage:0}};return[{name:"DoubaoAppsDevPlugin",setup(r){t?.printLogs===!1&&(r.logger.level="silent"),t?.progressBar!==void 0&&r.modifyRsbuildConfig(e=>((e.dev??={}).progressBar=t.progressBar,e)),t?.onProgress&&(r.modifyRspackConfig((e,{appendPlugins:t,environment:r,environments:i})=>{0===n.size&&o(Object.keys(i)),t(new v.rspack.ProgressPlugin((e,t)=>{n.set(r.name,{percentage:Math.max(0,Math.min(1,e)),...t?{stage:t}:{}}),a()}))}),r.onBeforeDevCompile(({environments:e})=>{o(Object.keys(e))})),r.onAfterCreateCompiler(({compiler:t})=>{for(let n of"compilers"in t?t.compilers:[t])n.hooks.failed.tap("DoubaoAppsDevPlugin",t=>e?.onDevCompileFailed?.(t))}),r.onAfterDevCompile(({stats:t})=>{if(n.size>0){for(let e of n.keys())n.set(e,{percentage:1,stage:"done"});a()}e?.onAfterDevCompile?.(iA(t))})}}]}class sz{appDirectory;launcher;constructor(e,t=sq){this.appDirectory=e,this.launcher=new t(e)}createCloudBuildLauncher(e={}){return new ej(e,this.appDirectory||process.cwd())}async create(e){await tu(e)}async dev(e={}){let{compileHooks:t,output:n,simulator:r,...a}=e,o=r;if("object"==typeof r){let{businessTemplatesPath:e,manifestPath:t,skillsDirectory:n,targetOrigin:a,...i}=r;o={...i,simulator:{businessTemplatesPath:e,manifestPath:t,skillsDirectory:n,targetOrigin:a}}}let i=()=>this.launcher.dev({...a,...void 0!==o?{openWebDebugger:o}:{},rsbuildPlugins:sK({compileHooks:t,output:n}),signingEncryptionOptions:e.signingEncryptionOptions});return n?await eU(n,i):await i()}async build(e={}){process.env.NODE_ENV="production";let{compileHooks:t,...n}=e;await this.launcher.build({...n,rsbuildPlugins:sK({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:a,debugDriver:o,skipAdbForegroundAppWatch:i}=e,s=await sJ({debugDriver:o,deviceId:n,skipAdbForegroundAppWatch:i}),l=this.launcher.context.metadata.appId;s.pushWidget({appId:l,widgetId:t,widgetData:a,botId:r})}async openPage(e){let{pageId:t,pageData:n,pageSettings:r,mode:a,debugDriver:o,deviceId:i,skipAdbForegroundAppWatch:s}=e,l=await sJ({debugDriver:o,deviceId:i,skipAdbForegroundAppWatch:s}),p=this.launcher.context.metadata.appId;l.openPage({appId:p,pageId:t,pageData:n,pageSettings:r,mode:a})}async callTool(e){let{toolId:t,toolData:n,debugDriver:r,deviceId:a,skipAdbForegroundAppWatch:o}=e,i=await sJ({debugDriver:r,deviceId:a,skipAdbForegroundAppWatch:o}),s=this.launcher.context.metadata.appId;i.callTool({appId:s,toolId:t,toolData:n})}async executeDebugScene(e){let{matchedScene:t,variables:n,deviceId:r,debugDriver:a,skipAdbForegroundAppWatch:o}=e,i=this.launcher.context.metadata.appId,s=await sJ({debugDriver:a,deviceId:r,skipAdbForegroundAppWatch:o});await tO({matchedScene:t,appId:i,driver:s,variables:n})}async getDebugScenes(){let e=await tI(this.appDirectory||process.cwd());return await Promise.all(e.map(async e=>({...e,content:await tP(e.path)})))}async cloud(e={}){let{versionTag:t,logs:n,runner:r,createJobConfig:a,variables:o,properties:i,...s}=e;return await this.createCloudBuildLauncher(s).start({versionTag:t,logs:n,runner:r,config:a,variables:o,properties:i})}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:a,variables:o,properties:i,...s}=e;return await this.createCloudBuildLauncher(s).build({sourceRef:t,versionTag:n,runner:r,config:a,variables:o,properties:i})}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,...a}=e;return await this.createCloudBuildLauncher(a).log({jobId:t,start:n,end:r})}async deploy(e){let{versionTag:t,cookie:n,token:r,appKey:a,signingEncryptionOptions:o}=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:o,token:r,versionTag:t});let{manifest:i}=this.launcher.context;try{return await sN({versionTag:this.launcher.context.versionTag,...a?{appKey:a}:{},manifest:i,rootPath:this.launcher.rootPath,internal:e.internal??this.launcher.context.internal,cookie:n,token:r})}finally{eu()||tQ.rmSync(this.launcher.rootPath,{recursive:!0,force:!0})}}}export{sz as DoubaoAppsSDK};
|
|
205
|
+
`)}(a,r,e,t,i)),{entry:n}}),o.worker.hooks.collectMetaData.tapPromise(nt,async({collector:r})=>{r.addAppMeta({name:e,appId:t,icons:n})}),o.view.hooks.collectMetaData.tapPromise({name:nt,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:t3(t,r),path:t4(t)})}),Object.entries(n).forEach(([t,n])=>{let o,{folderName:i}=n;e.addWidgetMeta(t,(o=t3(t,i),{...r?.[i]??r?.[t]??r?.[o]??{},id:o}))})})}}}(o.experiments.taro)]:[],...o.plugins||[]]);let w=Date.now();await this.pluginSystem.bootstrap(),this.context.compileLifecycle.prepareDurations.pluginBootstrapMs=Date.now()-w,this.context.setVersionTag(i.version),this.context.compileLifecycle.builderInitStartTime=Date.now();let S=await a0({options:o,commandType:e,context:this.context,rsbuildPlugins:n},this.pluginSystem);return{userConfig:o,builder:S}}catch(t){throw aO.report({appDirectory:this.appDirectory,context:this.context===r?void 0:this.context,scene:e===eD.DEV?"dev_initial":e,status:"failed",errorStage:"prepare",error:t}),t}}async dev(e){let t,n,{builder:r}=await this.prepare(eD.DEV,e,e.rsbuildPlugins);this.context.manifestSettings=tt({cwd:this.appDirectory});let o=await r.startDevServer(),i=this.context.webDebuggerLaunchOptions;try{let e=await this.context.resolveDevServer(o.port);t=e.host,n=i?await at(this.context,{appId:this.context.appId,appDirectory:this.appDirectory,artifactOrigin:e.artifactOrigin,env:{...this.context.env,...i.env??{}},mcpEndpoint:i.mcpEndpoint,mcpHeaders:i.mcpHeaders,simulator:i.simulator,eventsConfigReader:this.context.eventsResources?.readJson,eventsConfigSourcePath:this.context.eventsResources?.sourcePath,toolsConfigReader:this.context.toolsResources?.readToolsJson,toolsConfigSourcePath:this.context.toolsResources?.toolsSourcePath,simulatorManifestReader:i.simulator?.manifestPath?void 0:this.context.toolsResources?.readManifestYaml,simulatorManifestSourcePath:i.simulator?.manifestPath?void 0:this.context.toolsResources?.manifestSourcePath}):void 0}catch(e){throw await o.server.close(),e}let a=async()=>{ez.info("Shutting down...");try{await n?.close(),await o.server.close()}finally{await aO.flush()}ez.info("dev server closed")};return{host:t,devServerReady:!0,...n?{webDebugger:n}:{},closeServer:a}}async build(e){let{builder:t}=await this.prepare(eD.BUILD,e,e.rsbuildPlugins);try{await t.build(),this.copyWebAssetsToRoot()}finally{if(e.skipCleanupRootPath||eu()){if(e.archive&&e.channel){let{channel:t}=e;await t0({channelName:t,manifest:this.context.manifest,rootPath:this.rootPath})}}else tQ.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||t2.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!==t2.NORMAL)return void es.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(),this.copyWebAssetsToRoot(),await s$({...this.context.versionTag?{versionTag:this.context.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===t2.NORMAL)&&(await t.build(),this.copyWebAssetsToRoot());try{await this.pluginSystem.callDeployHooks("deploy",{deployType:n})}finally{await this.pluginSystem.callDeployHooks("afterDeploy",{})}}async run(e,t){switch(e){case e0.DEV:return await this.dev(t);case e0.BUILD:return await this.build(t);case e0.ANALYZE:return await this.analyze(t);case e0.PERF:return await this.perf(t);case e0.DEPLOY:return await this.deploy(t)}}async getUserConfig(e){if(!this._userConfig){let t=(0,v.loadEnv)({cwd:this.appDirectory,mode:e.envMode}),n=await e1({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}copyWebAssetsToRoot(){if(!this.context)return;let e=[this.context.manifest?.applet.web?.appRuntimeEntry,...this.context.manifest?.applet.pages?.map(e=>e.web?.entry)??[],...this.context.manifest?.widgets?.map(e=>e.web?.entry)??[]].filter(e=>!!e);if(0===e.length)return;let t=tC.resolve(this.appDirectory,"dist");for(let n of e){let e=tC.resolve(t,n);if(e!==t&&!e.startsWith(`${t}${tC.sep}`))throw Error(`Web artifact path escapes the Web output root: ${n}`);if(!tQ.existsSync(e))throw Error(`Web artifact is missing after build: ${e}`);let r=tC.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`,n);tQ.mkdirSync(tC.dirname(r),{recursive:!0}),tQ.copyFileSync(e,r)}let n=tC.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`),r=tC.resolve(n,"base","manifest.json");tQ.mkdirSync(tC.dirname(r),{recursive:!0}),tQ.writeFileSync(r,JSON.stringify(this.context.manifest),"utf-8")}async getAppConfig(){if(!this._appConfigLoaded){let e=await this.getUserConfig({});if(e.experiments?.taro)return this._appConfig=await a2({cwd:this.appDirectory}),this._appConfigLoaded=!0,this._appConfig;this._appConfig=await eT({cwd:this.appDirectory}),this._appConfigLoaded=!0}return this._appConfig}async analyzeConvention(e,t){let{pages:n,widgets:r,auth:o}=await se(e,t),{app:i,tools:a}=await a6(e,t.tools);return{pages:n,widgets:r,auth:o,app:i,tools:a}}}async function sG(e){let t=await tA(e);if(!t)throw Error("未检测到可用的 Android 设备。");return t}function sq({compileHooks:e,output:t}){let n=new Map,r={percentage:0},o=()=>{if(0===n.size)return;let e=[...n.values()].reduce((e,t)=>t.percentage<e.percentage?t:e);(e.percentage!==r.percentage||e.stage!==r.stage)&&(r=e,t?.onProgress?.(e))},i=e=>{for(let t of(n.clear(),e))n.set(t,{percentage:0});r={percentage:0}};return[{name:"DoubaoAppsDevPlugin",setup(r){t?.printLogs===!1&&(r.logger.level="silent"),t?.progressBar!==void 0&&r.modifyRsbuildConfig(e=>((e.dev??={}).progressBar=t.progressBar,e)),t?.onProgress&&(r.modifyRspackConfig((e,{appendPlugins:t,environment:r,environments:a})=>{0===n.size&&i(Object.keys(a)),t(new v.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.onAfterCreateCompiler(({compiler:t})=>{for(let n of"compilers"in t?t.compilers:[t])n.hooks.failed.tap("DoubaoAppsDevPlugin",t=>e?.onDevCompileFailed?.(t))}),r.onAfterDevCompile(({stats:t})=>{if(n.size>0){for(let e of n.keys())n.set(e,{percentage:1,stage:"done"});o()}e?.onAfterDevCompile?.(ax(t))})}}]}class sJ{appDirectory;launcher;constructor(e,t=sV){this.appDirectory=e,this.launcher=new t(e)}createCloudBuildLauncher(e={}){return new ej(e,this.appDirectory||process.cwd())}async create(e){await tu(e)}async dev(e={}){let{compileHooks:t,output:n,simulator:r,...o}=e,i=r;if("object"==typeof r){let{businessTemplatesPath:e,manifestPath:t,skillsDirectory:n,targetOrigin:o,...a}=r;i={...a,simulator:{businessTemplatesPath:e,manifestPath:t,skillsDirectory:n,targetOrigin:o}}}let a=()=>this.launcher.dev({...o,...void 0!==i?{openWebDebugger:i}:{},rsbuildPlugins:sq({compileHooks:t,output:n}),signingEncryptionOptions:e.signingEncryptionOptions});return n?await eU(n,a):await a()}async build(e={}){process.env.NODE_ENV="production";let{compileHooks:t,...n}=e;await this.launcher.build({...n,rsbuildPlugins:sq({compileHooks:t}),signingEncryptionOptions:e.signingEncryptionOptions,versionTag:e.versionTag})}async discoverWidgets(){return Object.values(this.launcher.context.metadata.getData().widgets).filter(({id:e})=>!e5(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 sG({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 sG({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 sG({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 sG({debugDriver:o,deviceId:r,skipAdbForegroundAppWatch:i});await tO({matchedScene:t,appId:a,driver:s,variables:n})}async getDebugScenes(){let e=await tI(this.appDirectory||process.cwd());return await Promise.all(e.map(async e=>({...e,content:await tP(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 s$({versionTag:this.launcher.context.versionTag,...o?{appKey:o}:{},manifest:a,rootPath:this.launcher.rootPath,internal:e.internal??this.launcher.context.internal,cookie:n,token:r})}finally{eu()||tQ.rmSync(this.launcher.rootPath,{recursive:!0,force:!0})}}}export{sJ as DoubaoAppsSDK};
|