@doubao-dev/cli 0.0.31 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/2168.js +16 -16
  2. package/dist/275.js +12 -14
  3. package/dist/2932.js +1 -1
  4. package/dist/318.js +1 -1
  5. package/dist/3974.js +22 -22
  6. package/dist/4525.js +1 -1
  7. package/dist/4880.js +1 -1
  8. package/dist/4931.js +2 -2
  9. package/dist/7410.js +1 -1
  10. package/dist/7417.js +204 -0
  11. package/dist/7417.js.LICENSE.txt +107 -0
  12. package/dist/7945.js +1 -0
  13. package/dist/8079.js +126 -0
  14. package/dist/{1560.js → 9091.js} +2 -2
  15. package/dist/9667.js +78 -0
  16. package/dist/{8891.js.LICENSE.txt → 9667.js.LICENSE.txt} +0 -108
  17. package/dist/@byted-doubao-apps/create.js +1 -1
  18. package/dist/@byted-doubao-apps/kit.js +1 -0
  19. package/dist/@byted-doubao-apps/login.js +1 -1
  20. package/dist/@byted-doubao-apps/login~1.js +1 -1
  21. package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
  22. package/dist/@byted-doubao-apps/template-starter/package.json +3 -3
  23. package/dist/@byted-hdt/cli.js +1 -1
  24. package/dist/@inquirer/select.js +1 -1
  25. package/dist/app.js +1 -1
  26. package/dist/assets/web-sdk-debugger/__doubao_web_sdk_native_modules/applet-bridge-module-core.js +1 -1
  27. package/dist/assets/web-sdk-debugger/index.html +1 -1
  28. package/dist/assets/web-sdk-debugger/static/js/index.d1bb36b355.js +44 -0
  29. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-api.template.js +0 -0
  30. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-framework.template.js +0 -0
  31. package/dist/build.js +1 -1
  32. package/dist/build~1.js +6 -6
  33. package/dist/check.js +1 -1
  34. package/dist/demo-server.js +1 -1
  35. package/dist/dev-config.js +1 -1
  36. package/dist/dev-shell.js +1 -1
  37. package/dist/dev.js +10 -10
  38. package/dist/devtools.js +1 -1
  39. package/dist/gen-explore.js +1 -1
  40. package/dist/gen-trajectory.js +1 -1
  41. package/dist/init.js +4 -4
  42. package/dist/ink.js +1 -1
  43. package/dist/inquirer.js +1 -0
  44. package/dist/json-file.js +1 -1
  45. package/dist/kit-dev-options.js +1 -1
  46. package/dist/legacy-upload.js +1 -1
  47. package/dist/lepus.js +1 -1
  48. package/dist/ora.js +1 -1
  49. package/dist/project-layout.js +1 -1
  50. package/dist/prompt.js +1 -1
  51. package/dist/prompts.js +1 -1
  52. package/dist/report.js +1 -1
  53. package/dist/run-registry.js +1 -1
  54. package/dist/run.js +44 -44
  55. package/dist/sandbox.js +1 -1
  56. package/dist/scan.js +1 -1
  57. package/dist/sdk.js +63 -188
  58. package/dist/sdk~1.js +50 -50
  59. package/dist/server.js +1 -1
  60. package/dist/skill.js +1 -1
  61. package/dist/skills.js +1 -1
  62. package/dist/skills~1.js +2 -1
  63. package/dist/static/assets/web-view-proxy-bootstrap.js +1 -0
  64. package/dist/static/assets/web-view-proxy-page-client.js +1 -1
  65. package/dist/static/assets/web-view-proxy-service-worker.js +1 -1
  66. package/dist/status~1.js +1 -1
  67. package/dist/stop.js +1 -1
  68. package/dist/sync.js +1 -1
  69. package/dist/templates/README.md +0 -1
  70. package/dist/update.js +1 -1
  71. package/dist/workspace.js +1 -1
  72. package/dist/wrapper.js +1 -0
  73. package/dist/yaml.js +1 -1
  74. package/package.json +2 -2
  75. package/skills/dbx-eval/SKILL.md +15 -7
  76. package/skills/doubao-agentic-service-development/SKILL.md +1 -1
  77. package/skills/doubao-agentic-service-development/references/auth.md +1 -1
  78. package/skills/doubao-agentic-service-development/references/dev-debug.md +3 -3
  79. package/skills/doubao-agentic-service-development/references/frontend/components/map-canvas.md +1 -1
  80. package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +0 -6
  81. package/skills/doubao-agentic-service-development/references/frontend/guides/debugger-mcp.md +2 -2
  82. package/skills/doubao-agentic-service-development/references/frontend/widget-templates/props.md +1 -1
  83. package/skills/doubao-agentic-service-development/references/frontend-dev.md +3 -3
  84. package/skills/doubao-agentic-service-development/references/local-debug/overview.md +2 -2
  85. package/skills/doubao-agentic-service-development/references/overview.md +16 -31
  86. package/skills/doubao-agentic-service-development/scripts/workspace.py +6 -89
  87. package/dist/180.js +0 -1
  88. package/dist/8891.js +0 -280
  89. package/dist/9635.js +0 -1
  90. package/dist/assets/web-sdk-debugger/static/js/index.75528d6de7.js +0 -26
  91. package/dist/dbx.js +0 -3
  92. package/dist/skills~2.js +0 -2
package/dist/sdk~1.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*! LICENSE: sdk~1.js.LICENSE.txt */
2
- let e,t,r,n,i,o,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,core_namespaceObject as y,external_node_tty_namespaceObject as b,external_node_https_namespaceObject as _,external_jiti_namespaceObject as v,external_node_process_namespaceObject as w,promises_namespaceObject as E,external_better_opn_namespaceObject as S}from"./9635.js";import{external_node_module_namespaceObject as x}from"./3551.js";import{parseDebugScene as A,schemas_enum as T,schemas_number as C,unknown as I,TokenExpiredError as O,AUTH_META as P,normalizeWidgetSourceEntry as k,resolveDebugScene as D,schemas_object as $,createMcpHandler as R,prepareCloudBuildSource as N,withAuth as L,schemas_boolean as M,RenderType as j,lodash_es_get as U,TitleType as B,schemas_record as F,getWebSdkDebuggerDistPath as W,eraseLines as H,NotLoggedInError as G,parseSandboxSimulatorToolCallEvent as V,lodash_es_mergeWith as q,pluginExternalBundle as J,isRecord as K,getDebugSceneVariableEntries as z,McpServer as Y,dist_esm as X,schemas_string as Z,execaCommand as Q,inquirer_dist as ee,APP_DEVELOPER_ORIGIN as et,normalizeHttpEndpoint as er,pluginReactAlias as en,toNodeHandler as ei,schemas_array as eo,lodash_es_merge as ea,BoxType as es,APP_DEVELOPER_DOMAIN as el}from"./8891.js";import{walk_simple as ep}from"./7526.js";import"./180.js";import"./yaml.js";import"./ora.js";import{source as ed,TeaUploader as ec}from"./1560.js";import{create as eu}from"./@byted-doubao-apps/create.js";f.add({"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.2.0-rc.0_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_typescript@6.0.3/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-page-client.js"(e,t,r){e.exports=r.p+"static/assets/web-view-proxy-page-client.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.2.0-rc.0_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_typescript@6.0.3/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-service-worker.js"(e,t,r){e.exports=r.p+"static/assets/web-view-proxy-service-worker.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.2.0-rc.0_@lynx-js+types@4.1.0_@pnpm+logger@1001.0.1_@swc+helpe_55e13e87b7f6b60de8818ae276a12932/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"(e,t,r){e.exports=r.p+"static/assets/encode-worker.js"}});let em=f("node:async_hooks"),eh=Math.max(...["cli","auth","config","security","build","deploy","dev-server","simulator"].map(e=>`[${e}]`.length)),ef=/authorization|cookie|token|secret|password|credential|private_?key|\bdek\b/i,eg=new em.AsyncLocalStorage;function ey(e){return e.replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_").toLowerCase()}function eb(e,t=new WeakSet){if(null==e)return String(e);if("string"==typeof e)return/^[\w./:@-]+$/.test(e)&&e.length>0?e:JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);if(e instanceof Error)return eb(e.message,t);if("object"!=typeof e)return String(e);if(t.has(e))return'"[Circular]"';t.add(e);let r=Array.isArray(e)?`[${e.map(e=>eb(e,t)).join(",")}]`:`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,r])=>{let n=ef.test(ey(e))?'"[REDACTED]"':eb(r,t);return`${JSON.stringify(e)}:${n}`}).join(",")}}`;return t.delete(e),r}function e_(e){return ed.cyan(`[${e}]`.padEnd(eh))}function ev(e={}){let t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t])),r=t["x-tt-env"],n=t["x-use-ppe"],i=Array.isArray(r)?r.join(","):r;return n&&i?String(i):void 0}function ew(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[ey(e),t]).sort(([e],[t])=>e.localeCompare(t));return 0===t.length?"":t.map(([e,t])=>{let r=ef.test(e)?"[REDACTED]":eb(t);return ed.dim(`${e}=${r}`)}).join(" ")}let eE=new class e{constructor(e={}){this.sink=e.sink??y.logger,this.tag=e.tag,this.context=e.context??{},this.isDebugEnabled=e.isDebug??(()=>"applet0930"===process.env.DEBUG)}child(t,r={}){return new e({sink:this.sink,tag:t,context:{...this.context,...r},isDebug:this.isDebugEnabled})}withContext(t){return new e({sink:this.sink,tag:this.tag,context:{...this.context,...t},isDebug:this.isDebugEnabled})}info(e,t){this.emit("info",e,t)&&this.sink.info(this.formatMessage(e,t))}success(e,t){this.emit("info",e,t)&&this.sink.success(this.formatMessage(e,t))}start(e,t){this.emit("info",e,t)&&this.sink.start(this.formatMessage(e,t))}ready(e,t){this.emit("info",e,t)&&this.sink.ready(this.formatMessage(e,t))}warn(e,t){this.emit("warn",e,t)&&this.sink.warn(this.formatMessage(e,t))}debug(e,t){this.isDebugEnabled()&&this.emit("debug",e,t)&&this.sink.debug(this.formatMessage(e,t))}error(e,t={}){let r,{error:n,...i}=t,o=this.tag?`${e_(this.tag)} `:"",a=e instanceof Error?e.message:String(e),s=`${o}${a}`;if(void 0!==n)s+=`: ${n instanceof Error?n.message:eb(n)}`,this.isDebugEnabled()&&n instanceof Error&&n.stack&&(r=n.stack);else e instanceof Error&&this.isDebugEnabled()&&e.stack&&(r=e.stack);let l=ew({...this.context,...i});l&&(s+=` ${l}`),r&&(s+=`
3
- ${r}`),this.emit("error",a,{...i,...void 0!==n?{error:n}:{}})&&this.sink.error(s)}greet(e){this.emit("info",e)&&this.sink.greet(e)}request(e){var t;let r,n,i,o,a,s,l,p=e.timestamp??new Date,d=ed.gray(`[${(r=p.getFullYear(),n=String(p.getMonth()+1).padStart(2,"0"),i=String(p.getDate()).padStart(2,"0"),o=String(p.getHours()).padStart(2,"0"),a=String(p.getMinutes()).padStart(2,"0"),s=String(p.getSeconds()).padStart(2,"0"),l=String(p.getMilliseconds()).padStart(3,"0"),`${r}-${n}-${i} ${o}:${a}:${s}.${l}`)}]`),c=ed.bold(e.method),u=void 0===e.durationMs?"":` ${ed.dim(`${e.durationMs.toFixed(1)}ms`)}`,m=ev(e.headers),h=Array.isArray(e.logId)?e.logId.join(","):e.logId,f=[m?ew({ppe:m}):"",h?ew({logid:h}):"",ew({...this.context,...e.context})].filter(Boolean).join(" "),g=`${this.tag?`${e_(this.tag)} `:""}${d} ${c} ${e.url} ${((t=e.statusCode)>=500?ed.red:t>=400?ed.yellow:ed.green)(String(t))}${u}${f?` ${f}`:""}`,y=e.statusCode>=500?"error":e.statusCode>=400?"warn":"info";this.emit(y,`${e.method} ${e.url} ${e.statusCode}`,{...e.context,durationMs:e.durationMs,logId:h,ppe:m},p.getTime())&&("error"===y?this.sink.error(g):"warn"===y?this.sink.warn(g):this.sink.info(g))}formatMessage(e,t={}){let r=ew({...this.context,...t}),n=this.tag?`${e_(this.tag)} `:"",i=e instanceof Error?e.message:String(e);return`${n}${i}${r?` ${r}`:""}`}emit(e,t,r={},n=Date.now()){let i=eg.getStore(),o=i?.onLog;if(o)try{o({timestamp:n,level:e,scope:this.tag,message:t instanceof Error?t.message:String(t),context:function(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[ey(e),t]).sort(([e],[t])=>e.localeCompare(t));if(0!==t.length)return Object.fromEntries(t.map(([e,t])=>[e,ef.test(e)?"[REDACTED]":function e(t,r=new WeakSet){if(t instanceof Error)return t.message;if(null===t||"object"!=typeof t)return"bigint"==typeof t?String(t):t;if(r.has(t))return"[Circular]";r.add(t);let n=Array.isArray(t)?t.map(t=>e(t,r)):Object.fromEntries(Object.entries(t).map(([t,n])=>[t,ef.test(ey(t))?"[REDACTED]":e(n,r)]));return r.delete(t),n}(t)]))}({...this.context,...r})})}catch{}return i?.printLogs!==!1}},eS=eE.child("build");var ex,eA,eT,eC,eI,eO,eP,ek,eD,e$,eR,eN,eL,eM,ej,eU,eB,eF,eW,eH,eG,eV,eq,eJ=((eN={}).Adb="adb",eN.Hdt="hdt",eN.DevTools="devtools",eN);let eK=["adb","hdt","devtools"],ez=f("path"),eY="./node_modules/.doubao",eX="./node_modules/.injected.js",eZ="./node_modules/.injected.css",eQ=`.doubao-apps-style-anchor{display:none}
2
+ let e,t,r,n,i,o,a;import"node:module";import{LAYERS as s,pluginReactLynx as l}from"@lynx-js/react-rsbuild-plugin";import{createRspeedy as d,mergeRspeedyConfig as p,rspack as c}from"@lynx-js/rspeedy";import{pluginLess as u}from"@rsbuild/plugin-less";import{pluginSass as h}from"@rsbuild/plugin-sass";import m from"tinypool";import{__webpack_require__ as f}from"./rslib-runtime.js";import{external_node_stream_promises_namespaceObject as g,core_namespaceObject as y,external_node_tty_namespaceObject as b,external_node_https_namespaceObject as _,external_node_timers_promises_namespaceObject as v,external_jiti_namespaceObject as w,external_node_process_namespaceObject as S,external_better_opn_namespaceObject as E,promises_namespaceObject as x}from"./7945.js";import{external_node_module_namespaceObject as A}from"./3551.js";import{schemas_number as T,schemas_enum as C,McpServer as I,unknown as O,dist_esm as P,schemas_string as k,schemas_object as D,createMcpHandler as $,pluginReactAlias as R,schemas_boolean as N,toNodeHandler as L,lodash_es_get as M,lodash_es_merge as j,schemas_array as U,record as B,getWebSdkDebuggerDistPath as F,eraseLines as W,lodash_es_mergeWith as H,pluginExternalBundle as V}from"./7417.js";import{parseDebugScene as G,APP_DEVELOPER_DOMAIN as q,getDebugSceneVariableEntries as J,TokenExpiredError as K,AUTH_META as z,normalizeWidgetSourceEntry as Y,resolveDebugScene as X,execaCommand as Z,APP_DEVELOPER_ORIGIN as Q,prepareCloudBuildSource as ee,normalizeHttpEndpoint as et,withAuth as er,RenderType as en,TitleType as ei,NotLoggedInError as eo,BoxType as ea,parseSandboxSimulatorToolCallEvent as es,isRecord as el}from"./9667.js";import{walk_simple as ed}from"./7526.js";import"./4525.js";import"./yaml.js";import"./ora.js";import{source as ep,TeaUploader as ec}from"./9091.js";import eu from"./inquirer.js";import{wrapper as eh}from"./wrapper.js";import{create as em}from"./@byted-doubao-apps/create.js";f.add({"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_ae94b7bdaba503f9d438ccfc9a8b6092/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-bootstrap.js"(e,t,r){e.exports=r.p+"static/assets/web-view-proxy-bootstrap.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_ae94b7bdaba503f9d438ccfc9a8b6092/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-page-client.js"(e,t,r){e.exports=r.p+"static/assets/web-view-proxy-page-client.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_ae94b7bdaba503f9d438ccfc9a8b6092/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-service-worker.js"(e,t,r){e.exports=r.p+"static/assets/web-view-proxy-service-worker.js"},"../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.3.0-rc.2_@lynx-js+types@4.1.0_@pnpm+logger@1001.0.1_@swc+helpe_780c2d139f80e5914320c80d62bffc22/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"(e,t,r){e.exports=r.p+"static/assets/encode-worker.js"}});let ef=f("node:async_hooks"),eg=Math.max(...["cli","auth","config","security","build","deploy","dev-server","simulator"].map(e=>`[${e}]`.length)),ey=/authorization|cookie|token|secret|password|credential|private_?key|\bdek\b/i,eb=new ef.AsyncLocalStorage;function e_(e){return e.replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_").toLowerCase()}function ev(e,t=new WeakSet){if(null==e)return String(e);if("string"==typeof e)return/^[\w./:@-]+$/.test(e)&&e.length>0?e:JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e||"bigint"==typeof e)return String(e);if(e instanceof Error)return ev(e.message,t);if("object"!=typeof e)return String(e);if(t.has(e))return'"[Circular]"';t.add(e);let r=Array.isArray(e)?`[${e.map(e=>ev(e,t)).join(",")}]`:`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,r])=>{let n=ey.test(e_(e))?'"[REDACTED]"':ev(r,t);return`${JSON.stringify(e)}:${n}`}).join(",")}}`;return t.delete(e),r}function ew(e){return ep.cyan(`[${e}]`.padEnd(eg))}function eS(e={}){let t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLowerCase(),t])),r=t["x-tt-env"],n=t["x-use-ppe"],i=Array.isArray(r)?r.join(","):r;return n&&i?String(i):void 0}function eE(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[e_(e),t]).sort(([e],[t])=>e.localeCompare(t));return 0===t.length?"":t.map(([e,t])=>{let r=ey.test(e)?"[REDACTED]":ev(t);return ep.dim(`${e}=${r}`)}).join(" ")}let ex=new class e{constructor(e={}){this.sink=e.sink??y.logger,this.tag=e.tag,this.context=e.context??{},this.isDebugEnabled=e.isDebug??(()=>"applet0930"===process.env.DEBUG)}child(t,r={}){return new e({sink:this.sink,tag:t,context:{...this.context,...r},isDebug:this.isDebugEnabled})}withContext(t){return new e({sink:this.sink,tag:this.tag,context:{...this.context,...t},isDebug:this.isDebugEnabled})}info(e,t){this.emit("info",e,t)&&this.sink.info(this.formatMessage(e,t))}success(e,t){this.emit("info",e,t)&&this.sink.success(this.formatMessage(e,t))}start(e,t){this.emit("info",e,t)&&this.sink.start(this.formatMessage(e,t))}ready(e,t){this.emit("info",e,t)&&this.sink.ready(this.formatMessage(e,t))}warn(e,t){this.emit("warn",e,t)&&this.sink.warn(this.formatMessage(e,t))}debug(e,t){this.isDebugEnabled()&&this.emit("debug",e,t)&&this.sink.debug(this.formatMessage(e,t))}error(e,t={}){let r,{error:n,...i}=t,o=this.tag?`${ew(this.tag)} `:"",a=e instanceof Error?e.message:String(e),s=`${o}${a}`;if(void 0!==n)s+=`: ${n instanceof Error?n.message:ev(n)}`,this.isDebugEnabled()&&n instanceof Error&&n.stack&&(r=n.stack);else e instanceof Error&&this.isDebugEnabled()&&e.stack&&(r=e.stack);let l=eE({...this.context,...i});l&&(s+=` ${l}`),r&&(s+=`
3
+ ${r}`),this.emit("error",a,{...i,...void 0!==n?{error:n}:{}})&&this.sink.error(s)}greet(e){this.emit("info",e)&&this.sink.greet(e)}request(e){var t;let r,n,i,o,a,s,l,d=e.timestamp??new Date,p=ep.gray(`[${(r=d.getFullYear(),n=String(d.getMonth()+1).padStart(2,"0"),i=String(d.getDate()).padStart(2,"0"),o=String(d.getHours()).padStart(2,"0"),a=String(d.getMinutes()).padStart(2,"0"),s=String(d.getSeconds()).padStart(2,"0"),l=String(d.getMilliseconds()).padStart(3,"0"),`${r}-${n}-${i} ${o}:${a}:${s}.${l}`)}]`),c=ep.bold(e.method),u=void 0===e.durationMs?"":` ${ep.dim(`${e.durationMs.toFixed(1)}ms`)}`,h=eS(e.headers),m=Array.isArray(e.logId)?e.logId.join(","):e.logId,f=[h?eE({ppe:h}):"",m?eE({logid:m}):"",eE({...this.context,...e.context})].filter(Boolean).join(" "),g=`${this.tag?`${ew(this.tag)} `:""}${p} ${c} ${e.url} ${((t=e.statusCode)>=500?ep.red:t>=400?ep.yellow:ep.green)(String(t))}${u}${f?` ${f}`:""}`,y=e.statusCode>=500?"error":e.statusCode>=400?"warn":"info";this.emit(y,`${e.method} ${e.url} ${e.statusCode}`,{...e.context,durationMs:e.durationMs,logId:m,ppe:h},d.getTime())&&("error"===y?this.sink.error(g):"warn"===y?this.sink.warn(g):this.sink.info(g))}formatMessage(e,t={}){let r=eE({...this.context,...t}),n=this.tag?`${ew(this.tag)} `:"",i=e instanceof Error?e.message:String(e);return`${n}${i}${r?` ${r}`:""}`}emit(e,t,r={},n=Date.now()){let i=eb.getStore(),o=i?.onLog;if(o)try{o({timestamp:n,level:e,scope:this.tag,message:t instanceof Error?t.message:String(t),context:function(e){let t=Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>[e_(e),t]).sort(([e],[t])=>e.localeCompare(t));if(0!==t.length)return Object.fromEntries(t.map(([e,t])=>[e,ey.test(e)?"[REDACTED]":function e(t,r=new WeakSet){if(t instanceof Error)return t.message;if(null===t||"object"!=typeof t)return"bigint"==typeof t?String(t):t;if(r.has(t))return"[Circular]";r.add(t);let n=Array.isArray(t)?t.map(t=>e(t,r)):Object.fromEntries(Object.entries(t).map(([t,n])=>[t,ey.test(e_(t))?"[REDACTED]":e(n,r)]));return r.delete(t),n}(t)]))}({...this.context,...r})})}catch{}return i?.printLogs!==!1}},eA=ex.child("build");var eT,eC,eI,eO,eP,ek,eD,e$,eR,eN,eL,eM,ej,eU,eB,eF,eW,eH,eV,eG,eq,eJ,eK,ez=((eM={}).Adb="adb",eM.Hdt="hdt",eM.DevTools="devtools",eM);let eY=["adb","hdt","devtools"],eX=f("path"),eZ="./node_modules/.doubao",eQ="./node_modules/.injected.js",e0="./node_modules/.injected.css",e1=`.doubao-apps-style-anchor{display:none}
4
4
  :root {
5
5
  --doubao-picker-view-height: 108px;
6
6
  --doubao-picker-view-indicator-radius: 12px;
@@ -124,7 +124,7 @@ ${r}`),this.emit("error",a,{...i,...void 0!==n?{error:n}:{}})&&this.sink.error(s
124
124
  line-height: var(--doubao-picker-view-item-line-height);
125
125
  font-weight: var(--doubao-picker-view-item-font-weight);
126
126
  color: var(--doubao-picker-view-item-selected-color);
127
- }`,e0="widgets";ez.sep;let e1=`base${ez.sep}manifest.json`,e2=`base${ez.sep}manifest.sign`,e3="mcp-privacy-login-card",e4="__doubao_apps__expired-widget",e5="bundle.keystore",e9={"@byted-lynx/react":"React","@lynx-js/react":"React","@lynx-js/react/internal":"ReactInternal","@lynx-js/react/jsx-dev-runtime":"ReactJSXDevRuntime","@lynx-js/react/jsx-runtime":"ReactJSXRuntime","@lynx-js/react/lepus/jsx-dev-runtime":"ReactJSXLepusDevRuntime","@lynx-js/react/lepus/jsx-runtime":"ReactJSXLepusRuntime","@lynx-js/react/experimental/lazy/import":"ReactLazyImport","@lynx-js/react/legacy-react-runtime":"ReactLegacyRuntime","@lynx-js/react/runtime-components":"ReactComponents","@lynx-js/react/worklet-runtime/bindings":"ReactWorkletRuntime","@lynx-js/react/debug":"ReactDebug",preact:"Preact",react:"React"},e8="client-tool",e6=e=>e===e3||e===e4,e7="app.config",te=[".js",".ts",".mjs"],tt="com.larus.nova";class tr{}let tn=f("node:fs"),ti=f("node:path"),to="@byted-doubao-apps/framework",ta="@doubao-dev/framework",ts=[to,ta];function tl(e){return`${e}/components`}function tp(e){let t=ti.resolve(e,"package.json");if(tn.existsSync(t))try{let e=JSON.parse(tn.readFileSync(t,"utf8")),r={...e.dependencies,...e.devDependencies,...e.peerDependencies};if(r[ta])return ta;if(r[to])return to}catch{}}function td(e){return tp(e)??to}let tc=e=>void 0!==process.env[e],tu=()=>(process.env.DEBUG??"").toLocaleLowerCase().split(",").includes("applet0930"),tm=()=>tc("DISABLE_EXTERNAL")||"1"===process.env.ENABLE_SELF_CONTAINED||tc("LEGACY_FRAMEWORK"),th=()=>tc("DISABLE_APP_TEMPLATE_JS")||tc("LEGACY_FRAMEWORK");function tf({mcpEndpoint:e}={}){let t=e?.trim();return t||(process.env.DOUBAO_SIMULATOR_MCP_ENDPOINT?.trim()??"")}function tg(e,t=3e3){return Q(e,{timeout:t}).catch(()=>({stdout:"",stderr:""}))}async function ty(e,t){return tg(`adb -s ${e} ${t}`)}async function tb(e){let t=(await tg(`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 t_(e,t){let r=(await ty(e,`shell pidof ${t}`)).stdout.trim();return r?r.split(/\s+/)[0]:void 0}async function tv(e){let t=await tb(e);return(t===tt||"com.flow.aisdk.example"===t)&&(await tg(`adb -s ${e} shell am force-stop ${t}`),await tg(`adb -s ${e} shell monkey -p ${t} -c android.intent.category.LAUNCHER 1`),!0)}async function tw(){return(await tg("adb devices")).stdout.split("\n").slice(1).map(e=>e.split(" ")[0].trim()).filter(Boolean)}async function tE(){let e=await tw();if(e.length>1){let{device:t}=await ee.prompt([{type:"search",name:"device",message:"检测到多个设备,请选择用于调试的设备(可按设备 ID 搜索):",source:t=>e.filter(e=>e.toLowerCase().includes(t?.toLowerCase()??""))}]);return t}return e[0]}class tS extends tr{deviceId;latestLoadParams;lastAppProcessId;isWatchingAppProcess=!1;isAutoReloading=!1;constructor(e,t={}){if(super(),this.deviceId=e,t.skipForegroundAppWatch)return;let r=setInterval(()=>{this.watchAppProcess()},500);process.once("exit",()=>clearInterval(r))}async watchAppProcess(){if(!this.isWatchingAppProcess){this.isWatchingAppProcess=!0;try{let e=await t_(this.deviceId,tt);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 t_(this.deviceId,tt)!==e)return;await this.load(this.latestLoadParams)}finally{this.isAutoReloading=!1}}}async load(e){this.latestLoadParams=e;let{appletUrl:t,appId:r,isSigned:n}=e,i=`shell am broadcast -a com.bytedance.applet.SET_APPLET_DEBUG_HOST --es appletName ${r} --es appletHost ${t} --es appletType 1 --es isSigned ${n}`;tu()&&console.log(ed.dim(`adb -s ${this.deviceId} ${i}`)),await ty(this.deviceId,i)}async openPage(e){let{appId:t,pageId:r,pageData:n,pageSettings:i,mode:o}=e,a=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageName ${r} --es appletPageData '${n}' --es appletPageSettings '${i}' --es mode '${o}'`;tu()&&console.log(ed.dim(`adb -s ${this.deviceId} ${a}`)),await ty(this.deviceId,a)}async openPageUrl(e){let{appId:t,url:r}=e,n=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageUrl '${r}'`;tu()&&console.log(ed.dim(`adb -s ${this.deviceId} ${n}`)),await ty(this.deviceId,n)}async pushWidget(e){let{appId:t,widgetId:r,widgetData:n,botId:i}=e,o=`shell am broadcast -a com.bytedance.applet.START_APPLET_WIDGET --es appletName ${t} --es widgetName ${r} --es widgetData '${n}' --es botId ${i||process.env.DEBUG_BOT_ID}`;tu()&&console.log(ed.dim(`adb -s ${this.deviceId} ${o}`)),await ty(this.deviceId,o)}async callTool(e){let{appId:t,toolId:r,toolData:n}=e,i=`shell am broadcast -a com.bytedance.applet.CALL_TOOL --es appletName ${t} --es toolName '${r}' --es toolData '${n}'`;tu()&&console.log(ed.dim(`adb -s ${this.deviceId} ${i}`)),await ty(this.deviceId,i)}}class tx extends tr{async load(e){}async openPage(e){}async openPageUrl(e){}async pushWidget(e){}async callTool(e){}}eE.child("cli");let tA=eE.child("config"),tT=eE.child("security"),tC=eE.child("build"),tI=tC.withContext({mode:"cloud"}),tO=eE.child("deploy"),tP=eE.child("dev-server");class tk{options;currentUrl=null;debugDriver=null;appId=null;constructor(e){this.options=e}async start(e,t,r){if(null!==this.currentUrl){this.currentUrl=e,this.debugDriver?.getAllAppClients().forEach(e=>this.onConnect(e,r));return}this.currentUrl=e,this.appId=t;let{getDebugDriver:n,toolkitExecutor:i}=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 i({runType:"rspeedy",openWebview:this.options.devtool});let o=n();this.debugDriver=o,o.getAllAppClients().forEach(e=>this.onConnect(e,r)),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){tP.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 tD extends tr{server;constructor(){super(),this.server=new tk({devtool:!0,open:!0})}async load(e){let{appletUrl:t,appId:r,isSigned:n}=e;this.server.start(t,r,n)}async openPage(e){let{appId:t,pageId:r,pageData:n,pageSettings:i,mode:o}=e;this.server.sendMessage({method:"Applet_OpenPage",params:{appletName:t,appletPageName:r,appletPageData:n,appletPageSettings:i,mode:o}})}async openPageUrl(e){let{appId:t,url:r}=e;this.server.sendMessage({method:"Applet_OpenPageUrl",params:{appletName:t,url:r}})}async pushWidget(e){let{appId:t,widgetId:r,widgetData:n,botId:i}=e;this.server.sendMessage({method:"Applet_OpenWidget",params:{appletName:t,widgetName:r,widgetData:n,botId:i||process.env.DEBUG_BOT_ID}})}async callTool(e){let{appId:t,toolId:r,toolData:n}=e;this.server.sendMessage({method:"Applet_CallTool",params:{appletName:t,toolName:r,toolData:n}})}}async function t$(t={}){if(!e){let r=t.debugDriver??eJ.Adb;if(!eK.includes(r))throw Error(`无效的调试驱动 "${r}",可选值:${eK.join(", ")}。`);switch(r){case eJ.Hdt:e=new tD;break;case eJ.DevTools:e=new tx;break;case eJ.Adb:{let r=t.deviceId??await tE();r&&(e=new tS(r,{skipForegroundAppWatch:t.skipAdbForegroundAppWatch}));break}default:throw Error(`无效的调试驱动 "${r}",可选值:${eK.join(", ")}。`)}}return e}let tR=f("node:fs/promises");async function tN(e){let t=(0,ti.join)(e,"debug-scene");try{return(await (0,tR.readdir)(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>({name:e.name.slice(0,-5),path:(0,ti.join)(t,e.name)}))}catch{return[]}}async function tL(e){try{return A(JSON.parse(await (0,tR.readFile)(e,"utf8")))}catch(t){return tu()&&console.warn(`[DoubaoApps] 加载调试场景 "${e}" 失败:${t instanceof Error?t.message:String(t)}`),null}}async function tM(e,t){let{matchedScene:r,appId:n,driver:i,variables:o}=e,a=t??await tL(r.path);if(!a)return;let s=D(a,o);if("page"===s.type){var l,p;l=r.name,0!==(p=s.unresolvedVariables).length&&console.warn(`[DoubaoApps] 调试场景 "${l}" 存在未解析的变量占位符:${p.map(e=>`{{${e}}}`).join(", ")}`),await i.openPageUrl({appId:n,url:s.url})}else if("widget"===s.type){let e=JSON.stringify(s.resolvedInput),t={appId:n,widgetId:s.id,widgetData:e,botId:s.botId};await i.pushWidget(t)}else{let e=JSON.stringify(s.resolvedInput),t={appId:n,toolId:s.id,toolData:e};await i.callTool(t)}}let tj="https://lf3-static.bytednsdoc.com/obj/eden-cn/777eh7nuptpfnuhd/default.svg";function tU(e){if("string"==typeof e){let t=e.length>0?e:tj;return{"1x":t,"2x":t,"3x":t}}return{"1x":e?.["1x"]||tj,"2x":e?.["2x"]||tj,"3x":e?.["3x"]||tj}}function tB(e){let t=Object.keys(e);return t.sort(),t.reduce((t,r)=>(t[r]=e[r],t),{})}class tF{get metadata(){return this._metadata}toString(){return JSON.stringify(this._metadata,null,2)}}class tW extends tF{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,r){let n=this._metadata;return{id:n.id,name:n.name,path:n.path,description:n.description,keywords:n.keywords,digest:t,prop:n.prop,entry:e,renderType:r,title:n.title,chat:n.chat}}}class tH extends tF{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,r,n=[]){let i=this._metadata;return{widgetId:i.id,name:i.name,description:i.description,keywords:i.keywords,digest:t,prop:i.prop,entry:e,renderType:r,border:i.border,appSettings:n,boxType:"full_box"===i.boxType?es.FULL_BOX:es.INBOX,titleType:i.titleType?tH.TITLE_TYPE_MAP[i.titleType]:void 0}}}tH.TITLE_TYPE_MAP={none:2,normal:0,float:1};class tG extends tF{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 tV extends tF{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest({toolsMetadata:e,hashCode:t,appRuntimeEntry:r,appRuntimeType:n}){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:tU(this._metadata.icons),digest:t,prop:"",tools:Object.values(e).map(e=>e.toManifest()),appRuntimeEntry:r,appRuntimeType:n}}}class tq{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 tV(e)}addToolMeta(e,t){this.metadata.tools[e]?this.metadata.tools[e].assign(t):this.metadata.tools[e]=new tG(t)}addPageMeta(e,t){this.metadata.pages[e]?this.metadata.pages[e].assign(t):this.metadata.pages[e]=new tW(t)}addWidgetMeta(e,t){this.metadata.widgets[e]?this.metadata.widgets[e].assign(t):this.metadata.widgets[e]=new tH(t)}getData(){let{tools:e,pages:t,widgets:r,app:n}=this.metadata;return{app:n.metadata??{},tools:tB(Object.fromEntries(Object.keys(e).map(t=>[t,e[t].metadata]))),pages:tB(Object.fromEntries(Object.keys(t).map(e=>[e,t[e].metadata]))),widgets:tB(Object.fromEntries(Object.keys(r).map(e=>[e,r[e].metadata])))}}getInstance(){let{tools:e,pages:t,widgets:r,app:n}=this.metadata;return{app:n,tools:tB(e),pages:tB(t),widgets:tB(r)}}clearData(){this.metadata={app:{},pages:{},tools:{},widgets:{}}}}let tJ={MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE:1e3,MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY:2e3,MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE:3e3},tK={BEFORE_BUILD_STAGE_CREATE_CONFIG:1e3,BEFORE_BUILD_STAGE_MODIFY_BUILD_CONFIG:2e3,BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG:3e3},tz={COLLECT_METADATA_STAGE_START:1e3,COLLECT_METADATA_STAGE_PROCESS_METADATA:2e3,COLLECT_METADATA_STAGE_OPTIMIZE:3e3,COLLECT_METADATA_STAGE_FINISH:4e3},tY={...tJ,...tK,...tz},tX={...tJ,...tK,...tz};(ex=eL||(eL={}))[ex.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS=1e3]="BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS",ex[ex.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS=2e3]="BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS",ex[ex.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=3e3]="BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS",ex[ex.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS=3999]="BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS",ex[ex.AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS=4e3]="AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS",ex[ex.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS=5e3]="AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS",ex[ex.AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=6e3]="AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS";let tZ=f("../../../node_modules/.pnpm/tapable@2.2.1/node_modules/tapable/lib/index.js");function tQ(){return{modifyEnvironment:new tZ.FU(["arg0"]),modifyEntryOption:new tZ.BD(["arg0"]),beforeBuild:new tZ.FU(["arg0"]),collectMetaData:new tZ.FU(["arg0"]),build:new tZ.FU(["arg0"]),afterBuild:new tZ.FU(["arg0"])}}function t0({hooks:e,stages:t}){return{hooks:e,...t}}class t1{constructor(e,t=[]){this.plugins=[],this.api={...{worker:t0({hooks:tQ(),stages:tX}),view:t0({hooks:tQ(),stages:tY}),assets:t0({hooks:{beforeEmit:new tZ.FU(["arg0"]),afterEmit:new tZ.FU(["arg0"])},stages:eL}),deploy:t0({hooks:{beforeDeploy:new tZ.FU(["arg0"]),deploy:new tZ.FU(["arg0"]),afterDeploy:new tZ.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,...r){let n=U(this.getScopeHooks(e),t);return await n.promise(...r)}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)}}(eA=eM||(eM={})).DEV="dev",eA.BUILD="build",eA.PERF="perf",eA.DEPLOY="deploy",eA.ANALYZE="analyze";let t2={DEV:eM.DEV,BUILD:eM.BUILD,PERF:eM.PERF,DEPLOY:eM.DEPLOY,ANALYZE:eM.ANALYZE},t3=f("fs"),t4=f("../../../node_modules/.pnpm/archiver@7.0.1/node_modules/archiver/index.js");function t5(e,t,r,n){return new Promise((i,o)=>{let a=t3.createWriteStream(e),s=t4("zip",{zlib:{level:9}});s.pipe(a),s.directory(t,r??!1),a.on("close",()=>{n?.deleteResource&&t3.rmSync(t,{recursive:!0}),eS.success("Compiled artifacts packaged",{file:ez.basename(e)}),i("")}),s.on("error",e=>{eS.error("An error occurred during packaging",{error:e}),o(e)}),s.finalize()})}async function t9({channelName:e,manifest:t,rootPath:r}){let n=ti.resolve(r),i=ti.resolve(r,"doubao_app_output"),o=ti.resolve(i,t.packageName),a={outputFolder:i,transformFolder:o,manifest:t};tn.existsSync(i)&&tn.rmSync(i,{recursive:!0}),tn.mkdirSync(i),tn.mkdirSync(o),function(e,t){let{transformFolder:r,manifest:n}=t,{applet:i,widgets:o}=n,a=ti.resolve(e,"base"),s=ti.resolve(r,"base");tn.mkdirSync(s),tn.cpSync(a,s,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0});let l=ti.resolve(e,i.appletId),p=ti.resolve(r,i.appletId);tn.mkdirSync(p),i.pages.length>0&&tn.cpSync(l,p,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0}),o.forEach(t=>{let n=ti.resolve(e,t.widgetId),i=ti.resolve(r,t.widgetId);tn.mkdirSync(i),tn.cpSync(n,i,{filter:e=>null===e.match(/(.)*\.map$/),recursive:!0})});let d=ti.resolve(e,`web_${n.versionCode}`);if(tn.existsSync(d)){let e=ti.resolve(r,`web_${n.versionCode}`);tn.cpSync(d,e,{recursive:!0})}}(n,a);let s=await t8(e,a);return eS.debug("Package resource created",{packageResource:s}),{packageResource:s}}async function t8(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:r,outputFolder:n,transformFolder:i}=t,{applet:o,widgets:a,packageName:s,versionCode:l}=r,p=ti.resolve(n,"deploy-package"),d=ti.resolve(p,e),c=ti.resolve(d,s);tn.mkdirSync(p),tn.mkdirSync(d),tn.mkdirSync(c),tn.cpSync(i,c,{recursive:!0});let u={},m=tn.readdirSync(c).filter(e=>tn.statSync(ti.resolve(c,e)).isDirectory()),h=ti.resolve(p,`${e}.zip`);try{if(await Promise.all(m.map(e=>{if(e===`web_${l}`)return Promise.resolve();if("base"===e)return t5(ti.resolve(c,`${e}_${l}.zip`),ti.resolve(c,e),e,{deleteResource:!0});if(e===o.appletId){let t=`${e}_${o.digest}.zip`;return u[o.appletId]=t,t5(ti.resolve(c,t),ti.resolve(c,e),e,{deleteResource:!0})}let t=a.find(t=>t.widgetId===e);if(t){let r=`${e}_${t.digest}.zip`;return u[t.widgetId]=r,t5(ti.resolve(c,r),ti.resolve(c,e),e,{deleteResource:!0})}return eS.error("Invalid package directory",{directory:e}),Promise.resolve()})),await t5(h,d,e),process.env.BUILD_VERSION){let e=ti.resolve(n,"scm-deploy-package"),t=ti.resolve(e,s);tn.mkdirSync(e),tn.mkdirSync(t),tn.cpSync(c,t,{recursive:!0})}return eS.success("Deploy package archived",{destination:h}),{resource:h,fileNames:u}}catch(e){throw Error(`ERROR: Archive the deploy-package failed. ${e}`)}}(eT=ej||(ej={})).NORMAL="normal",eT.SELF_BUILT_CREATE="selfBuiltCreate",eT.SELF_BUILT_PUBLISH="selfBuiltPublish",eT.SELF_BUILT_CHECK_STATUS="selfBuiltCheckStatus",eT.SELF_BUILT_STOP="selfBuiltStop",eT.SELF_BUILT_ROLLBACK="selfBuiltRollback";let t6={NORMAL:ej.NORMAL,SELF_BUILT_CREATE:ej.SELF_BUILT_CREATE,SELF_BUILT_PUBLISH:ej.SELF_BUILT_PUBLISH,SELF_BUILT_CHECK_STATUS:ej.SELF_BUILT_CHECK_STATUS,SELF_BUILT_STOP:ej.SELF_BUILT_STOP,SELF_BUILT_ROLLBACK:ej.SELF_BUILT_ROLLBACK};function t7(e,t){let r=(t||e).replace(/^\/+/,"").split("/").filter(Boolean);return r.length>1&&"index"===r[r.length-1]?r[r.length-2]||"index":r[r.length-1]||"index"}function re(e,t){let[r]=(t??e).split(/[?#]/,1),n=r.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"");return n?`/${n}`:"/"}function rt(e,t,r){let n=re(t).slice(1);return`${e}/${n}/${r}`}function rr(e,...t){return q(e,...t,(e,t,r)=>Array.isArray(e)?e.concat(t):Buffer.isBuffer(t)?t:void 0)}let rn=(e,t)=>ti.relative(e,t).replaceAll(ti.sep,"/");class ri{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="",r=e.importSpecifiers.find(e=>"default"===e.propertyName),n=e.importSpecifiers.filter(e=>"default"!==e.propertyName);return r&&(t+=`${r.name}`),n.length&&(r&&(t+=", "),t+=`{ ${n.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=ez.dirname(this._filename);(0,t3.existsSync)(t)||(0,t3.mkdirSync)(t,{recursive:!0}),(0,t3.writeFileSync)(this._filename,this.toString(),e)}return this._filename}}function ro(e,t,r=!1,n=!1){return Object.keys(e).reduce((i,o)=>{let{filename:a,isVirtualFile:s,isSpecial:l}=e[o];if(s||l)return i;let p=`${eY}${ti.sep}${o}${ti.extname(a)}`,d=rn(ti.join(t,p,".."),a),c=td(t),u=r?"defineWidget":"definePage";return i[o]=new ri(p),i[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"}]}),i[o].appendContent(`
127
+ }`,e2="widgets";eX.sep;let e3=`base${eX.sep}manifest.json`,e4=`base${eX.sep}manifest.sign`,e9="mcp-privacy-login-card",e5="__doubao_apps__expired-widget",e8="bundle.keystore",e7={"@byted-lynx/react":"React","@lynx-js/react":"React","@lynx-js/react/internal":"ReactInternal","@lynx-js/react/jsx-dev-runtime":"ReactJSXDevRuntime","@lynx-js/react/jsx-runtime":"ReactJSXRuntime","@lynx-js/react/lepus/jsx-dev-runtime":"ReactJSXLepusDevRuntime","@lynx-js/react/lepus/jsx-runtime":"ReactJSXLepusRuntime","@lynx-js/react/experimental/lazy/import":"ReactLazyImport","@lynx-js/react/legacy-react-runtime":"ReactLegacyRuntime","@lynx-js/react/runtime-components":"ReactComponents","@lynx-js/react/worklet-runtime/bindings":"ReactWorkletRuntime","@lynx-js/react/debug":"ReactDebug",preact:"Preact",react:"React"},e6="client-tool",te=e=>e===e9||e===e5,tt="app.config",tr=[".js",".ts",".mjs"],tn="com.larus.nova";class ti{}let to=f("node:fs"),ta=f("node:path"),ts="@byted-doubao-apps/framework",tl="@doubao-dev/framework",td=[ts,tl];function tp(e){return`${e}/components`}function tc(e){let t=ta.resolve(e,"package.json");if(to.existsSync(t))try{let e=JSON.parse(to.readFileSync(t,"utf8")),r={...e.dependencies,...e.devDependencies,...e.peerDependencies};if(r[tl])return tl;if(r[ts])return ts}catch{}}function tu(e){return tc(e)??ts}let th=e=>void 0!==process.env[e],tm=()=>(process.env.DEBUG??"").toLocaleLowerCase().split(",").includes("applet0930"),tf=()=>th("DISABLE_EXTERNAL")||"1"===process.env.ENABLE_SELF_CONTAINED||th("LEGACY_FRAMEWORK"),tg=()=>th("DISABLE_APP_TEMPLATE_JS")||th("LEGACY_FRAMEWORK");function ty({mcpEndpoint:e}={}){let t=e?.trim();return t||(process.env.DOUBAO_SIMULATOR_MCP_ENDPOINT?.trim()??"")}function tb(e,t=3e3){return Z(e,{timeout:t}).catch(()=>({stdout:"",stderr:""}))}async function t_(e,t){return tb(`adb -s ${e} ${t}`)}async function tv(e){let t=(await tb(`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 tw(e,t){let r=(await t_(e,`shell pidof ${t}`)).stdout.trim();return r?r.split(/\s+/)[0]:void 0}async function tS(e){let t=await tv(e);return(t===tn||"com.flow.aisdk.example"===t)&&(await tb(`adb -s ${e} shell am force-stop ${t}`),await tb(`adb -s ${e} shell monkey -p ${t} -c android.intent.category.LAUNCHER 1`),!0)}async function tE(){return(await tb("adb devices")).stdout.split("\n").slice(1).map(e=>e.split(" ")[0].trim()).filter(Boolean)}async function tx(){let e=await tE();if(e.length>1){let{device:t}=await eu.prompt([{type:"search",name:"device",message:"检测到多个设备,请选择用于调试的设备(可按设备 ID 搜索):",source:t=>e.filter(e=>e.toLowerCase().includes(t?.toLowerCase()??""))}]);return t}return e[0]}class tA extends ti{deviceId;latestLoadParams;lastAppProcessId;isWatchingAppProcess=!1;isAutoReloading=!1;constructor(e,t={}){if(super(),this.deviceId=e,t.skipForegroundAppWatch)return;let r=setInterval(()=>{this.watchAppProcess()},500);process.once("exit",()=>clearInterval(r))}async watchAppProcess(){if(!this.isWatchingAppProcess){this.isWatchingAppProcess=!0;try{let e=await tw(this.deviceId,tn);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 tw(this.deviceId,tn)!==e)return;await this.load(this.latestLoadParams)}finally{this.isAutoReloading=!1}}}async load(e){this.latestLoadParams=e;let{appletUrl:t,appId:r,isSigned:n}=e,i=`shell am broadcast -a com.bytedance.applet.SET_APPLET_DEBUG_HOST --es appletName ${r} --es appletHost ${t} --es appletType 1 --es isSigned ${n}`;tm()&&console.log(ep.dim(`adb -s ${this.deviceId} ${i}`)),await t_(this.deviceId,i)}async openPage(e){let{appId:t,pageId:r,pageData:n,pageSettings:i,mode:o}=e,a=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageName ${r} --es appletPageData '${n}' --es appletPageSettings '${i}' --es mode '${o}'`;tm()&&console.log(ep.dim(`adb -s ${this.deviceId} ${a}`)),await t_(this.deviceId,a)}async openPageUrl(e){let{appId:t,url:r}=e,n=`shell am broadcast -a com.bytedance.applet.START_APPLET --es appletName ${t} --es appletPageUrl '${r}'`;tm()&&console.log(ep.dim(`adb -s ${this.deviceId} ${n}`)),await t_(this.deviceId,n)}async pushWidget(e){let{appId:t,widgetId:r,widgetData:n,botId:i}=e,o=`shell am broadcast -a com.bytedance.applet.START_APPLET_WIDGET --es appletName ${t} --es widgetName ${r} --es widgetData '${n}' --es botId ${i||process.env.DEBUG_BOT_ID}`;tm()&&console.log(ep.dim(`adb -s ${this.deviceId} ${o}`)),await t_(this.deviceId,o)}async callTool(e){let{appId:t,toolId:r,toolData:n}=e,i=`shell am broadcast -a com.bytedance.applet.CALL_TOOL --es appletName ${t} --es toolName '${r}' --es toolData '${n}'`;tm()&&console.log(ep.dim(`adb -s ${this.deviceId} ${i}`)),await t_(this.deviceId,i)}}class tT extends ti{async load(e){}async openPage(e){}async openPageUrl(e){}async pushWidget(e){}async callTool(e){}}ex.child("cli");let tC=ex.child("config"),tI=ex.child("security"),tO=ex.child("build"),tP=tO.withContext({mode:"cloud"}),tk=ex.child("deploy"),tD=ex.child("dev-server");class t${options;currentUrl=null;debugDriver=null;appId=null;constructor(e){this.options=e}async start(e,t,r){if(null!==this.currentUrl){this.currentUrl=e,this.debugDriver?.getAllAppClients().forEach(e=>this.onConnect(e,r));return}this.currentUrl=e,this.appId=t;let{getDebugDriver:n,toolkitExecutor:i}=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 i({runType:"rspeedy",openWebview:this.options.devtool});let o=n();this.debugDriver=o,o.getAllAppClients().forEach(e=>this.onConnect(e,r)),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){tD.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 tR extends ti{server;constructor(){super(),this.server=new t$({devtool:!0,open:!0})}async load(e){let{appletUrl:t,appId:r,isSigned:n}=e;this.server.start(t,r,n)}async openPage(e){let{appId:t,pageId:r,pageData:n,pageSettings:i,mode:o}=e;this.server.sendMessage({method:"Applet_OpenPage",params:{appletName:t,appletPageName:r,appletPageData:n,appletPageSettings:i,mode:o}})}async openPageUrl(e){let{appId:t,url:r}=e;this.server.sendMessage({method:"Applet_OpenPageUrl",params:{appletName:t,url:r}})}async pushWidget(e){let{appId:t,widgetId:r,widgetData:n,botId:i}=e;this.server.sendMessage({method:"Applet_OpenWidget",params:{appletName:t,widgetName:r,widgetData:n,botId:i||process.env.DEBUG_BOT_ID}})}async callTool(e){let{appId:t,toolId:r,toolData:n}=e;this.server.sendMessage({method:"Applet_CallTool",params:{appletName:t,toolName:r,toolData:n}})}}async function tN(t={}){if(!e){let r=t.debugDriver??ez.Adb;if(!eY.includes(r))throw Error(`无效的调试驱动 "${r}",可选值:${eY.join(", ")}。`);switch(r){case ez.Hdt:e=new tR;break;case ez.DevTools:e=new tT;break;case ez.Adb:{let r=t.deviceId??await tx();r&&(e=new tA(r,{skipForegroundAppWatch:t.skipAdbForegroundAppWatch}));break}default:throw Error(`无效的调试驱动 "${r}",可选值:${eY.join(", ")}。`)}}return e}let tL=f("node:fs/promises");async function tM(e){let t=(0,ta.join)(e,"debug-scene");try{return(await (0,tL.readdir)(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>({name:e.name.slice(0,-5),path:(0,ta.join)(t,e.name)}))}catch{return[]}}async function tj(e){try{return G(JSON.parse(await (0,tL.readFile)(e,"utf8")))}catch(t){return tm()&&console.warn(`[DoubaoApps] 加载调试场景 "${e}" 失败:${t instanceof Error?t.message:String(t)}`),null}}async function tU(e,t){let{matchedScene:r,appId:n,driver:i,variables:o}=e,a=t??await tj(r.path);if(!a)return;let s=X(a,o);if("page"===s.type){var l,d;l=r.name,0!==(d=s.unresolvedVariables).length&&console.warn(`[DoubaoApps] 调试场景 "${l}" 存在未解析的变量占位符:${d.map(e=>`{{${e}}}`).join(", ")}`),await i.openPageUrl({appId:n,url:s.url})}else if("widget"===s.type){let e=JSON.stringify(s.resolvedInput),t={appId:n,widgetId:s.id,widgetData:e,botId:s.botId};await i.pushWidget(t)}else{let e=JSON.stringify(s.resolvedInput),t={appId:n,toolId:s.id,toolData:e};await i.callTool(t)}}let tB="https://lf3-static.bytednsdoc.com/obj/eden-cn/777eh7nuptpfnuhd/default.svg";function tF(e){if("string"==typeof e){let t=e.length>0?e:tB;return{"1x":t,"2x":t,"3x":t}}return{"1x":e?.["1x"]||tB,"2x":e?.["2x"]||tB,"3x":e?.["3x"]||tB}}function tW(e){let t=Object.keys(e);return t.sort(),t.reduce((t,r)=>(t[r]=e[r],t),{})}class tH{get metadata(){return this._metadata}toString(){return JSON.stringify(this._metadata,null,2)}}class tV extends tH{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,r){let n=this._metadata;return{id:n.id,name:n.name,path:n.path,description:n.description,keywords:n.keywords,digest:t,prop:n.prop,entry:e,renderType:r,title:n.title,chat:n.chat}}}class tG extends tH{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest(e,t,r,n=[]){let i=this._metadata;return{widgetId:i.id,name:i.name,description:i.description,keywords:i.keywords,digest:t,prop:i.prop,entry:e,renderType:r,border:i.border,appSettings:n,boxType:"full_box"===i.boxType?ea.FULL_BOX:ea.INBOX,titleType:i.titleType?tG.TITLE_TYPE_MAP[i.titleType]:void 0}}}tG.TITLE_TYPE_MAP={none:2,normal:0,float:1};class tq extends tH{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 tH{constructor(e){super(),this._metadata=e}assign(e){this._metadata={...this._metadata,...e}}toManifest({toolsMetadata:e,hashCode:t,appRuntimeEntry:r,appRuntimeType:n}){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:tF(this._metadata.icons),digest:t,prop:"",tools:Object.values(e).map(e=>e.toManifest()),appRuntimeEntry:r,appRuntimeType:n}}}class tK{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 tq(t)}addPageMeta(e,t){this.metadata.pages[e]?this.metadata.pages[e].assign(t):this.metadata.pages[e]=new tV(t)}addWidgetMeta(e,t){this.metadata.widgets[e]?this.metadata.widgets[e].assign(t):this.metadata.widgets[e]=new tG(t)}getData(){let{tools:e,pages:t,widgets:r,app:n}=this.metadata;return{app:n.metadata??{},tools:tW(Object.fromEntries(Object.keys(e).map(t=>[t,e[t].metadata]))),pages:tW(Object.fromEntries(Object.keys(t).map(e=>[e,t[e].metadata]))),widgets:tW(Object.fromEntries(Object.keys(r).map(e=>[e,r[e].metadata])))}}getInstance(){let{tools:e,pages:t,widgets:r,app:n}=this.metadata;return{app:n,tools:tW(e),pages:tW(t),widgets:tW(r)}}clearData(){this.metadata={app:{},pages:{},tools:{},widgets:{}}}}let tz={MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE:1e3,MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY:2e3,MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE:3e3},tY={BEFORE_BUILD_STAGE_CREATE_CONFIG:1e3,BEFORE_BUILD_STAGE_MODIFY_BUILD_CONFIG:2e3,BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG:3e3},tX={COLLECT_METADATA_STAGE_START:1e3,COLLECT_METADATA_STAGE_PROCESS_METADATA:2e3,COLLECT_METADATA_STAGE_OPTIMIZE:3e3,COLLECT_METADATA_STAGE_FINISH:4e3},tZ={...tz,...tY,...tX},tQ={...tz,...tY,...tX};(eT=ej||(ej={}))[eT.BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS=1e3]="BEFORE_EMIT_STAGE_PROCESS_WORKER_ASSETS",eT[eT.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS=2e3]="BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS",eT[eT.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=3e3]="BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS",eT[eT.BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS=3999]="BEFORE_EMIT_STAGE_SIGN_MANIFEST_ASSETS",eT[eT.AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS=4e3]="AFTER_EMIT_STAGE_PROCESS_VIEW_ASSETS",eT[eT.AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS=5e3]="AFTER_EMIT_STAGE_PROCESS_WORKER_ASSETS",eT[eT.AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS=6e3]="AFTER_EMIT_STAGE_PROCESS_MANIFEST_ASSETS";let t0=f("../../../node_modules/.pnpm/tapable@2.2.1/node_modules/tapable/lib/index.js");function t1(){return{modifyEnvironment:new t0.FU(["arg0"]),modifyEntryOption:new t0.BD(["arg0"]),beforeBuild:new t0.FU(["arg0"]),collectMetaData:new t0.FU(["arg0"]),build:new t0.FU(["arg0"]),afterBuild:new t0.FU(["arg0"])}}function t2({hooks:e,stages:t}){return{hooks:e,...t}}class t3{constructor(e,t=[]){this.plugins=[],this.api={...{worker:t2({hooks:t1(),stages:tQ}),view:t2({hooks:t1(),stages:tZ}),assets:t2({hooks:{beforeEmit:new t0.FU(["arg0"]),afterEmit:new t0.FU(["arg0"])},stages:ej}),deploy:t2({hooks:{beforeDeploy:new t0.FU(["arg0"]),deploy:new t0.FU(["arg0"]),afterDeploy:new t0.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,...r){let n=M(this.getScopeHooks(e),t);return await n.promise(...r)}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)}}(eC=eU||(eU={})).DEV="dev",eC.BUILD="build",eC.PERF="perf",eC.DEPLOY="deploy",eC.ANALYZE="analyze";let t4={DEV:eU.DEV,BUILD:eU.BUILD,PERF:eU.PERF,DEPLOY:eU.DEPLOY,ANALYZE:eU.ANALYZE},t9=f("fs"),t5=f("../../../node_modules/.pnpm/archiver@7.0.1/node_modules/archiver/index.js");function t8(e,t,r,n){return new Promise((i,o)=>{let a=t9.createWriteStream(e),s=t5("zip",{zlib:{level:9}});s.pipe(a),s.directory(t,r??!1),a.on("close",()=>{n?.deleteResource&&t9.rmSync(t,{recursive:!0}),eA.success("Compiled artifacts packaged",{file:eX.basename(e)}),i("")}),s.on("error",e=>{eA.error("An error occurred during packaging",{error:e}),o(e)}),s.finalize()})}async function t7({channelName:e,manifest:t,rootPath:r}){let n=ta.resolve(r),i=ta.resolve(r,"doubao_app_output"),o=ta.resolve(i,t.packageName),a={outputFolder:i,transformFolder:o,manifest:t};to.existsSync(i)&&to.rmSync(i,{recursive:!0}),to.mkdirSync(i),to.mkdirSync(o),function(e,t){let{transformFolder:r,manifest:n}=t,{applet:i,widgets:o}=n,a=ta.resolve(e,"base"),s=ta.resolve(r,"base");to.mkdirSync(s),to.cpSync(a,s,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0});let l=ta.resolve(e,i.appletId),d=ta.resolve(r,i.appletId);to.mkdirSync(d),i.pages.length>0&&to.cpSync(l,d,{filter:(e,t)=>null===e.match(/(.)*\.map$/),recursive:!0}),o.forEach(t=>{let n=ta.resolve(e,t.widgetId),i=ta.resolve(r,t.widgetId);to.mkdirSync(i),to.cpSync(n,i,{filter:e=>null===e.match(/(.)*\.map$/),recursive:!0})});let p=ta.resolve(e,`web_${n.versionCode}`);if(to.existsSync(p)){let e=ta.resolve(r,`web_${n.versionCode}`);to.cpSync(p,e,{recursive:!0})}}(n,a);let s=await t6(e,a);return eA.debug("Package resource created",{packageResource:s}),{packageResource:s}}async function t6(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:r,outputFolder:n,transformFolder:i}=t,{applet:o,widgets:a,packageName:s,versionCode:l}=r,d=ta.resolve(n,"deploy-package"),p=ta.resolve(d,e),c=ta.resolve(p,s);to.mkdirSync(d),to.mkdirSync(p),to.mkdirSync(c),to.cpSync(i,c,{recursive:!0});let u={},h=to.readdirSync(c).filter(e=>to.statSync(ta.resolve(c,e)).isDirectory()),m=ta.resolve(d,`${e}.zip`);try{if(await Promise.all(h.map(e=>{if(e===`web_${l}`)return Promise.resolve();if("base"===e)return t8(ta.resolve(c,`${e}_${l}.zip`),ta.resolve(c,e),e,{deleteResource:!0});if(e===o.appletId){let t=`${e}_${o.digest}.zip`;return u[o.appletId]=t,t8(ta.resolve(c,t),ta.resolve(c,e),e,{deleteResource:!0})}let t=a.find(t=>t.widgetId===e);if(t){let r=`${e}_${t.digest}.zip`;return u[t.widgetId]=r,t8(ta.resolve(c,r),ta.resolve(c,e),e,{deleteResource:!0})}return eA.error("Invalid package directory",{directory:e}),Promise.resolve()})),await t8(m,p,e),process.env.BUILD_VERSION){let e=ta.resolve(n,"scm-deploy-package"),t=ta.resolve(e,s);to.mkdirSync(e),to.mkdirSync(t),to.cpSync(c,t,{recursive:!0})}return eA.success("Deploy package archived",{destination:m}),{resource:m,fileNames:u}}catch(e){throw Error(`ERROR: Archive the deploy-package failed. ${e}`)}}(eI=eB||(eB={})).NORMAL="normal",eI.SELF_BUILT_CREATE="selfBuiltCreate",eI.SELF_BUILT_PUBLISH="selfBuiltPublish",eI.SELF_BUILT_CHECK_STATUS="selfBuiltCheckStatus",eI.SELF_BUILT_STOP="selfBuiltStop",eI.SELF_BUILT_ROLLBACK="selfBuiltRollback";let re={NORMAL:eB.NORMAL,SELF_BUILT_CREATE:eB.SELF_BUILT_CREATE,SELF_BUILT_PUBLISH:eB.SELF_BUILT_PUBLISH,SELF_BUILT_CHECK_STATUS:eB.SELF_BUILT_CHECK_STATUS,SELF_BUILT_STOP:eB.SELF_BUILT_STOP,SELF_BUILT_ROLLBACK:eB.SELF_BUILT_ROLLBACK};function rt(e,t){let r=(t||e).replace(/^\/+/,"").split("/").filter(Boolean);return r.length>1&&"index"===r[r.length-1]?r[r.length-2]||"index":r[r.length-1]||"index"}function rr(e,t){let[r]=(t??e).split(/[?#]/,1),n=r.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"");return n?`/${n}`:"/"}function rn(e,t,r){let n=rr(t).slice(1);return`${e}/${n}/${r}`}function ri(e,...t){return H(e,...t,(e,t,r)=>Array.isArray(e)?e.concat(t):Buffer.isBuffer(t)?t:void 0)}let ro=(e,t)=>ta.relative(e,t).replaceAll(ta.sep,"/");class ra{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="",r=e.importSpecifiers.find(e=>"default"===e.propertyName),n=e.importSpecifiers.filter(e=>"default"!==e.propertyName);return r&&(t+=`${r.name}`),n.length&&(r&&(t+=", "),t+=`{ ${n.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=eX.dirname(this._filename);(0,t9.existsSync)(t)||(0,t9.mkdirSync)(t,{recursive:!0}),(0,t9.writeFileSync)(this._filename,this.toString(),e)}return this._filename}}function rs(e,t,r=!1,n=!1){return Object.keys(e).reduce((i,o)=>{let{filename:a,isVirtualFile:s,isSpecial:l}=e[o];if(s||l)return i;let d=`${eZ}${ta.sep}${o}${ta.extname(a)}`,p=ro(ta.join(t,d,".."),a),c=tu(t),u=r?"defineWidget":"definePage";return i[o]=new ra(d),i[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:p,importSpecifiers:[{propertyName:"default",name:"TaroView"}]}),i[o].appendContent(`
128
128
  const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
129
129
 
130
130
  const View = ${u}({
@@ -139,60 +139,56 @@ root.render(<FC />);`,n?`
139
139
  if (import.meta.webpackHot) {
140
140
  import.meta.webpackHot.accept()
141
141
  }
142
- `:""),i},{})}let ra=f("module"),rs="doubao:plugin:taro";class rl extends ri{toString(){return this.contents.join("\n").trim()}}async function rp({config:e,pluginSystem:t}){let r=e.context.environment;await t.callWorkerHooks("modifyEnvironment",{environment:r}),e.context.setEnvironment(r);let{entry:n}=await t.callWorkerHooks("modifyEntryOption",{entry:{app:new rl(`.${ti.sep}app.js`,"")}});return{entry:n}}async function rd({compiler:e,compilation:t,assets:r,metadata:n,resolveAppInfo:i,shouldInjectAsset:o}){let a=Object.keys(r).reduce((e,r)=>{if(!o(r))return e;let n=t.getAsset(r);return n&&e.push(n),e},[]);if(0===a.length)return;let s=n.app,l=await i?.(),p=`globalThis.__AI_MANIFEST__ = ${JSON.stringify({package:l?.appKey||s.appId,appId:l?.appKey||s.appId,name:l?.appName||s.name,icons:l?.iconUrl?tU(l.iconUrl):s.icons})};
143
- `;a.forEach(r=>{if(r.source.source().toString().startsWith(p))return;let n=new e.webpack.sources.ReplaceSource(r.source,r.name);n.insert(0,p),t.updateAsset(r.name,n,r.info)})}function rc(e){let t=ti.posix.basename(e);return"background.js"===t||"main-thread.js"===t||/^background\.[^/]+\.js$/.test(t)||/^main-thread\.[^/]+\.js$/.test(t)}function ru(e){let t=e.replaceAll("\\","/");return t.split("/").some(e=>e.startsWith("__doubao_web__"))&&rc(t)}class rm{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(rm.name,t=>{t.hooks.processAssets.tapPromise({name:rm.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async r=>{await rd({compiler:e,compilation:t,assets:r,...this.options})})})}}let rh="index.web.bundle",rf="base/app.web.bundle",rg="base/client-tool/index.web.bundle";function ry(e){return`__doubao_web__${e.replaceAll("\\","/").replaceAll("/","__")}`}function rb(e,t,r){return t[r]?.id??t7(r,e[r]?.folderName)}function r_(e){return!!e?.internal}function rv(e={},t={},r="configured"){return"all"===r?e:function(e={},t={}){return Object.fromEntries(Object.entries(e).filter(([e,r])=>r_(r)||!!t[e]?.web))}(e,t)}class rw{apply(e){e.hooks.thisCompilation.tap(rw.name,t=>{t.hooks.processAssets.tapPromise({name:rw.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{let r=rE(t,"app"),n=r?t.getAsset(r):void 0;if(!r||!n)throw Error("Worker entry asset was not emitted.");await rS(t,e,r,rf);let i=rE(t,e8);i&&await rS(t,e,i,rg)})})}}function rE(e,t){let r=e.entrypoints.get(t)?.getEntrypointChunk();return[...r?.files??[]].find(t=>t.endsWith(".js")&&!e.getAsset(t)?.info?.hotModuleReplacement)}async function rS(e,t,r,n){let i=e.getAsset(r);if(!i)throw Error(`Worker entry asset was not emitted: ${r}`);e.emitAsset(n,new t.webpack.sources.RawSource(await rx(i.source.source().toString())));let o=e.getAsset(`${r}.map`);o&&e.emitAsset(`${n}.map`,o.source,o.info),e.deleteAsset(r)}async function rx(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 rA{options;recordNativeAppAssetPaths;constructor(e,t){this.options=e,this.recordNativeAppAssetPaths=t}apply(e){new e.webpack.experiments.VirtualModulesPlugin({[eX]:"",[eZ]:eQ,...Object.fromEntries(Object.entries(this.options.entry).map(([,e])=>[e.filename,e.toString()]))}).apply(e),e.hooks.make.tapPromise(rA.name,async()=>{await this.options.pluginSystem.callWorkerHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(rA.name,t=>{t.hooks.optimizeTree.tapPromise(rA.name,async()=>{await this.options.pluginSystem.callWorkerHooks("build",{metadata:this.options.context.metadata,fileDependencies:t.fileDependencies})}),t.hooks.processAssets.tapPromise({name:rA.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async r=>{var n,i,o;let a,s=rE(t,"app");if(!s||!t.getAsset(s))throw Error("Worker entry asset was not emitted.");this.recordNativeAppAssetPaths&&(n=t,i=this.options.context,o=s,i.setAppAssetPath(o),a=`${o}.map`,n.getAsset(a)&&i.setAppMapAssetPath(a)),await rd({compiler:e,compilation:t,assets:r,metadata:this.options.context.metadata,resolveAppInfo:()=>this.options.context.resolveAppInfo(),shouldInjectAsset:e=>e===s})})}),e.hooks.done.tapPromise(rA.name,async e=>{await this.options.pluginSystem.callWorkerHooks("afterBuild",{stats:e})})}}let rT=f("node:os"),rC=f("process"),rI=f("../../../node_modules/.pnpm/@lynx-js+type-config@4.1.3/node_modules/@lynx-js/type-config/index.js");var rO={},rP={};function rk(e){var t=rP[e];if(void 0!==t)return t.exports;var r=rP[e]={exports:{}};return rO[e](r,r.exports,rk),r.exports}rk.m=rO,rk.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return rk.d(t,{a:t}),t},rk.d=(e,t,r)=>{var n=(t,r)=>{for(var n in t)rk.o(t,n)&&!rk.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,[r]:t[n]})};n(t,"get"),n(r,"value")},rk.add=function(e){Object.assign(rk.m,e)},rk.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),rk.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,r){var n=r("../../../node_modules/.pnpm/isobject@3.0.1/node_modules/isobject/index.js");e.exports=function(e,t){if(!n(e)&&"function"!=typeof e)return{};var r={};if("string"==typeof t)return t in e&&(r[t]=e[t]),r;for(var i=t.length,o=-1;++o<i;){var a=t[o];a in e&&(r[a]=e[a])}return r}},"../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js"(e){let t=rC||{},r=t.argv||[],n=t.env||{},i=!(n.NO_COLOR||r.includes("--no-color"))&&(!!n.FORCE_COLOR||r.includes("--color")||"win32"===t.platform||(t.stdout||{}).isTTY&&"dumb"!==n.TERM||!!n.CI),o=(e,t,r=e)=>n=>{let i=""+n,o=i.indexOf(t,e.length);return~o?e+a(i,t,r,o)+t:e+i+t},a=(e,t,r,n)=>{let i="",o=0;do i+=e.substring(o,n)+r,o=n+t.length,n=e.indexOf(t,o);while(~n);return i+e.substring(o)},s=(e=i)=>{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 rD=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 r$=globalThis.navigator?.userAgentData?.platform;function rR(e,t=globalThis.Deno?globalThis.Deno.args:w.argv){let r=e.startsWith("-")?"":1===e.length?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return -1!==n&&(-1===i||n<i)}"macOS"===r$||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform,"Windows"===r$||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform,"Linux"===r$||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform,"iOS"===r$||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),"Android"===r$||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform,rD||w.env.TERM_PROGRAM,rD||w.platform,rD||w.cwd;let{env:rN}=w;function rL(e,r={}){var n;return 0!==(n=function(e,{streamIsTTY:r,sniffFlags:n=!0}={}){let i=function(){if(!("FORCE_COLOR"in rN))return;if("true"===rN.FORCE_COLOR)return 1;if("false"===rN.FORCE_COLOR)return 0;if(0===rN.FORCE_COLOR.length)return 1;let e=Math.min(Number.parseInt(rN.FORCE_COLOR,10),3);if([0,1,2,3].includes(e))return e}();void 0!==i&&(t=i);let o=n?t:i;if(0===o)return 0;if(n){if(rR("color=16m")||rR("color=full")||rR("color=truecolor"))return 3;if(rR("color=256"))return 2}if("TF_BUILD"in rN&&"AGENT_NAME"in rN)return 1;if(e&&!r&&void 0===o)return 0;let a=o||0;if("dumb"===rN.TERM)return a;if("win32"===w.platform){let e=rT.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in rN)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(e=>e in rN)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(e=>e in rN)||"codeship"===rN.CI_NAME?1:a;if("TEAMCITY_VERSION"in rN)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(rN.TEAMCITY_VERSION);if("truecolor"===rN.COLORTERM||"xterm-kitty"===rN.TERM||"xterm-ghostty"===rN.TERM||"wezterm"===rN.TERM)return 3;if("TERM_PROGRAM"in rN){let e=Number.parseInt((rN.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(rN.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(rN.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(rN.TERM)||"COLORTERM"in rN?1:a}(e,{streamIsTTY:e&&e.isTTY,...r}))&&{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function rM(e,t=rC.argv){let r=e.startsWith("-")?"":1===e.length?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return -1!==n&&(-1===i||n<i)}function rj(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 rU(e){let{CI:t,CURSOR_TRACE_ID:r,FORCE_HYPERLINK:n,NETLIFY:i,TEAMCITY_VERSION:o,TERM_PROGRAM:a,TERM_PROGRAM_VERSION:s,VTE_VERSION:l,TERM:p}=w.env;if(n)return!(n.length>0&&0===Number.parseInt(n,10));if(rM("no-hyperlink")||rM("no-hyperlinks")||rM("hyperlink=false")||rM("hyperlink=never"))return!1;if(rM("hyperlink=true")||rM("hyperlink=always")||i)return!0;if(!rL(e)||e&&!e.isTTY)return!1;if("WT_SESSION"in w.env)return!0;if("win32"===w.platform||t||o)return!1;if(a){let e=rj(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(r)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=rj(l);return e.major>0||e.minor>=50}switch(p){case"alacritty":case"xterm-kitty":return!0}return!1}rR("no-color")||rR("no-colors")||rR("color=false")||rR("color=never")?t=0:(rR("color")||rR("colors")||rR("color=true")||rR("color=always"))&&(t=1),rL({isTTY:b.isatty(1)}),rL({isTTY:b.isatty(2)});let rB={stdout:rU(w.stdout),stderr:rU(w.stderr)};function rF(e,t,{target:r="stdout",...n}={}){return rB[r]?["\x1b]","8",";",";",t,"\x07",e,"\x1b]","8",";",";","\x07"].join(""):!1===n.fallback?e:"function"==typeof n.fallback?n.fallback(e,t):`${e} ${t}`}rF.isSupported=rB.stdout,rF.stderr=(e,t,r={})=>rF(e,t,{target:"stderr",...r}),rF.stderr.isSupported=rB.stderr;let rW=rk("../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js");var rH=rk.n(rW);class rG{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,...rH()(t,this.options.compilerOptionsKeys)},e.encodeData.sourceContent.config={...e.encodeData.sourceContent.config,...rH()(t,this.options.configKeys)},e})})}}let rV=e=>rq.has(e),rq=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"]);(eC=eU||(eU={}))[eC.Start=0]="Start",eC[eC.Property=1]="Property",eC[eC.StringKey=2]="StringKey",eC[eC.NumberKey=3]="NumberKey";let rJ=rk("../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js");var rK=rk.n(rJ);let rz=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=i=[],o=(e,r)=>(e&&(e=>{if(0===t.length)return!0;let r=t[t.length-1].path;return e.length>r.length||r.substring(0,e.length)!==e})(r.path)&&(void 0===r.value&&(r.description??=`The value at this path is \`undefined\`.
142
+ `:""),i},{})}let rl=f("module"),rd="doubao:plugin:taro";class rp extends ra{toString(){return this.contents.join("\n").trim()}}async function rc({config:e,pluginSystem:t}){let r=e.context.environment;await t.callWorkerHooks("modifyEnvironment",{environment:r}),e.context.setEnvironment(r);let{entry:n}=await t.callWorkerHooks("modifyEntryOption",{entry:{app:new rp(`.${ta.sep}app.js`,"")}});return{entry:n}}async function ru({compiler:e,compilation:t,assets:r,metadata:n,resolveAppInfo:i,shouldInjectAsset:o}){let a=Object.keys(r).reduce((e,r)=>{if(!o(r))return e;let n=t.getAsset(r);return n&&e.push(n),e},[]);if(0===a.length)return;let s=n.app,l=await i?.(),d=`globalThis.__AI_MANIFEST__ = ${JSON.stringify({package:l?.appKey||s.appId,appId:l?.appKey||s.appId,name:l?.appName||s.name,icons:l?.iconUrl?tF(l.iconUrl):s.icons})};
143
+ `;a.forEach(r=>{if(r.source.source().toString().startsWith(d))return;let n=new e.webpack.sources.ReplaceSource(r.source,r.name);n.insert(0,d),t.updateAsset(r.name,n,r.info)})}function rh(e){let t=ta.posix.basename(e);return"background.js"===t||"main-thread.js"===t||/^background\.[^/]+\.js$/.test(t)||/^main-thread\.[^/]+\.js$/.test(t)}function rm(e){let t=e.replaceAll("\\","/");return t.split("/").some(e=>e.startsWith("__doubao_web__"))&&rh(t)}class rf{options;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_ADDITIONS},async r=>{await ru({compiler:e,compilation:t,assets:r,...this.options})})})}}let rg="index.web.bundle",ry="base/app.web.bundle",rb="base/client-tool/index.web.bundle";function r_(e){return`__doubao_web__${e.replaceAll("\\","/").replaceAll("/","__")}`}function rv(e,t,r){return t[r]?.id??rt(r,e[r]?.folderName)}function rw(e){return!!e?.internal}function rS(e={},t={},r="configured"){return"all"===r?e:function(e={},t={}){return Object.fromEntries(Object.entries(e).filter(([e,r])=>rw(r)||!!t[e]?.web))}(e,t)}class rE{apply(e){e.hooks.thisCompilation.tap(rE.name,t=>{t.hooks.processAssets.tapPromise({name:rE.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{let r=rx(t,"app"),n=r?t.getAsset(r):void 0;if(!r||!n)throw Error("Worker entry asset was not emitted.");await rA(t,e,r,ry);let i=rx(t,e6);i&&await rA(t,e,i,rb)})})}}function rx(e,t){let r=e.entrypoints.get(t)?.getEntrypointChunk();return[...r?.files??[]].find(t=>t.endsWith(".js")&&!e.getAsset(t)?.info?.hotModuleReplacement)}async function rA(e,t,r,n){let i=e.getAsset(r);if(!i)throw Error(`Worker entry asset was not emitted: ${r}`);e.emitAsset(n,new t.webpack.sources.RawSource(await rT(i.source.source().toString())));let o=e.getAsset(`${r}.map`);o&&e.emitAsset(`${n}.map`,o.source,o.info),e.deleteAsset(r)}async function rT(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 rC{options;recordNativeAppAssetPaths;constructor(e,t){this.options=e,this.recordNativeAppAssetPaths=t}apply(e){new e.webpack.experiments.VirtualModulesPlugin({[eQ]:"",[e0]:e1,...Object.fromEntries(Object.entries(this.options.entry).map(([,e])=>[e.filename,e.toString()]))}).apply(e),e.hooks.make.tapPromise(rC.name,async()=>{await this.options.pluginSystem.callWorkerHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(rC.name,t=>{t.hooks.optimizeTree.tapPromise(rC.name,async()=>{await this.options.pluginSystem.callWorkerHooks("build",{metadata:this.options.context.metadata,fileDependencies:t.fileDependencies})}),t.hooks.processAssets.tapPromise({name:rC.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},async r=>{var n,i,o;let a,s=rx(t,"app");if(!s||!t.getAsset(s))throw Error("Worker entry asset was not emitted.");this.recordNativeAppAssetPaths&&(n=t,i=this.options.context,o=s,i.setAppAssetPath(o),a=`${o}.map`,n.getAsset(a)&&i.setAppMapAssetPath(a)),await ru({compiler:e,compilation:t,assets:r,metadata:this.options.context.metadata,resolveAppInfo:()=>this.options.context.resolveAppInfo(),shouldInjectAsset:e=>e===s})})}),e.hooks.done.tapPromise(rC.name,async e=>{await this.options.pluginSystem.callWorkerHooks("afterBuild",{stats:e})})}}let rI=f("node:os"),rO=f("process"),rP=f("../../../node_modules/.pnpm/@lynx-js+type-config@4.1.3/node_modules/@lynx-js/type-config/index.js");var rk={},rD={};function r$(e){var t=rD[e];if(void 0!==t)return t.exports;var r=rD[e]={exports:{}};return rk[e](r,r.exports,r$),r.exports}r$.m=rk,r$.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r$.d(t,{a:t}),t},r$.d=(e,t,r)=>{var n=(t,r)=>{for(var n in t)r$.o(t,n)&&!r$.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,[r]:t[n]})};n(t,"get"),n(r,"value")},r$.add=function(e){Object.assign(r$.m,e)},r$.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r$.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,r){var n=r("../../../node_modules/.pnpm/isobject@3.0.1/node_modules/isobject/index.js");e.exports=function(e,t){if(!n(e)&&"function"!=typeof e)return{};var r={};if("string"==typeof t)return t in e&&(r[t]=e[t]),r;for(var i=t.length,o=-1;++o<i;){var a=t[o];a in e&&(r[a]=e[a])}return r}},"../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js"(e){let t=rO||{},r=t.argv||[],n=t.env||{},i=!(n.NO_COLOR||r.includes("--no-color"))&&(!!n.FORCE_COLOR||r.includes("--color")||"win32"===t.platform||(t.stdout||{}).isTTY&&"dumb"!==n.TERM||!!n.CI),o=(e,t,r=e)=>n=>{let i=""+n,o=i.indexOf(t,e.length);return~o?e+a(i,t,r,o)+t:e+i+t},a=(e,t,r,n)=>{let i="",o=0;do i+=e.substring(o,n)+r,o=n+t.length,n=e.indexOf(t,o);while(~n);return i+e.substring(o)},s=(e=i)=>{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 rR=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 rN=globalThis.navigator?.userAgentData?.platform;function rL(e,t=globalThis.Deno?globalThis.Deno.args:S.argv){let r=e.startsWith("-")?"":1===e.length?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return -1!==n&&(-1===i||n<i)}"macOS"===rN||globalThis.navigator?.platform==="MacIntel"||globalThis.navigator?.userAgent?.includes(" Mac ")===!0||globalThis.process?.platform,"Windows"===rN||globalThis.navigator?.platform==="Win32"||globalThis.process?.platform,"Linux"===rN||globalThis.navigator?.platform?.startsWith("Linux")===!0||globalThis.navigator?.userAgent?.includes(" Linux ")===!0||globalThis.process?.platform,"iOS"===rN||globalThis.navigator?.platform==="MacIntel"&&globalThis.navigator?.maxTouchPoints>1||/iPad|iPhone|iPod/.test(globalThis.navigator?.platform),"Android"===rN||globalThis.navigator?.platform==="Android"||globalThis.navigator?.userAgent?.includes(" Android ")===!0||globalThis.process?.platform,rR||S.env.TERM_PROGRAM,rR||S.platform,rR||S.cwd;let{env:rM}=S;function rj(e,r={}){var n;return 0!==(n=function(e,{streamIsTTY:r,sniffFlags:n=!0}={}){let i=function(){if(!("FORCE_COLOR"in rM))return;if("true"===rM.FORCE_COLOR)return 1;if("false"===rM.FORCE_COLOR)return 0;if(0===rM.FORCE_COLOR.length)return 1;let e=Math.min(Number.parseInt(rM.FORCE_COLOR,10),3);if([0,1,2,3].includes(e))return e}();void 0!==i&&(t=i);let o=n?t:i;if(0===o)return 0;if(n){if(rL("color=16m")||rL("color=full")||rL("color=truecolor"))return 3;if(rL("color=256"))return 2}if("TF_BUILD"in rM&&"AGENT_NAME"in rM)return 1;if(e&&!r&&void 0===o)return 0;let a=o||0;if("dumb"===rM.TERM)return a;if("win32"===S.platform){let e=rI.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in rM)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(e=>e in rM)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(e=>e in rM)||"codeship"===rM.CI_NAME?1:a;if("TEAMCITY_VERSION"in rM)return+!!/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(rM.TEAMCITY_VERSION);if("truecolor"===rM.COLORTERM||"xterm-kitty"===rM.TERM||"xterm-ghostty"===rM.TERM||"wezterm"===rM.TERM)return 3;if("TERM_PROGRAM"in rM){let e=Number.parseInt((rM.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(rM.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(rM.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(rM.TERM)||"COLORTERM"in rM?1:a}(e,{streamIsTTY:e&&e.isTTY,...r}))&&{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function rU(e,t=rO.argv){let r=e.startsWith("-")?"":1===e.length?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return -1!==n&&(-1===i||n<i)}function rB(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 rF(e){let{CI:t,CURSOR_TRACE_ID:r,FORCE_HYPERLINK:n,NETLIFY:i,TEAMCITY_VERSION:o,TERM_PROGRAM:a,TERM_PROGRAM_VERSION:s,VTE_VERSION:l,TERM:d}=S.env;if(n)return!(n.length>0&&0===Number.parseInt(n,10));if(rU("no-hyperlink")||rU("no-hyperlinks")||rU("hyperlink=false")||rU("hyperlink=never"))return!1;if(rU("hyperlink=true")||rU("hyperlink=always")||i)return!0;if(!rj(e)||e&&!e.isTTY)return!1;if("WT_SESSION"in S.env)return!0;if("win32"===S.platform||t||o)return!1;if(a){let e=rB(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(r)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=rB(l);return e.major>0||e.minor>=50}switch(d){case"alacritty":case"xterm-kitty":return!0}return!1}rL("no-color")||rL("no-colors")||rL("color=false")||rL("color=never")?t=0:(rL("color")||rL("colors")||rL("color=true")||rL("color=always"))&&(t=1),rj({isTTY:b.isatty(1)}),rj({isTTY:b.isatty(2)});let rW={stdout:rF(S.stdout),stderr:rF(S.stderr)};function rH(e,t,{target:r="stdout",...n}={}){return rW[r]?["\x1b]","8",";",";",t,"\x07",e,"\x1b]","8",";",";","\x07"].join(""):!1===n.fallback?e:"function"==typeof n.fallback?n.fallback(e,t):`${e} ${t}`}rH.isSupported=rW.stdout,rH.stderr=(e,t,r={})=>rH(e,t,{target:"stderr",...r}),rH.stderr.isSupported=rW.stderr;let rV=r$("../../../node_modules/.pnpm/object.pick@1.3.0/node_modules/object.pick/index.js");var rG=r$.n(rV);class rq{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,...rG()(t,this.options.compilerOptionsKeys)},e.encodeData.sourceContent.config={...e.encodeData.sourceContent.config,...rG()(t,this.options.configKeys)},e})})}}let rJ=e=>rK.has(e),rK=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"]);(eO=eF||(eF={}))[eO.Start=0]="Start",eO[eO.Property=1]="Property",eO[eO.StringKey=2]="StringKey",eO[eO.NumberKey=3]="NumberKey";let rz=r$("../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js");var rY=r$.n(rz);let rX=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=i=[],o=(e,r)=>(e&&(e=>{if(0===t.length)return!0;let r=t[t.length-1].path;return e.length>r.length||r.substring(0,e.length)!==e})(r.path)&&(void 0===r.value&&(r.description??=`The value at this path is \`undefined\`.
144
144
 
145
- Please fill the \`${r.expected}\` typed value next time.`),t.push(r)),!1),((e,t,r=!0)=>("object"==typeof e&&null!==e&&!1===Array.isArray(e)||o(!0,{path:t+"",expected:"Config",value:e}))&&((e,t,r=!0)=>[void 0===e.alignMouseEventWithW3C||"boolean"==typeof e.alignMouseEventWithW3C||o(r,{path:t+".alignMouseEventWithW3C",expected:"(boolean | undefined)",value:e.alignMouseEventWithW3C}),void 0===e.disableLongpressAfterScroll||"boolean"==typeof e.disableLongpressAfterScroll||o(r,{path:t+".disableLongpressAfterScroll",expected:"(boolean | undefined)",value:e.disableLongpressAfterScroll}),void 0===e.enableA11y||"boolean"==typeof e.enableA11y||o(r,{path:t+".enableA11y",expected:"(boolean | undefined)",value:e.enableA11y}),void 0===e.enableAccessibilityElement||"boolean"==typeof e.enableAccessibilityElement||o(r,{path:t+".enableAccessibilityElement",expected:"(boolean | undefined)",value:e.enableAccessibilityElement}),void 0===e.enableCSSInheritance||"boolean"==typeof e.enableCSSInheritance||o(r,{path:t+".enableCSSInheritance",expected:"(boolean | undefined)",value:e.enableCSSInheritance}),void 0===e.enableCSSInlineVariables||"boolean"==typeof e.enableCSSInlineVariables||o(r,{path:t+".enableCSSInlineVariables",expected:"(boolean | undefined)",value:e.enableCSSInlineVariables}),void 0===e.enableCSSRule||"boolean"==typeof e.enableCSSRule||o(r,{path:t+".enableCSSRule",expected:"(boolean | undefined)",value:e.enableCSSRule}),void 0===e.enableEndGestureAtLastFingerUp||"boolean"==typeof e.enableEndGestureAtLastFingerUp||o(r,{path:t+".enableEndGestureAtLastFingerUp",expected:"(boolean | undefined)",value:e.enableEndGestureAtLastFingerUp}),void 0===e.enableEventHandleRefactor||"boolean"==typeof e.enableEventHandleRefactor||o(r,{path:t+".enableEventHandleRefactor",expected:"(boolean | undefined)",value:e.enableEventHandleRefactor}),void 0===e.enableEventThrough||"boolean"==typeof e.enableEventThrough||o(r,{path:t+".enableEventThrough",expected:"(boolean | undefined)",value:e.enableEventThrough}),void 0===e.enableFetchAPIStandardStreaming||"boolean"==typeof e.enableFetchAPIStandardStreaming||o(r,{path:t+".enableFetchAPIStandardStreaming",expected:"(boolean | undefined)",value:e.enableFetchAPIStandardStreaming}),void 0===e.enableFixedNew||"boolean"==typeof e.enableFixedNew||o(r,{path:t+".enableFixedNew",expected:"(boolean | undefined)",value:e.enableFixedNew}),void 0===e.enableFlexBasisZeroPercent||"boolean"==typeof e.enableFlexBasisZeroPercent||o(r,{path:t+".enableFlexBasisZeroPercent",expected:"(boolean | undefined)",value:e.enableFlexBasisZeroPercent}),void 0===e.enableGridPlacementShorthands||"boolean"==typeof e.enableGridPlacementShorthands||o(r,{path:t+".enableGridPlacementShorthands",expected:"(boolean | undefined)",value:e.enableGridPlacementShorthands}),void 0===e.enableJsBindingApiThrowException||"boolean"==typeof e.enableJsBindingApiThrowException||o(r,{path:t+".enableJsBindingApiThrowException",expected:"(boolean | undefined)",value:e.enableJsBindingApiThrowException}),void 0===e.enableListNewArchitecture||"boolean"==typeof e.enableListNewArchitecture||o(r,{path:t+".enableListNewArchitecture",expected:"(boolean | undefined)",value:e.enableListNewArchitecture}),void 0===e.enableMultiTouch||"boolean"==typeof e.enableMultiTouch||o(r,{path:t+".enableMultiTouch",expected:"(boolean | undefined)",value:e.enableMultiTouch}),void 0===e.enableNativeList||"boolean"==typeof e.enableNativeList||o(r,{path:t+".enableNativeList",expected:"(boolean | undefined)",value:e.enableNativeList}),void 0===e.enableNewGesture||"boolean"==typeof e.enableNewGesture||o(r,{path:t+".enableNewGesture",expected:"(boolean | undefined)",value:e.enableNewGesture}),void 0===e.enableNewIntersectionObserver||"boolean"==typeof e.enableNewIntersectionObserver||o(r,{path:t+".enableNewIntersectionObserver",expected:"(boolean | undefined)",value:e.enableNewIntersectionObserver}),void 0===e.enableNewTransformOrigin||"boolean"==typeof e.enableNewTransformOrigin||o(r,{path:t+".enableNewTransformOrigin",expected:"(boolean | undefined)",value:e.enableNewTransformOrigin}),void 0===e.enableParseIntFlex||"boolean"==typeof e.enableParseIntFlex||o(r,{path:t+".enableParseIntFlex",expected:"(boolean | undefined)",value:e.enableParseIntFlex}),void 0===e.enableReloadLifecycle||"boolean"==typeof e.enableReloadLifecycle||o(r,{path:t+".enableReloadLifecycle",expected:"(boolean | undefined)",value:e.enableReloadLifecycle}),void 0===e.enableSimultaneousTap||"boolean"==typeof e.enableSimultaneousTap||o(r,{path:t+".enableSimultaneousTap",expected:"(boolean | undefined)",value:e.enableSimultaneousTap}),void 0===e.enableTextOverflow||"boolean"==typeof e.enableTextOverflow||o(r,{path:t+".enableTextOverflow",expected:"(boolean | undefined)",value:e.enableTextOverflow}),void 0===e.enableTransformedTouchPosition||"boolean"==typeof e.enableTransformedTouchPosition||o(r,{path:t+".enableTransformedTouchPosition",expected:"(boolean | undefined)",value:e.enableTransformedTouchPosition}),void 0===e.fontScaleEffectiveOnlyOnSp||"boolean"==typeof e.fontScaleEffectiveOnlyOnSp||o(r,{path:t+".fontScaleEffectiveOnlyOnSp",expected:"(boolean | undefined)",value:e.fontScaleEffectiveOnlyOnSp}),void 0===e.includeFontPadding||"boolean"==typeof e.includeFontPadding||o(r,{path:t+".includeFontPadding",expected:"(boolean | undefined)",value:e.includeFontPadding}),void 0===e.keyboardCallbackPassRelativeHeight||"boolean"==typeof e.keyboardCallbackPassRelativeHeight||o(r,{path:t+".keyboardCallbackPassRelativeHeight",expected:"(boolean | undefined)",value:e.keyboardCallbackPassRelativeHeight}),void 0===e.longPressDuration||"number"==typeof e.longPressDuration||o(r,{path:t+".longPressDuration",expected:"(number | undefined)",value:e.longPressDuration}),void 0===e.removeDescendantSelectorScope||"boolean"==typeof e.removeDescendantSelectorScope||o(r,{path:t+".removeDescendantSelectorScope",expected:"(boolean | undefined)",value:e.removeDescendantSelectorScope}),void 0===e.tapSlop||"string"==typeof e.tapSlop||o(r,{path:t+".tapSlop",expected:"(string | undefined)",value:e.tapSlop}),void 0===e.unifyVWVHBehavior||"boolean"==typeof e.unifyVWVHBehavior||o(r,{path:t+".unifyVWVHBehavior",expected:"(boolean | undefined)",value:e.unifyVWVHBehavior}),0===Object.keys(e).length||!1===r||Object.keys(e).map(n=>{let i;if(["alignMouseEventWithW3C","disableLongpressAfterScroll","enableA11y","enableAccessibilityElement","enableCSSInheritance","enableCSSInlineVariables","enableCSSRule","enableEndGestureAtLastFingerUp","enableEventHandleRefactor","enableEventThrough","enableFetchAPIStandardStreaming","enableFixedNew","enableFlexBasisZeroPercent","enableGridPlacementShorthands","enableJsBindingApiThrowException","enableListNewArchitecture","enableMultiTouch","enableNativeList","enableNewGesture","enableNewIntersectionObserver","enableNewTransformOrigin","enableParseIntFlex","enableReloadLifecycle","enableSimultaneousTap","enableTextOverflow","enableTransformedTouchPosition","fontScaleEffectiveOnlyOnSp","includeFontPadding","keyboardCallbackPassRelativeHeight","longPressDuration","removeDescendantSelectorScope","tapSlop","unifyVWVHBehavior"].some(e=>n===e))return!0;let a=e[n];if(void 0===a)return!0;return o(r,{path:t+(!1===rV(i=n)&&/^[a-zA-Z_$][a-zA-Z_$0-9]*$/g.test(i)?`.${n}`:`[${JSON.stringify(n)}]`),expected:"undefined",value:a,description:`The property \`${n}\` is not defined in the object type.
145
+ Please fill the \`${r.expected}\` typed value next time.`),t.push(r)),!1),((e,t,r=!0)=>("object"==typeof e&&null!==e&&!1===Array.isArray(e)||o(!0,{path:t+"",expected:"Config",value:e}))&&((e,t,r=!0)=>[void 0===e.alignMouseEventWithW3C||"boolean"==typeof e.alignMouseEventWithW3C||o(r,{path:t+".alignMouseEventWithW3C",expected:"(boolean | undefined)",value:e.alignMouseEventWithW3C}),void 0===e.disableLongpressAfterScroll||"boolean"==typeof e.disableLongpressAfterScroll||o(r,{path:t+".disableLongpressAfterScroll",expected:"(boolean | undefined)",value:e.disableLongpressAfterScroll}),void 0===e.enableA11y||"boolean"==typeof e.enableA11y||o(r,{path:t+".enableA11y",expected:"(boolean | undefined)",value:e.enableA11y}),void 0===e.enableAccessibilityElement||"boolean"==typeof e.enableAccessibilityElement||o(r,{path:t+".enableAccessibilityElement",expected:"(boolean | undefined)",value:e.enableAccessibilityElement}),void 0===e.enableCSSInheritance||"boolean"==typeof e.enableCSSInheritance||o(r,{path:t+".enableCSSInheritance",expected:"(boolean | undefined)",value:e.enableCSSInheritance}),void 0===e.enableCSSInlineVariables||"boolean"==typeof e.enableCSSInlineVariables||o(r,{path:t+".enableCSSInlineVariables",expected:"(boolean | undefined)",value:e.enableCSSInlineVariables}),void 0===e.enableCSSRule||"boolean"==typeof e.enableCSSRule||o(r,{path:t+".enableCSSRule",expected:"(boolean | undefined)",value:e.enableCSSRule}),void 0===e.enableEndGestureAtLastFingerUp||"boolean"==typeof e.enableEndGestureAtLastFingerUp||o(r,{path:t+".enableEndGestureAtLastFingerUp",expected:"(boolean | undefined)",value:e.enableEndGestureAtLastFingerUp}),void 0===e.enableEventHandleRefactor||"boolean"==typeof e.enableEventHandleRefactor||o(r,{path:t+".enableEventHandleRefactor",expected:"(boolean | undefined)",value:e.enableEventHandleRefactor}),void 0===e.enableEventThrough||"boolean"==typeof e.enableEventThrough||o(r,{path:t+".enableEventThrough",expected:"(boolean | undefined)",value:e.enableEventThrough}),void 0===e.enableFetchAPIStandardStreaming||"boolean"==typeof e.enableFetchAPIStandardStreaming||o(r,{path:t+".enableFetchAPIStandardStreaming",expected:"(boolean | undefined)",value:e.enableFetchAPIStandardStreaming}),void 0===e.enableFixedNew||"boolean"==typeof e.enableFixedNew||o(r,{path:t+".enableFixedNew",expected:"(boolean | undefined)",value:e.enableFixedNew}),void 0===e.enableFlexBasisZeroPercent||"boolean"==typeof e.enableFlexBasisZeroPercent||o(r,{path:t+".enableFlexBasisZeroPercent",expected:"(boolean | undefined)",value:e.enableFlexBasisZeroPercent}),void 0===e.enableGridPlacementShorthands||"boolean"==typeof e.enableGridPlacementShorthands||o(r,{path:t+".enableGridPlacementShorthands",expected:"(boolean | undefined)",value:e.enableGridPlacementShorthands}),void 0===e.enableJsBindingApiThrowException||"boolean"==typeof e.enableJsBindingApiThrowException||o(r,{path:t+".enableJsBindingApiThrowException",expected:"(boolean | undefined)",value:e.enableJsBindingApiThrowException}),void 0===e.enableListNewArchitecture||"boolean"==typeof e.enableListNewArchitecture||o(r,{path:t+".enableListNewArchitecture",expected:"(boolean | undefined)",value:e.enableListNewArchitecture}),void 0===e.enableMultiTouch||"boolean"==typeof e.enableMultiTouch||o(r,{path:t+".enableMultiTouch",expected:"(boolean | undefined)",value:e.enableMultiTouch}),void 0===e.enableNativeList||"boolean"==typeof e.enableNativeList||o(r,{path:t+".enableNativeList",expected:"(boolean | undefined)",value:e.enableNativeList}),void 0===e.enableNewGesture||"boolean"==typeof e.enableNewGesture||o(r,{path:t+".enableNewGesture",expected:"(boolean | undefined)",value:e.enableNewGesture}),void 0===e.enableNewIntersectionObserver||"boolean"==typeof e.enableNewIntersectionObserver||o(r,{path:t+".enableNewIntersectionObserver",expected:"(boolean | undefined)",value:e.enableNewIntersectionObserver}),void 0===e.enableNewTransformOrigin||"boolean"==typeof e.enableNewTransformOrigin||o(r,{path:t+".enableNewTransformOrigin",expected:"(boolean | undefined)",value:e.enableNewTransformOrigin}),void 0===e.enableParseIntFlex||"boolean"==typeof e.enableParseIntFlex||o(r,{path:t+".enableParseIntFlex",expected:"(boolean | undefined)",value:e.enableParseIntFlex}),void 0===e.enableReloadLifecycle||"boolean"==typeof e.enableReloadLifecycle||o(r,{path:t+".enableReloadLifecycle",expected:"(boolean | undefined)",value:e.enableReloadLifecycle}),void 0===e.enableSimultaneousTap||"boolean"==typeof e.enableSimultaneousTap||o(r,{path:t+".enableSimultaneousTap",expected:"(boolean | undefined)",value:e.enableSimultaneousTap}),void 0===e.enableTextOverflow||"boolean"==typeof e.enableTextOverflow||o(r,{path:t+".enableTextOverflow",expected:"(boolean | undefined)",value:e.enableTextOverflow}),void 0===e.enableTransformedTouchPosition||"boolean"==typeof e.enableTransformedTouchPosition||o(r,{path:t+".enableTransformedTouchPosition",expected:"(boolean | undefined)",value:e.enableTransformedTouchPosition}),void 0===e.fontScaleEffectiveOnlyOnSp||"boolean"==typeof e.fontScaleEffectiveOnlyOnSp||o(r,{path:t+".fontScaleEffectiveOnlyOnSp",expected:"(boolean | undefined)",value:e.fontScaleEffectiveOnlyOnSp}),void 0===e.includeFontPadding||"boolean"==typeof e.includeFontPadding||o(r,{path:t+".includeFontPadding",expected:"(boolean | undefined)",value:e.includeFontPadding}),void 0===e.keyboardCallbackPassRelativeHeight||"boolean"==typeof e.keyboardCallbackPassRelativeHeight||o(r,{path:t+".keyboardCallbackPassRelativeHeight",expected:"(boolean | undefined)",value:e.keyboardCallbackPassRelativeHeight}),void 0===e.longPressDuration||"number"==typeof e.longPressDuration||o(r,{path:t+".longPressDuration",expected:"(number | undefined)",value:e.longPressDuration}),void 0===e.removeDescendantSelectorScope||"boolean"==typeof e.removeDescendantSelectorScope||o(r,{path:t+".removeDescendantSelectorScope",expected:"(boolean | undefined)",value:e.removeDescendantSelectorScope}),void 0===e.tapSlop||"string"==typeof e.tapSlop||o(r,{path:t+".tapSlop",expected:"(string | undefined)",value:e.tapSlop}),void 0===e.unifyVWVHBehavior||"boolean"==typeof e.unifyVWVHBehavior||o(r,{path:t+".unifyVWVHBehavior",expected:"(boolean | undefined)",value:e.unifyVWVHBehavior}),0===Object.keys(e).length||!1===r||Object.keys(e).map(n=>{let i;if(["alignMouseEventWithW3C","disableLongpressAfterScroll","enableA11y","enableAccessibilityElement","enableCSSInheritance","enableCSSInlineVariables","enableCSSRule","enableEndGestureAtLastFingerUp","enableEventHandleRefactor","enableEventThrough","enableFetchAPIStandardStreaming","enableFixedNew","enableFlexBasisZeroPercent","enableGridPlacementShorthands","enableJsBindingApiThrowException","enableListNewArchitecture","enableMultiTouch","enableNativeList","enableNewGesture","enableNewIntersectionObserver","enableNewTransformOrigin","enableParseIntFlex","enableReloadLifecycle","enableSimultaneousTap","enableTextOverflow","enableTransformedTouchPosition","fontScaleEffectiveOnlyOnSp","includeFontPadding","keyboardCallbackPassRelativeHeight","longPressDuration","removeDescendantSelectorScope","tapSlop","unifyVWVHBehavior"].some(e=>n===e))return!0;let a=e[n];if(void 0===a)return!0;return o(r,{path:t+(!1===rJ(i=n)&&/^[a-zA-Z_$][a-zA-Z_$0-9]*$/g.test(i)?`.${n}`:`[${JSON.stringify(n)}]`),expected:"undefined",value:a,description:`The property \`${n}\` is not defined in the object type.
146
146
 
147
- Please remove the property next time.`})}).every(e=>e)].every(e=>e))(e,t+"",!0)||o(!0,{path:t+"",expected:"Config",value:e}))(e,"$input",!0);let r=0===i.length;return r?{success:r,data:e}:{success:r,errors:i,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=[],r="",n=eU.Start,i=5;for(;i<e.length-1;){let o=e[++i];if(n===eU.Property?"."===o||"["===o?(t.push({key:r}),n=eU.Start):i===e.length-1?(r+=o,t.push({key:r}),i++,n=eU.Start):r+=o:n===eU.StringKey?'"'===o?(t.push({key:JSON.parse(r+o)}),i+=2,n=eU.Start):"\\"===o?(r+=e[i],r+=e[++i]):r+=o:n===eU.NumberKey&&("]"===o?(t.push({key:Number.parseInt(r)}),i++,n=eU.Start):r+=o),n===eU.Start&&i<e.length-1){let t=e[i];if(r="","["===t)'"'===e[i+1]?(n=eU.StringKey,i++,r='"'):n=eU.NumberKey;else if("."===t)n=eU.Property;else throw Error("Unreachable: pointer points invalid character")}}if(n!==eU.Start)throw Error(`Failed to parse path: ${JSON.stringify(e)}`);return t})(e.path)}))}}}});function rY(e){let t=rz(e);if(t.success)return t.data;throw Error(["[pluginLynxConfig] Invalid configuration.",""].concat(t.errors.flatMap(({expected:e,path:t,value:r})=>{var n;return"undefined"===e?[` Unsupported configuration: \`${rK().red(t)}\``,""]:[`Invalid config on \`${rK().red(t)}\`.`,` - Expect to be ${rK().green(e)}`,` - Got: ${rK().red((n=r,Object.prototype.toString.call(n).replace(/^\[object\s+([a-z]+)\]$/i,"$1").toLowerCase()))}`,""]})).join("\n"))}let rX={"lynx:react":"@lynx-js/react-rsbuild-plugin"};function rZ(e){return e?.type==="Identifier"}function rQ(e){return e?.type==="StringLiteral"}function r0(e){return e?.type==="NumericLiteral"}function r1(e){return e?.type==="BooleanLiteral"}function r2(e){return e?.type==="ObjectExpression"}function r3(e){return e?.type==="ArrayExpression"}function r4(e){return e?.type==="KeyValueProperty"}let r5=e=>{if(r2(e)){let t={};for(let r of e.properties){if(r?.type==="SpreadElement"||!r4(r))return null;let{key:e,value:n}=r;if(!rZ(e)&&!rQ(e))return null;let i=e.value;r2(n)||r3(n)?t[i]=r5(n):rQ(n)||r0(n)||r1(n)?t[i]=n.value:rZ(n)&&(t[i]=n)}return t}if(r3(e)){let t=[];for(let r of e.elements){if(!r||r.spread)return null;let e=r.expression;r2(e)||r3(e)?t.push(r5(e)):rQ(e)||r0(e)||r1(e)?t.push(e.value):rZ(e)&&t.push(e)}return t}},r9=f("../../../node_modules/.pnpm/@swc+core@1.15.11_@swc+helpers@0.5.23/node_modules/@swc/core/index.js");function r8(e,t,r){let{widgets:n,pages:i,collector:o,define:a,onDeprecatedAIMeta:s}=r,l=i[t],p=n[t],d=e;return(l||p)&&(a&&Object.keys(a).length>0&&(d=Object.keys(a).reduce((e,t)=>{let r=a[t];if("string"==typeof r)return e.replaceAll(t,r);throw Error(`Define value ${t} is not a string`)},e)),ep((0,r9.parseSync)(d,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(rZ(e.callee)&&["defineWidget","definePage"].includes(e.callee.value)){let r=e.arguments[0]?.expression;if(r2(r)){for(let e of r.properties)if(r4(e)&&rZ(e.key)&&"aiMeta"===e.key.value){let r=r5(e.value);if(!r)continue;l?(s?.({kind:"page",entryName:l,filename:t}),o.addPageMeta(l,r)):p&&(s?.({kind:"widget",entryName:p,filename:t}),o.addWidgetMeta(p,r))}}}rZ(e.callee)&&e.callee.value in P&&(p&&o.addWidgetMeta(p,P[e.callee.value]),l&&o.addPageMeta(l,P[e.callee.value]))}})),e}let r6=/[/\\]/;function r7(e,t){t.forEach(([t,{id:r}])=>{if(r&&r6.test(r))throw Error(`Invalid ${e} id "${r}" 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 ne({pages:e,widgets:t,entries:r,collector:n,normalizedAppConfig:i,define:o}){let a=new tq,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:o,onDeprecatedAIMeta({kind:e,entryName:t,filename:r}){let n=`${e}:${t}:${r}`;s.has(n)||(s.add(n),tA.warn(`define${"page"===e?"Page":"Widget"}({ aiMeta }) is deprecated for ${t}. Configure this ${e} metadata in src/app.config.ts instead. Source: ${r}`))}},p=i.pages.entries,d=i.widgets.entries;await Promise.all(Object.values({...t,...e}).filter(({filename:e})=>/\.(ts|tsx|jsx|js)$/i.test(e)).map(({filename:e,isVirtualFile:t})=>{if(t){let t=l.widgets[e]??l.pages[e],n=r[t];return n?r8(n.toString(),e,l):void tA.warn("Cannot find virtual file",{file:t})}return r8(t3.readFileSync(e,"utf-8"),e,l)})).catch(e=>{tA.error("Failed to collect view metadata",{error:e})});let c=a.getData(),u=P.defineLoginPage,m=re("",u.path),h=Object.entries(e).map(([e,t])=>{let r=c.pages[e],{web:n,...i}=p[e]??{},o=r?.path,a=t.isLoginPage||void 0!==o&&re(e,o)===m;return[e,{id:t7(e,t.folderName),...r,...i,...a?u:{},path:re(e,a?u.path:t.isSpecial?o: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(", ")}`);r7("page",h),h.forEach(([e,t])=>{n.addPageMeta(e,t)});let g=Object.entries(t).map(([e,t])=>{let{web:r,...n}=d[e]??{};return[e,{id:t7(e,t.folderName),...c.widgets[e],...n}]});r7("widget",g),function(e){let t=new Map;e.forEach(([e,{id:r}])=>{if(!r)return;let n=t.get(r)??[];n.push(e),t.set(r,n)});let r=[...t].filter(([,e])=>e.length>1);if(0===r.length)return;let n=r.map(([e,t])=>`Duplicate widget id "${e}" is used by:
147
+ Please remove the property next time.`})}).every(e=>e)].every(e=>e))(e,t+"",!0)||o(!0,{path:t+"",expected:"Config",value:e}))(e,"$input",!0);let r=0===i.length;return r?{success:r,data:e}:{success:r,errors:i,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=[],r="",n=eF.Start,i=5;for(;i<e.length-1;){let o=e[++i];if(n===eF.Property?"."===o||"["===o?(t.push({key:r}),n=eF.Start):i===e.length-1?(r+=o,t.push({key:r}),i++,n=eF.Start):r+=o:n===eF.StringKey?'"'===o?(t.push({key:JSON.parse(r+o)}),i+=2,n=eF.Start):"\\"===o?(r+=e[i],r+=e[++i]):r+=o:n===eF.NumberKey&&("]"===o?(t.push({key:Number.parseInt(r)}),i++,n=eF.Start):r+=o),n===eF.Start&&i<e.length-1){let t=e[i];if(r="","["===t)'"'===e[i+1]?(n=eF.StringKey,i++,r='"'):n=eF.NumberKey;else if("."===t)n=eF.Property;else throw Error("Unreachable: pointer points invalid character")}}if(n!==eF.Start)throw Error(`Failed to parse path: ${JSON.stringify(e)}`);return t})(e.path)}))}}}});function rZ(e){let t=rX(e);if(t.success)return t.data;throw Error(["[pluginLynxConfig] Invalid configuration.",""].concat(t.errors.flatMap(({expected:e,path:t,value:r})=>{var n;return"undefined"===e?[` Unsupported configuration: \`${rY().red(t)}\``,""]:[`Invalid config on \`${rY().red(t)}\`.`,` - Expect to be ${rY().green(e)}`,` - Got: ${rY().red((n=r,Object.prototype.toString.call(n).replace(/^\[object\s+([a-z]+)\]$/i,"$1").toLowerCase()))}`,""]})).join("\n"))}let rQ={"lynx:react":"@lynx-js/react-rsbuild-plugin"};function r0(e){return e?.type==="Identifier"}function r1(e){return e?.type==="StringLiteral"}function r2(e){return e?.type==="NumericLiteral"}function r3(e){return e?.type==="BooleanLiteral"}function r4(e){return e?.type==="ObjectExpression"}function r9(e){return e?.type==="ArrayExpression"}function r5(e){return e?.type==="KeyValueProperty"}let r8=e=>{if(r4(e)){let t={};for(let r of e.properties){if(r?.type==="SpreadElement"||!r5(r))return null;let{key:e,value:n}=r;if(!r0(e)&&!r1(e))return null;let i=e.value;r4(n)||r9(n)?t[i]=r8(n):r1(n)||r2(n)||r3(n)?t[i]=n.value:r0(n)&&(t[i]=n)}return t}if(r9(e)){let t=[];for(let r of e.elements){if(!r||r.spread)return null;let e=r.expression;r4(e)||r9(e)?t.push(r8(e)):r1(e)||r2(e)||r3(e)?t.push(e.value):r0(e)&&t.push(e)}return t}},r7=f("../../../node_modules/.pnpm/@swc+core@1.15.11_@swc+helpers@0.5.23/node_modules/@swc/core/index.js");function r6(e,t,r){let{widgets:n,pages:i,collector:o,define:a,onDeprecatedAIMeta:s}=r,l=i[t],d=n[t],p=e;return(l||d)&&(a&&Object.keys(a).length>0&&(p=Object.keys(a).reduce((e,t)=>{let r=a[t];if("string"==typeof r)return e.replaceAll(t,r);throw Error(`Define value ${t} is not a string`)},e)),ed((0,r7.parseSync)(p,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(r0(e.callee)&&["defineWidget","definePage"].includes(e.callee.value)){let r=e.arguments[0]?.expression;if(r4(r)){for(let e of r.properties)if(r5(e)&&r0(e.key)&&"aiMeta"===e.key.value){let r=r8(e.value);if(!r)continue;l?(s?.({kind:"page",entryName:l,filename:t}),o.addPageMeta(l,r)):d&&(s?.({kind:"widget",entryName:d,filename:t}),o.addWidgetMeta(d,r))}}}r0(e.callee)&&e.callee.value in z&&(d&&o.addWidgetMeta(d,z[e.callee.value]),l&&o.addPageMeta(l,z[e.callee.value]))}})),e}let ne=/[/\\]/;function nt(e,t){t.forEach(([t,{id:r}])=>{if(r&&ne.test(r))throw Error(`Invalid ${e} id "${r}" 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 nr({pages:e,widgets:t,entries:r,collector:n,normalizedAppConfig:i,define:o}){let a=new tK,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:o,onDeprecatedAIMeta({kind:e,entryName:t,filename:r}){let n=`${e}:${t}:${r}`;s.has(n)||(s.add(n),tC.warn(`define${"page"===e?"Page":"Widget"}({ aiMeta }) is deprecated for ${t}. Configure this ${e} metadata in src/app.config.ts instead. Source: ${r}`))}},d=i.pages.entries,p=i.widgets.entries;await Promise.all(Object.values({...t,...e}).filter(({filename:e})=>/\.(ts|tsx|jsx|js)$/i.test(e)).map(({filename:e,isVirtualFile:t})=>{if(t){let t=l.widgets[e]??l.pages[e],n=r[t];return n?r6(n.toString(),e,l):void tC.warn("Cannot find virtual file",{file:t})}return r6(t9.readFileSync(e,"utf-8"),e,l)})).catch(e=>{tC.error("Failed to collect view metadata",{error:e})});let c=a.getData(),u=z.defineLoginPage,h=rr("",u.path),m=Object.entries(e).map(([e,t])=>{let r=c.pages[e],{web:n,...i}=d[e]??{},o=r?.path,a=t.isLoginPage||void 0!==o&&rr(e,o)===h;return[e,{id:rt(e,t.folderName),...r,...i,...a?u:{},path:rr(e,a?u.path:t.isSpecial?o:void 0)}]}),f=[...new Set([...m.filter(([,e])=>e.path===h).map(([e])=>e),...m.filter(([,e])=>e.id===u.id).map(([e])=>e)])];if(f.length>1)throw Error(`Only one login page is allowed: ${f.join(", ")}`);nt("page",m),m.forEach(([e,t])=>{n.addPageMeta(e,t)});let g=Object.entries(t).map(([e,t])=>{let{web:r,...n}=p[e]??{};return[e,{id:rt(e,t.folderName),...c.widgets[e],...n}]});nt("widget",g),function(e){let t=new Map;e.forEach(([e,{id:r}])=>{if(!r)return;let n=t.get(r)??[];n.push(e),t.set(r,n)});let r=[...t].filter(([,e])=>e.length>1);if(0===r.length)return;let n=r.map(([e,t])=>`Duplicate widget id "${e}" is used by:
148
148
  ${t.map(e=>`- ${e}`).join("\n")}`).join("\n\n");throw Error(`${n}
149
149
 
150
- Widget IDs must be globally unique. Configure distinct "id" values in src/app.config.ts.`)}(g),g.forEach(([e,t])=>{n.addWidgetMeta(e,t)})}function nt(e){let[t,r]=e.split(".").map(e=>Number(e));return Number.isNaN(t)||Number.isNaN(r)?1/0:10===t?0:172===t&&r>=16&&r<=31?1:192===t&&168===r?2:3}function nr(e=function(){let e=Object.entries(rT.networkInterfaces()),t=[],r=[],n=[],i=[];for(let[o,a]of e){if(!a)continue;let e=/^(?:docker|vboxnet|vmnet)\d*$/i.test(o)||/^br-/i.test(o)||/(?:vEthernet|Hyper-V|Docker|VirtualBox|VMware)/i.test(o);for(let o of a){let{address:a,family:s,internal:l}=o;!l&&("IPv4"===s?(e||a.startsWith("169.254.")?n:t).push(a):"IPv6"!==s||/^fe[89ab]/i.test(a)||(e?i:r).push(a))}}return[t,n,r,i].find(e=>e.length>0)??[]}()){return e.slice().sort((e,t)=>nt(e)-nt(t))[0]}function nn(e){let t=nr()??"127.0.0.1",r=t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t;return`http://${r}:${e}`}let ni=f("os"),no=`base/${e5}`;async function na({encryption:e}){let t=t3.mkdtempSync(ez.join(ni.tmpdir(),"doubao-keystore-")),r=ez.join(t,e5);try{let{generateKeystore:t}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),n=await t(r,{encryption:e});if(0!==n.status)throw Error(n.error_msg);return t3.readFileSync(r)}finally{t3.rmSync(t,{recursive:!0,force:!0})}}let ns=f("../../../node_modules/.pnpm/@byted-lynx+tasm@4.4.40_debug@4.4.3/node_modules/@byted-lynx/tasm/index.js");class nl{options;isGenerateKeystore=!1;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(nl.name,t=>{t.hooks.processAssets.tapPromise({name:nl.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH},async()=>{let r=Date.now();try{let{RawSource:r}=e.webpack.sources,n=this.options.getAppAssetPath(),i=rE(t,e8);for(let e of[n,i].filter(e=>!!e)){let i=t.getAsset(e);if(!i)throw Error(`Worker entry asset was not emitted: ${e}`);let{buffer:o,encodeOptions:a,keystoreContent:s}=await this.encode([i]);if(t.updateAsset(e,new r(o,!1)),s){let e=new r(s,!1);t.getAsset(no)?t.updateAsset(no,e):t.emitAsset(no,e)}tu()&&e===n&&t.emitAsset(`${ez.dirname(e)}/tasm.json`,new r(JSON.stringify(a,null,2)))}}finally{this.options.onProcessDuration?.(Date.now()-r)}})})}async encode(e){let t={},{resolveSigningEncryptionOptions:r}=this.options;for(let r of e)r.name.endsWith(".js")&&(t[r.name.replace(/\.template\.js$/,"")]={content:r.source.source().toString()});let n={compilerOptions:{enableFiberArch:!0,targetSdkVersion:this.options.engineVersion??"3.5"},sourceContent:{appType:"DynamicComponent"},customSections:t},i=await r?.();if(i?.signing.enabled||i?.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,r=rr(i,{signing:{extra_config:{app_id:t,bundle_id:t}},encryption:{salt:t}}),{buffer:o,lepus_debug:a,status:s,error_msg:l}=await e(JSON.stringify(n),r);if(0!==s)throw Error(l);return!this.isGenerateKeystore&&r.encryption.enabled?(this.isGenerateKeystore=!0,{buffer:o,encodeOptions:n,debugInfo:a,keystoreContent:await na({encryption:{...r.encryption}})}):{buffer:o,encodeOptions:n,debugInfo:a}}let o=(0,ns.getEncodeMode)(),{buffer:a}=await o(n);return{buffer:a,encodeOptions:n}}}function np(e,t,n,i,o){let a=!1;return{name:np.name,apply(s){let l=new s.webpack.experiments.VirtualModulesPlugin;l.apply(s),s.hooks.thisCompilation.tap(np.name,()=>{Object.keys(n).forEach(e=>{l.writeModule(n[e].filename,n[e].toString())})}),s.hooks.thisCompilation.tap(np.name,n=>{let l,p=()=>{void 0!==l&&o?.(Math.max(0,Date.now()-l))},d=e.getLynxTemplatePluginHooks(n);d.beforeEncode.tapPromise(np.name,async e=>(l??=Date.now(),e.encodeData.sourceContent.config=ea({},e.encodeData.sourceContent.config,{mapContainerType:1,trailNewImage:!0}),e)),d.encode.tapPromise({name:np.name,stage:255},async e=>{let{encodeOptions:o}=e,l=await i?.();if(l?.signing.enabled||l?.encryption.enabled){let{encode:r}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),i=t.getData(),d=function(e,t){let r=(t??"").replaceAll("\\","/"),n=r.match(/(?:^|\/)(pages|widgets)\/(.+)$/);if(n){let[,t,r]=n,i=`${t}/${r}`;return"widgets"===t?e.widgets[i]?.id:e.pages[i]?.path}let i=ti.posix.basename(r);return e.widgets[`widgets/${i}`]?.id??e.pages[`pages/${i}`]?.path}(i,e.intermediate),c=i.app.appId,u=rr(l,{signing:{extra_config:{app_id:c,bundle_id:d}},encryption:{salt:c}}),{buffer:m,lepus_debug:h,status:g,error_msg:y}=await r(JSON.stringify(o),u);if(0!==g)throw Error(y);if(!a&&u.encryption.enabled){a=!0;let e=await na({encryption:{...u.encryption}}),t=new s.webpack.sources.RawSource(e,!1);n.getAsset(no)?n.updateAsset(no,t):n.emitAsset(no,t)}return p(),{buffer:m,debugInfo:h}}let{buffer:d,lepus_debug:c}=await (r??=new h({filename:new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.2.0-rc.0_@lynx-js+types@4.1.0_@pnpm+logger@1001.0.1_@swc+helpe_55e13e87b7f6b60de8818ae276a12932/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"),f.b).href,maxThreads:(0,rT.availableParallelism)()})).run({encodeOptions:o});return p(),{buffer:Buffer.from(d),debugInfo:c}})}),s.hooks.failed.tap(np.name,e=>{tC.error("Failed to bundle template",{error:e})})}}}class nd{static _instance;listeners=[];stdinListener;nextIndex=0;static get instance(){return nd._instance??=new nd}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,r=0){let n=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 n(e.run)}return this.listeners.push({run:e,tag:t,priority:r,index:this.nextIndex++}),this.listeners.sort((e,t)=>e.priority-t.priority||e.index-t.index),this.start(),n(e)}}function nc(e){if(!(e instanceof Error&&"ExitPromptError"===e.name))throw e}function nu(e){nd.instance.stop(),e().catch(nc).finally(()=>nd.instance.start())}let nm=eE.child("simulator"),nh=f("node:http"),nf={"Cross-Origin-Opener-Policy":"same-origin","Cross-Origin-Embedder-Policy":"credentialless"},ng=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),ny=new Set([...ng,"cookie","host","origin","referer"]),nb=/authorization|cookie|token|secret|password|credential|private[-_]?key|(?:^|[-_])api[-_]?key(?:$|[-_])|(?:^|[-_])dek(?:$|[-_])/i,n_="X-DBX-Sandbox-Session-ID",nv="x-tt-logid";function nw(e){try{return new URL(e.url??"/","http://localhost")}catch{return}}function nE(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 nS(e,t,r={}){let n={};for(let[t,r]of Object.entries(e))void 0===r||ny.has(t.toLowerCase())||(n[t]=r);return{...n,...r,host:t.host}}function nx(e,t=[]){let r={};for(let[t,n]of Object.entries(e))void 0===n||ng.has(t.toLowerCase())||(r[t]=n);if(t.length>0){let e=new Set(String(r["access-control-expose-headers"]??"").split(",").map(e=>e.trim().toLowerCase()).filter(Boolean));for(let r of t)e.add(r.toLowerCase());r["access-control-expose-headers"]=[...e].join(", ")}return r}function nA(e,t=[]){let r=nx(Object.fromEntries(e),t);return delete r["content-encoding"],delete r["content-length"],r}function nT(e,t={}){Object.entries({...nf,...t}).forEach(([t,r])=>{void 0!==r&&e.setHeader(t,r)})}function nC(e,t,r,n){nT(e,n),e.writeHead(t,{"Content-Type":"text/plain; charset=utf-8"}),e.end(r)}function nI(e,t,r,n){let i=JSON.stringify(r);nT(e,n),e.writeHead(t,{"Content-Length":Buffer.byteLength(i),"Content-Type":"application/json; charset=utf-8"}),e.end(i)}function nO(e,t,r){return new Promise((n,i)=>{let o=[],a=0,s=!1;e.on("data",n=>{if(s)return;let l=Uint8Array.from(Buffer.isBuffer(n)?n:Buffer.from(n));if((a+=l.byteLength)>r){s=!0,e.pause(),t.shouldKeepAlive=!1,t.setHeader("Connection","close");let r=()=>{e.destroyed||e.destroy()};t.once("finish",r),t.once("close",r),i(Error("Request body is too large"));return}o.push(l)}),e.once("end",()=>{if(s)return;s=!0;let e=new Uint8Array(a),t=0;for(let r of o)e.set(r,t),t+=r.byteLength;n(e)}),e.once("aborted",()=>{s||(s=!0,i(Error("Request aborted")))}),e.once("error",e=>{s||(s=!0,i(e))})})}function nP(e,t,r){return nO(e,t,r).then(e=>Buffer.from(e).toString("utf8"))}function nk(e){return e.arrayBuffer().then(e=>Buffer.from(e))}function nD(e){return Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>{let r=nb.test(e)?"[REDACTED]":Array.isArray(t)?t.join(", "):t;return` ${e}: ${r}`}).join("\n")}function n$(e){return("string"==typeof e||void 0===e?e:e.toString("utf8"))||"(no content)"}function nR({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a}){"applet0930"===process.env.DEBUG&&nm.info(`${e} ${a.pathname}${a.search} ${(o>=500?ed.red:o>=400?ed.yellow:ed.green)(String(o))}
150
+ Widget IDs must be globally unique. Configure distinct "id" values in src/app.config.ts.`)}(g),g.forEach(([e,t])=>{n.addWidgetMeta(e,t)})}let nn=f("os"),ni=`base/${e8}`;async function no({encryption:e}){let t=t9.mkdtempSync(eX.join(nn.tmpdir(),"doubao-keystore-")),r=eX.join(t,e8);try{let{generateKeystore:t}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),n=await t(r,{encryption:e});if(0!==n.status)throw Error(n.error_msg);return t9.readFileSync(r)}finally{t9.rmSync(t,{recursive:!0,force:!0})}}let na=f("../../../node_modules/.pnpm/@byted-lynx+tasm@4.4.40_debug@4.4.3/node_modules/@byted-lynx/tasm/index.js");class ns{options;isGenerateKeystore=!1;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_OPTIMIZE_HASH},async()=>{let r=Date.now();try{let{RawSource:r}=e.webpack.sources,n=this.options.getAppAssetPath(),i=rx(t,e6);for(let e of[n,i].filter(e=>!!e)){let i=t.getAsset(e);if(!i)throw Error(`Worker entry asset was not emitted: ${e}`);let{buffer:o,encodeOptions:a,keystoreContent:s}=await this.encode([i]);if(t.updateAsset(e,new r(o,!1)),s){let e=new r(s,!1);t.getAsset(ni)?t.updateAsset(ni,e):t.emitAsset(ni,e)}tm()&&e===n&&t.emitAsset(`${eX.dirname(e)}/tasm.json`,new r(JSON.stringify(a,null,2)))}}finally{this.options.onProcessDuration?.(Date.now()-r)}})})}async encode(e){let t={},{resolveSigningEncryptionOptions:r}=this.options;for(let r of e)r.name.endsWith(".js")&&(t[r.name.replace(/\.template\.js$/,"")]={content:r.source.source().toString()});let n={compilerOptions:{enableFiberArch:!0,targetSdkVersion:this.options.engineVersion??"3.5"},sourceContent:{appType:"DynamicComponent"},customSections:t},i=await r?.();if(i?.signing.enabled||i?.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,r=ri(i,{signing:{extra_config:{app_id:t,bundle_id:t}},encryption:{salt:t}}),{buffer:o,lepus_debug:a,status:s,error_msg:l}=await e(JSON.stringify(n),r);if(0!==s)throw Error(l);return!this.isGenerateKeystore&&r.encryption.enabled?(this.isGenerateKeystore=!0,{buffer:o,encodeOptions:n,debugInfo:a,keystoreContent:await no({encryption:{...r.encryption}})}):{buffer:o,encodeOptions:n,debugInfo:a}}let o=(0,na.getEncodeMode)(),{buffer:a}=await o(n);return{buffer:a,encodeOptions:n}}}function nl(e,t,n,i,o){let a=!1;return{name:nl.name,apply(s){let l=new s.webpack.experiments.VirtualModulesPlugin;l.apply(s),s.hooks.thisCompilation.tap(nl.name,()=>{Object.keys(n).forEach(e=>{l.writeModule(n[e].filename,n[e].toString())})}),s.hooks.thisCompilation.tap(nl.name,n=>{let l,d=()=>{void 0!==l&&o?.(Math.max(0,Date.now()-l))},p=e.getLynxTemplatePluginHooks(n);p.beforeEncode.tapPromise(nl.name,async e=>(l??=Date.now(),e.encodeData.sourceContent.config=j({},e.encodeData.sourceContent.config,{mapContainerType:1,trailNewImage:!0}),e)),p.encode.tapPromise({name:nl.name,stage:255},async e=>{let{encodeOptions:o}=e,l=await i?.();if(l?.signing.enabled||l?.encryption.enabled){let{encode:r}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),i=t.getData(),p=function(e,t){let r=(t??"").replaceAll("\\","/"),n=r.match(/(?:^|\/)(pages|widgets)\/(.+)$/);if(n){let[,t,r]=n,i=`${t}/${r}`;return"widgets"===t?e.widgets[i]?.id:e.pages[i]?.path}let i=ta.posix.basename(r);return e.widgets[`widgets/${i}`]?.id??e.pages[`pages/${i}`]?.path}(i,e.intermediate),c=i.app.appId,u=ri(l,{signing:{extra_config:{app_id:c,bundle_id:p}},encryption:{salt:c}}),{buffer:h,lepus_debug:m,status:g,error_msg:y}=await r(JSON.stringify(o),u);if(0!==g)throw Error(y);if(!a&&u.encryption.enabled){a=!0;let e=await no({encryption:{...u.encryption}}),t=new s.webpack.sources.RawSource(e,!1);n.getAsset(ni)?n.updateAsset(ni,t):n.emitAsset(ni,t)}return d(),{buffer:h,debugInfo:m}}let{buffer:p,lepus_debug:c}=await (r??=new m({filename:new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+kit@0.3.0-rc.2_@lynx-js+types@4.1.0_@pnpm+logger@1001.0.1_@swc+helpe_780c2d139f80e5914320c80d62bffc22/node_modules/@byted-doubao-apps/kit/dist/builder/plugins/bundle-template-rspeedy-plugin/encode-worker.js"),f.b).href,maxThreads:(0,rI.availableParallelism)()})).run({encodeOptions:o});return d(),{buffer:Buffer.from(p),debugInfo:c}})}),s.hooks.failed.tap(nl.name,e=>{tO.error("Failed to bundle template",{error:e})})}}}class nd{static _instance;listeners=[];stdinListener;nextIndex=0;static get instance(){return nd._instance??=new nd}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,r=0){let n=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 n(e.run)}return this.listeners.push({run:e,tag:t,priority:r,index:this.nextIndex++}),this.listeners.sort((e,t)=>e.priority-t.priority||e.index-t.index),this.start(),n(e)}}function np(e){if(!(e instanceof Error&&"ExitPromptError"===e.name))throw e}function nc(e){nd.instance.stop(),e().catch(np).finally(()=>nd.instance.start())}let nu=ex.child("simulator"),nh=f("node:http"),nm={"Cross-Origin-Opener-Policy":"same-origin","Cross-Origin-Embedder-Policy":"credentialless"},nf=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"]),ng=new Set([...nf,"cookie","host","origin","referer"]),ny=/authorization|cookie|token|secret|password|credential|private[-_]?key|(?:^|[-_])api[-_]?key(?:$|[-_])|(?:^|[-_])dek(?:$|[-_])/i,nb="X-DBX-Sandbox-Session-ID",n_="x-tt-logid";function nv(e){try{return new URL(e.url??"/","http://localhost")}catch{return}}function nw(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 nS(e,t,r={}){let n={};for(let[t,r]of Object.entries(e))void 0===r||ng.has(t.toLowerCase())||(n[t]=r);return{...n,...r,host:t.host}}function nE(e,t=[]){let r={};for(let[t,n]of Object.entries(e))void 0===n||nf.has(t.toLowerCase())||(r[t]=n);if(t.length>0){let e=new Set(String(r["access-control-expose-headers"]??"").split(",").map(e=>e.trim().toLowerCase()).filter(Boolean));for(let r of t)e.add(r.toLowerCase());r["access-control-expose-headers"]=[...e].join(", ")}return r}function nx(e,t=[]){let r=nE(Object.fromEntries(e),t);return delete r["content-encoding"],delete r["content-length"],r}function nA(e,t={}){Object.entries({...nm,...t}).forEach(([t,r])=>{void 0!==r&&e.setHeader(t,r)})}function nT(e,t,r,n){nA(e,n),e.writeHead(t,{"Content-Type":"text/plain; charset=utf-8"}),e.end(r)}function nC(e,t,r,n){let i=JSON.stringify(r);nA(e,n),e.writeHead(t,{"Content-Length":Buffer.byteLength(i),"Content-Type":"application/json; charset=utf-8"}),e.end(i)}function nI(e,t,r){return new Promise((n,i)=>{let o=[],a=0,s=!1;e.on("data",n=>{if(s)return;let l=Uint8Array.from(Buffer.isBuffer(n)?n:Buffer.from(n));if((a+=l.byteLength)>r){s=!0,e.pause(),t.shouldKeepAlive=!1,t.setHeader("Connection","close");let r=()=>{e.destroyed||e.destroy()};t.once("finish",r),t.once("close",r),i(Error("Request body is too large"));return}o.push(l)}),e.once("end",()=>{if(s)return;s=!0;let e=new Uint8Array(a),t=0;for(let r of o)e.set(r,t),t+=r.byteLength;n(e)}),e.once("aborted",()=>{s||(s=!0,i(Error("Request aborted")))}),e.once("error",e=>{s||(s=!0,i(e))})})}function nO(e,t,r){return nI(e,t,r).then(e=>Buffer.from(e).toString("utf8"))}function nP(e){return e.arrayBuffer().then(e=>Buffer.from(e))}function nk(e){return Object.entries(e).filter(([,e])=>void 0!==e).map(([e,t])=>{let r=ny.test(e)?"[REDACTED]":Array.isArray(t)?t.join(", "):t;return` ${e}: ${r}`}).join("\n")}function nD(e){return("string"==typeof e||void 0===e?e:e.toString("utf8"))||"(no content)"}function n$({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a}){"applet0930"===process.env.DEBUG&&nu.info(`${e} ${a.pathname}${a.search} ${(o>=500?ep.red:o>=400?ep.yellow:ep.green)(String(o))}
151
151
  Request headers:
152
- ${nD(r)}
153
- Request body: ${n$(t)}
152
+ ${nk(r)}
153
+ Request body: ${nD(t)}
154
154
 
155
155
  Response headers:
156
- ${nD(Object.fromEntries(i))}
157
- Response body: ${n$(n)}`)}function nN(e,t,r){let n,i=("https:"===r.targetUrl.protocol?_:nh).request(r.targetUrl,{headers:r.requestHeaders,method:e.method},e=>{(n=e,t.destroyed||t.writableEnded)?e.destroy():(nT(t,r.commonHeaders),t.writeHead(e.statusCode??500,r.createResponseHeaders?.(e.headers)??nx(e.headers)),e.pipe(t))}),o=()=>{i.destroy(),n?.destroy()};i.once("error",e=>{if(!t.destroyed&&!t.writableEnded){if(t.headersSent)return void t.destroy(e);nC(t,502,`${r.errorMessage}: ${e.message}`,r.commonHeaders)}}),e.once("aborted",()=>{o()}),t.once("close",()=>{t.writableEnded||o()}),e.pipe(i)}async function nL(e,t,r){let n=t.find(({match:t})=>"string"==typeof t?e.url.pathname===t:t(e.url));await (n?.handle??r)(e)}let nM=f("../../../node_modules/.pnpm/undici@6.22.0/node_modules/undici/index.js"),nj={"sso-internal":"doubao-developer.bytedance.net","sms-internal":"doubao-developer-open.bytedance.net","sms-external":"hello.doubao-dev.com"},nU={"http:":"80","https:":"443"},nB=new Map;function nF(){return process.env.X_TT_ENV?{"x-use-ppe":"1","x-tt-env":process.env.X_TT_ENV}:{}}function nW(e){let t=e.startsWith("/")?e:`/${e}`;return"/app_developer"===t||t.startsWith("/app_developer/")}async function nH(e,t={}){let r=function(e){var t,r;let n="string"==typeof e?new URL(e):e;if(function(e){let t=nq(["NO_PROXY","no_proxy"]);if(!t)return!1;let r=nJ(e.hostname),n=e.port||nU[e.protocol]||"";for(let e of t.split(",")){let t=function(e){let t=e.trim().toLowerCase();if(!t)return{host:""};if((t=t.replace(/^[a-z][a-z\d+.-]*:\/\//,"").split("/")[0]).startsWith("[")){let e=t.indexOf("]");if(-1!==e)return{host:nJ(t.slice(0,e+1)),port:":"===t[e+1]?t.slice(e+2):void 0}}let r=t.indexOf(":")===t.lastIndexOf(":")?t.match(/:(\d+)$/):void 0;return{host:nJ(r?t.slice(0,-r[0].length):t),port:r?.[1]}}(e);if(t.host&&(!t.port||t.port===n)){if("*"===t.host)return!0;if(t.host.startsWith("*.")){let e=t.host.slice(1);if(r.endsWith(e))return!0;continue}if(t.host.startsWith(".")){if(r.endsWith(t.host))return!0;continue}if(r===t.host)return!0}}return!1}(n))return;let i="https:"===(t=n.protocol)?nq(["HTTPS_PROXY","https_proxy","HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):"http:"===t?nq(["HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):void 0;if(!i)return;let o=(r=i,/^[a-z][a-z\d+.-]*:\/\//i.test(r)?r:`http://${r}`),a=nB.get(o);return a||(a=new nM.kT(o),nB.set(o,a)),a}(e),n=r?{...t,dispatcher:r}:t;return await fetch(e,n)}async function nG({internal:e,domainId:t,path:r,query:n,method:i="GET",body:o,headers:a,signal:s,auth:l=!0}){let p={method:i,body:o,headers:{...nF(),...a}};s&&(p.signal=s);let d=function({internal:e,domainId:t,path:r,query:n}){let i=r.startsWith("/")?r:`/${r}`,o=new URLSearchParams;for(let[e,t]of Object.entries(n||{}))null!=t&&o.append(e,t.toString());let a=o.toString(),s=a?`${i.includes("?")?"&":"?"}${a}`:"",l=nW(i)?el:t?nj[t]:e?nj["sso-internal"]:nj["sms-external"];return`https://${l}${i}${s}`}({internal:e,domainId:t,path:r,query:n}),c=new Headers(p.headers),u=c.has("Cookie");if(!l||!nW(r)||c.has("Authorization")||c.has("X-Developer-Open-Build-Token"))return await nH(d,p);let m=new URL(d).origin,h=L(nH,{baseUrl:m,allowedOrigins:[m]});try{return await h(d,p)}catch(e){if(!(e instanceof G||e instanceof O))throw e;if(u)return await nH(d,p);throw Error(e instanceof O?"Doubao Apps Platform 登录已过期,请运行 `dbx auth login` 后重试。":"Doubao Apps Platform 请求需要登录,请运行 `dbx auth login` 后重试。")}}async function nV(e){let t=await nG(e),r=t.headers.get("x-tt-logid")||"";if(!t.ok){let e=await t.text();throw Error(JSON.stringify({code:t.status,message:"HTTP 请求失败",data:e,log_id:r}))}let n=await t.json();if(0!==n.code)throw Error(JSON.stringify({...n,log_id:r}));return{...n,log_id:r}}function nq(e){for(let t of e){let e=process.env[t]?.trim();if(e)return e}}function nJ(e){return e.trim().toLowerCase().replace(/^\[/,"").replace(/\]$/,"")}let nK="/__mcp_proxy",nz=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 nY extends Error{code;constructor(e,t){super(t),this.name="DebuggerControlError",this.code=e}}function nX(e){return"render_page"===e||"render_widget"===e}function nZ(e){return"number"==typeof e&&Number.isFinite(e)}function nQ(e){return"number"==typeof e&&Number.isInteger(e)&&e>=1&&e<=9999}function n0(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 n1{clients=new Map;lastSnapshotAtByClientId=new Map;snapshotStore;snapshotsByClientId=new Map;nextCommandId=0;constructor(e){this.snapshotStore=e}registerClient(e,t){let r=this.getSnapshotStore(e),n=this.clients.get(e);n&&this.disconnectClient(n,"Debugger control connection was replaced");let i={clientId:e,lastSnapshotAtMs:this.lastSnapshotAtByClientId.get(e)??0,parallelJobs:new Map,queue:[],response:t};this.clients.set(e,i),this.snapshotsByClientId.set(e,r),t.once("close",()=>{this.clients.get(e)===i&&this.disconnectClient(i,"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 r=Date.now();this.lastSnapshotAtByClientId.set(e,r);let n=e?this.clients.get(e):void 0;n&&(n.lastSnapshotAtMs=r)}execute(e,t,r){let n=void 0!==r?this.clients.get(r):"execute_sandbox_tool_call"===e?this.getToolCallClient():this.getActiveClient();if(!n||n.response.writableEnded)return Promise.reject(new nY("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 i=`control-${Date.now()}-${++this.nextCommandId}`;return new Promise((r,o)=>{let a={command:{...t,commandId:i,type:e},reject:o,resolve:r};"execute_sandbox_tool_call"===e?this.startParallelJob(n,a):(n.queue.push(a),this.flushClient(n))})}handleResult(e){var t,r;let n,i=e.clientId?.trim(),o=e.commandId?.trim(),a=i?this.clients.get(i):void 0,s=o?a?.parallelJobs.get(o):void 0,l=s??a?.activeJob;if(!a||!l||l.command.commandId!==o)return!1;if((l.timeout&&clearTimeout(l.timeout),s?a.parallelJobs.delete(o):a.activeJob=void 0,!0===e.ok&&nX(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(i),n={target:e.target}):!0===e.ok&&!nX(l.command.type)&&(n=function(e,t){if("set_viewport"===e)return nQ(t.width)&&nQ(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(nZ)?t:void 0;if("scroll_to"===e)return[t.x,t.y,t.maxX,t.maxY,t.viewportWidth,t.viewportHeight].every(e=>nZ(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&&nZ(t.width)&&nZ(t.height)&&(void 0===t.uid||t.uid?.trim())?t:void 0}}}(l.command.type,e.result),"take_snapshot"===l.command.type&&n&&"runtimeSnapshot"in n&&this.storeRuntimeSnapshot(a.clientId,n.runtimeSnapshot)),n)l.resolve(n);else{let t=e.error??{},n=t.code?.trim(),i=n&&nz.has(n)?n:void 0;l.reject(new nY(i??(nX(r=l.command.type)?"RENDER_FAILED":"set_viewport"===r?"VIEWPORT_FAILED":"scroll_to"===r?"SCROLL_FAILED":"submit_chat_query"===r?"CHAT_SUBMIT_FAILED":"take_snapshot"===r?"SNAPSHOT_FAILED":"execute_sandbox_tool_call"===r?"TOOL_CALL_FAILED":"take_screenshot"===r?"SCREENSHOT_FAILED":"INSPECTION_FAILED"),t.message?.trim()||"Debugger control command failed"))}return this.flushClient(a),!0}getActiveClient(){return[...this.clients.values()].filter(e=>!e.response.writableEnded&&e.lastSnapshotAtMs>0).sort((e,t)=>t.lastSnapshotAtMs-e.lastSnapshotAtMs)[0]}storeRuntimeSnapshot(e,t){let r=this.getSnapshotStore(e).snapshot,n=r?.snapshot;if(!r||!n||n.client_id!==e)return;let i=r.debug_snapshot,{root:o,...a}=t,s=Date.now();this.snapshotStore.snapshot={...r,stored_at:new Date(s).toISOString(),stored_at_ms:s,snapshot:{...n,runtime_snapshot:t},...i?{debug_snapshot:{...i,runtime_snapshot:a}}:{}},this.snapshotStore.updatedAtMs=s,this.noteSnapshot(e)}getConnectedClient(){return[...this.clients.values()].reverse().find(e=>!e.response.writableEnded)}getToolCallClient(){return[...this.clients.values()].reverse().find(e=>!e.response.writableEnded&&e.activeJob?.command.type==="submit_chat_query")??this.getActiveClient()??this.getConnectedClient()}startParallelJob(e,t){let r=t.command.commandId;e.parallelJobs.set(r,t),t.timeout=setTimeout(()=>{e.parallelJobs.delete(r)&&t.reject(new nY("TOOL_CALL_FAILED","Debugger control command timed out"))},n0(t.command));try{e.response.write(`data: ${JSON.stringify(t.command)}
158
-
159
- `)}catch{t.timeout&&clearTimeout(t.timeout),e.parallelJobs.delete(r),t.reject(new nY("DEBUGGER_DISCONNECTED","Debugger control connection was closed")),this.disconnectClient(e,"Debugger control connection was closed")}}flushClient(e){if(e.activeJob||e.response.writableEnded)return;let t=e.queue.shift();if(t){e.activeJob=t,t.timeout=setTimeout(()=>{if(e.activeJob===t){if("submit_chat_query"===t.command.type){t.timeout=void 0,t.reject(new nY("CHAT_TIMEOUT","Debugger control command timed out"));try{e.response.write(`data: ${JSON.stringify({commandId:t.command.commandId,type:"cancel_chat_query"})}
160
-
161
- `)}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 nY(nX(t.command.type)?"RENDER_TIMEOUT":"COMMAND_TIMEOUT","Debugger control command timed out")),this.flushClient(e)}},n0(t.command));try{e.response.write(`data: ${JSON.stringify(t.command)}
162
-
163
- `)}catch{t.timeout&&clearTimeout(t.timeout),e.activeJob=void 0,t.reject(new nY("DEBUGGER_DISCONNECTED","Debugger control connection was closed")),this.disconnectClient(e,"Debugger control connection was closed")}}}disconnectClient(e,t,r=!0){if(this.clients.get(e.clientId)!==e)return;this.clients.delete(e.clientId),this.snapshotsByClientId.delete(e.clientId);let n=new nY("DEBUGGER_DISCONNECTED",t);for(let t of(e.activeJob?.timeout&&clearTimeout(e.activeJob.timeout),e.activeJob?.reject(n),e.activeJob=void 0,e.parallelJobs.values()))t.timeout&&clearTimeout(t.timeout),t.reject(n);for(let t of(e.parallelJobs.clear(),e.queue.splice(0)))t.reject(n);r&&!e.response.writableEnded&&e.response.end()}}async function n2({request:e,response:t},r){let n;if("POST"!==e.method)return void nI(t,405,{error:"Method not allowed"});try{n=JSON.parse(await nP(e,t,0xa00000))}catch(e){nI(t,400,{error:e.message});return}r.handleResult(n)?nI(t,200,{ok:!0}):nI(t,404,{error:"Pending debugger command not found"})}let n3=["page","widget","app"],n4=["log","info","warn","error","debug","eval"],n5=new Set(["id","class","role","title","href","src","type","name","value","placeholder","disabled","checked","selected"]);function n9(e,t){let r=t.pageIdx??0,n=t.pageSize??50,i=r*n,o=e.slice(i,i+n);return{pageIdx:r,pageSize:n,total:e.length,hasMore:i+o.length<e.length,items:o}}function n8(e){if(!e.snapshot)return{stored:!1,updatedAtMs:e.updatedAtMs};let{debug_snapshot:t,...r}=e.snapshot;return{stored:!0,storedAt:r.stored_at,updatedAtMs:r.stored_at_ms??e.updatedAtMs,snapshot:r.snapshot}}function n6(e){return e.value??e.unserializableValue??e.description??e.type??""}function n7(e,t){var r,n;let i;return(r=e,"all"===(n=t)?n3:"page"===n||"widget"===n||"app"===n?[n]:(i=r.context,i?.page_id||i?.page_path?["page","app"]:i?.widget_id?["widget"]:n3)).flatMap(t=>{let r,n=(r=e.runtime_console?.[t],{entries:r?.entries??[],updatedAtMs:r?.updated_at_ms??r?.updatedAtMs});return n.entries.map((e,r)=>{var i;let o,a,s,l;return i=n.updatedAtMs,o=e.url??e.location?.url,a=e.lineNumber??e.location?.lineNumber,s=e.columnNumber??e.location?.columnNumber,l=e.id??String(r),{msgid:`${t}:${l}`,target:t,level:e.level??"log",source:e.source??"",timestamp:e.timestamp??0,text:e.message??(e.args??[]).map(n6).filter(Boolean).join(" "),...o?{url:o}:{},...void 0===a?{}:{lineNumber:a},...void 0===s?{}:{columnNumber:s},...void 0===i?{}:{updatedAtMs:i},entry:e}})})}function ie(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 it(e,t){if("page"===t){let{pageId:t,path:r}=e;if(!t||!r)return;return{pageId:t,path:r,name:e.name??t,isHome:!0===e.isHome}}let{widgetId:r}=e;if(r)return{widgetId:r,name:e.name??r}}let ir={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},ii={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},io={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1};function ia(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 is(e,t={}){try{return await e()}catch(e){return function(e,t={}){let r=e instanceof nY?e:new nY("INSPECTION_FAILED",String(e));return ia({...t,error:{code:r.code,message:r.message}},{isError:!0})}(e,t)}}function il(e,t,r,n){let i=$(r.inputSchema);e.registerTool(t,{...r,inputSchema:i},n)}let ip="/__wsd_mcp";async function id({request:e,response:t,url:r},n,i){if("OPTIONS"===e.method){nT(t),t.writeHead(204),t.end();return}if("POST"!==e.method)return void nC(t,405,"Method not allowed");let o=r.searchParams.get("clientId")??void 0,a=void 0===o?n:i.getSnapshotStore(o),s=R(()=>{let e,t;return e=new Y({name:"doubao-web-sdk-debugger-log",version:"0.0.1"}),t=async e=>{var t;let r=n8(a);if(!r.stored)return ia(r);let n=n9((t=r.snapshot,[{source:"simulator",events:t.simulator?.trace_events??[]},{source:"widget_runtime",events:t.widget_runtime_trace_events??[]},{source:"page_runtime",events:t.page_runtime_trace_events??[]}].flatMap(({source:e,events:t})=>t.map((t,r)=>{let n;return n=t.payload??{},{source:e,id:t.id??`${e}:${r}`,timestamp:t.timestamp??0,category:n.category??t.display?.category??"",event:n.event??t.event??"",requestId:n.request_id??n.requestId??n.trace_id??n.trace?.trace_id??"",payload:t.payload??t}}))).filter(t=>{let r,n,i;return r=e.category??[],n=e.event?.trim(),i=e.requestId?.trim(),(0===r.length||r.includes(t.category))&&(!n||t.event===n)&&(!i||t.requestId===i)}),e);return ia({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:n.total,pageIdx:n.pageIdx,pageSize:n.pageSize,hasMore:n.hasMore,events:n.items})},il(e,"list_console_messages",{annotations:ir,description:"List runtime console messages captured by the Doubao Web SDK debugger.",inputSchema:{levels:eo(T(n4)).optional(),pageIdx:C().int().min(0).optional(),pageSize:C().int().min(1).max(200).optional(),query:Z().optional(),target:T(["current","page","widget","app","all"]).optional()}},async e=>{let t=n8(a);if(!t.stored)return ia(t);let r=n9(n7(t.snapshot,e.target).filter(t=>{let r,n;return r=e.levels??[],n=e.query?.trim().toLowerCase(),(!(r.length>0)||!!r.includes(t.level))&&(!n||[t.text,t.url,t.source,t.target].filter(e=>"string"==typeof e).some(e=>e.toLowerCase().includes(n)))}),e);return ia({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,messages:r.items.map(({entry:e,...t})=>t)})}),il(e,"get_console_message",{annotations:ir,description:"Get one full runtime console message, including args and stack trace.",inputSchema:{msgid:Z()}},async e=>{let t=n8(a);if(!t.stored)return ia(t);let r=n7(t.snapshot,"all").find(t=>t.msgid===e.msgid);return ia({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,found:!!r,...r?{message:r}:{msgid:e.msgid}})}),il(e,"get_log_snapshot",{annotations:ir,description:"Return the latest compact debugger log snapshot.",inputSchema:{}},async()=>{let e=n8(a);return e.stored?ia({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,snapshot:e.snapshot}):ia(e)}),il(e,"list_render_targets",{annotations:ir,description:"List Page and Widget targets that can be rendered by the Web SDK debugger.",inputSchema:{type:T(["all","page","widget"]).optional()}},async e=>{var t,r;let n,i=n8(a);return i.stored?ia({stored:!0,storedAt:i.storedAt,updatedAtMs:i.updatedAtMs,...(t=i.snapshot,r=e.type??"all",n=t.render_targets??{},{pages:"widget"===r?[]:(n.pages??[]).map(e=>it(e,"page")).filter(Boolean),widgets:"page"===r?[]:(n.widgets??[]).map(e=>it(e,"widget")).filter(Boolean),...n.currentTarget?{currentTarget:n.currentTarget}:{}})}):ia(i)}),il(e,"take_snapshot",{annotations:ir,description:"Capture and return a fresh text snapshot of the currently rendered Page or Widget card.",inputSchema:{target:T(["current","page","widget"]).optional(),verbose:M().optional()}},e=>is(async()=>{let t=function(e,t){var r,n;let i,o,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=(r=s.root,n=!0===t.verbose,i=[],o=0,(a=(e,t)=>{var r,s;let{name:l,uid:p}=e;if(!p||!l)return;o+=1;let d=" ".repeat(t);if("text"===e.type)return void i.push(`${d}uid=${p} text ${JSON.stringify(e.text??"")}`);let u=[`uid=${p}`,l],{keyboardFocusable:m=!1,name:h,role:f}=e.accessibility??{};for(let t of(f&&(n||"generic"!==f)&&u.push(`role=${JSON.stringify(f)}`),h&&u.push(`name=${JSON.stringify(h)}`),(n||m)&&u.push(`focusable=${String(m)}`),(e.attributes??[]).map(e=>({name:e.name,value:e.value})).filter(e=>e.name&&(n||n5.has(e.name)||e.name.startsWith("aria-")))))u.push((r=t.name,(s=t.value)?`${r}=${JSON.stringify(s)}`:r));for(let r of(p===c&&u.push("[selected]"),i.push(`${d}${u.join(" ")}`),e.children??[]))a(r,t+1)})(r,0),{actualNodeCount:o,text:i.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 i.execute("take_snapshot",{target:e.target??"current"},o)).runtimeSnapshot},e),r=n8(a),n={stored:r.stored,...r.stored?{storedAt:r.storedAt,updatedAtMs:r.updatedAtMs}:{},...t};return ia(n,{text:t.available?t.snapshot:JSON.stringify(n,null,2)})},{available:!1,stored:!1})),il(e,"get_computed_style",{annotations:ir,description:"Get computed CSS styles for an element uid in the current Page or Widget target.",inputSchema:{properties:eo(Z().min(1)).max(100).optional(),uid:Z().min(1)}},({properties:e,uid:t})=>is(async()=>ia(await i.execute("get_computed_style",{uid:t,...e?{properties:e}:{}},o)))),il(e,"get_element_rect",{annotations:ir,description:"Get x, y, width, and height for an element uid in the emulated viewport.",inputSchema:{uid:Z().min(1)}},({uid:e})=>is(async()=>ia(await i.execute("get_element_rect",{uid:e},o)))),il(e,"take_screenshot",{annotations:ir,description:"Take a screenshot of the current Page or Widget target, or of one element uid.",inputSchema:{format:T(["png","jpeg","webp"]).optional(),quality:C().min(0).max(100).optional(),uid:Z().min(1).optional()}},({format:e="png",quality:t,uid:r})=>is(async()=>{let n=await i.execute("take_screenshot",{format:e,...void 0!==t?{quality:t}:{},...r?{uid:r}:{}},o),{data:a,...s}=n;return ia({captured:!0,...s},{image:{data:a,mimeType:n.mimeType}})},{captured:!1})),il(e,"scroll_to",{annotations:io,description:"Scroll a Page or Widget container to absolute coordinates, or return its current scroll position.",inputSchema:{uid:Z().min(1).optional(),x:C().min(0).optional(),y:C().min(0).optional()}},({uid:e,x:t,y:r})=>is(async()=>ia({scrolled:!0,...await i.execute("scroll_to",{uid:e,x:t,y:r},o)}),{scrolled:!1})),il(e,"set_viewport",{annotations:io,description:"Set the current Page or Widget emulated viewport size.",inputSchema:{height:C().int().min(1).max(9999),width:C().int().min(1).max(9999)}},({height:e,width:t})=>is(async()=>ia({updated:!0,viewport:await i.execute("set_viewport",{height:e,width:t},o)}),{updated:!1})),il(e,"render_page",{annotations:ii,description:"Render a Page route in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{url:Z().min(1)}},({url:e})=>is(async()=>ia({rendered:!0,target:(await i.execute("render_page",{url:e},o)).target}),{rendered:!1})),il(e,"render_widget",{annotations:ii,description:"Render a Widget card in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{structuredContent:F(Z(),I()).optional(),widgetId:Z().min(1)}},({structuredContent:e,widgetId:t})=>is(async()=>ia({rendered:!0,target:(await i.execute("render_widget",{structuredContent:e??{},widgetId:t},o)).target}),{rendered:!1})),il(e,"submit_chat_query",{annotations:ii,description:"Submit a chat query through the connected Web SDK debugger and wait for the simulator response to complete.",inputSchema:{query:Z().trim().min(1)}},({query:e})=>is(async()=>ia({submitted:!0,...await i.execute("submit_chat_query",{query:e},o)}),{submitted:!1})),il(e,"list_agent_trace_events",{annotations:ir,description:"List Agent-side simulator and runtime trace events captured by the debugger.",inputSchema:{category:eo(Z()).optional(),event:Z().optional(),pageIdx:C().int().min(0).optional(),pageSize:C().int().min(1).max(200).optional(),requestId:Z().optional()}},t),il(e,"list_agent_tool_calls",{annotations:ir,description:"List Agent-side simulator tool calls captured by the debugger.",inputSchema:{pageIdx:C().int().min(0).optional(),pageSize:C().int().min(1).max(200).optional(),query:Z().optional(),requestId:Z().optional(),status:eo(Z()).optional(),toolName:Z().optional()}},async e=>{var t;let r=n8(a);if(!r.stored)return ia(r);let n=n9((t=r.snapshot,(t.simulator?.tool_calls??[]).map(ie)).filter(t=>{let r,n,i,o;return r=e.requestId?.trim(),n=e.toolName?.trim(),i=e.status??[],o=e.query?.trim().toLowerCase(),(!r||t.requestId===r)&&(!n||t.toolName===n)&&(!(i.length>0)||!!i.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 ia({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:n.total,pageIdx:n.pageIdx,pageSize:n.pageSize,hasMore:n.hasMore,toolCalls:n.items})}),e},{legacy:"stateless",responseMode:"json"}),l=ei(s);try{await l(e,t)}catch(e){t.headersSent?t.destroy(e instanceof Error?e:void 0):nC(t,500,e instanceof Error?e.message:String(e))}finally{await s.close().catch(()=>void 0)}}let ic="/__web_sdk_debug_scenes",iu="/__web_sdk_widget_view_data_templates",im={"Cache-Control":"no-cache"};async function ih(e,t){try{let r=await t?.()??{templatesByEntry:{},templatesByWidget:{}};nI(e,200,r,im)}catch(t){nm.error("加载 Widget viewData 模板失败",{error:t}),nI(e,500,{templatesByEntry:{},templatesByWidget:{}},im)}}let ig=f("node:crypto"),iy="/__dbx_real_device_debug",ib=`${iy}/state`,i_=`${iy}/start`,iv=`${iy}/cancel`,iw=`${iy}/qr`;class iE{accessToken;provider;getDebugContext(){if(this.provider&&this.accessToken)return{stateEndpoint:ib,startEndpoint:i_,cancelEndpoint:iv,qrEndpoint:iw,accessToken:this.accessToken,pollIntervalMs:500}}setProvider(e){this.provider=e,this.accessToken=e?ig.randomBytes(32).toString("hex"):void 0}dispose(){this.setProvider(void 0)}getRequestRoutes(){return[{match:e=>e.pathname.startsWith(iy),handle:({request:e,response:t,url:r})=>this.serveRequest(e,t,r)}]}async serveRequest(e,t,r){if(!this.validateRequest(e,t))return;let n=this.provider;if(!n)return this.writeError(t,503,"REAL_DEVICE_DEBUG_UNAVAILABLE","Physical device debugging is unavailable");let i=await this.readJsonBody(e,t);if(i)try{if(r.pathname===ib||r.pathname===i_){if(Object.keys(i).length>0)return this.writeError(t,400,"INVALID_REQUEST","Unexpected request fields");let e=r.pathname===ib?await n.getState():await n.start();nI(t,200,e);return}if(r.pathname===iv){let e=i.operationId;if("string"!=typeof e||!e||1!==Object.keys(i).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid operationId");nI(t,200,await n.cancel(e));return}if(r.pathname===iw){let{operationId:e,kind:r}=i;if("string"!=typeof e||!e||"modern"!==r&&"legacy"!==r||2!==Object.keys(i).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid QR request");let o=await n.getQrImage(e,r);if(!o)return this.writeError(t,404,"QR_NOT_FOUND","QR image is unavailable");nT(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 r,n;let i,o,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||(r=s,n=this.accessToken,o=(i=new TextEncoder).encode(r),a=i.encode(n),!(o.length===a.length&&ig.timingSafeEqual(o,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 r,n;try{r=await nP(e,t,4096)}catch{return this.writeError(t,413,"PAYLOAD_TOO_LARGE","Request body is too large")}if(!r.trim())return{};try{n=JSON.parse(r)}catch{return this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body")}return!n||"object"!=typeof n||Array.isArray(n)?this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body"):n}writeError(e,t,r,n){e.writableEnded||e.destroyed||nI(e,t,{error:{code:r,message:n}})}}let iS={"Cache-Control":"no-cache"};async function ix({request:e,response:t,url:r},n,i){var o;let a,s;if("OPTIONS"===e.method){nT(t,iS),t.writeHead(204),t.end();return}if("GET"===e.method){let e;return void nI(t,200,function(e,t){if(!e?.debug_snapshot)return e;let{debug_snapshot:r,...n}=e;return t?{...n,snapshot:r}:n}(n.snapshot,null!=(e=r.searchParams.get("DEBUG"))&&"0"!==e&&"false"!==e.toLowerCase())??{stored:!1},iS)}if("POST"!==e.method)return void nI(t,405,{error:"Method not allowed"},iS);try{a=JSON.parse(await nP(e,t,0xa00000))}catch(e){nI(t,400,{error:e.message},iS);return}let l="string"==typeof(s=(o=a).snapshot.client_id??o.debug_snapshot?.client_id)&&s.trim()?s.trim():void 0;a=function(e,t){let r=e?.snapshot,n=t.snapshot,i=r?.runtime_snapshot,o=n.runtime_snapshot;if(!r||!i||r.client_id!==n.client_id)return t;if(!o){var a;let e;if(a=i.target,e=function(e){let t=e.render_targets?.currentTarget;if(t)return t;let r=e.context;if(r){if(Object.hasOwn(r,"widget_id"))return{type:"widget"};if(Object.hasOwn(r,"page_id")||Object.hasOwn(r,"page_path"))return{type:"page"}}}(n),a&&e&&(1===Object.keys(e).length?e.type!==a.type:JSON.stringify(e)!==JSON.stringify(a)))return t;let{root:r,...o}=i;return{...t,snapshot:{...n,runtime_snapshot:i},...t.debug_snapshot?{debug_snapshot:{...t.debug_snapshot,runtime_snapshot:o}}:{}}}return Object.hasOwn(o,"root")||!Object.hasOwn(i,"root")||i.updatedAtMs!==o.updatedAtMs||JSON.stringify(i.target)!==JSON.stringify(o.target)?t:{...t,snapshot:{...n,runtime_snapshot:{...o,root:i.root}}}}(l?i.getSnapshotStore(l).snapshot:n.snapshot,a),n.snapshot=a,n.updatedAtMs=Date.now(),i.noteSnapshot(l),nI(t,200,{ok:!0,updated_at_ms:n.updatedAtMs},iS)}let iA="/app_developer/api/sandbox/",iT=`${iA}session/business_info/update`,iC=new Set([`${iA}resources/notices/pull`,`${iA}resources/tasks/pull`]),iI={"Access-Control-Expose-Headers":nv},iO=new Set;function iP(e,t,r,n,i,o){if("applet0930"!==process.env.DEBUG)return!1;let a=`${i[n_]??""} ${e} ${t.pathname}`,s=iC.has(t.pathname);if(s&&r>=500){if(iO.has(a))return!1;iO.add(a)}else s&&r<500&&iO.delete(a);let l=Number(process.hrtime.bigint()-n)/1e6;return nm.request({method:e,url:`${t.pathname}${t.search}`,statusCode:r,durationMs:l,headers:i,logId:o}),!0}function ik({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a}){nR({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a})}function iD(e,t,r){return r&&!(iC.has(e.pathname)&&t>=500)}function i$(e,t){if(e.pathname!==iT||!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 iR({method:e,request:t,requestBody:r,requestHeaders:n,response:i,targetUrl:o,usePlatformFetch:a}){let s=new AbortController,l=process.hrtime.bigint(),p=()=>s.abort();t.once("aborted",p),i.once("close",()=>{i.writableEnded||p()});try{let t,p=a?await nG({internal:!0,path:`${o.pathname}${o.search}`,method:e,body:r,headers:n,signal:s.signal}):await fetch(o,{body:"GET"===e||"HEAD"===e?void 0:r,headers:n,method:e,signal:s.signal}),d=iP(e,o,p.status,l,n,p.headers.get(nv)??void 0);if(i.destroyed||i.writableEnded)return void p.body?.cancel().catch(()=>void 0);let c=await nk(p);return iD(o,p.status,d)&&ik({method:e,requestBody:i$(o,r),requestHeaders:n,responseBody:c,responseHeaders:p.headers,statusCode:p.status,targetUrl:o}),i.destroyed||i.writableEnded||(t=nA(p.headers,[nv]),nT(i,iI),i.writeHead(p.status,t),i.end(c)),{body:c,ok:p.ok}}catch(p){if(i.destroyed||i.writableEnded||s.signal.aborted)return;let t=`Failed to proxy sandbox request: ${p instanceof Error?p.message:String(p)}`,a=iP(e,o,502,l,n);iD(o,502,a)&&ik({method:e,requestBody:i$(o,r),requestHeaders:n,responseBody:t,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:o}),nC(i,502,t,iI)}}async function iN(e,t,r={}){let n;if("POST"!==e.method)return void nC(t,405,"Method not allowed",iI);try{n=JSON.parse(await nP(e,t,0xa00000))}catch(e){nC(t,400,`Invalid sandbox proxy payload: ${e.message}`,iI);return}let i=function(e,t){if(!e.url)return;let r=new URL(e.url,t);if(!r.pathname.startsWith(iA))return;let n=new URL(`${r.pathname}${r.search}`,t);var i=e.params;if(i)for(let[e,t]of Object.entries(i))null!=t&&n.searchParams.set(e,String(t));return n}(n,r.targetOrigin??et);if(!i)return void nC(t,404,"Sandbox endpoint not found",iI);if(!r.sandboxSessionId)return void nI(t,200,{code:-1,message:"无法模拟平台服务:当前未获取到开发者登录态或 Sandbox session 创建失败。"},iI);let o=function(e,t,r,n){if(t.pathname.startsWith(`${iA}session/`)&&t.pathname!==`${iA}session/create`)return JSON.stringify({..."object"==typeof e.data&&null!==e.data?e.data:{},sandbox_session_id:n});if(void 0===e.data)return;if("object"!=typeof e.data||null===e.data||!r)return JSON.stringify(e.data);let i={...e.data};return t.pathname.startsWith(`${iA}jsb/`)&&"app_key"in i&&(i.app_key=r),t.pathname===`${iA}passport/open/auth`&&"client_key"in i&&(i.client_key=r),JSON.stringify(i)}(n,i,r.sandboxAppId,r.sandboxSessionId),a=n.method||"POST",s=function(e,t,r,n,i){let o=Object.fromEntries(Object.entries(nS({...e.headers,...r,...void 0===n?{}:{"content-length":String(Buffer.byteLength(n))},"content-type":"application/json"},t,{...nF(),...i?{[n_]:i}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]));for(let e of Object.keys(o))"accept-encoding"===e.toLowerCase()&&delete o[e];return o["accept-encoding"]="identity",o}(e,i,n.headers,o,r.sandboxSessionId),l=await iR({method:a,request:e,requestBody:o,requestHeaders:s,response:t,targetUrl:i,usePlatformFetch:!r.targetOrigin});if(i.pathname===iT&&l?.ok)try{let e=JSON.parse(l.body.toString("utf8"));(void 0===e.code||0===e.code)&&r.onBusinessInfoUpdated?.(function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t="string"==typeof e.csr_pem?e.csr_pem.trim():"",r="string"==typeof e.phone_num?e.phone_num.trim():"";return r?{...t?{csrPem:t}:{},phoneNum:r}:void 0}(n.data))}catch{}}let iL=f("node:util"),iM="/app_developer/api/sandbox/bridge/events",ij="/app_developer/api/sandbox/bridge/response",iU=new Set(["connection","content-length","host"]),iB=new Set(["heartbeat"]),iF=[500,1e3,2e3,5e3],iW=0;function iH(e){return e.length<=8?e:`${e.slice(0,4)}...${e.slice(-4)}`}function iG(e,t=new Headers,r=""){return{response:e,responseHeaders:Object.fromEntries(t),statusText:r}}async function iV(e){let t,r,n=e.request_id||"";if(!n)return iG({error_message:"bridge request_id is required",http_status:0,request_id:n,success:!1});if(!e.path?.startsWith("/"))return iG({error_message:`invalid bridge request path: ${e.path??""}`,http_status:0,request_id:n,success:!1});let i=function(e){if(e.origin)try{var t;return new URL(e.path??"/",(t=e.origin).endsWith("/")?t:`${t}/`)}catch{return}}(e);if(!i)return iG({error_message:`invalid bridge request origin: ${e.origin??""}`,http_status:0,request_id:n,success:!1});let o=(e.method||"GET").toUpperCase(),a=function(e){let t={};for(let[r,n]of Object.entries(e??{}))!r||iU.has(r.toLowerCase())||(t[r]=n);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,r="number"==typeof e.deadline_ms?e.deadline_ms-Date.now():t,Math.max(1,Math.min(t,r))));try{var d;let e=await fetch(i,{body:s,headers:a,method:o,redirect:"manual",signal:l.signal}),t=await e.text();return d={method:o,requestBody:s,requestHeaders:a,responseBody:t,responseHeaders:e.headers,statusCode:e.status,targetUrl:i},nR(d),iG({body:t,http_status:e.status,request_id:n,success:!0},e.headers,e.statusText)}catch(e){return nR({method:o,requestBody:s,requestHeaders:a,responseBody:e instanceof Error?e.message:String(e),responseHeaders:new Headers,statusCode:0,targetUrl:i}),iG({error_message:e instanceof Error?e.message:String(e),http_status:0,request_id:n,success:!1})}finally{clearTimeout(p)}}function iq(e,t=new Set){if(Array.isArray(e)){for(let r of e)iq(r,t);return[...t]}if(!e||"object"!=typeof e)return[...t];for(let[r,n]of Object.entries(e)){if(r.toLowerCase().replace(/[_-]/g,"").includes("logid")){if("string"==typeof n&&n)t.add(n);else if(Array.isArray(n))for(let e of n)"string"==typeof e&&e&&t.add(e);continue}iq(n,t)}return[...t]}function iJ(e,t){e.onLog?.(t)}function iK(e){try{return JSON.parse(e)}catch{return}}function iz({detail:e,requestHeaders:t,status:r,targetUrl:n}){if("applet0930"===process.env.DEBUG){if("number"==typeof r)return void nm.request({method:"CONNECT",url:n.pathname,statusCode:r,headers:t,context:{detail:e}});nm.info("Bridge connection pending",{url:n.pathname,detail:e,ppe:ev(t)})}}function iY(e,t={}){"applet0930"===process.env.DEBUG&&nm.info(e,t)}async function iX(e,t){let r=JSON.stringify({sandbox_session_id:e.sandboxSessionId,...t}),n={"content-type":"application/json",[n_]:e.sandboxSessionId,...nF()};if(e.targetOrigin){let t=new URL(ij,e.targetOrigin),i=await fetch(t,{body:r,headers:n,method:"POST"}),o=await i.text();if(nR({method:"POST",requestBody:r,requestHeaders:n,responseBody:o,responseHeaders:i.headers,statusCode:i.status,targetUrl:t}),!i.ok)throw Error(`upload bridge response failed: ${i.status} ${o}`);return{responseBody:o,responseHeaders:Object.fromEntries(i.headers),responsePayload:iK(o)}}let i=new URL(ij,et),o=await nG({body:r,headers:n,internal:!0,method:"POST",path:ij}),a=await o.text();if(nR({method:"POST",requestBody:r,requestHeaders:n,responseBody:a,responseHeaders:o.headers,statusCode:o.status,targetUrl:i}),!o.ok)throw Error(`upload bridge response failed: ${o.status} ${a}`);return{responseBody:a,responseHeaders:Object.fromEntries(o.headers),responsePayload:iK(a)}}async function iZ(e,t){let r;try{r=JSON.parse(t)}catch(e){nm.warn("Sandbox Bridge request parse failed",{reason:e.message});return}let n=Date.now(),i=`bridge-${n}-${++iW}`,o=r.request_id||"",a={id:i,request:r,requestId:o,sandboxSessionId:e.sandboxSessionId,timestamp:n};iJ(e,{...a,logIds:iq(r),status:"pending",updatedAtMs:n});let s=await iV(r),l={...s.response,headers:s.responseHeaders,status_text:s.statusText};try{let t=await iX(e,s.response);iJ(e,{...a,logIds:iq([r,l,t]),response:l,status:s.response.success?"success":"error",updatedAtMs:Date.now()})}catch(t){throw iJ(e,{...a,errorMessage:t instanceof Error?t.message:String(t),logIds:iq([r,l]),response:l,status:"error",updatedAtMs:Date.now()}),t}}async function iQ(e,t,r){let n={sandbox_session_id:e.sandboxSessionId},i=new URL(`${iM}?sandbox_session_id=${encodeURIComponent(e.sandboxSessionId)}`,et),o=(d=e.sandboxSessionId,{accept:"text/event-stream",host:i.host,[n_]:d,...nF()});iz({detail:`host=${o.host} session=${iH(e.sandboxSessionId)}`,requestHeaders:o,status:"pending",targetUrl:i}),iY("bridge/events request",{headers:{accept:o.accept,host:o.host,[n_]:iH(e.sandboxSessionId),"x-tt-env":o["x-tt-env"],"x-use-ppe":o["x-use-ppe"]},path:iM,query:n});let a=await nG({headers:o,internal:!0,method:"GET",path:iM,query:n,signal:t});if(iz({detail:`content-type=${a.headers.get("content-type")??""}`,requestHeaders:o,status:a.status,targetUrl:i}),!a.ok||!a.body){let e=await a.text().catch(()=>"");nR({method:"GET",requestBody:void 0,requestHeaders:o,responseBody:e,responseHeaders:a.headers,statusCode:a.status,targetUrl:i}),nm.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}nR({method:"GET",requestBody:void 0,requestHeaders:o,responseBody:"",responseHeaders:a.headers,statusCode:a.status,targetUrl:i}),r?.();let s=a.body.getReader(),l=new iL.TextDecoder,p="";for(;!t.aborted;){let{done:t,value:r}=await s.read();if(t){iY("bridge/events stream ended",{session:iH(e.sandboxSessionId)});break}let n=(p+=l.decode(r,{stream:!0})).search(/\r?\n\r?\n/);for(;n>=0;){let t=p.slice(0,n),r=p.slice(n).match(/^\r?\n\r?\n/);p=p.slice(n+(r?.[0].length??2));let s=function(e){let t="message",r=[];for(let n of e.split(/\r?\n/)){if(n.startsWith("event:")){t=n.slice(6).trim();continue}n.startsWith("data:")&&r.push(n.slice(5).trimStart())}return{data:r.join("\n"),name:t}}(t);if(!function(e,t){if("applet0930"!==process.env.DEBUG||iB.has(e.name))return;let r=function(e){try{let t=JSON.parse(e);return"string"==typeof t.request_id?t.request_id:void 0}catch{return}}(e.data);nm.info("Bridge event received",{event:e.name,requestId:r,ppe:ev(t)}),nm.info(`Event detail
164
- ${e.data}`)}(s,o),"bridge_request"===s.name){var d,c=a.headers,u=a.status;nR({method:`EVENT ${s.name}`,requestBody:s.data,requestHeaders:o,responseBody:"",responseHeaders:c,statusCode:u,targetUrl:i}),iZ(e,s.data).catch(e=>{nm.warn("Sandbox Bridge request failed",{reason:e.message})})}else if("TOOL_CALL"===s.name){let t=V(iK(s.data));t?Promise.resolve(e.onSimulatorToolCall?.(t)).catch(e=>{nm.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})}):nm.warn("Sandbox tool call event parse failed")}else if("sandbox_resource_changed"===s.name){let t=function(e){let t=iK(e);if(!t||"object"!=typeof t||Array.isArray(t))return;let r=t.data&&"object"==typeof t.data&&!Array.isArray(t.data)?t.data:void 0,n=r?.resource,i=r?.action,o=r?.resource_id,a=r?.revision;if(("notice"===n||"task"===n)&&("upsert"===i||"remove"===i)&&"string"==typeof o&&o&&("number"==typeof a||"string"==typeof a))return{action:i,eventId:"string"==typeof t.event_id?t.event_id:"",occurredAtMs:"number"==typeof t.occurred_at_ms?t.occurred_at_ms:void 0,resource:n,resourceId:o,revision:a}}(s.data);t?e.onResourceChanged?.(t):nm.warn("Sandbox resource event parse failed")}else if("card_delta"===s.name){let t=function(e){let t=iK(e);if(!t||"object"!=typeof t||Array.isArray(t))return;let r=t.data&&"object"==typeof t.data&&!Array.isArray(t.data)?t.data:void 0,n=r?.card_delta;if(!("card_delta"!==t.type||!n||"object"!=typeof n||Array.isArray(n)))return n}(s.data);t?e.onSimulatorEvent?.({payload:t,type:"card_delta"}):nm.warn("Sandbox simulator event parse failed",{event:s.name})}else if("get_simulator_card_snapshots"===s.name){let t=iK(s.data);t&&"object"==typeof t&&!Array.isArray(t)?e.onSimulatorEvent?.({payload:t,type:s.name}):nm.warn("Sandbox simulator event parse failed",{event:s.name})}n=p.search(/\r?\n\r?\n/)}}}async function i0(e,t){let r=0,n=!1;for(;!t.aborted;){try{await iQ(e,t,()=>{n=!1,e.onConnectionStatusChange?.("connected")}),r=0}catch(r){if(t.aborted)return;let e=r.status;if(n||(nm.warn("无法接收来自平台服务的请求",{reason:r.message}),n=!0),401===e||403===e||404===e)return}e.onConnectionStatusChange?.("reconnecting"),await (0,E.setTimeout)(iF[Math.min(r,iF.length-1)],void 0,{signal:t}).catch(()=>void 0),r+=1}}let i1=f("node:net"),i2="/__web_sdk_sandbox_bridge_logs",i3="/__web_sdk_sandbox_events",i4="DOUBAO_APPS_SANDBOX_BRIDGE_ORIGINS",i5="/app_developer/api/sandbox/session/business_info/update";function i9(e){if(!e)return!1;try{return tn.statSync(e).isFile()}catch{return!1}}async function i8({body:e,headers:t,method:r,sandboxPath:n,targetOrigin:i,targetUrl:o}){let a=new AbortController,s=setTimeout(()=>a.abort(),3e4);try{return i?await fetch(o,{body:e,headers:t,method:r,signal:a.signal}):await nG({internal:!0,path:n,body:e,headers:t,method:r,signal:a.signal})}catch(e){if(a.signal.aborted)throw Error(`Sandbox session 请求超时(30000ms):${o}`);throw e}finally{clearTimeout(s)}}function i6(e,t){return(e?.[t]??process.env[t])?.trim()??""}function i7(e,t,r,n,i,o){if("applet0930"!==process.env.DEBUG)return;let a=Number(process.hrtime.bigint()-n)/1e6;nm.request({method:e,url:`${t.pathname}${t.search}`,statusCode:r,durationMs:a,headers:i,logId:o})}function oe({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a}){nR({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a})}async function ot(e,t,r,n,i,o){let a,s,l="/app_developer/api/sandbox/session/create",p="POST",d=function(){let e=new Set;for(let t of(process.env[i4]??"").split(",")){let r=t.trim();if(r)try{let t=new URL(r),n=t.hostname.replace(/^\[|\]$/g,"").toLowerCase(),i="localhost"===n||"::1"===n||4===(0,i1.isIP)(n)&&n.startsWith("127.");if("http:"!==t.protocol&&"https:"!==t.protocol||!i)throw Error("only loopback HTTP(S) origins are allowed");e.add(t.origin)}catch(e){throw Error(`${i4} contains an invalid origin: ${r} (${e instanceof Error?e.message:String(e)})`)}}return[...e]}(),c=JSON.stringify({sandbox_project_id:e,manifest:r?.()??(i9(t)?tn.readFileSync(t,"utf8"):""),business_templates:i9(n)?tn.readFileSync(n,"utf8"):"",...o?{app_id:o}:{},...d.length>0?{bridge_origins:d}:{}}),u={"content-type":"application/json",...nF()},m=new URL(l,i??et),h=process.hrtime.bigint();try{a=await i8({body:c,headers:u,method:p,sandboxPath:l,targetOrigin:i,targetUrl:m})}catch(t){let e=`创建 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw i7(p,m,502,h,u),oe({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(nv)||"",g=await a.text();i7(p,m,a.status,h,u,f),oe({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 or(e,t,r,n,i,o){try{return await ot(e,t,r,n,i,o)}catch(e){return nm.warn(`Sandbox 平台服务模拟已跳过:${e instanceof Error?e.message:String(e)}`),{appId:"",sessionId:""}}}function on(){return{csrUploaded:!1,phoneNumberUploaded:!1}}function oi(e){return{csrUploaded:!!e,phoneNumberUploaded:!0}}async function oo(e,t){let r,n,i="/app_developer/api/sandbox/session/business_info/get",o="POST",a=JSON.stringify({sandbox_session_id:e}),s={"content-type":"application/json",...nF()},l=new URL(i,t??et),p=process.hrtime.bigint();try{r=await i8({body:a,headers:s,method:o,sandboxPath:i,targetOrigin:t,targetUrl:l})}catch(e){throw i7(o,l,502,p,s),e}let d=r.headers.get(nv)||"",c=await r.text();i7(o,l,r.status,p,s,d);try{n=JSON.parse(c||"{}")}catch{throw oe({method:o,requestBody:a,requestHeaders:s,responseBody:JSON.stringify({omitted:"invalid business info response"}),responseHeaders:r.headers,statusCode:r.status,targetUrl:l}),Error(`获取 Sandbox session 信息失败:HTTP ${r.status} 响应不是有效 JSON${d?`,log_id=${d}`:""}`)}let u={csrUploaded:!!n.data?.csr_pem?.trim(),phoneNumberUploaded:!!n.data?.phone_num?.trim()};if(oe({method:o,requestBody:a,requestHeaders:s,responseBody:JSON.stringify({code:n.code,data:u,log_id:n.log_id}),responseHeaders:r.headers,statusCode:r.status,targetUrl:l}),!r.ok||void 0!==n.code&&0!==n.code)throw Error(`获取 Sandbox session 信息失败:${n.message||r.statusText||r.status}${n.log_id||d?`,log_id=${n.log_id||d}`:""}`);return u}async function oa(e,t){if(!e)return on();try{return await oo(e,t)}catch(e){return nm.warn(`Sandbox session 信息查询已跳过:${e instanceof Error?e.message:String(e)}`),on()}}async function os(e,t,r){let n,i,o="POST",a=JSON.stringify({...e.csrPem?{csr_pem:e.csrPem}:{},phone_num:e.phoneNum,sandbox_session_id:t}),s={"content-type":"application/json",...nF(),[n_]:t},l=new URL(i5,r??et),p=process.hrtime.bigint();try{n=await i8({body:a,headers:s,method:o,sandboxPath:i5,targetOrigin:r,targetUrl:l})}catch(e){throw i7(o,l,502,p,s),e}let d=n.headers.get(nv)||"",c=await n.text();i7(o,l,n.status,p,s,d),oe({method:o,requestBody:JSON.stringify({...e.csrPem?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]",sandbox_session_id:t}),requestHeaders:s,responseBody:c,responseHeaders:n.headers,statusCode:n.status,targetUrl:l});try{i=JSON.parse(c||"{}")}catch{throw Error(`更新 Sandbox session 信息失败:HTTP ${n.status} 响应不是有效 JSON${d?`,log_id=${d}`:""}`)}if(!n.ok||void 0!==i.code&&0!==i.code)throw Error(`更新 Sandbox session 信息失败:${i.message||n.statusText||n.status}${i.log_id||d?`,log_id=${i.log_id||d}`:""}`)}async function ol(e,t,r,n){if(e&&t.phoneNum&&(!r||t.csrPem))try{return await os({...t.csrPem?{csrPem:t.csrPem}:{},phoneNum:t.phoneNum},e,n),nm.info("Sandbox business info 已自动上传",{sessionId:e}),oi(t.csrPem)}catch(e){nm.warn(`Sandbox business info 自动上传已跳过:${e instanceof Error?e.message:String(e)}`);return}}async function op(e,t){let r,n="/app_developer/api/sandbox/session/revoke",i="POST",o=JSON.stringify({sandbox_session_id:e}),a={"content-type":"application/json",...nF()},s=new URL(n,t??et),l=process.hrtime.bigint();try{r=await i8({body:o,headers:a,method:i,sandboxPath:n,targetOrigin:t,targetUrl:s})}catch(t){let e=`撤回 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw i7(i,s,502,l,a),oe({method:i,requestBody:o,requestHeaders:a,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:s}),t}let p=r.headers.get(nv)||"",d=await r.text();i7(i,s,r.status,l,a,p),oe({method:i,requestBody:o,requestHeaders:a,responseBody:d,responseHeaders:r.headers,statusCode:r.status,targetUrl:s});let c=JSON.parse(d||"{}");if(!r.ok||0!==c.code)throw Error(`撤回 Sandbox session 失败:${c.message||r.statusText||r.status}${c.log_id||p?`,log_id=${c.log_id||p}`:""}`)}async function od(e){if(e.recreatePromise)return e.recreatePromise;e.recreatePromise=(async()=>{var t;let r=e.sandboxSessionId;r&&await op(r,e.sandboxTargetOrigin),e.bridge?.close(),e.bridge=void 0;let n=await ot(e.sandboxProjectId,e.simulatorManifestPath,e.simulatorManifestReader,e.simulatorBusinessTemplatesPath,e.sandboxTargetOrigin,e.sandboxSessionAppId),i=n.sessionId,o=!e.sandboxSessionAppId,a=await ol(i,e.businessInfoInput,o,e.sandboxTargetOrigin)??await oa(i,e.sandboxTargetOrigin);return e.sandboxAppId=n.appId,e.sandboxSessionId=i,e.businessInfo=a,(t=e).resourceConnectionStatus="connecting",t.resourceEventSequence=0,t.resourceEvents.length=0,t.simulatorEventSequence=0,t.simulatorEvents.length=0,t.resourceGeneration+=1,om(t),e.bridge=oh(e,i),nm.info("Sandbox session 已重建",{sessionId:i}),{...n,businessInfoUploaded:a.phoneNumberUploaded&&(!o||a.csrUploaded)}})();try{return await e.recreatePromise}finally{e.recreatePromise=void 0}}function oc(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 ou(e){let t=`data: ${JSON.stringify(oc(e))}
165
-
166
- `;for(let r of e.eventStreamClients)r.destroyed||r.writableEnded?e.eventStreamClients.delete(r):r.write(t)}function om(e){e.resourceEventsUpdatedAtMs=Math.max(Date.now(),e.resourceEventsUpdatedAtMs+1),ou(e)}function oh(e,t){var r={onConnectionStatusChange:t=>{e.resourceConnectionStatus!==t&&(e.resourceConnectionStatus=t,om(e))},onLog:t=>{let r=e.bridgeLogs.findIndex(e=>e.id===t.id);r>=0?e.bridgeLogs[r]=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),ou(e)},onResourceChanged:t=>{e.resourceEvents.push({...t,sequence:++e.resourceEventSequence}),e.resourceEvents.length>200&&e.resourceEvents.splice(0,e.resourceEvents.length-200),om(e)},onSimulatorEvent:t=>{e.simulatorEvents.push({...t,sequence:++e.simulatorEventSequence}),e.simulatorEvents.length>200&&e.simulatorEvents.splice(0,e.simulatorEvents.length-200),om(e)},onSimulatorToolCall:e.onSimulatorToolCall,sandboxSessionId:t,targetOrigin:e.sandboxTargetOrigin};if(!r.sandboxSessionId)return void nm.warn("Sandbox Bridge skipped: missing sandbox session id");let n=new AbortController;return iY("start sandbox bridge",{session:iH(r.sandboxSessionId)}),r.onConnectionStatusChange?.("connecting"),i0(r,n.signal),{close:()=>n.abort()}}function of(e){e.bridgeLogs.length=0,e.bridgeLogsUpdatedAtMs=Math.max(Date.now(),e.bridgeLogsUpdatedAtMs+1),ou(e)}async function og(e,t,r){if("POST"!==e.method)return void nC(t,405,"Method not allowed");if(!r)return void nC(t,503,"Sandbox session is not initialized");try{let n=await nP(e,t,1048576);if(n){let e=JSON.parse(n);if(void 0!==e.csrPem&&"string"!=typeof e.csrPem||"string"!=typeof e.phoneNum)return void nC(t,400,"Invalid Sandbox business info");r.businessInfoInput={..."string"==typeof e.csrPem&&e.csrPem.trim()?{csrPem:e.csrPem.trim()}:{},phoneNum:e.phoneNum.trim()}}let i=await od(r);nI(t,200,{code:0,data:{sandbox_appid:i.appId,business_info_uploaded:i.businessInfoUploaded,sandbox_session_id:i.sessionId},message:"ok"})}catch(e){nC(t,500,e.message)}}function oy(e){let t=e.appId?.trim(),r=t&&!t.startsWith("doubao-sandbox-app-")?t:void 0,n=function(e){let t=ti.resolve(e??process.cwd()),r=t;try{r=tn.realpathSync.native(t)}catch{}return(0,ig.createHash)("sha256").update(r).digest("hex")}(e.appDirectory),i=function(e,t){let r=i6(e,"DOUBAO_SANDBOX_PHONE_NUM"),n=i6(e,"DOUBAO_SANDBOX_CSR_FILE"),i=function(e,t){if(!e)return;let r=ti.isAbsolute(e)?e:ti.resolve(t??process.cwd(),e);return i9(r)?r:void 0}(n,t),o="";if(n&&!i)nm.warn(`Sandbox CSR 文件不存在:${n}`);else if(i)try{o=tn.readFileSync(i,"utf8").trim()}catch(e){nm.warn(`Sandbox CSR 文件读取失败:${e instanceof Error?e.message:String(e)}`)}return{...r?{phoneNum:r}:{},...o?{csrPem:o}:{}}}(e.env,e.appDirectory),o=`${i.phoneNum??""}\0${i.csrPem??""}`;return{businessInfoInput:i,businessInfoInputKey:o,businessTemplatesPath:e.businessTemplatesPath,key:JSON.stringify([o,n,r,e.targetOrigin,e.businessTemplatesPath,e.manifestPath]),manifestReader:e.manifestReader,manifestPath:e.manifestPath,onSimulatorToolCall:e.onSimulatorToolCall,projectId:n,sessionAppId:r,targetOrigin:e.targetOrigin}}class ob{configKey;manifestReader;state;constructor(e,t,r){this.state=e,this.configKey=t,this.manifestReader=r}static async start(e){let t=oy(e),r=await or(t.projectId,t.manifestPath,t.manifestReader,t.businessTemplatesPath,t.targetOrigin,t.sessionAppId),n=!t.sessionAppId,i={bridgeLogs:[],bridgeLogsUpdatedAtMs:0,businessInfo:await ol(r.sessionId,t.businessInfoInput,n,t.targetOrigin)??await oa(r.sessionId,t.targetOrigin),businessInfoInput:t.businessInfoInput,eventStreamClients:new Set,onSimulatorToolCall:t.onSimulatorToolCall,resourceConnectionStatus:"connecting",resourceEventSequence:0,resourceEvents:[],resourceEventsUpdatedAtMs:0,resourceGeneration:1,resourceInstanceId:(0,ig.randomUUID)(),simulatorEventSequence:0,simulatorEvents:[],sandboxAppId:r.appId,sandboxProjectId:t.projectId,sandboxSessionAppId:t.sessionAppId,sandboxSessionId:r.sessionId,sandboxTargetOrigin:t.targetOrigin,simulatorBusinessTemplatesPath:t.businessTemplatesPath,simulatorManifestReader:t.manifestReader,simulatorManifestPath:t.manifestPath},o=new ob(i,t.key,t.manifestReader);return i.bridge=r.sessionId?oh(i,r.sessionId):void 0,o}get sessionId(){return this.state.sandboxSessionId}close(){for(let e of(this.state.bridge?.close(),this.state.eventStreamClients))e.destroyed||e.writableEnded||e.end();this.state.eventStreamClients.clear()}matches(e){let t=oy(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,ig.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:i2,sandboxResourceEventsEndpoint:i3,...this.state.businessInfoInput.csrPem?{sandboxCsrPem:this.state.businessInfoInput.csrPem}:{},...this.state.businessInfoInput.phoneNum?{sandboxPhoneNum:this.state.businessInfoInput.phoneNum}:{}}}getRequestRoutes(){return[{match:i3,handle:({request:e,response:t})=>(function(e,t,r){if("DELETE"===e.method){of(r),nI(t,200,oc(r),{"Cache-Control":"no-cache"});return}if("GET"!==e.method)return void nC(t,405,"Method not allowed");nT(t,{"Cache-Control":"no-cache, no-transform",Connection:"keep-alive"}),t.writeHead(200,{"Content-Type":"text/event-stream; charset=utf-8"});let n=setInterval(()=>{t.destroyed||t.writableEnded?(clearInterval(n),r.eventStreamClients.delete(t)):t.write(": heartbeat\n\n")},15e3);r.eventStreamClients.add(t),t.once("close",()=>{clearInterval(n),r.eventStreamClients.delete(t)}),t.write(`data: ${JSON.stringify(oc(r))}
167
-
168
- `)})(e,t,this.state)},{match:i2,handle:({request:e,response:t})=>{var r;return r=this.state,void("GET"!==e.method&&"DELETE"!==e.method?nC(t,405,"Method not allowed"):("DELETE"===e.method&&r&&of(r),nI(t,200,{logs:r?.bridgeLogs??[],updatedAtMs:r?.bridgeLogsUpdatedAtMs??0},{"Cache-Control":"no-cache"})))}},{match:"/__web_sdk_sandbox_resource_events",handle:({request:e,response:t})=>{var r;return r=this.state,void("GET"!==e.method?nC(t,405,"Method not allowed"):nI(t,200,{connectionStatus:r?.resourceConnectionStatus??"connecting",events:r?.resourceEvents??[],generation:r?.resourceGeneration??0,simulatorEvents:r?.simulatorEvents??[],updatedAtMs:r?.resourceEventsUpdatedAtMs??0},{"Cache-Control":"no-cache"}))}},{match:"/__web_sdk_sandbox_proxy__",handle:({request:e,response:t})=>iN(e,t,{onBusinessInfoUpdated:e=>{this.state.businessInfo=oi(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})=>og(e,t,this.state)}]}}function o_(e,t){return e.relativePath<t.relativePath?-1:+(e.relativePath>t.relativePath)}let ov="/__tools/tools.json",ow="/__events/events.json",oE="manifest.yaml",oS="skill",ox=ti.join(".dbx","config.json");function oA(e){if(!e)return!1;try{return tn.statSync(e).isFile()}catch{return!1}}function oT(e,t){if(!e)return;let r=ti.isAbsolute(e)?e:ti.resolve(t??process.cwd(),e);return oA(r)?r:void 0}function oC(e,t){if(e&&t)return ti.relative(t,e).split(ti.sep).join("/")||"."}function oI(e){let t=ti.resolve(e);for(;;){let e;if(e=t,oA(ti.join(e,ox)))return t;let r=ti.dirname(t);if(r===t)break;t=r}}function oO(e){try{return tn.lstatSync(e),!0}catch{return!1}}function oP(e,t,r,n){let i;if(!t.reader&&oA(t.sourcePath)){var o;let r,i=tn.statSync(t.sourcePath);nT(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":i.size,"Content-Type":n}),o=t.sourcePath,(r=tn.createReadStream(o)).once("error",()=>e.destroy()),r.pipe(e);return}try{i=t.reader?.()}catch{i=void 0}void 0===i?nC(e,404,`${r} not found`):(nT(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":Buffer.byteLength(i),"Content-Type":n}),e.end(i))}function ok(e,t){return function(e){let t,r;if(!e)return{layout:"missing",entries:[]};let n=ti.resolve(e);try{t=tn.lstatSync(n)}catch(e){if("ENOENT"===e.code)return{directory:n,layout:"missing",entries:[]};return{directory:n,layout:"invalid",entries:[],error:`skill path cannot be inspected: ${n}: ${e.message}`}}if(t.isSymbolicLink()||!t.isDirectory())return{directory:n,layout:"invalid",entries:[],error:`skill path must be a non-symlink directory: ${n}`};try{var i;let e;i=n,e=[],function t(r){for(let n of tn.readdirSync(r,{withFileTypes:!0})){if(n.isSymbolicLink())continue;let o=ti.join(r,n.name);n.isDirectory()?t(o):n.isFile()&&"SKILL.md"===n.name&&e.push(function(e,t){let r=ti.relative(e,t).split(ti.sep).join("/");return{content:tn.readFileSync(t,"utf8"),relativePath:r}}(i,o))}}(i),r=e}catch(e){return{directory:n,layout:"invalid",entries:[],error:`skill directory is not readable: ${n}: ${e.message}`}}return r.sort(o_),r.length>0?{directory:n,layout:"resolved",entries:r}:{directory:n,layout:"missing",entries:[]}}(function(e,t){if(t){if(!t)return;let r=e?oI(e):void 0,n=(ti.isAbsolute(t)?[void 0]:[e,r,process.cwd()]).map(e=>ti.isAbsolute(t)?t:ti.resolve(e??process.cwd(),t));return[...new Set(n)].find(oO)??n[0]}if(!e)return;let r=oI(e);return[...new Set([r?ti.join(r,oS):void 0,ti.join(e,oS),ti.join(process.cwd(),oS)].filter(Boolean))].find(oO)}(e,t))}class oD{appDirectory;businessTemplatesPath;manifestPath;manifestReader;eventsConfigReader;eventsConfigSource;toolsConfigReader;toolsConfigSource;manifestSource;skillsDirectory;sourceKey;constructor(e){var t,r,n;this.appDirectory=e.appDirectory,this.manifestPath=e.manifestPath?oT(e.manifestPath,e.appDirectory):function(e){if(!e)return;let t=oI(e);return[...new Set([t?ti.join(t,oE):void 0,ti.join(e,oE),ti.join(process.cwd(),oE)].filter(Boolean))].find(oA)}(e.appDirectory),this.businessTemplatesPath=(t=this.manifestPath,r=e.businessTemplatesPath,n=e.appDirectory,r?oT(r,n):t?oT(ti.join(ti.dirname(t),"business-templates.yaml"),n):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 i=ok(e.appDirectory,this.skillsDirectory);if(e.skillsDirectory&&"resolved"!==i.layout)throw Error(i.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 oD(e);return this.sourceKey===t.sourceKey&&this.eventsConfigReader===t.eventsConfigReader&&this.toolsConfigReader===t.toolsConfigReader&&this.manifestReader===t.manifestReader}getDebugContext(){let e=ok(this.appDirectory,this.skillsDirectory),t="resolved"===e.layout?e.directory:void 0,r=oC(this.businessTemplatesPath,this.appDirectory),n=oC(this.eventsConfigSource.sourcePath,this.appDirectory),i=oC(this.toolsConfigSource.sourcePath,this.appDirectory),o=oC(this.manifestSource.sourcePath,this.appDirectory),a=oC(t,this.appDirectory);return{...this.eventsConfigSource.reader||this.eventsConfigSource.sourcePath?{eventsConfigUrl:ow,...this.eventsConfigSource.sourcePath?{eventsConfigOriginalUrl:this.eventsConfigSource.sourcePath,...n?{eventsConfigRelativePath:n}:{}}:{}}:{},...this.toolsConfigSource.sourcePath?{toolsConfigOriginalUrl:this.toolsConfigSource.sourcePath,toolsConfigUrl:ov,...i?{toolsConfigRelativePath:i}:{}}:{},...this.manifestSource.sourcePath?{simulatorManifestOriginalUrl:this.manifestSource.sourcePath,...o?{simulatorManifestRelativePath:o}:{}}:{},...this.businessTemplatesPath?{simulatorBusinessTemplatesOriginalUrl:this.businessTemplatesPath,...r?{simulatorBusinessTemplatesRelativePath:r}:{}}:{},...t?{simulatorSkillsDirectoryOriginalUrl:t,...a?{simulatorSkillsDirectoryRelativePath:a}:{}}:{}}}getRequestRoutes(){return[{match:ow,handle:({response:e})=>oP(e,this.eventsConfigSource,"Events config","application/json; charset=utf-8")},{match:ov,handle:({response:e})=>oP(e,this.toolsConfigSource,"Tools config","application/json; charset=utf-8")},{match:"/__simulator_manifest/manifest.yaml",handle:({response:e})=>oP(e,this.manifestSource,"Simulator manifest","application/yaml; charset=utf-8")},{match:"/__simulator_skills/index.json",handle:({response:e})=>{let t;"missing"===(t=ok(this.appDirectory,this.skillsDirectory)).layout?nC(e,404,"Simulator skills directory not found"):"invalid"===t.layout?nC(e,422,t.error??"Invalid simulator Skill layout"):nI(e,200,{skills:t.entries},{"Cache-Control":"no-cache"})}}]}}let o$=f("node:stream"),oR="/app_developer/api",oN=`${oR}/simulator/images/upload`,oL=new Set([`${oR}/simulator/chat`,oN,`${oR}/simulator/tool/report`]),oM={"Access-Control-Expose-Headers":nv};async function oj(e,t,r,n){if(!oL.has(r.pathname))return void nC(t,404,"未找到模拟器接口",oM);let i=n.targetOrigin??et,o=new URL(`${r.pathname}${r.search}`,i),a=new AbortController,s=()=>a.abort();e.once("aborted",s),t.once("close",()=>{t.writableEnded||s()});try{var l;let i=e.method??"GET",s=process.hrtime.bigint(),p=function(e,t,r){return Object.fromEntries(Object.entries(nS(e.headers,t,{...nF(),...r?{[n_]:r}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]))}(e,o,n.getSandboxSessionId?.()),d=await oU(e,t,r,i),c=n.targetOrigin?await fetch(o,{body:d,headers:p,method:i,signal:a.signal}):await nG({internal:!0,path:`${r.pathname}${r.search}`,method:i,body:d,headers:p,signal:a.signal});if(function(e,t,r,n,i,o){if("applet0930"!==process.env.DEBUG)return;let a=Number(process.hrtime.bigint()-n)/1e6;nm.request({method:e,url:`${t.pathname}${t.search}`,statusCode:r,durationMs:a,headers:i,logId:o})}(i,r,c.status,s,p,c.headers.get(nv)??void 0),t.destroyed||t.writableEnded)return void c.body?.cancel().catch(()=>void 0);await oB({method:i,requestBody:(l=d)instanceof Uint8Array?`(binary, ${l.byteLength} bytes)`:l,requestHeaders:p,requestUrl:r,response:t,upstreamResponse:c})}catch(e){if(t.destroyed||t.writableEnded||a.signal.aborted)return;nC(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,oM)}}async function oU(e,t,r,n){if("GET"!==n&&"HEAD"!==n)return r.pathname===oN?await nO(e,t,0xb00000):await nP(e,t,0xb00000)}async function oB({method:e,requestBody:t,requestHeaders:r,requestUrl:n,response:i,upstreamResponse:o}){var a,s;if(nT(i,oM),i.writeHead(o.status,nA(o.headers,[nv])),a=n,s=o,a.pathname===`${oR}/simulator/chat`||s.headers.get("content-type")?.toLowerCase().includes("text/event-stream")===!0)return void await oF({method:e,requestBody:t,requestHeaders:r,requestUrl:n,response:i,upstreamResponse:o});if("applet0930"!==process.env.DEBUG)return o.body?void await (0,g.pipeline)(o$.Readable.fromWeb(o.body),i):void i.end();let l=await nk(o);nR({method:e,requestBody:t,requestHeaders:r,responseBody:l,responseHeaders:o.headers,statusCode:o.status,targetUrl:n}),i.end(l)}async function oF({method:e,requestBody:t,requestHeaders:r,requestUrl:n,response:i,upstreamResponse:o}){if(!o.body){nR({method:e,requestBody:t,requestHeaders:r,responseBody:"",responseHeaders:o.headers,statusCode:o.status,targetUrl:n}),i.end();return}let a=o$.Readable.fromWeb(o.body);if("applet0930"!==process.env.DEBUG)return void await (0,g.pipeline)(a,i);nR({method:e,requestBody:t,requestHeaders:r,responseBody:"(event stream)",responseHeaders:o.headers,statusCode:o.status,targetUrl:n});let s=new o$.Transform({transform(e,t,r){let i;try{i=String(e).split("\n\n").filter(Boolean)}catch(t){return nm.error(`failed to decode event stream chunk: ${t?.toString()}`),r(null,e)}for(let e of i)nm.info(`Event from ${n.pathname}${n.search}
169
- ${e}`);r(null,e)}});await (0,g.pipeline)(a,s,i)}async function oW(e,t){if("POST"!==e.method)return void nI(t,405,{message:"Method Not Allowed"});try{var r,n;let i,o,a,s=JSON.parse(await nP(e,t,0xa00000)),l=nE(s.url),p=(s.method??"GET").toUpperCase(),d=(r=s.header,o=new Headers(r??{"content-type":"application/json"}),["connection","content-length","host","origin","referer"].forEach(e=>o.delete(e)),o),c=await fetch(l,{body:"GET"!==p&&"HEAD"!==p?function(e,t){let r=e.data;if(null==r)return;if("base64"===e.dataEncoding&&"string"==typeof r){var n;let e;return e=new ArrayBuffer((n=Buffer.from(r,"base64")).byteLength),new Uint8Array(e).set(n),e}if("string"==typeof r)return r;let i=t.get("content-type")?.toLowerCase()??"";if(i.includes("application/x-www-form-urlencoded")&&"object"==typeof r){let e=new URLSearchParams;return Object.entries(r).forEach(([t,r])=>{e.set(t,String(r))}),e.toString()}return i.includes("application/json")||"object"==typeof r?JSON.stringify(r):String(r)}(s,d):void 0,headers:d,method:p}),u="arraybuffer"===s.dataType||"arraybuffer"===s.responseType;if(u)i=Buffer.from(await c.arrayBuffer()).toString("base64");else{let e=await c.text();i="string"===s.dataType||0===e.length?e:JSON.parse(e)}nI(t,200,{data:i,dataEncoding:u?"base64":void 0,header:(n=c.headers,a={},n.forEach((e,t)=>{a[t]=e}),a),statusCode:c.status})}catch(e){nI(t,500,{message:e instanceof Error?e.message:String(e)})}}let oH="/__webview",oG=`${oH}/client.js`,oV=`${oH}/page`,oq=`${oH}/runtime`,oJ=`${oH}/sw.js`,oK="x-doubao-web-view-target",oz="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",oY=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.2.0-rc.0_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_typescript@6.0.3/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-page-client.js"),f.b),oX=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.2.0-rc.0_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_typescript@6.0.3/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-service-worker.js"),f.b);function oZ(e,t,r,n=!1){if("GET"!==e.method&&"HEAD"!==e.method)return void nC(t,405,"Method Not Allowed");let i=tn.readFileSync(r,"utf8");nT(t),t.writeHead(200,{"cache-control":"no-store","content-length":Buffer.byteLength(i),"content-type":"text/javascript; charset=utf-8",...n?{"service-worker-allowed":"/"}:{}}),t.end("HEAD"===e.method?void 0:i)}async function oQ(e,t,r){if("GET"!==e.method&&"HEAD"!==e.method)return void nC(t,405,"Method Not Allowed");try{let n=nE(r.searchParams.get("url")??void 0),i=await fetch(n,{headers:{"user-agent":oz,..."string"==typeof e.headers.accept?{accept:e.headers.accept}:{},..."string"==typeof e.headers["accept-language"]?{"accept-language":e.headers["accept-language"]}:{}},method:e.method}),o=i.url?new URL(i.url):n;o.hash=n.hash;let a=i.headers.get("content-type")??"",s=nx(Object.fromEntries(i.headers));if(s["cache-control"]="no-cache",delete s["content-encoding"],delete s["content-length"],"HEAD"===e.method||!a.includes("text/html")){let r="HEAD"===e.method?void 0:Buffer.from(await i.arrayBuffer());nT(t),t.writeHead(i.status,{...s,[oK]:o.toString(),...r?{"content-length":r.byteLength}:{}}),t.end(r);return}let l=function(e,t){let r=new URLSearchParams({mobileUserAgent:oz,originalPath:`${t.pathname}${t.search}${t.hash}`}).toString().replaceAll("&","&amp;"),n=`<script src="${oG}?${r}"></script>`,i=/<head[^>]*>/i.exec(e);if(i){let t=i.index+i[0].length;return`${e.slice(0,t)}${n}${e.slice(t)}`}return`${n}${e}`}(await i.text(),o);nT(t),t.writeHead(i.status,{...s,[oK]:o.toString(),"content-length":Buffer.byteLength(l)}),t.end(l)}catch(e){nC(t,502,`代理 web-view 页面失败: ${e instanceof Error?e.message:String(e)}`)}}let o0=f("../../../node_modules/.pnpm/send@1.2.0/node_modules/send/index.js"),o1="/__web_artifacts",o2="/wsd";function o3(e){return e.replace(/^\/web-sdk\/[^/]+(?=\/wsd(?:\/|$))/,"")}function o4(e,t,r,n,i={}){nT(t,i.headers),o0(e,n,{root:r}).once("error",n=>{if(404===n.statusCode&&i.fallbackPath)return void o4(e,t,r,i.fallbackPath,{headers:i.headers});if(t.headersSent)return void t.destroy(n);let o=n.statusCode??500;nC(t,o,nh.STATUS_CODES[o]??"Internal Server Error")}).pipe(t)}async function o5(e){let t=new URL(e).toString();try{await S(t)}catch(e){nm.error("打开 Web 模拟器失败",{error:e}),nm.info("请手动打开 Web 模拟器(本地)",{url:t})}}async function o9(e,t){await new Promise((r,n)=>{let i=t=>{e.off("listening",o),n(t)},o=()=>{e.off("error",i),r()};e.once("error",i),e.once("listening",o),e.listen(t,"127.0.0.1")})}async function o8(e){let t=await X(9e3),r=nh.createServer(function({artifactOrigin:e,debugScenes:t,debuggerProtocol:r,distPath:n,getWidgetViewDataTemplates:i,mcpEndpoint:o,mcpHeaders:a,physicalDeviceDebugGateway:s,sandboxRuntime:l,simulatorAssets:p,simulatorTargetOrigin:d}){var c,u,m;let h={routes:[{match:e=>e.pathname.startsWith(o1),handle:({request:t,response:r,url:n})=>{let i,o;return i=n.pathname.replace(o1,"")||"/",o=new URL(`${i}${n.search}`,e),void nN(t,r,{createResponseHeaders:e=>({...nx(e),"cache-control":"no-cache"}),errorMessage:"代理 Web 产物失败",requestHeaders:nS(t.headers,o),targetUrl:o})}},{match:e=>{let t=o3(e.pathname);return t===o2||t.startsWith(`${o2}/`)},handle:({request:e,response:t,url:r})=>{let i;!(i=o3(r.pathname).slice(`${o2}/`.length))||i!==ti.basename(i)?nC(t,404,"Not found"):o4(e,t,ti.join(n,"wsd"),i,{headers:{"Cache-Control":"no-cache"}})}},{match:"/__web_sdk_request_proxy__",handle:({request:e,response:t})=>oW(e,t)},{match:oJ,handle:({request:e,response:t})=>oZ(e,t,oX,!0)},{match:oG,handle:({request:e,response:t})=>oZ(e,t,oY)},{match:oq,handle:({request:e,response:t,url:r})=>(function(e,t,r){let n;try{n=nE(r.searchParams.get("url")??void 0)}catch(e){nC(t,400,`无效的 web-view 请求地址: ${e instanceof Error?e.message:String(e)}`);return}let i=nS(e.headers,n,{"user-agent":oz});for(let e of Object.keys(i))e.startsWith("sec-fetch-")&&delete i[e];nN(e,t,{createResponseHeaders:e=>{let t=nx(e),r=Array.isArray(e.location)?e.location[0]:e.location;if(r&&URL.canParse(r,n)){let e=new URL(r,n);t.location=`${oq}?url=${encodeURIComponent(e.toString())}`}return t["cache-control"]="no-cache",t},errorMessage:"代理 web-view 运行时请求失败",requestHeaders:i,targetUrl:n})})(e,t,r)},{match:oV,handle:({request:e,response:t,url:r})=>oQ(e,t,r)},{match:e=>e.pathname.startsWith("/__doubao_web_sdk_native_modules"),handle:({request:e,response:t,url:r})=>o4(e,t,n,r.pathname)},{match:e=>e.pathname.startsWith("/__"),handle:({response:e})=>nC(e,404,"Debugger resource not found")}],fallback:({request:e,response:t,url:r})=>o4(e,t,n,r.pathname,{fallbackPath:"/index.html"})};return u=[...(c={artifactOrigin:e,debugScenes:t,getWidgetViewDataTemplates:i,mcpEndpoint:o,physicalDeviceDebugGateway:s,sandboxRuntime:l,simulatorAssets:p},[{match:"/__web_sdk_debug_context",handle:({request:e,response:t})=>{let r,n;return n="string"==typeof(r=e.headers.host)&&r?`http://${r}`:void 0,void nI(t,200,{homeDir:rT.homedir(),launchDir:c.simulatorAssets.appDirectory,debugScenesEndpoint:ic,widgetViewDataTemplatesEndpoint:iu,debuggerMcpEndpoint:n?new URL(ip,n).toString():ip,manifestOriginalUrl:new URL("/base/manifest.json",c.artifactOrigin).toString(),...c.mcpEndpoint?{mcpOriginalEndpoint:c.mcpEndpoint,mcpProxyEndpoint:nK}:{},realDeviceDebug:c.physicalDeviceDebugGateway?.getDebugContext(),...c.simulatorAssets.getDebugContext(),...c.sandboxRuntime.getDebugContext()},im)}},{match:ic,handle:({response:e})=>nI(e,200,c.debugScenes??{errors:[],scenes:[]},im)},{match:iu,handle:({response:e})=>ih(e,c.getWidgetViewDataTemplates)}]),...s.getRequestRoutes(),...r,...function(e={}){return[{match:e=>e.pathname===oR||e.pathname.startsWith(`${oR}/`),handle:({request:t,response:r,url:n})=>oj(t,r,n,e)}]}({getSandboxSessionId:()=>l.sessionId,targetOrigin:d}),...l.getRequestRoutes(),...function(e={}){return[{match:nK,handle:({request:t,response:r,url:n})=>(function(e,t,r={},n=nw(e)){let i=er(r.targetEndpoint);if(!n)return void nC(t,400,"Bad request");if(!i)return void nC(t,404,"MCP endpoint not configured");let o=new URL(i);for(let[e,t]of new URLSearchParams(n.search))o.searchParams.append(e,t);nN(e,t,{createResponseHeaders:nx,errorMessage:"代理 MCP 请求失败",requestHeaders:nS(e.headers,o,{...nF(),...r.headers}),targetUrl:o})})(t,r,e,n)}]}({headers:a,targetEndpoint:o}),...p.getRequestRoutes(),...h.routes],m=h.fallback,(e,t)=>{let r=nw(e);r?nL({request:e,response:t,url:r},u,m).catch(e=>(function(e,t){if(nm.error("处理 Web SDK 调试器请求失败",{error:t}),!e.destroyed&&!e.writableEnded){if(e.headersSent)return void e.destroy(t instanceof Error?t:void 0);nC(e,500,"Internal server error")}})(t,e)):nC(t,400,"Bad request")}}(e));return await o9(r,t),{origin:`http://127.0.0.1:${t}`,server:r}}async function o6(e){e.listening&&await new Promise((t,r)=>{e.close(e=>{e?r(e):t()}),e.closeIdleConnections(),e.closeAllConnections()})}async function o7(){if(!n)return;let{physicalDeviceDebugGateway:e,sandboxRuntime:t,server:r}=n;n=void 0,e.dispose(),t.close(),await o6(r)}async function ae(e){let t,{targetOrigin:r,...i}=e.simulator??{},o={appDirectory:e.appDirectory,eventsConfigReader:e.eventsConfigReader,eventsConfigSourcePath:e.eventsConfigSourcePath,toolsConfigReader:e.toolsConfigReader,toolsConfigSourcePath:e.toolsConfigSourcePath,manifestReader:e.simulatorManifestReader,manifestSourcePath:e.simulatorManifestSourcePath,...i},a=new oD(o);try{var s,l;let i,p,d=er(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=n,s?.server.listening){if(n?.artifactOrigin===e.artifactOrigin&&n.mcpEndpoint===d&&n.simulatorAssets.matches(o)&&n.getWidgetViewDataTemplates===e.getWidgetViewDataTemplates&&n.sandboxRuntime.matches(c)&&n.simulatorTargetOrigin===r)return n;await o7()}let u={distPath:l=e.debuggerDistPath,indexPath:ti.join(l,"index.html")};if(!tn.existsSync(u.indexPath))return void nm.error("Web 模拟器资源缺失,请联系框架开发者。");let m=(i={},p=new n1(i),Object.assign([{match:"/__agent_trace",handle:e=>ix(e,i,p)},{match:"/__wsd_control_events",handle:e=>(function({request:e,response:t,url:r},n){if("GET"!==e.method)return void nI(t,405,{error:"Method not allowed"});let i=r.searchParams.get("clientId")?.trim();i?(nT(t,{"Cache-Control":"no-cache, no-transform",Connection:"keep-alive"}),t.writeHead(200,{"Content-Type":"text/event-stream; charset=utf-8"}),t.write(": connected\n\n"),n.registerClient(i,t)):nI(t,400,{error:"clientId is required"})})(e,p)},{match:"/__wsd_control_results",handle:e=>n2(e,p)},{match:ip,handle:e=>id(e,i,p)}],{executeSandboxToolCall:e=>p.execute("execute_sandbox_tool_call",{toolCall:e})})),h=await ob.start({...c,onSimulatorToolCall:async e=>{await m.executeSandboxToolCall(e)}});t=h;let f=new iE,{origin:g,server:y}=await o8({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:r}),b=()=>{y.close()};y.once("close",()=>{process.off("exit",b)}),process.once("exit",b);let _=new URL(g).toString();return n={artifactOrigin:e.artifactOrigin,close:()=>o7(),debuggerMcpEndpoint:new URL(ip,g).toString(),getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:d,open:()=>o5(_),origin:g,physicalDeviceDebugGateway:f,sandboxRuntime:h,get sandboxSessionId(){return h.sessionId},server:y,setRealDeviceDebugProvider(e){f.setProvider(e)},simulatorAssets:a,simulatorTargetOrigin:r,url:_}}catch(e){t?.close(),nm.error("启动 Web SDK 调试器失败",{error:e});return}}async function at(e,t){let r={errors:[],scenes:[]};if(!e)return r;for(let n of(await tN(e)).sort((e,t)=>e.name.localeCompare(t.name))){let e=await tL(n.path);e&&function(e,t){let r=D(e);return"tool"!==r.type&&("widget"===r.type?t.widgetIds.has(r.id):0===r.unresolvedVariables.length)}(e,t)&&r.scenes.push({content:e,name:n.name})}return r}async function ar(e,t){let r=e.metadata.getData(),n=e.widgets,i=await at(e.appDirectory,{widgetIds:new Set(Object.keys(n).map(e=>rb(n,r.widgets,e)))});return ae({...t,debuggerDistPath:t.debuggerDistPath??W(),debugScenes:i,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates})}function an(e){return!!(e&&!/<%=?\s*appId\s*%>/.test(e))}function ai(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)||tP.warn(e.appId.startsWith("db_")?"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `dbx auth login` 后重新启动开发服务。":"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `npx doubao login` 后重新启动开发服务。"))}let aa=e=>ed.bgHex("#9873b9")(ed.italic(ed.black(` ${e} `))),as=e=>ed.bgBlueBright(ed.italic(ed.black(` ${e} `))),al=e=>ed.bold(ed.blueBright(e)),ap=[{command:"d",description:"选择调试场景 / pages / widgets"},{command:"web",description:"打开 Web 模拟器"}],ad={page:"页面",scene:"调试场景",widget:"组件"};function ac(e){console.log(` ${al(e.command.padEnd(21))} ${ed.gray(`- ${e.description}`)}`)}async function au(e){let t=z(e);if(0!==t.length)return await ee.prompt(t.map(([e,t])=>({type:"input",name:e,message:`请输入调试场景变量 "${e}" 的值:`,default:t??void 0})))}async function am({matchedScene:e,appId:t,driver:r}){let n=await tL(e.path);if(!n)return;let i=await au(n);await tM({matchedScene:e,appId:t,driver:r,variables:i},n)}async function ah(e,t,r,n,i,o,{interactive:a=!0}={}){if(await i.load({appletUrl:t,appId:e,isSigned:o}),!a)return;let s=await tN(process.cwd()),l=Object.values(r),p=Object.values(n),d=p.filter(({id:e})=>!e6(e));return l.length>0&&(console.log(`
170
-
171
- ${as("可用 pages 列表")}
172
- `),l.forEach(e=>{console.log(` - ${al(e.path)}`)})),d.length>0&&(console.log(`
173
- ${as("可用 widgets 列表")}
174
- `),d.forEach(e=>{let t=al(e.id);console.log(` - ${t}`)})),s.length>0&&(console.log(`
175
- ${as("可用调试场景")}
176
- `),s.forEach(e=>console.log(` - ${al(e.name)}`))),console.log(`
177
- ${as("可以继续执行以下命令:")}
178
- `),ap.forEach(ac),console.log("\n"),nd.instance.addListener(t=>{let r=t.trim();if("d"===r){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(`
179
- ${as("暂无可用的页面、组件或调试场景")}`),!0;nu(async()=>{let{selectedEntry:r}=await ee.prompt([{type:"search",name:"selectedEntry",message:"请选择调试目标:",source:e=>t.filter(t=>`${ad[t.type]} ${t.type} ${t.id}`.toLowerCase().includes(e?.toLowerCase()??"")).map(e=>({name:`${ed.gray(ad[e.type])}: ${e.id}`,short:`${ad[e.type]} \xb7 ${e.id}`,value:e}))}]);if("scene"===r.type){let t=s.find(e=>e.name===r.id);t&&await am({matchedScene:t,appId:e,driver:i})}else"widget"===r.type?i.pushWidget({appId:e,widgetId:r.id}):i.openPageUrl({appId:e,url:r.id})})}else{let t=s.find(e=>e.name===r);t?nu(async()=>{await am({matchedScene:t,appId:e,driver:i})}):p.some(e=>e.id===r)?i.pushWidget({appId:e,widgetId:r}):i.openPageUrl({appId:e,url:r})}return!0},"openPage")}async function af({appId:e,appletUrl:t,pages:r,widgets:n,driver:i,isSigned:o,isDisposed:a}){let s=await tE();if(a())return;if(!s)return void tP.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");let l=await tv(s).catch(e=>(a()||tP.error("重新启动应用失败",{error:e}),!1));if(a())return;if(!l)return void setTimeout(()=>{a()||tP.info("请确认应用已经启动。\n")},1e3);if(await new Promise(e=>{setTimeout(e,5e3)}),a())return;if(!i)return void tP.error("调试驱动尚未就绪。");let p=await ah(e,t,r,n,i,o);a()&&p?.()}async function ag({context:e,port:t,driver:r,isSigned:n,onCleanupReady:i}){let o,a,s=e.metadata.getData(),l=s.app.appId,p=nn(t),d=async()=>{let t,r=await (t=e.webDebuggerLaunchOptions,ar(e,{appId:e.appId,appDirectory:e.appDirectory,artifactOrigin:p,env:{...e.env,...t?.env??{}},mcpEndpoint:t?.mcpEndpoint??tf(),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 r?.open()};if(e.devServerInteractive){let t;t=function(e={}){let t={name:"Doubao Apps SDK",...e},r=t.name?`${t.name} 开发服务`:"",n=t.origin?`正在监听 ${ed.gray(t.origin)}。`:"已启动。";return`
180
- ${al(r)}${n}
181
- `}(),tu()||console.clear(),console.log(t),console.log(((e,t)=>{if(e&&t){let r=[{title:"\uD83C\uDF10 服务地址",content:t},{title:"\uD83D\uDCE6 应用 ID",content:e}].map(({title:e,titleHighlighter:t,content:r})=>{let n=t?t(e):ed.bold(ed.gray(e));return` - ${ed.bgWhiteBright(ed.italic(ed.black(` ${n} `)))}: ${ed.gray(r.startsWith("http")?ed.underline(r):r)}`}).join("\n");return`
182
- ${aa("豆包应用服务信息")}:
156
+ ${nk(Object.fromEntries(i))}
157
+ Response body: ${nD(n)}`)}function nR(e,t){let r=new AbortController,n=()=>r.abort();return e.once("aborted",n),t.once("close",()=>{e.off("aborted",n),t.writableEnded||n()}),(e.aborted||t.destroyed)&&n(),r.signal}function nN(e,t,r){let n,i=("https:"===r.targetUrl.protocol?_:nh).request(r.targetUrl,{headers:r.requestHeaders,method:e.method},e=>{(n=e,t.destroyed||t.writableEnded)?e.destroy():(nA(t,r.commonHeaders),t.writeHead(e.statusCode??500,r.createResponseHeaders?.(e.headers)??nE(e.headers)),e.pipe(t))}),o=()=>{i.destroy(),n?.destroy()};i.once("error",e=>{if(!t.destroyed&&!t.writableEnded){if(t.headersSent)return void t.destroy(e);nT(t,502,`${r.errorMessage}: ${e.message}`,r.commonHeaders)}}),e.once("aborted",()=>{o()}),t.once("close",()=>{t.writableEnded||o()}),e.pipe(i)}async function nL(e,t,r){let n=t.find(({match:t})=>"string"==typeof t?e.url.pathname===t:t(e.url));await (n?.handle??r)(e)}function nM(e,t){return(r,n)=>{let i=nv(r);i?nL({request:r,response:n,url:i},e,t).catch(e=>(function(e,t){if(nu.error("处理 Web SDK 调试器请求失败",{error:t}),!e.destroyed&&!e.writableEnded){if(e.headersSent)return void e.destroy(t instanceof Error?t:void 0);nT(e,500,"Internal server error")}})(n,e)):nT(n,400,"Bad request")}}let nj=f("../../../node_modules/.pnpm/undici@6.22.0/node_modules/undici/index.js"),nU={"sso-internal":"doubao-developer.bytedance.net","sms-internal":"doubao-developer-open.bytedance.net","sms-external":"hello.doubao-dev.com"},nB={"http:":"80","https:":"443"},nF=new Map;function nW(){return process.env.X_TT_ENV?{"x-use-ppe":"1","x-tt-env":process.env.X_TT_ENV}:{}}function nH(e){let t=e.startsWith("/")?e:`/${e}`;return"/app_developer"===t||t.startsWith("/app_developer/")}async function nV(e,t={}){let r=function(e){var t,r;let n="string"==typeof e?new URL(e):e;if(function(e){let t=nJ(["NO_PROXY","no_proxy"]);if(!t)return!1;let r=nK(e.hostname),n=e.port||nB[e.protocol]||"";for(let e of t.split(",")){let t=function(e){let t=e.trim().toLowerCase();if(!t)return{host:""};if((t=t.replace(/^[a-z][a-z\d+.-]*:\/\//,"").split("/")[0]).startsWith("[")){let e=t.indexOf("]");if(-1!==e)return{host:nK(t.slice(0,e+1)),port:":"===t[e+1]?t.slice(e+2):void 0}}let r=t.indexOf(":")===t.lastIndexOf(":")?t.match(/:(\d+)$/):void 0;return{host:nK(r?t.slice(0,-r[0].length):t),port:r?.[1]}}(e);if(t.host&&(!t.port||t.port===n)){if("*"===t.host)return!0;if(t.host.startsWith("*.")){let e=t.host.slice(1);if(r.endsWith(e))return!0;continue}if(t.host.startsWith(".")){if(r.endsWith(t.host))return!0;continue}if(r===t.host)return!0}}return!1}(n))return;let i="https:"===(t=n.protocol)?nJ(["HTTPS_PROXY","https_proxy","HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):"http:"===t?nJ(["HTTP_PROXY","http_proxy","ALL_PROXY","all_proxy"]):void 0;if(!i)return;let o=(r=i,/^[a-z][a-z\d+.-]*:\/\//i.test(r)?r:`http://${r}`),a=nF.get(o);return a||(a=new nj.kT(o),nF.set(o,a)),a}(e),n=r?{...t,dispatcher:r}:t;return await fetch(e,n)}async function nG({internal:e,domainId:t,path:r,query:n,method:i="GET",body:o,headers:a,signal:s,auth:l=!0}){let d={method:i,body:o,headers:{...nW(),...a}};s&&(d.signal=s);let p=function({internal:e,domainId:t,path:r,query:n}){let i=r.startsWith("/")?r:`/${r}`,o=new URLSearchParams;for(let[e,t]of Object.entries(n||{}))null!=t&&o.append(e,t.toString());let a=o.toString(),s=a?`${i.includes("?")?"&":"?"}${a}`:"",l=nH(i)?q:t?nU[t]:e?nU["sso-internal"]:nU["sms-external"];return`https://${l}${i}${s}`}({internal:e,domainId:t,path:r,query:n}),c=new Headers(d.headers),u=c.has("Cookie");if(!l||!nH(r)||c.has("Authorization")||c.has("X-Developer-Open-Build-Token"))return await nV(p,d);let h=new URL(p).origin,m=er(nV,{baseUrl:h,allowedOrigins:[h]});try{return await m(p,d)}catch(e){if(!(e instanceof eo||e instanceof K))throw e;if(u)return await nV(p,d);throw Error(e instanceof K?"Doubao Apps Platform 登录已过期,请运行 `dbx auth login` 后重试。":"Doubao Apps Platform 请求需要登录,请运行 `dbx auth login` 后重试。")}}async function nq(e){let t=await nG(e),r=t.headers.get("x-tt-logid")||"";if(!t.ok){let e=await t.text();throw Error(JSON.stringify({code:t.status,message:"HTTP 请求失败",data:e,log_id:r}))}let n=await t.json();if(0!==n.code)throw Error(JSON.stringify({...n,log_id:r}));return{...n,log_id:r}}function nJ(e){for(let t of e){let e=process.env[t]?.trim();if(e)return e}}function nK(e){return e.trim().toLowerCase().replace(/^\[/,"").replace(/\]$/,"")}let nz="/__mcp_proxy",nY=f("../../../node_modules/.pnpm/ws@8.21.2/node_modules/ws/lib/websocket-server.js");function nX(e,t,r){e.readyState!==eh.OPEN||e.bufferedAmount>0xa00000?e.terminate():e.send(JSON.stringify({type:t,data:r}))}let nZ=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 nQ extends Error{code;constructor(e,t){super(t),this.name="DebuggerControlError",this.code=e}}function n0(e){return"render_page"===e||"render_widget"===e}function n1(e){return"number"==typeof e&&Number.isFinite(e)}function n2(e){return"number"==typeof e&&Number.isInteger(e)&&e>=1&&e<=9999}function n3(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 n4{clients=new Map;lastSnapshotAtByClientId=new Map;snapshotStore;snapshotsByClientId=new Map;nextCommandId=0;constructor(e){this.snapshotStore=e}registerClient(e,t){let r=this.getSnapshotStore(e),n=this.clients.get(e);n&&this.disconnectClient(n,"Debugger control connection was replaced");let i={clientId:e,lastSnapshotAtMs:this.lastSnapshotAtByClientId.get(e)??0,parallelJobs:new Map,queue:[],socket:t};this.clients.set(e,i),this.snapshotsByClientId.set(e,r),t.once("close",()=>{this.disconnectClient(i,"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 r=Date.now();this.lastSnapshotAtByClientId.set(e,r);let n=this.clients.get(e);n&&(n.lastSnapshotAtMs=r)}execute(e,t,r){let n=void 0!==r?this.clients.get(r):"execute_sandbox_tool_call"===e?this.getToolCallClient():this.getActiveClient();if(!n||n.socket.readyState!==eh.OPEN)return Promise.reject(new nQ("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 i=`control-${Date.now()}-${++this.nextCommandId}`;return new Promise((r,o)=>{let a={command:{...t,commandId:i,type:e},reject:o,resolve:r};"execute_sandbox_tool_call"===e?this.startParallelJob(n,a):(n.queue.push(a),this.flushClient(n))})}handleResult(e){var t,r;let n,i=e.clientId?.trim(),o=e.commandId?.trim(),a=i?this.clients.get(i):void 0,s=o?a?.parallelJobs.get(o):void 0,l=s??a?.activeJob;if(!a||!l||l.command.commandId!==o)return!1;if(!0===e.ok&&n0(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(i),n={target:e.target}):!0===e.ok&&!n0(l.command.type)&&(n=function(e,t){if("set_viewport"===e)return n2(t.width)&&n2(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(n1)?t:void 0;if("scroll_to"===e)return[t.x,t.y,t.maxX,t.maxY,t.viewportWidth,t.viewportHeight].every(e=>n1(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&&n1(t.width)&&n1(t.height)&&(void 0===t.uid||t.uid?.trim())?t:void 0}}}(l.command.type,e.result),"take_snapshot"===l.command.type&&n&&"runtimeSnapshot"in n&&this.storeRuntimeSnapshot(a.clientId,n.runtimeSnapshot)),n)l.resolve(n);else{let t=e.error??{},n=t.code?.trim(),i=n&&nZ.has(n)?n:void 0;l.reject(new nQ(i??(n0(r=l.command.type)?"RENDER_FAILED":"set_viewport"===r?"VIEWPORT_FAILED":"scroll_to"===r?"SCROLL_FAILED":"submit_chat_query"===r?"CHAT_SUBMIT_FAILED":"take_snapshot"===r?"SNAPSHOT_FAILED":"execute_sandbox_tool_call"===r?"TOOL_CALL_FAILED":"take_screenshot"===r?"SCREENSHOT_FAILED":"INSPECTION_FAILED"),t.message?.trim()||"Debugger control command failed"))}return l.timeout&&clearTimeout(l.timeout),s?a.parallelJobs.delete(o):a.activeJob=void 0,this.flushClient(a),!0}getActiveClient(){return[...this.clients.values()].filter(e=>e.socket.readyState===eh.OPEN&&e.lastSnapshotAtMs>0).sort((e,t)=>t.lastSnapshotAtMs-e.lastSnapshotAtMs)[0]}storeRuntimeSnapshot(e,t){let r=this.getSnapshotStore(e).snapshot,n=r?.snapshot;if(!r||!n||n.client_id!==e)return;let i=r.debug_snapshot,{root:o,...a}=t,s=Date.now();this.snapshotStore.snapshot={...r,stored_at:new Date(s).toISOString(),stored_at_ms:s,snapshot:{...n,runtime_snapshot:t},...i?{debug_snapshot:{...i,runtime_snapshot:a}}:{}},this.snapshotStore.updatedAtMs=s,this.noteSnapshot(e)}getConnectedClient(){return[...this.clients.values()].reverse().find(e=>e.socket.readyState===eh.OPEN)}getToolCallClient(){return[...this.clients.values()].reverse().find(e=>e.socket.readyState===eh.OPEN&&e.activeJob?.command.type==="submit_chat_query")??this.getActiveClient()??this.getConnectedClient()}startParallelJob(e,t){let r=t.command.commandId;e.parallelJobs.set(r,t),t.timeout=setTimeout(()=>{e.parallelJobs.delete(r)&&t.reject(new nQ("TOOL_CALL_FAILED","Debugger control command timed out"))},n3(t.command));try{nX(e.socket,"control",t.command)}catch{this.disconnectClient(e,"Debugger control connection was closed")}}flushClient(e){if(e.activeJob||e.socket.readyState!==eh.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 nQ("CHAT_TIMEOUT","Debugger control command timed out"));try{nX(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 nQ(n0(t.command.type)?"RENDER_TIMEOUT":"COMMAND_TIMEOUT","Debugger control command timed out")),this.flushClient(e)}},n3(t.command));try{nX(e.socket,"control",t.command)}catch{this.disconnectClient(e,"Debugger control connection was closed")}}}disconnectClient(e,t,r=!0){if(this.clients.get(e.clientId)!==e)return;this.clients.delete(e.clientId),this.snapshotsByClientId.delete(e.clientId);let n=new nQ("DEBUGGER_DISCONNECTED",t);for(let t of(e.activeJob?.timeout&&clearTimeout(e.activeJob.timeout),e.activeJob?.reject(n),e.activeJob=void 0,e.parallelJobs.values()))t.timeout&&clearTimeout(t.timeout),t.reject(n);for(let t of(e.parallelJobs.clear(),e.queue.splice(0)))t.reject(n);r&&e.socket.readyState===eh.OPEN&&e.socket.close()}}let n9=["page","widget","app"],n5=["log","info","warn","error","debug","eval"],n8=new Set(["id","class","role","title","href","src","type","name","value","placeholder","disabled","checked","selected"]);function n7(e,t){let r=t.pageIdx??0,n=t.pageSize??50,i=r*n,o=e.slice(i,i+n);return{pageIdx:r,pageSize:n,total:e.length,hasMore:i+o.length<e.length,items:o}}function n6(e){if(!e.snapshot)return{stored:!1,updatedAtMs:e.updatedAtMs};let{debug_snapshot:t,...r}=e.snapshot;return{stored:!0,storedAt:r.stored_at,updatedAtMs:r.stored_at_ms??e.updatedAtMs,snapshot:r.snapshot}}function ie(e){return e.value??e.unserializableValue??e.description??e.type??""}function it(e,t){var r,n;let i;return(r=e,"all"===(n=t)?n9:"page"===n||"widget"===n||"app"===n?[n]:(i=r.context,i?.page_id||i?.page_path?["page","app"]:i?.widget_id?["widget"]:n9)).flatMap(t=>{let r,n=(r=e.runtime_console?.[t],{entries:r?.entries??[],updatedAtMs:r?.updated_at_ms??r?.updatedAtMs});return n.entries.map((e,r)=>{var i;let o,a,s,l;return i=n.updatedAtMs,o=e.url??e.location?.url,a=e.lineNumber??e.location?.lineNumber,s=e.columnNumber??e.location?.columnNumber,l=e.id??String(r),{msgid:`${t}:${l}`,target:t,level:e.level??"log",source:e.source??"",timestamp:e.timestamp??0,text:e.message??(e.args??[]).map(ie).filter(Boolean).join(" "),...o?{url:o}:{},...void 0===a?{}:{lineNumber:a},...void 0===s?{}:{columnNumber:s},...void 0===i?{}:{updatedAtMs:i},entry:e}})})}function ir(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 ii(e,t){if("page"===t){let{pageId:t,path:r}=e;if(!t||!r)return;return{pageId:t,path:r,name:e.name??t,isHome:!0===e.isHome}}let{widgetId:r}=e;if(r)return{widgetId:r,name:e.name??r}}let io={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},ia={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},is={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1};function il(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 id(e,t={}){try{return await e()}catch(e){return function(e,t={}){let r=e instanceof nQ?e:new nQ("INSPECTION_FAILED",String(e));return il({...t,error:{code:r.code,message:r.message}},{isError:!0})}(e,t)}}function ip(e,t,r,n){let i=D(r.inputSchema);e.registerTool(t,{...r,inputSchema:i},n)}let ic="/__wsd_mcp";async function iu({request:e,response:t,url:r},n,i){if("OPTIONS"===e.method){nA(t),t.writeHead(204),t.end();return}if("POST"!==e.method)return void nT(t,405,"Method not allowed");let o=r.searchParams.get("clientId")??void 0,a=void 0===o?n:i.getSnapshotStore(o),s=$(()=>{let e,t;return e=new I({name:"doubao-web-sdk-debugger-log",version:"0.0.1"}),t=async e=>{var t;let r=n6(a);if(!r.stored)return il(r);let n=n7((t=r.snapshot,[{source:"simulator",events:t.simulator?.trace_events??[]},{source:"widget_runtime",events:t.widget_runtime_trace_events??[]},{source:"page_runtime",events:t.page_runtime_trace_events??[]}].flatMap(({source:e,events:t})=>t.map((t,r)=>{let n;return n=t.payload??{},{source:e,id:t.id??`${e}:${r}`,timestamp:t.timestamp??0,category:n.category??t.display?.category??"",event:n.event??t.event??"",requestId:n.request_id??n.requestId??n.trace_id??n.trace?.trace_id??"",payload:t.payload??t}}))).filter(t=>{let r,n,i;return r=e.category??[],n=e.event?.trim(),i=e.requestId?.trim(),(0===r.length||r.includes(t.category))&&(!n||t.event===n)&&(!i||t.requestId===i)}),e);return il({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:n.total,pageIdx:n.pageIdx,pageSize:n.pageSize,hasMore:n.hasMore,events:n.items})},ip(e,"list_chat_messages",{annotations:io,description:"List conversation messages in chronological order from the latest debugger snapshot, including message content and generation status.",inputSchema:{}},async()=>{let e=n6(a);if(!e.stored)return il(e);let t=a.snapshot?.debug_snapshot?.simulator??e.snapshot.simulator;return il({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,streamStatus:t?.stream_status,messages:t?.messages??[]})}),ip(e,"list_console_messages",{annotations:io,description:"List runtime console messages captured by the Doubao Web SDK debugger.",inputSchema:{levels:U(C(n5)).optional(),pageIdx:T().int().min(0).optional(),pageSize:T().int().min(1).max(200).optional(),query:k().optional(),target:C(["current","page","widget","app","all"]).optional()}},async e=>{let t=n6(a);if(!t.stored)return il(t);let r=n7(it(t.snapshot,e.target).filter(t=>{let r,n;return r=e.levels??[],n=e.query?.trim().toLowerCase(),(!(r.length>0)||!!r.includes(t.level))&&(!n||[t.text,t.url,t.source,t.target].filter(e=>"string"==typeof e).some(e=>e.toLowerCase().includes(n)))}),e);return il({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,total:r.total,pageIdx:r.pageIdx,pageSize:r.pageSize,hasMore:r.hasMore,messages:r.items.map(({entry:e,...t})=>t)})}),ip(e,"get_console_message",{annotations:io,description:"Get one full runtime console message, including args and stack trace.",inputSchema:{msgid:k()}},async e=>{let t=n6(a);if(!t.stored)return il(t);let r=it(t.snapshot,"all").find(t=>t.msgid===e.msgid);return il({stored:!0,storedAt:t.storedAt,updatedAtMs:t.updatedAtMs,found:!!r,...r?{message:r}:{msgid:e.msgid}})}),ip(e,"get_log_snapshot",{annotations:io,description:"Return the latest compact debugger log snapshot.",inputSchema:{}},async()=>{let e=n6(a);return e.stored?il({stored:!0,storedAt:e.storedAt,updatedAtMs:e.updatedAtMs,snapshot:e.snapshot}):il(e)}),ip(e,"list_render_targets",{annotations:io,description:"List Page and Widget targets that can be rendered by the Web SDK debugger.",inputSchema:{type:C(["all","page","widget"]).optional()}},async e=>{var t,r;let n,i=n6(a);return i.stored?il({stored:!0,storedAt:i.storedAt,updatedAtMs:i.updatedAtMs,...(t=i.snapshot,r=e.type??"all",n=t.render_targets??{},{pages:"widget"===r?[]:(n.pages??[]).map(e=>ii(e,"page")).filter(Boolean),widgets:"page"===r?[]:(n.widgets??[]).map(e=>ii(e,"widget")).filter(Boolean),...n.currentTarget?{currentTarget:n.currentTarget}:{}})}):il(i)}),ip(e,"take_snapshot",{annotations:io,description:"Capture and return a fresh text snapshot of the currently rendered Page or Widget card.",inputSchema:{target:C(["current","page","widget"]).optional(),verbose:N().optional()}},e=>id(async()=>{let t=function(e,t){var r,n;let i,o,a,s=e.runtime_snapshot;if(!s?.target)return{available:!1,reason:"NO_RUNTIME_SNAPSHOT"};let l=s.target,d=l.type,p=t.target??"current";if(("page"===p||"widget"===p)&&d!==p)return{available:!1,reason:"TARGET_MISMATCH",requestedTarget:p,currentTarget:l};if(!s.root)return{available:!1,reason:"NO_RENDERED_TARGET",currentTarget:l};let c=s.selectedUid,u=(r=s.root,n=!0===t.verbose,i=[],o=0,(a=(e,t)=>{var r,s;let{name:l,uid:d}=e;if(!d||!l)return;o+=1;let p=" ".repeat(t);if("text"===e.type)return void i.push(`${p}uid=${d} text ${JSON.stringify(e.text??"")}`);let u=[`uid=${d}`,l],{keyboardFocusable:h=!1,name:m,role:f}=e.accessibility??{};for(let t of(f&&(n||"generic"!==f)&&u.push(`role=${JSON.stringify(f)}`),m&&u.push(`name=${JSON.stringify(m)}`),(n||h)&&u.push(`focusable=${String(h)}`),(e.attributes??[]).map(e=>({name:e.name,value:e.value})).filter(e=>e.name&&(n||n8.has(e.name)||e.name.startsWith("aria-")))))u.push((r=t.name,(s=t.value)?`${r}=${JSON.stringify(s)}`:r));for(let r of(d===c&&u.push("[selected]"),i.push(`${p}${u.join(" ")}`),e.children??[]))a(r,t+1)})(r,0),{actualNodeCount:o,text:i.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 i.execute("take_snapshot",{target:e.target??"current"},o)).runtimeSnapshot},e),r=n6(a),n={stored:r.stored,...r.stored?{storedAt:r.storedAt,updatedAtMs:r.updatedAtMs}:{},...t};return il(n,{text:t.available?t.snapshot:JSON.stringify(n,null,2)})},{available:!1,stored:!1})),ip(e,"get_computed_style",{annotations:io,description:"Get computed CSS styles for an element uid in the current Page or Widget target.",inputSchema:{properties:U(k().min(1)).max(100).optional(),uid:k().min(1)}},({properties:e,uid:t})=>id(async()=>il(await i.execute("get_computed_style",{uid:t,...e?{properties:e}:{}},o)))),ip(e,"get_element_rect",{annotations:io,description:"Get x, y, width, and height for an element uid in the emulated viewport.",inputSchema:{uid:k().min(1)}},({uid:e})=>id(async()=>il(await i.execute("get_element_rect",{uid:e},o)))),ip(e,"take_screenshot",{annotations:io,description:"Take a screenshot of the current Page or Widget target, or of one element uid.",inputSchema:{format:C(["png","jpeg","webp"]).optional(),quality:T().min(0).max(100).optional(),uid:k().min(1).optional()}},({format:e="png",quality:t,uid:r})=>id(async()=>{let n=await i.execute("take_screenshot",{format:e,...void 0!==t?{quality:t}:{},...r?{uid:r}:{}},o),{data:a,...s}=n;return il({captured:!0,...s},{image:{data:a,mimeType:n.mimeType}})},{captured:!1})),ip(e,"scroll_to",{annotations:is,description:"Scroll a Page or Widget container to absolute coordinates, or return its current scroll position.",inputSchema:{uid:k().min(1).optional(),x:T().min(0).optional(),y:T().min(0).optional()}},({uid:e,x:t,y:r})=>id(async()=>il({scrolled:!0,...await i.execute("scroll_to",{uid:e,x:t,y:r},o)}),{scrolled:!1})),ip(e,"set_viewport",{annotations:is,description:"Set the current Page or Widget emulated viewport size.",inputSchema:{height:T().int().min(1).max(9999),width:T().int().min(1).max(9999)}},({height:e,width:t})=>id(async()=>il({updated:!0,viewport:await i.execute("set_viewport",{height:e,width:t},o)}),{updated:!1})),ip(e,"render_page",{annotations:ia,description:"Render a Page route in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{url:k().min(1)}},({url:e})=>id(async()=>il({rendered:!0,target:(await i.execute("render_page",{url:e},o)).target}),{rendered:!1})),ip(e,"render_widget",{annotations:ia,description:"Render a Widget card in the local debugger. This runs application lifecycle code and may issue network requests.",inputSchema:{structuredContent:B(k(),O()).optional(),widgetId:k().min(1)}},({structuredContent:e,widgetId:t})=>id(async()=>il({rendered:!0,target:(await i.execute("render_widget",{structuredContent:e??{},widgetId:t},o)).target}),{rendered:!1})),ip(e,"submit_chat_query",{annotations:ia,description:"Submit a chat query through the connected Web SDK debugger and wait for the simulator response to complete.",inputSchema:{query:k().trim().min(1)}},({query:e})=>id(async()=>il({submitted:!0,...await i.execute("submit_chat_query",{query:e},o)}),{submitted:!1})),ip(e,"list_agent_trace_events",{annotations:io,description:"List Agent-side simulator and runtime trace events captured by the debugger.",inputSchema:{category:U(k()).optional(),event:k().optional(),pageIdx:T().int().min(0).optional(),pageSize:T().int().min(1).max(200).optional(),requestId:k().optional()}},t),ip(e,"list_agent_tool_calls",{annotations:io,description:"List Agent-side simulator tool calls captured by the debugger.",inputSchema:{pageIdx:T().int().min(0).optional(),pageSize:T().int().min(1).max(200).optional(),query:k().optional(),requestId:k().optional(),status:U(k()).optional(),toolName:k().optional()}},async e=>{var t;let r=n6(a);if(!r.stored)return il(r);let n=n7((t=r.snapshot,(t.simulator?.tool_calls??[]).map(ir)).filter(t=>{let r,n,i,o;return r=e.requestId?.trim(),n=e.toolName?.trim(),i=e.status??[],o=e.query?.trim().toLowerCase(),(!r||t.requestId===r)&&(!n||t.toolName===n)&&(!(i.length>0)||!!i.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 il({stored:!0,storedAt:r.storedAt,updatedAtMs:r.updatedAtMs,total:n.total,pageIdx:n.pageIdx,pageSize:n.pageSize,hasMore:n.hasMore,toolCalls:n.items})}),e}),l=L(s);try{await l(e,t)}catch(e){t.headersSent?t.destroy(e instanceof Error?e:void 0):nT(t,500,e instanceof Error?e.message:String(e))}finally{await s.close().catch(()=>void 0)}}let ih="/__web_sdk_debug_scenes",im="/__web_sdk_widget_view_data_templates",ig={"Cache-Control":"no-cache"};async function iy(e,t){try{let r=await t?.()??{templatesByEntry:{},templatesByWidget:{}};nC(e,200,r,ig)}catch(t){nu.error("加载 Widget viewData 模板失败",{error:t}),nC(e,500,{templatesByEntry:{},templatesByWidget:{}},ig)}}let ib=f("node:crypto"),i_="/__dbx_real_device_debug",iv=`${i_}/state`,iw=`${i_}/start`,iS=`${i_}/cancel`,iE=`${i_}/qr`;class ix{accessToken;provider;getDebugContext(){if(this.provider&&this.accessToken)return{stateEndpoint:iv,startEndpoint:iw,cancelEndpoint:iS,qrEndpoint:iE,accessToken:this.accessToken,pollIntervalMs:500}}setProvider(e){this.provider=e,this.accessToken=e?ib.randomBytes(32).toString("hex"):void 0}dispose(){this.setProvider(void 0)}getRequestRoutes(){return[{match:e=>e.pathname.startsWith(i_),handle:({request:e,response:t,url:r})=>this.serveRequest(e,t,r)}]}async serveRequest(e,t,r){if(!this.validateRequest(e,t))return;let n=this.provider;if(!n)return this.writeError(t,503,"REAL_DEVICE_DEBUG_UNAVAILABLE","Physical device debugging is unavailable");let i=await this.readJsonBody(e,t);if(i)try{if(r.pathname===iv||r.pathname===iw){if(Object.keys(i).length>0)return this.writeError(t,400,"INVALID_REQUEST","Unexpected request fields");let e=r.pathname===iv?await n.getState():await n.start();nC(t,200,e);return}if(r.pathname===iS){let e=i.operationId;if("string"!=typeof e||!e||1!==Object.keys(i).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid operationId");nC(t,200,await n.cancel(e));return}if(r.pathname===iE){let{operationId:e,kind:r}=i;if("string"!=typeof e||!e||"modern"!==r&&"legacy"!==r||2!==Object.keys(i).length)return this.writeError(t,400,"INVALID_REQUEST","Invalid QR request");let o=await n.getQrImage(e,r);if(!o)return this.writeError(t,404,"QR_NOT_FOUND","QR image is unavailable");nA(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 r,n;let i,o,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||(r=s,n=this.accessToken,o=(i=new TextEncoder).encode(r),a=i.encode(n),!(o.length===a.length&&ib.timingSafeEqual(o,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 r,n;try{r=await nO(e,t,4096)}catch{return this.writeError(t,413,"PAYLOAD_TOO_LARGE","Request body is too large")}if(!r.trim())return{};try{n=JSON.parse(r)}catch{return this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body")}return!n||"object"!=typeof n||Array.isArray(n)?this.writeError(t,400,"INVALID_REQUEST","Invalid JSON body"):n}writeError(e,t,r,n){e.writableEnded||e.destroyed||nC(e,t,{error:{code:r,message:n}})}}let iA={"Cache-Control":"no-cache"};async function iT({request:e,response:t,url:r},n,i){let o;if("OPTIONS"===e.method){nA(t,iA),t.writeHead(204),t.end();return}if("GET"===e.method){let e;return void nC(t,200,function(e,t){if(!e?.debug_snapshot)return e;let{debug_snapshot:r,...n}=e;return t?{...n,snapshot:r}:n}(n.snapshot,null!=(e=r.searchParams.get("DEBUG"))&&"0"!==e&&"false"!==e.toLowerCase())??{stored:!1},iA)}if("POST"!==e.method)return void nC(t,405,{error:"Method not allowed"},iA);try{o=JSON.parse(await nO(e,t,0xa00000))}catch(e){nC(t,400,{error:e.message},iA);return}iC(n,i,o),nC(t,200,{ok:!0,updated_at_ms:n.updatedAtMs},iA)}function iC(e,t,r){var n;let i,o="string"==typeof(i=(n=r).snapshot.client_id??n.debug_snapshot?.client_id)&&i.trim()?i.trim():void 0;r=function(e,t){let r=e?.snapshot,n=t.snapshot,i=r?.runtime_snapshot,o=n.runtime_snapshot;if(!r||!i||r.client_id!==n.client_id)return t;if(!o){var a;let e;if(a=i.target,e=function(e){let t=e.render_targets?.currentTarget;if(t)return t;let r=e.context;if(r){if(Object.hasOwn(r,"widget_id"))return{type:"widget"};if(Object.hasOwn(r,"page_id")||Object.hasOwn(r,"page_path"))return{type:"page"}}}(n),a&&e&&(1===Object.keys(e).length?e.type!==a.type:JSON.stringify(e)!==JSON.stringify(a)))return t;let{root:r,...o}=i;return{...t,snapshot:{...n,runtime_snapshot:i},...t.debug_snapshot?{debug_snapshot:{...t.debug_snapshot,runtime_snapshot:o}}:{}}}return Object.hasOwn(o,"root")||!Object.hasOwn(i,"root")||i.updatedAtMs!==o.updatedAtMs||JSON.stringify(i.target)!==JSON.stringify(o.target)?t:{...t,snapshot:{...n,runtime_snapshot:{...o,root:i.root}}}}(o?t.getSnapshotStore(o).snapshot:e.snapshot,r),e.snapshot=r,e.updatedAtMs=Date.now(),t.noteSnapshot(o)}let iI="/app_developer/api/sandbox/",iO=`${iI}session/business_info/update`,iP=new Set([`${iI}resources/notices/pull`,`${iI}resources/tasks/pull`]),ik={"Access-Control-Expose-Headers":n_},iD=new Set;function i$(e,t,r,n,i,o){if("applet0930"!==process.env.DEBUG)return!1;let a=`${i[nb]??""} ${e} ${t.pathname}`,s=iP.has(t.pathname);if(s&&r>=500){if(iD.has(a))return!1;iD.add(a)}else s&&r<500&&iD.delete(a);let l=Number(process.hrtime.bigint()-n)/1e6;return nu.request({method:e,url:`${t.pathname}${t.search}`,statusCode:r,durationMs:l,headers:i,logId:o}),!0}function iR({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a}){n$({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a})}function iN(e,t,r){return r&&!(iP.has(e.pathname)&&t>=500)}function iL(e,t){if(e.pathname!==iO||!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 iM({method:e,request:t,requestBody:r,requestHeaders:n,response:i,targetUrl:o,usePlatformFetch:a}){let s=process.hrtime.bigint(),l=nR(t,i);try{let t,d=a?await nG({internal:!0,path:`${o.pathname}${o.search}`,method:e,body:r,headers:n,signal:l}):await fetch(o,{body:"GET"===e||"HEAD"===e?void 0:r,headers:n,method:e,signal:l}),p=i$(e,o,d.status,s,n,d.headers.get(n_)??void 0);if(i.destroyed||i.writableEnded)return void d.body?.cancel().catch(()=>void 0);let c=await nP(d);return iN(o,d.status,p)&&iR({method:e,requestBody:iL(o,r),requestHeaders:n,responseBody:c,responseHeaders:d.headers,statusCode:d.status,targetUrl:o}),i.destroyed||i.writableEnded||(t=nx(d.headers,[n_]),nA(i,ik),i.writeHead(d.status,t),i.end(c)),{body:c,ok:d.ok}}catch(d){if(i.destroyed||i.writableEnded||l.aborted)return;let t=`Failed to proxy sandbox request: ${d instanceof Error?d.message:String(d)}`,a=i$(e,o,502,s,n);iN(o,502,a)&&iR({method:e,requestBody:iL(o,r),requestHeaders:n,responseBody:t,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:o}),nT(i,502,t,ik)}}async function ij(e,t,r={}){let n;if("POST"!==e.method)return void nT(t,405,"Method not allowed",ik);try{n=JSON.parse(await nO(e,t,0xa00000))}catch(e){nT(t,400,`Invalid sandbox proxy payload: ${e.message}`,ik);return}let i=function(e,t){if(!e.url)return;let r=new URL(e.url,t);if(!r.pathname.startsWith(iI))return;let n=new URL(`${r.pathname}${r.search}`,t);var i=e.params;if(i)for(let[e,t]of Object.entries(i))null!=t&&n.searchParams.set(e,String(t));return n}(n,r.targetOrigin??Q);if(!i)return void nT(t,404,"Sandbox endpoint not found",ik);if(!r.sandboxSessionId)return void nC(t,200,{code:-1,message:"无法模拟平台服务:当前未获取到开发者登录态或 Sandbox session 创建失败。"},ik);let o=function(e,t,r,n){if(t.pathname.startsWith(`${iI}session/`)&&t.pathname!==`${iI}session/create`)return JSON.stringify({..."object"==typeof e.data&&null!==e.data?e.data:{},sandbox_session_id:n});if(void 0===e.data)return;if("object"!=typeof e.data||null===e.data||!r)return JSON.stringify(e.data);let i={...e.data};return t.pathname.startsWith(`${iI}jsb/`)&&"app_key"in i&&(i.app_key=r),t.pathname===`${iI}passport/open/auth`&&"client_key"in i&&(i.client_key=r),JSON.stringify(i)}(n,i,r.sandboxAppId,r.sandboxSessionId),a=n.method||"POST",s=function(e,t,r,n,i){let o=Object.fromEntries(Object.entries(nS({...e.headers,...r,...void 0===n?{}:{"content-length":String(Buffer.byteLength(n))},"content-type":"application/json"},t,{...nW(),...i?{[nb]:i}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]));for(let e of Object.keys(o))"accept-encoding"===e.toLowerCase()&&delete o[e];return o["accept-encoding"]="identity",o}(e,i,n.headers,o,r.sandboxSessionId),l=await iM({method:a,request:e,requestBody:o,requestHeaders:s,response:t,targetUrl:i,usePlatformFetch:!r.targetOrigin});if(i.pathname===iO&&l?.ok)try{let e=JSON.parse(l.body.toString("utf8"));(void 0===e.code||0===e.code)&&r.onBusinessInfoUpdated?.(function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t="string"==typeof e.csr_pem?e.csr_pem.trim():"",r="string"==typeof e.phone_num?e.phone_num.trim():"";return r?{...t?{csrPem:t}:{},phoneNum:r}:void 0}(n.data))}catch{}}let iU=f("node:util"),iB="/app_developer/api/sandbox/bridge/events",iF="/app_developer/api/sandbox/bridge/response",iW=new Set(["connection","content-length","host"]),iH=new Set(["heartbeat"]),iV=[500,1e3,2e3,5e3],iG=0;function iq(e){return e.length<=8?e:`${e.slice(0,4)}...${e.slice(-4)}`}function iJ(e,t=new Headers,r=""){return{response:e,responseHeaders:Object.fromEntries(t),statusText:r}}async function iK(e){let t,r,n=e.request_id||"";if(!n)return iJ({error_message:"bridge request_id is required",http_status:0,request_id:n,success:!1});if(!e.path?.startsWith("/"))return iJ({error_message:`invalid bridge request path: ${e.path??""}`,http_status:0,request_id:n,success:!1});let i=function(e){if(e.origin)try{var t;return new URL(e.path??"/",(t=e.origin).endsWith("/")?t:`${t}/`)}catch{return}}(e);if(!i)return iJ({error_message:`invalid bridge request origin: ${e.origin??""}`,http_status:0,request_id:n,success:!1});let o=(e.method||"GET").toUpperCase(),a=function(e){let t={};for(let[r,n]of Object.entries(e??{}))!r||iW.has(r.toLowerCase())||(t[r]=n);return t}(e.headers),s="GET"===o||"HEAD"===o?void 0:e.body??"",l=new AbortController,d=setTimeout(()=>l.abort(),(t="number"==typeof e.timeout_ms?e.timeout_ms:3e3,r="number"==typeof e.deadline_ms?e.deadline_ms-Date.now():t,Math.max(1,Math.min(t,r))));try{var p;let e=await fetch(i,{body:s,headers:a,method:o,redirect:"manual",signal:l.signal}),t=await e.text();return p={method:o,requestBody:s,requestHeaders:a,responseBody:t,responseHeaders:e.headers,statusCode:e.status,targetUrl:i},n$(p),iJ({body:t,http_status:e.status,request_id:n,success:!0},e.headers,e.statusText)}catch(e){return n$({method:o,requestBody:s,requestHeaders:a,responseBody:e instanceof Error?e.message:String(e),responseHeaders:new Headers,statusCode:0,targetUrl:i}),iJ({error_message:e instanceof Error?e.message:String(e),http_status:0,request_id:n,success:!1})}finally{clearTimeout(d)}}function iz(e,t=new Set){if(Array.isArray(e)){for(let r of e)iz(r,t);return[...t]}if(!e||"object"!=typeof e)return[...t];for(let[r,n]of Object.entries(e)){if(r.toLowerCase().replace(/[_-]/g,"").includes("logid")){if("string"==typeof n&&n)t.add(n);else if(Array.isArray(n))for(let e of n)"string"==typeof e&&e&&t.add(e);continue}iz(n,t)}return[...t]}function iY(e,t){e.onLog?.(t)}function iX(e){try{return JSON.parse(e)}catch{return}}function iZ({detail:e,requestHeaders:t,status:r,targetUrl:n}){if("applet0930"===process.env.DEBUG){if("number"==typeof r)return void nu.request({method:"CONNECT",url:n.pathname,statusCode:r,headers:t,context:{detail:e}});nu.info("Bridge connection pending",{url:n.pathname,detail:e,ppe:eS(t)})}}function iQ(e,t={}){"applet0930"===process.env.DEBUG&&nu.info(e,t)}async function i0(e,t){let r=JSON.stringify({sandbox_session_id:e.sandboxSessionId,...t}),n={"content-type":"application/json",[nb]:e.sandboxSessionId,...nW()};if(e.targetOrigin){let t=new URL(iF,e.targetOrigin),i=await fetch(t,{body:r,headers:n,method:"POST"}),o=await i.text();if(n$({method:"POST",requestBody:r,requestHeaders:n,responseBody:o,responseHeaders:i.headers,statusCode:i.status,targetUrl:t}),!i.ok)throw Error(`upload bridge response failed: ${i.status} ${o}`);return{responseBody:o,responseHeaders:Object.fromEntries(i.headers),responsePayload:iX(o)}}let i=new URL(iF,Q),o=await nG({body:r,headers:n,internal:!0,method:"POST",path:iF}),a=await o.text();if(n$({method:"POST",requestBody:r,requestHeaders:n,responseBody:a,responseHeaders:o.headers,statusCode:o.status,targetUrl:i}),!o.ok)throw Error(`upload bridge response failed: ${o.status} ${a}`);return{responseBody:a,responseHeaders:Object.fromEntries(o.headers),responsePayload:iX(a)}}async function i1(e,t){let r;try{r=JSON.parse(t)}catch(e){nu.warn("Sandbox Bridge request parse failed",{reason:e.message});return}let n=Date.now(),i=`bridge-${n}-${++iG}`,o=r.request_id||"",a={id:i,request:r,requestId:o,sandboxSessionId:e.sandboxSessionId,timestamp:n};iY(e,{...a,logIds:iz(r),status:"pending",updatedAtMs:n});let s=await iK(r),l={...s.response,headers:s.responseHeaders,status_text:s.statusText};try{let t=await i0(e,s.response);iY(e,{...a,logIds:iz([r,l,t]),response:l,status:s.response.success?"success":"error",updatedAtMs:Date.now()})}catch(t){throw iY(e,{...a,errorMessage:t instanceof Error?t.message:String(t),logIds:iz([r,l]),response:l,status:"error",updatedAtMs:Date.now()}),t}}async function i2(e,t,r){let n={sandbox_session_id:e.sandboxSessionId},i=new URL(`${iB}?sandbox_session_id=${encodeURIComponent(e.sandboxSessionId)}`,Q),o=(p=e.sandboxSessionId,{accept:"text/event-stream",host:i.host,[nb]:p,...nW()});iZ({detail:`host=${o.host} session=${iq(e.sandboxSessionId)}`,requestHeaders:o,status:"pending",targetUrl:i}),iQ("bridge/events request",{headers:{accept:o.accept,host:o.host,[nb]:iq(e.sandboxSessionId),"x-tt-env":o["x-tt-env"],"x-use-ppe":o["x-use-ppe"]},path:iB,query:n});let a=await nG({headers:o,internal:!0,method:"GET",path:iB,query:n,signal:t});if(iZ({detail:`content-type=${a.headers.get("content-type")??""}`,requestHeaders:o,status:a.status,targetUrl:i}),!a.ok||!a.body){let e=await a.text().catch(()=>"");n$({method:"GET",requestBody:void 0,requestHeaders:o,responseBody:e,responseHeaders:a.headers,statusCode:a.status,targetUrl:i}),nu.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}n$({method:"GET",requestBody:void 0,requestHeaders:o,responseBody:"",responseHeaders:a.headers,statusCode:a.status,targetUrl:i}),r?.();let s=a.body.getReader(),l=new iU.TextDecoder,d="";for(;!t.aborted;){let{done:t,value:r}=await s.read();if(t){iQ("bridge/events stream ended",{session:iq(e.sandboxSessionId)});break}let n=(d+=l.decode(r,{stream:!0})).search(/\r?\n\r?\n/);for(;n>=0;){let t=d.slice(0,n),r=d.slice(n).match(/^\r?\n\r?\n/);d=d.slice(n+(r?.[0].length??2));let s=function(e){let t="message",r=[];for(let n of e.split(/\r?\n/)){if(n.startsWith("event:")){t=n.slice(6).trim();continue}n.startsWith("data:")&&r.push(n.slice(5).trimStart())}return{data:r.join("\n"),name:t}}(t);if(!function(e,t){if("applet0930"!==process.env.DEBUG||iH.has(e.name))return;let r=function(e){try{let t=JSON.parse(e);return"string"==typeof t.request_id?t.request_id:void 0}catch{return}}(e.data);nu.info("Bridge event received",{event:e.name,requestId:r,ppe:eS(t)}),nu.info(`Event detail
158
+ ${e.data}`)}(s,o),"bridge_request"===s.name){var p,c=a.headers,u=a.status;n$({method:`EVENT ${s.name}`,requestBody:s.data,requestHeaders:o,responseBody:"",responseHeaders:c,statusCode:u,targetUrl:i}),i1(e,s.data).catch(e=>{nu.warn("Sandbox Bridge request failed",{reason:e.message})})}else if("TOOL_CALL"===s.name){let t=es(iX(s.data));t?Promise.resolve(e.onSimulatorToolCall?.(t)).catch(e=>{nu.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})}):nu.warn("Sandbox tool call event parse failed")}else if("sandbox_resource_changed"===s.name){let t=function(e){let t=iX(e);if(!t||"object"!=typeof t||Array.isArray(t))return;let r=t.data&&"object"==typeof t.data&&!Array.isArray(t.data)?t.data:void 0,n=r?.resource,i=r?.action,o=r?.resource_id,a=r?.revision;if(("notice"===n||"task"===n)&&("upsert"===i||"remove"===i)&&"string"==typeof o&&o&&("number"==typeof a||"string"==typeof a))return{action:i,eventId:"string"==typeof t.event_id?t.event_id:"",occurredAtMs:"number"==typeof t.occurred_at_ms?t.occurred_at_ms:void 0,resource:n,resourceId:o,revision:a}}(s.data);t?e.onResourceChanged?.(t):nu.warn("Sandbox resource event parse failed")}else if("card_delta"===s.name){let t=function(e){let t=iX(e);if(!t||"object"!=typeof t||Array.isArray(t))return;let r=t.data&&"object"==typeof t.data&&!Array.isArray(t.data)?t.data:void 0,n=r?.card_delta;if(!("card_delta"!==t.type||!n||"object"!=typeof n||Array.isArray(n)))return n}(s.data);t?e.onSimulatorEvent?.({payload:t,type:"card_delta"}):nu.warn("Sandbox simulator event parse failed",{event:s.name})}else if("get_simulator_card_snapshots"===s.name){let t=iX(s.data);t&&"object"==typeof t&&!Array.isArray(t)?e.onSimulatorEvent?.({payload:t,type:s.name}):nu.warn("Sandbox simulator event parse failed",{event:s.name})}n=d.search(/\r?\n\r?\n/)}}}async function i3(e,t){let r=0,n=!1;for(;!t.aborted;){try{await i2(e,t,()=>{n=!1,e.onConnectionStatusChange?.("connected")}),r=0}catch(r){if(t.aborted)return;let e=r.status;if(n||(nu.warn("无法接收来自平台服务的请求",{reason:r.message}),n=!0),401===e||403===e||404===e)return}e.onConnectionStatusChange?.("reconnecting"),await (0,v.setTimeout)(iV[Math.min(r,iV.length-1)],void 0,{signal:t}).catch(()=>void 0),r+=1}}let i4=f("node:net"),i9="/__web_sdk_sandbox_bridge_logs",i5="DOUBAO_APPS_SANDBOX_BRIDGE_ORIGINS",i8="/app_developer/api/sandbox/session/business_info/update";function i7(e){if(!e)return!1;try{return to.statSync(e).isFile()}catch{return!1}}async function i6({body:e,headers:t,method:r,sandboxPath:n,targetOrigin:i,targetUrl:o}){let a=new AbortController,s=setTimeout(()=>a.abort(),3e4);try{return i?await fetch(o,{body:e,headers:t,method:r,signal:a.signal}):await nG({internal:!0,path:n,body:e,headers:t,method:r,signal:a.signal})}catch(e){if(a.signal.aborted)throw Error(`Sandbox session 请求超时(30000ms):${o}`);throw e}finally{clearTimeout(s)}}function oe(e,t){return(e?.[t]??process.env[t])?.trim()??""}function ot(e,t,r,n,i,o){if("applet0930"!==process.env.DEBUG)return;let a=Number(process.hrtime.bigint()-n)/1e6;nu.request({method:e,url:`${t.pathname}${t.search}`,statusCode:r,durationMs:a,headers:i,logId:o})}function or({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a}){n$({method:e,requestBody:t,requestHeaders:r,responseBody:n,responseHeaders:i,statusCode:o,targetUrl:a})}async function on(e,t,r,n,i,o){let a,s,l="/app_developer/api/sandbox/session/create",d="POST",p=function(){let e=new Set;for(let t of(process.env[i5]??"").split(",")){let r=t.trim();if(r)try{let t=new URL(r),n=t.hostname.replace(/^\[|\]$/g,"").toLowerCase(),i="localhost"===n||"::1"===n||4===(0,i4.isIP)(n)&&n.startsWith("127.");if("http:"!==t.protocol&&"https:"!==t.protocol||!i)throw Error("only loopback HTTP(S) origins are allowed");e.add(t.origin)}catch(e){throw Error(`${i5} contains an invalid origin: ${r} (${e instanceof Error?e.message:String(e)})`)}}return[...e]}(),c=JSON.stringify({sandbox_project_id:e,manifest:r?.()??(i7(t)?to.readFileSync(t,"utf8"):""),business_templates:i7(n)?to.readFileSync(n,"utf8"):"",...o?{app_id:o}:{},...p.length>0?{bridge_origins:p}:{}}),u={"content-type":"application/json",...nW()},h=new URL(l,i??Q),m=process.hrtime.bigint();try{a=await i6({body:c,headers:u,method:d,sandboxPath:l,targetOrigin:i,targetUrl:h})}catch(t){let e=`创建 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw ot(d,h,502,m,u),or({method:d,requestBody:c,requestHeaders:u,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:h}),t}let f=a.headers.get(n_)||"",g=await a.text();ot(d,h,a.status,m,u,f),or({method:d,requestBody:c,requestHeaders:u,responseBody:g,responseHeaders:a.headers,statusCode:a.status,targetUrl:h});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 oi(e,t,r,n,i,o){try{return await on(e,t,r,n,i,o)}catch(e){return nu.warn(`Sandbox 平台服务模拟已跳过:${e instanceof Error?e.message:String(e)}`),{appId:"",sessionId:""}}}function oo(){return{csrUploaded:!1,phoneNumberUploaded:!1}}function oa(e){return{csrUploaded:!!e,phoneNumberUploaded:!0}}async function os(e,t){let r,n,i="/app_developer/api/sandbox/session/business_info/get",o="POST",a=JSON.stringify({sandbox_session_id:e}),s={"content-type":"application/json",...nW()},l=new URL(i,t??Q),d=process.hrtime.bigint();try{r=await i6({body:a,headers:s,method:o,sandboxPath:i,targetOrigin:t,targetUrl:l})}catch(e){throw ot(o,l,502,d,s),e}let p=r.headers.get(n_)||"",c=await r.text();ot(o,l,r.status,d,s,p);try{n=JSON.parse(c||"{}")}catch{throw or({method:o,requestBody:a,requestHeaders:s,responseBody:JSON.stringify({omitted:"invalid business info response"}),responseHeaders:r.headers,statusCode:r.status,targetUrl:l}),Error(`获取 Sandbox session 信息失败:HTTP ${r.status} 响应不是有效 JSON${p?`,log_id=${p}`:""}`)}let u={csrUploaded:!!n.data?.csr_pem?.trim(),phoneNumberUploaded:!!n.data?.phone_num?.trim()};if(or({method:o,requestBody:a,requestHeaders:s,responseBody:JSON.stringify({code:n.code,data:u,log_id:n.log_id}),responseHeaders:r.headers,statusCode:r.status,targetUrl:l}),!r.ok||void 0!==n.code&&0!==n.code)throw Error(`获取 Sandbox session 信息失败:${n.message||r.statusText||r.status}${n.log_id||p?`,log_id=${n.log_id||p}`:""}`);return u}async function ol(e,t){if(!e)return oo();try{return await os(e,t)}catch(e){return nu.warn(`Sandbox session 信息查询已跳过:${e instanceof Error?e.message:String(e)}`),oo()}}async function od(e,t,r){let n,i,o="POST",a=JSON.stringify({...e.csrPem?{csr_pem:e.csrPem}:{},phone_num:e.phoneNum,sandbox_session_id:t}),s={"content-type":"application/json",...nW(),[nb]:t},l=new URL(i8,r??Q),d=process.hrtime.bigint();try{n=await i6({body:a,headers:s,method:o,sandboxPath:i8,targetOrigin:r,targetUrl:l})}catch(e){throw ot(o,l,502,d,s),e}let p=n.headers.get(n_)||"",c=await n.text();ot(o,l,n.status,d,s,p),or({method:o,requestBody:JSON.stringify({...e.csrPem?{csr_pem:"[redacted]"}:{},phone_num:"[redacted]",sandbox_session_id:t}),requestHeaders:s,responseBody:c,responseHeaders:n.headers,statusCode:n.status,targetUrl:l});try{i=JSON.parse(c||"{}")}catch{throw Error(`更新 Sandbox session 信息失败:HTTP ${n.status} 响应不是有效 JSON${p?`,log_id=${p}`:""}`)}if(!n.ok||void 0!==i.code&&0!==i.code)throw Error(`更新 Sandbox session 信息失败:${i.message||n.statusText||n.status}${i.log_id||p?`,log_id=${i.log_id||p}`:""}`)}async function op(e,t,r,n){if(e&&t.phoneNum&&(!r||t.csrPem))try{return await od({...t.csrPem?{csrPem:t.csrPem}:{},phoneNum:t.phoneNum},e,n),nu.info("Sandbox business info 已自动上传",{sessionId:e}),oa(t.csrPem)}catch(e){nu.warn(`Sandbox business info 自动上传已跳过:${e instanceof Error?e.message:String(e)}`);return}}async function oc(e,t){let r,n="/app_developer/api/sandbox/session/revoke",i="POST",o=JSON.stringify({sandbox_session_id:e}),a={"content-type":"application/json",...nW()},s=new URL(n,t??Q),l=process.hrtime.bigint();try{r=await i6({body:o,headers:a,method:i,sandboxPath:n,targetOrigin:t,targetUrl:s})}catch(t){let e=`撤回 Sandbox session 请求失败:${t instanceof Error?t.message:String(t)}`;throw ot(i,s,502,l,a),or({method:i,requestBody:o,requestHeaders:a,responseBody:e,responseHeaders:new Headers({"content-type":"text/plain; charset=utf-8"}),statusCode:502,targetUrl:s}),t}let d=r.headers.get(n_)||"",p=await r.text();ot(i,s,r.status,l,a,d),or({method:i,requestBody:o,requestHeaders:a,responseBody:p,responseHeaders:r.headers,statusCode:r.status,targetUrl:s});let c=JSON.parse(p||"{}");if(!r.ok||0!==c.code)throw Error(`撤回 Sandbox session 失败:${c.message||r.statusText||r.status}${c.log_id||d?`,log_id=${c.log_id||d}`:""}`)}async function ou(e){if(e.recreatePromise)return e.recreatePromise;e.recreatePromise=(async()=>{var t;let r=e.sandboxSessionId;r&&await oc(r,e.sandboxTargetOrigin),e.bridge?.close(),e.bridge=void 0;let n=await on(e.sandboxProjectId,e.simulatorManifestPath,e.simulatorManifestReader,e.simulatorBusinessTemplatesPath,e.sandboxTargetOrigin,e.sandboxSessionAppId),i=n.sessionId,o=!e.sandboxSessionAppId,a=await op(i,e.businessInfoInput,o,e.sandboxTargetOrigin)??await ol(i,e.sandboxTargetOrigin);return e.sandboxAppId=n.appId,e.sandboxSessionId=i,e.businessInfo=a,(t=e).resourceConnectionStatus="connecting",t.resourceEventSequence=0,t.resourceEvents.length=0,t.simulatorEventSequence=0,t.simulatorEvents.length=0,t.resourceGeneration+=1,of(t),e.bridge=og(e,i),nu.info("Sandbox session 已重建",{sessionId:i}),{...n,businessInfoUploaded:a.phoneNumberUploaded&&(!o||a.csrUploaded)}})();try{return await e.recreatePromise}finally{e.recreatePromise=void 0}}function oh(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 om(e){clearTimeout(e.logBroadcastTimer),e.logBroadcastTimer=void 0;let t=oh(e);for(let r of e.eventListeners)r(t)}function of(e){e.resourceEventsUpdatedAtMs=Math.max(Date.now(),e.resourceEventsUpdatedAtMs+1),om(e)}function og(e,t){var r={onConnectionStatusChange:t=>{e.resourceConnectionStatus!==t&&(e.resourceConnectionStatus=t,of(e))},onLog:t=>{let r=e.bridgeLogs.findIndex(e=>e.id===t.id);r>=0?e.bridgeLogs[r]=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(()=>om(e),50)},onResourceChanged:t=>{e.resourceEvents.push({...t,sequence:++e.resourceEventSequence}),e.resourceEvents.length>200&&e.resourceEvents.splice(0,e.resourceEvents.length-200),of(e)},onSimulatorEvent:t=>{e.simulatorEvents.push({...t,sequence:++e.simulatorEventSequence}),e.simulatorEvents.length>200&&e.simulatorEvents.splice(0,e.simulatorEvents.length-200),of(e)},onSimulatorToolCall:e.onSimulatorToolCall,sandboxSessionId:t,targetOrigin:e.sandboxTargetOrigin};if(!r.sandboxSessionId)return void nu.warn("Sandbox Bridge skipped: missing sandbox session id");let n=new AbortController;return iQ("start sandbox bridge",{session:iq(r.sandboxSessionId)}),r.onConnectionStatusChange?.("connecting"),i3(r,n.signal),{close:()=>n.abort()}}function oy(e){e.bridgeLogs.length=0,e.bridgeLogsUpdatedAtMs=Math.max(Date.now(),e.bridgeLogsUpdatedAtMs+1),om(e)}async function ob(e,t,r){if("POST"!==e.method)return void nT(t,405,"Method not allowed");if(!r)return void nT(t,503,"Sandbox session is not initialized");try{let n=await nO(e,t,1048576);if(n){let e=JSON.parse(n);if(void 0!==e.csrPem&&"string"!=typeof e.csrPem||"string"!=typeof e.phoneNum)return void nT(t,400,"Invalid Sandbox business info");r.businessInfoInput={..."string"==typeof e.csrPem&&e.csrPem.trim()?{csrPem:e.csrPem.trim()}:{},phoneNum:e.phoneNum.trim()}}let i=await ou(r);nC(t,200,{code:0,data:{sandbox_appid:i.appId,business_info_uploaded:i.businessInfoUploaded,sandbox_session_id:i.sessionId},message:"ok"})}catch(e){nT(t,500,e.message)}}function o_(e){let t=e.appId?.trim(),r=t&&!t.startsWith("doubao-sandbox-app-")?t:void 0,n=function(e){let t=ta.resolve(e??process.cwd()),r=t;try{r=to.realpathSync.native(t)}catch{}return(0,ib.createHash)("sha256").update(r).digest("hex")}(e.appDirectory),i=function(e,t){let r=oe(e,"DOUBAO_SANDBOX_PHONE_NUM"),n=oe(e,"DOUBAO_SANDBOX_CSR_FILE"),i=function(e,t){if(!e)return;let r=ta.isAbsolute(e)?e:ta.resolve(t??process.cwd(),e);return i7(r)?r:void 0}(n,t),o="";if(n&&!i)nu.warn(`Sandbox CSR 文件不存在:${n}`);else if(i)try{o=to.readFileSync(i,"utf8").trim()}catch(e){nu.warn(`Sandbox CSR 文件读取失败:${e instanceof Error?e.message:String(e)}`)}return{...r?{phoneNum:r}:{},...o?{csrPem:o}:{}}}(e.env,e.appDirectory),o=`${i.phoneNum??""}\0${i.csrPem??""}`;return{businessInfoInput:i,businessInfoInputKey:o,businessTemplatesPath:e.businessTemplatesPath,key:JSON.stringify([o,n,r,e.targetOrigin,e.businessTemplatesPath,e.manifestPath]),manifestReader:e.manifestReader,manifestPath:e.manifestPath,onSimulatorToolCall:e.onSimulatorToolCall,projectId:n,sessionAppId:r,targetOrigin:e.targetOrigin}}class ov{configKey;manifestReader;state;constructor(e,t,r){this.state=e,this.configKey=t,this.manifestReader=r}static async start(e){let t=o_(e),r=await oi(t.projectId,t.manifestPath,t.manifestReader,t.businessTemplatesPath,t.targetOrigin,t.sessionAppId),n=!t.sessionAppId,i={bridgeLogs:[],bridgeLogsUpdatedAtMs:0,businessInfo:await op(r.sessionId,t.businessInfoInput,n,t.targetOrigin)??await ol(r.sessionId,t.targetOrigin),businessInfoInput:t.businessInfoInput,eventListeners:new Set,onSimulatorToolCall:t.onSimulatorToolCall,resourceConnectionStatus:"connecting",resourceEventSequence:0,resourceEvents:[],resourceEventsUpdatedAtMs:0,resourceGeneration:1,resourceInstanceId:(0,ib.randomUUID)(),simulatorEventSequence:0,simulatorEvents:[],sandboxAppId:r.appId,sandboxProjectId:t.projectId,sandboxSessionAppId:t.sessionAppId,sandboxSessionId:r.sessionId,sandboxTargetOrigin:t.targetOrigin,simulatorBusinessTemplatesPath:t.businessTemplatesPath,simulatorManifestReader:t.manifestReader,simulatorManifestPath:t.manifestPath},o=new ov(i,t.key,t.manifestReader);return i.bridge=r.sessionId?og(i,r.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(oh(this.state)),()=>{this.state.eventListeners.delete(e)}}clearBridgeLogs(){oy(this.state)}matches(e){let t=o_(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,ib.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:i9,sandboxEventsAvailable:!0,...this.state.businessInfoInput.csrPem?{sandboxCsrPem:this.state.businessInfoInput.csrPem}:{},...this.state.businessInfoInput.phoneNum?{sandboxPhoneNum:this.state.businessInfoInput.phoneNum}:{}}}getRequestRoutes(){return[{match:i9,handle:({request:e,response:t})=>{var r;return r=this.state,void("GET"!==e.method&&"DELETE"!==e.method?nT(t,405,"Method not allowed"):("DELETE"===e.method&&r&&oy(r),nC(t,200,{logs:r?.bridgeLogs??[],updatedAtMs:r?.bridgeLogsUpdatedAtMs??0},{"Cache-Control":"no-cache"})))}},{match:"/__web_sdk_sandbox_resource_events",handle:({request:e,response:t})=>{var r;return r=this.state,void("GET"!==e.method?nT(t,405,"Method not allowed"):nC(t,200,{connectionStatus:r?.resourceConnectionStatus??"connecting",events:r?.resourceEvents??[],generation:r?.resourceGeneration??0,simulatorEvents:r?.simulatorEvents??[],updatedAtMs:r?.resourceEventsUpdatedAtMs??0},{"Cache-Control":"no-cache"}))}},{match:"/__web_sdk_sandbox_proxy__",handle:({request:e,response:t})=>ij(e,t,{onBusinessInfoUpdated:e=>{this.state.businessInfo=oa(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})=>ob(e,t,this.state)}]}}function ow(e,t){return e.relativePath<t.relativePath?-1:+(e.relativePath>t.relativePath)}let oS="/__tools/tools.json",oE="/__events/events.json",ox="manifest.yaml",oA="skill";function oT(e){if(!e)return!1;try{return to.statSync(e).isFile()}catch{return!1}}function oC(e,t){if(!e)return;let r=ta.isAbsolute(e)?e:ta.resolve(t??process.cwd(),e);return oT(r)?r:void 0}function oI(e,t){if(e&&t)return ta.relative(t,e).split(ta.sep).join("/")||"."}function oO(e){let t=ta.resolve(e);for(;;){if(oT(ta.join(t,ox)))return t;let e=ta.dirname(t);if(e===t)return;t=e}}function oP(e){try{return to.lstatSync(e),!0}catch{return!1}}function ok(e,t,r,n){let i;if(!t.reader&&oT(t.sourcePath)){var o;let r,i=to.statSync(t.sourcePath);nA(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":i.size,"Content-Type":n}),o=t.sourcePath,(r=to.createReadStream(o)).once("error",()=>e.destroy()),r.pipe(e);return}try{i=t.reader?.()}catch{i=void 0}void 0===i?nT(e,404,`${r} not found`):(nA(e),e.writeHead(200,{"Cache-Control":"no-cache","Content-Length":Buffer.byteLength(i),"Content-Type":n}),e.end(i))}function oD(e,t){return function(e){let t,r;if(!e)return{layout:"missing",entries:[]};let n=ta.resolve(e);try{t=to.lstatSync(n)}catch(e){if("ENOENT"===e.code)return{directory:n,layout:"missing",entries:[]};return{directory:n,layout:"invalid",entries:[],error:`skill path cannot be inspected: ${n}: ${e.message}`}}if(t.isSymbolicLink()||!t.isDirectory())return{directory:n,layout:"invalid",entries:[],error:`skill path must be a non-symlink directory: ${n}`};try{var i;let e;i=n,e=[],function t(r){for(let n of to.readdirSync(r,{withFileTypes:!0})){if(n.isSymbolicLink())continue;let o=ta.join(r,n.name);n.isDirectory()?t(o):n.isFile()&&"SKILL.md"===n.name&&e.push(function(e,t){let r=ta.relative(e,t).split(ta.sep).join("/");return{content:to.readFileSync(t,"utf8"),relativePath:r}}(i,o))}}(i),r=e}catch(e){return{directory:n,layout:"invalid",entries:[],error:`skill directory is not readable: ${n}: ${e.message}`}}return r.sort(ow),r.length>0?{directory:n,layout:"resolved",entries:r}:{directory:n,layout:"missing",entries:[]}}(function(e,t){if(t){if(!t)return;if(ta.isAbsolute(t))return t;let r=e?oO(e):void 0,n=[e,r,process.cwd()].map(e=>ta.resolve(e??process.cwd(),t));return[...new Set(n)].find(oP)??n[0]}if(!e)return;let r=oO(e);return[...new Set([r?ta.join(r,oA):void 0,ta.join(e,oA),ta.join(process.cwd(),oA)].filter(Boolean))].find(oP)}(e,t))}class o${appDirectory;businessTemplatesPath;manifestPath;manifestReader;eventsConfigReader;eventsConfigSource;toolsConfigReader;toolsConfigSource;manifestSource;skillsDirectory;sourceKey;constructor(e){var t,r,n;this.appDirectory=e.appDirectory,this.manifestPath=e.manifestPath?oC(e.manifestPath,e.appDirectory):e.manifestSourcePath??(e.manifestReader?void 0:function(e){if(!e)return;let t=oO(e);return[...new Set([t?ta.join(t,ox):void 0,ta.join(process.cwd(),ox)].filter(Boolean))].find(oT)}(e.appDirectory)),this.businessTemplatesPath=(t=this.manifestPath,r=e.businessTemplatesPath,n=e.appDirectory,r?oC(r,n):t?oC(ta.join(ta.dirname(t),"business-templates.yaml"),n):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 i=oD(e.appDirectory,this.skillsDirectory);if(e.skillsDirectory&&"resolved"!==i.layout)throw Error(i.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 o$(e);return this.sourceKey===t.sourceKey&&this.eventsConfigReader===t.eventsConfigReader&&this.toolsConfigReader===t.toolsConfigReader&&this.manifestReader===t.manifestReader}getDebugContext(){let e=oD(this.appDirectory,this.skillsDirectory),t="resolved"===e.layout?e.directory:void 0,r=oI(this.businessTemplatesPath,this.appDirectory),n=oI(this.eventsConfigSource.sourcePath,this.appDirectory),i=oI(this.toolsConfigSource.sourcePath,this.appDirectory),o=oI(this.manifestSource.sourcePath,this.appDirectory),a=oI(t,this.appDirectory);return{...this.eventsConfigSource.reader||this.eventsConfigSource.sourcePath?{eventsConfigUrl:oE,...this.eventsConfigSource.sourcePath?{eventsConfigOriginalUrl:this.eventsConfigSource.sourcePath,...n?{eventsConfigRelativePath:n}:{}}:{}}:{},...this.toolsConfigSource.sourcePath?{toolsConfigOriginalUrl:this.toolsConfigSource.sourcePath,toolsConfigUrl:oS,...i?{toolsConfigRelativePath:i}:{}}:{},...this.manifestSource.sourcePath?{simulatorManifestOriginalUrl:this.manifestSource.sourcePath,...o?{simulatorManifestRelativePath:o}:{}}:{},...this.businessTemplatesPath?{simulatorBusinessTemplatesOriginalUrl:this.businessTemplatesPath,...r?{simulatorBusinessTemplatesRelativePath:r}:{}}:{},...t?{simulatorSkillsDirectoryOriginalUrl:t,...a?{simulatorSkillsDirectoryRelativePath:a}:{}}:{}}}getRequestRoutes(){return[{match:oE,handle:({response:e})=>ok(e,this.eventsConfigSource,"Events config","application/json; charset=utf-8")},{match:oS,handle:({response:e})=>ok(e,this.toolsConfigSource,"Tools config","application/json; charset=utf-8")},{match:"/__simulator_manifest/manifest.yaml",handle:({response:e})=>ok(e,this.manifestSource,"Simulator manifest","application/yaml; charset=utf-8")},{match:"/__simulator_skills/index.json",handle:({response:e})=>{let t;"missing"===(t=oD(this.appDirectory,this.skillsDirectory)).layout?nT(e,404,"Simulator skills directory not found"):"invalid"===t.layout?nT(e,422,t.error??"Invalid simulator Skill layout"):nC(e,200,{skills:t.entries},{"Cache-Control":"no-cache"})}}]}}let oR=f("node:stream"),oN="/app_developer/api",oL=`${oN}/simulator/images/upload`,oM=new Set([`${oN}/simulator/chat`,oL,`${oN}/simulator/tool/report`]),oj={"Access-Control-Expose-Headers":n_};async function oU(e,t,r,n){if(!oM.has(r.pathname))return void nT(t,404,"未找到模拟器接口",oj);let i=n.targetOrigin??Q,o=new URL(`${r.pathname}${r.search}`,i),a=nR(e,t);try{var s;let i=e.method??"GET",l=process.hrtime.bigint(),d=function(e,t,r){return Object.fromEntries(Object.entries(nS(e.headers,t,{...nW(),...r?{[nb]:r}:{}})).filter(([e,t])=>"host"!==e.toLowerCase()&&void 0!==t).map(([e,t])=>[e,Array.isArray(t)?t.join(", "):String(t)]))}(e,o,n.getSandboxSessionId?.()),p=await oB(e,t,r,i),c=n.targetOrigin?await fetch(o,{body:p,headers:d,method:i,signal:a}):await nG({internal:!0,path:`${r.pathname}${r.search}`,method:i,body:p,headers:d,signal:a});if(function(e,t,r,n,i,o){if("applet0930"!==process.env.DEBUG)return;let a=Number(process.hrtime.bigint()-n)/1e6;nu.request({method:e,url:`${t.pathname}${t.search}`,statusCode:r,durationMs:a,headers:i,logId:o})}(i,r,c.status,l,d,c.headers.get(n_)??void 0),t.destroyed||t.writableEnded)return void c.body?.cancel().catch(()=>void 0);await oF({method:i,requestBody:(s=p)instanceof Uint8Array?`(binary, ${s.byteLength} bytes)`:s,requestHeaders:d,requestUrl:r,response:t,upstreamResponse:c})}catch(e){if(t.destroyed||t.writableEnded||a.aborted)return;nT(t,502,`代理模拟器请求失败:${e instanceof Error?e.message:String(e)}`,oj)}}async function oB(e,t,r,n){if("GET"!==n&&"HEAD"!==n)return r.pathname===oL?await nI(e,t,0xb00000):await nO(e,t,0xb00000)}async function oF({method:e,requestBody:t,requestHeaders:r,requestUrl:n,response:i,upstreamResponse:o}){var a,s;if(nA(i,oj),i.writeHead(o.status,nx(o.headers,[n_])),a=n,s=o,a.pathname===`${oN}/simulator/chat`||s.headers.get("content-type")?.toLowerCase().includes("text/event-stream")===!0)return void await oW({method:e,requestBody:t,requestHeaders:r,requestUrl:n,response:i,upstreamResponse:o});if("applet0930"!==process.env.DEBUG)return o.body?void await (0,g.pipeline)(oR.Readable.fromWeb(o.body),i):void i.end();let l=await nP(o);n$({method:e,requestBody:t,requestHeaders:r,responseBody:l,responseHeaders:o.headers,statusCode:o.status,targetUrl:n}),i.end(l)}async function oW({method:e,requestBody:t,requestHeaders:r,requestUrl:n,response:i,upstreamResponse:o}){if(!o.body){n$({method:e,requestBody:t,requestHeaders:r,responseBody:"",responseHeaders:o.headers,statusCode:o.status,targetUrl:n}),i.end();return}let a=oR.Readable.fromWeb(o.body);if("applet0930"!==process.env.DEBUG)return void await (0,g.pipeline)(a,i);n$({method:e,requestBody:t,requestHeaders:r,responseBody:"(event stream)",responseHeaders:o.headers,statusCode:o.status,targetUrl:n});let s=new oR.Transform({transform(e,t,r){let i;try{i=String(e).split("\n\n").filter(Boolean)}catch(t){return nu.error(`failed to decode event stream chunk: ${t?.toString()}`),r(null,e)}for(let e of i)nu.info(`Event from ${n.pathname}${n.search}
159
+ ${e}`);r(null,e)}});await (0,g.pipeline)(a,s,i)}async function oH(e,t){if("POST"!==e.method)return void nC(t,405,{message:"Method Not Allowed"});let r=nR(e,t);try{var n,i;let o,a,s,l=JSON.parse(await nO(e,t,0xa00000)),d=nw(l.url),p=(l.method??"GET").toUpperCase(),c=(n=l.header,a=new Headers(n??{"content-type":"application/json"}),["connection","content-length","host","origin","referer"].forEach(e=>a.delete(e)),a),u=await fetch(d,{signal:r,body:"GET"!==p&&"HEAD"!==p?function(e,t){let r=e.data;if(null==r)return;if("base64"===e.dataEncoding&&"string"==typeof r){var n;let e;return e=new ArrayBuffer((n=Buffer.from(r,"base64")).byteLength),new Uint8Array(e).set(n),e}if("string"==typeof r)return r;let i=t.get("content-type")?.toLowerCase()??"";if(i.includes("application/x-www-form-urlencoded")&&"object"==typeof r){let e=new URLSearchParams;return Object.entries(r).forEach(([t,r])=>{e.set(t,String(r))}),e.toString()}return i.includes("application/json")||"object"==typeof r?JSON.stringify(r):String(r)}(l,c):void 0,headers:c,method:p}),h="arraybuffer"===l.dataType||"arraybuffer"===l.responseType;if(h)o=Buffer.from(await u.arrayBuffer()).toString("base64");else{let e=await u.text();o="string"===l.dataType||0===e.length?e:JSON.parse(e)}nC(t,200,{data:o,dataEncoding:h?"base64":void 0,header:(i=u.headers,s={},i.forEach((e,t)=>{s[t]=e}),s),statusCode:u.status})}catch(e){if(r.aborted||t.destroyed)return;nC(t,500,{message:e instanceof Error?e.message:String(e)})}}let oV=f("../../../node_modules/.pnpm/send@1.2.0/node_modules/send/index.js"),oG="/__web_artifacts",oq="/wsd";function oJ(e){return e.replace(/^\/web-sdk\/[^/]+(?=\/wsd(?:\/|$))/,"")}function oK(e,t,r,n,i={}){nA(t,i.headers),oV(e,n,{root:r}).once("error",n=>{if(404===n.statusCode&&i.fallbackPath)return void oK(e,t,r,i.fallbackPath,{headers:i.headers});if(t.headersSent)return void t.destroy(n);let o=n.statusCode??500;nT(t,o,nh.STATUS_CODES[o]??"Internal Server Error")}).pipe(t)}let oz="/__webview",oY=`${oz}/client.js`,oX=`${oz}/page`,oZ=`${oz}/runtime`,oQ=`${oz}/sw.js`,o0="x-doubao-web-view-target",o1="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",o2=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_ae94b7bdaba503f9d438ccfc9a8b6092/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-bootstrap.js"),f.b),o3=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_ae94b7bdaba503f9d438ccfc9a8b6092/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-page-client.js"),f.b),o4=new URL(f("../../../node_modules/.pnpm/@byted-doubao-apps+debugger-server@0.3.0-rc.2_core-js@3.47.0_esbuild@0.28.1_hono@4.13.1_ae94b7bdaba503f9d438ccfc9a8b6092/node_modules/@byted-doubao-apps/debugger-server/dist/web-view-proxy-service-worker.js"),f.b);function o9(e,t,r,n=!1){if("GET"!==e.method&&"HEAD"!==e.method)return void nT(t,405,"Method Not Allowed");let i=to.readFileSync(r,"utf8");nA(t,{"Cross-Origin-Resource-Policy":"cross-origin"}),t.writeHead(200,{"cache-control":"no-store","content-length":Buffer.byteLength(i),"content-type":"text/javascript; charset=utf-8",...n?{"service-worker-allowed":"/"}:{}}),t.end("HEAD"===e.method?void 0:i)}function o5(e,t){let r=e.searchParams.get("parentOrigin")??t[0];if(!t.includes(r))throw Error("Invalid WebView parent origin");return r}async function o8(e,t,r,n){if("GET"!==e.method&&"HEAD"!==e.method)return void nT(t,405,"Method Not Allowed");let i=nR(e,t);try{let o=o5(r,n),a=nw(r.searchParams.get("url")??void 0),s=await fetch(a,{signal:i,headers:{"user-agent":o1,..."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 d=s.headers.get("content-type")??"",p=nx(s.headers);if(p["cache-control"]="no-cache",p["cross-origin-resource-policy"]="cross-origin",p["x-doubao-web-view-parent-origin"]=o,"HEAD"===e.method||!d.includes("text/html")){let r="HEAD"===e.method?void 0:Buffer.from(await s.arrayBuffer());nA(t),t.writeHead(s.status,{...p,[o0]:l.toString(),...r?{"content-length":r.byteLength}:{}}),t.end(r);return}let c=function(e,t,r){let n=new URLSearchParams({mobileUserAgent:o1,originalPath:`${t.pathname}${t.search}${t.hash}`,parentOrigin:r}).toString().replaceAll("&","&amp;"),i=`<script src="${oY}?${n}"></script>`,o=/<head[^>]*>/i.exec(e);if(o){let t=o.index+o[0].length;return`${e.slice(0,t)}${i}${e.slice(t)}`}return`${i}${e}`}(await s.text(),l,o);nA(t),t.writeHead(s.status,{...p,[o0]:l.toString(),"content-length":Buffer.byteLength(c)}),t.end(c)}catch(e){if(i.aborted||t.destroyed)return;nT(t,502,`代理 web-view 页面失败: ${e instanceof Error?e.message:String(e)}`)}}async function o7(e){let t=new URL(e).toString();try{await E(t)}catch(e){nu.error("打开 Web 模拟器失败",{error:e}),nu.info("请手动打开 Web 模拟器(本地)",{url:t})}}async function o6(e,t){await new Promise((r,n)=>{let i=t=>{e.off("listening",o),n(t)},o=()=>{e.off("error",i),r()};e.once("error",i),e.once("listening",o),e.listen(t,"127.0.0.1")})}async function ae(e){var t;let r=await P(9e3),n=nh.createServer(nM((t=[`http://127.0.0.1:${r}`,`http://localhost:${r}`],[{match:`${oz}/bootstrap`,handle:({request:e,response:r,url:n})=>{if("GET"!==e.method&&"HEAD"!==e.method)return void nT(r,405,"Method Not Allowed");try{nw(n.searchParams.get("url")??void 0),o5(n,t)}catch{nT(r,400,"Invalid WebView URL");return}nA(r,{"Cross-Origin-Resource-Policy":"cross-origin"}),r.writeHead(200,{"cache-control":"no-store","content-type":"text/html; charset=utf-8"}),r.end("HEAD"===e.method?void 0:'<!doctype html><meta charset="utf-8"><script src="/__webview/bootstrap.js"><\/script>')}},{match:`${oz}/bootstrap.js`,handle:({request:e,response:t})=>o9(e,t,o2)},{match:oQ,handle:({request:e,response:t})=>o9(e,t,o4,!0)},{match:oY,handle:({request:e,response:t})=>o9(e,t,o3)},{match:oZ,handle:({request:e,response:t,url:r})=>(function(e,t,r){let n;try{n=nw(r.searchParams.get("url")??void 0)}catch(e){nT(t,400,`无效的 web-view 请求地址: ${e instanceof Error?e.message:String(e)}`);return}let i=nS(e.headers,n,{"user-agent":o1});for(let e of Object.keys(i))e.startsWith("sec-fetch-")&&delete i[e];nN(e,t,{createResponseHeaders:e=>{let t=nE(e),r=Array.isArray(e.location)?e.location[0]:e.location;if(r&&URL.canParse(r,n)){let e=new URL(r,n);t.location=`${oZ}?url=${encodeURIComponent(e.toString())}`}return t["cache-control"]="no-cache",t},errorMessage:"代理 web-view 运行时请求失败",requestHeaders:i,targetUrl:n})})(e,t,r)},{match:oX,handle:({request:e,response:r,url:n})=>o8(e,r,n,t)}]),({response:e})=>{nT(e,404,"WebView resource not found")}));await o6(n,0);let i=n.address(),o=`http://127.0.0.1:${i.port}`,a=nh.createServer(function({webViewOrigin:e,artifactOrigin:t,debugScenes:r,debuggerProtocol:n,distPath:i,getWidgetViewDataTemplates:o,mcpEndpoint:a,mcpHeaders:s,physicalDeviceDebugGateway:l,sandboxRuntime:d,simulatorAssets:p,simulatorTargetOrigin:c}){var u;let h={routes:[{match:e=>e.pathname.startsWith(oG),handle:({request:e,response:r,url:n})=>{let i,o;return i=n.pathname.replace(oG,"")||"/",o=new URL(`${i}${n.search}`,t),void nN(e,r,{createResponseHeaders:e=>({...nE(e),"cache-control":"no-cache"}),errorMessage:"代理 Web 产物失败",requestHeaders:nS(e.headers,o),targetUrl:o})}},{match:e=>{let t=oJ(e.pathname);return t===oq||t.startsWith(`${oq}/`)},handle:({request:e,response:t,url:r})=>{let n;!(n=oJ(r.pathname).slice(`${oq}/`.length))||n!==ta.basename(n)?nT(t,404,"Not found"):oK(e,t,ta.join(i,"wsd"),n,{headers:{"Cache-Control":"no-cache"}})}},{match:"/__web_sdk_request_proxy__",handle:({request:e,response:t})=>oH(e,t)},{match:"/__webview/page",handle:({request:t,response:r,url:n})=>{"GET"!==t.method&&"HEAD"!==t.method?nT(r,405,"Method Not Allowed"):(nA(r),r.writeHead(302,{"cache-control":"no-store",location:`${e}/__webview/bootstrap${n.search}`}),r.end())}},{match:"/__webview/sw.js",handle:({response:e})=>{nA(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()));
160
+ self.addEventListener('activate', e => e.waitUntil((async () => {
161
+ await self.clients.claim();
162
+ await self.registration.unregister();
163
+ })()));`)}},{match:e=>e.pathname.startsWith("/__doubao_web_sdk_native_modules"),handle:({request:e,response:t,url:r})=>oK(e,t,i,r.pathname)},{match:e=>e.pathname.startsWith("/__"),handle:({response:e})=>nT(e,404,"Debugger resource not found")}],fallback:({request:e,response:t,url:r})=>oK(e,t,i,r.pathname,{fallbackPath:"/index.html"})};return nM([...(u={artifactOrigin:t,webViewOrigin:e,debugScenes:r,getWidgetViewDataTemplates:o,mcpEndpoint:a,physicalDeviceDebugGateway:l,sandboxRuntime:d,simulatorAssets:p},[{match:"/__web_sdk_debug_context",handle:({request:e,response:t})=>{let r,n;return n="string"==typeof(r=e.headers.host)&&r?`http://${r}`:void 0,void nC(t,200,{homeDir:rI.homedir(),webViewOrigin:u.webViewOrigin,launchDir:u.simulatorAssets.appDirectory,debugScenesEndpoint:ih,widgetViewDataTemplatesEndpoint:im,debuggerMcpEndpoint:n?new URL(ic,n).toString():ic,manifestOriginalUrl:new URL("/base/manifest.json",u.artifactOrigin).toString(),...u.mcpEndpoint?{mcpOriginalEndpoint:u.mcpEndpoint,mcpProxyEndpoint:nz}:{},realDeviceDebug:u.physicalDeviceDebugGateway?.getDebugContext(),...u.simulatorAssets.getDebugContext(),...u.sandboxRuntime.getDebugContext()},ig)}},{match:ih,handle:({response:e})=>nC(e,200,u.debugScenes??{errors:[],scenes:[]},ig)},{match:im,handle:({response:e})=>iy(e,u.getWidgetViewDataTemplates)}]),...l.getRequestRoutes(),...n,...function(e={}){return[{match:e=>e.pathname===oN||e.pathname.startsWith(`${oN}/`),handle:({request:t,response:r,url:n})=>oU(t,r,n,e)}]}({getSandboxSessionId:()=>d.sessionId,targetOrigin:c}),...d.getRequestRoutes(),...function(e={}){return[{match:nz,handle:({request:t,response:r,url:n})=>(function(e,t,r={},n=nv(e)){let i=et(r.targetEndpoint);if(!n)return void nT(t,400,"Bad request");if(!i)return void nT(t,404,"MCP endpoint not configured");let o=new URL(i);for(let[e,t]of new URLSearchParams(n.search))o.searchParams.append(e,t);nN(e,t,{createResponseHeaders:nE,errorMessage:"代理 MCP 请求失败",requestHeaders:nS(e.headers,o,{...nW(),...r.headers}),targetUrl:o})})(t,r,e,n)}]}({headers:s,targetEndpoint:a}),...p.getRequestRoutes(),...h.routes],h.fallback)}({...e,webViewOrigin:o})),s=e.debuggerProtocol.attachConnection(a,e.sandboxRuntime);try{await o6(a,r)}catch(e){throw s(),await at(n),e}return{origin:`http://127.0.0.1:${r}`,server:a,webViewServer:n,closeConnections:s}}async function at(e){e.listening&&await new Promise((t,r)=>{e.close(e=>{e?r(e):t()}),e.closeIdleConnections(),e.closeAllConnections()})}async function ar(){if(!n)return;let{physicalDeviceDebugGateway:e,sandboxRuntime:t,server:r,webViewServer:i,closeConnections:o}=n;n=void 0,o(),e.dispose(),t.close(),await Promise.all([at(r),at(i)])}async function an(e){let t,{targetOrigin:r,...i}=e.simulator??{},o={appDirectory:e.appDirectory,eventsConfigReader:e.eventsConfigReader,eventsConfigSourcePath:e.eventsConfigSourcePath,toolsConfigReader:e.toolsConfigReader,toolsConfigSourcePath:e.toolsConfigSourcePath,manifestReader:e.simulatorManifestReader,manifestSourcePath:e.simulatorManifestSourcePath,...i},a=new o$(o);try{var s,l;let i,d,p=et(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=n,s?.server.listening){if(n?.artifactOrigin===e.artifactOrigin&&n.mcpEndpoint===p&&n.simulatorAssets.matches(o)&&n.getWidgetViewDataTemplates===e.getWidgetViewDataTemplates&&n.sandboxRuntime.matches(c)&&n.simulatorTargetOrigin===r)return n;await ar()}let u={distPath:l=e.debuggerDistPath,indexPath:ta.join(l,"index.html")};if(!to.existsSync(u.indexPath))return void nu.error("Web 模拟器资源缺失,请联系框架开发者。");let h=(i={},d=new n4(i),Object.assign([{match:"/__agent_trace",handle:e=>iT(e,i,d)},{match:ic,handle:e=>iu(e,i,d)}],{attachConnection:(e,t)=>{var r;let n,o,a,s;return r=e=>iC(i,d,e),n=new nY({noServer:!0,maxPayload:0xa00000}),o=new Set,a=(i,a,s)=>{let l,p=e.address().port,c=i.headers.host;try{l=new URL(i.url??"/","http://127.0.0.1")}catch{a.destroy();return}let u=l.searchParams.get("clientId")?.trim();c!==`127.0.0.1:${p}`&&c!==`localhost:${p}`||void 0!==i.headers.origin&&i.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"):n.handleUpgrade(i,a,s,e=>{d.registerClient(u,e),o.add(e),e.on("pong",()=>o.add(e)),e.on("error",()=>e.close());let n=t.subscribeEvents(t=>nX(e,"sandbox",t));e.once("close",()=>{o.delete(e),n()}),e.on("message",(n,i)=>{try{let e=i?void 0:JSON.parse(n.toString());if(!el(e))throw Error("Invalid debugger message");if("snapshot"===e.type&&el(e.data)&&el(e.data.snapshot))r({...e.data,...el(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&&el(e.data))d.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 n.clients)o.delete(e)?e.ping():e.terminate()},3e4)).unref(),()=>{for(let t of(clearInterval(s),e.off("upgrade",a),n.clients))t.terminate();n.close()}},executeSandboxToolCall:e=>d.execute("execute_sandbox_tool_call",{toolCall:e})})),m=await ov.start({...c,onSimulatorToolCall:async e=>{await h.executeSandboxToolCall(e)}});t=m;let f=new ix,{origin:g,server:y,webViewServer:b,closeConnections:_}=await ae({artifactOrigin:e.artifactOrigin,debugScenes:e.debugScenes,debuggerProtocol:h,distPath:u.distPath,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:p,mcpHeaders:e.mcpHeaders,physicalDeviceDebugGateway:f,sandboxRuntime:m,simulatorAssets:a,simulatorTargetOrigin:r}),v=()=>{y.close(),b.close()};y.once("close",()=>{process.off("exit",v)}),process.once("exit",v);let w=new URL(g).toString();return n={artifactOrigin:e.artifactOrigin,close:()=>ar(),debuggerMcpEndpoint:new URL(ic,g).toString(),getWidgetViewDataTemplates:e.getWidgetViewDataTemplates,mcpEndpoint:p,open:()=>o7(w),origin:g,physicalDeviceDebugGateway:f,sandboxRuntime:m,get sandboxSessionId(){return m.sessionId},server:y,webViewServer:b,closeConnections:_,setRealDeviceDebugProvider(e){f.setProvider(e)},simulatorAssets:a,simulatorTargetOrigin:r,url:w}}catch(e){t?.close(),nu.error("启动 Web SDK 调试器失败",{error:e});return}}async function ai(e,t){let r={errors:[],scenes:[]};if(!e)return r;for(let n of(await tM(e)).sort((e,t)=>e.name.localeCompare(t.name))){let e=await tj(n.path);e&&function(e,t){let r=X(e);return"tool"!==r.type&&("widget"===r.type?t.widgetIds.has(r.id):0===r.unresolvedVariables.length)}(e,t)&&r.scenes.push({content:e,name:n.name})}return r}async function ao(e,t){let r=e.metadata.getData(),n=e.widgets,i=await ai(e.appDirectory,{widgetIds:new Set(Object.keys(n).map(e=>rv(n,r.widgets,e)))});return an({...t,debuggerDistPath:t.debuggerDistPath??F(),debugScenes:i,getWidgetViewDataTemplates:e.getWidgetViewDataTemplates})}function aa(e){return!!(e&&!/<%=?\s*appId\s*%>/.test(e))}function as(e){if(!(e instanceof Error))return!1;try{let t=JSON.parse(e.message);return t?.code===0x2fb1799}catch{return!1}}async function al(e){aa(e.appId)&&(await e.getCachedLoginCookie().catch(()=>void 0)||tD.warn(e.appId.startsWith("db_")?"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `dbx auth login` 后重新启动开发服务。":"[DoubaoApps] 获取豆包应用信息需要登录,请运行 `npx doubao login` 后重新启动开发服务。"))}let ad=e=>ep.bgHex("#9873b9")(ep.italic(ep.black(` ${e} `))),ap=e=>ep.bgBlueBright(ep.italic(ep.black(` ${e} `))),ac=e=>ep.bold(ep.blueBright(e)),au=[{command:"d",description:"选择调试场景 / pages / widgets"},{command:"web",description:"打开 Web 模拟器"}],ah={page:"页面",scene:"调试场景",widget:"组件"};function am(e){console.log(` ${ac(e.command.padEnd(21))} ${ep.gray(`- ${e.description}`)}`)}async function af(e){let t=J(e);if(0!==t.length)return await eu.prompt(t.map(([e,t])=>({type:"input",name:e,message:`请输入调试场景变量 "${e}" 的值:`,default:t??void 0})))}async function ag({matchedScene:e,appId:t,driver:r}){let n=await tj(e.path);if(!n)return;let i=await af(n);await tU({matchedScene:e,appId:t,driver:r,variables:i},n)}async function ay(e,t,r,n,i,o,{interactive:a=!0}={}){if(await i.load({appletUrl:t,appId:e,isSigned:o}),!a)return;let s=await tM(process.cwd()),l=Object.values(r),d=Object.values(n),p=d.filter(({id:e})=>!te(e));return l.length>0&&(console.log(`
164
+
165
+ ${ap("可用 pages 列表")}
166
+ `),l.forEach(e=>{console.log(` - ${ac(e.path)}`)})),p.length>0&&(console.log(`
167
+ ${ap("可用 widgets 列表")}
168
+ `),p.forEach(e=>{let t=ac(e.id);console.log(` - ${t}`)})),s.length>0&&(console.log(`
169
+ ${ap("可用调试场景")}
170
+ `),s.forEach(e=>console.log(` - ${ac(e.name)}`))),console.log(`
171
+ ${ap("可以继续执行以下命令:")}
172
+ `),au.forEach(am),console.log("\n"),nd.instance.addListener(t=>{let r=t.trim();if("d"===r){let t=[...s.map(e=>({type:"scene",id:e.name})),...p.map(e=>({type:"widget",id:e.id})),...l.map(e=>({type:"page",id:e.path}))];if(0===t.length)return console.log(`
173
+ ${ap("暂无可用的页面、组件或调试场景")}`),!0;nc(async()=>{let{selectedEntry:r}=await eu.prompt([{type:"search",name:"selectedEntry",message:"请选择调试目标:",source:e=>t.filter(t=>`${ah[t.type]} ${t.type} ${t.id}`.toLowerCase().includes(e?.toLowerCase()??"")).map(e=>({name:`${ep.gray(ah[e.type])}: ${e.id}`,short:`${ah[e.type]} \xb7 ${e.id}`,value:e}))}]);if("scene"===r.type){let t=s.find(e=>e.name===r.id);t&&await ag({matchedScene:t,appId:e,driver:i})}else"widget"===r.type?i.pushWidget({appId:e,widgetId:r.id}):i.openPageUrl({appId:e,url:r.id})})}else{let t=s.find(e=>e.name===r);t?nc(async()=>{await ag({matchedScene:t,appId:e,driver:i})}):d.some(e=>e.id===r)?i.pushWidget({appId:e,widgetId:r}):i.openPageUrl({appId:e,url:r})}return!0},"openPage")}async function ab({appId:e,appletUrl:t,pages:r,widgets:n,driver:i,isSigned:o,isDisposed:a}){let s=await tx();if(a())return;if(!s)return void tD.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");let l=await tS(s).catch(e=>(a()||tD.error("重新启动应用失败",{error:e}),!1));if(a())return;if(!l)return void setTimeout(()=>{a()||tD.info("请确认应用已经启动。\n")},1e3);if(await new Promise(e=>{setTimeout(e,5e3)}),a())return;if(!i)return void tD.error("调试驱动尚未就绪。");let d=await ay(e,t,r,n,i,o);a()&&d?.()}async function a_({context:e,port:t,driver:r,isSigned:n,onCleanupReady:i}){let o,a,{host:s,artifactOrigin:l}=await e.resolveDevServer(t);e.devServerAbort.signal.throwIfAborted();let d=e.metadata.getData(),p=d.app.appId,c=async()=>{let t,r=await (t=e.webDebuggerLaunchOptions,ao(e,{appId:e.appId,appDirectory:e.appDirectory,artifactOrigin:l,env:{...e.env,...t?.env??{}},mcpEndpoint:t?.mcpEndpoint??ty(),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 r?.open()};if(e.devServerInteractive){let t;t=function(e={}){let t={name:"Doubao Apps SDK",...e},r=t.name?`${t.name} 开发服务`:"",n=t.origin?`正在监听 ${ep.gray(t.origin)}。`:"已启动。";return`
174
+ ${ac(r)}${n}
175
+ `}(),tm()||console.clear(),console.log(t),console.log(((e,t)=>{if(e&&t){let r=[{title:"\uD83C\uDF10 服务地址",content:t},{title:"\uD83D\uDCE6 应用 ID",content:e}].map(({title:e,titleHighlighter:t,content:r})=>{let n=t?t(e):ep.bold(ep.gray(e));return` - ${ep.bgWhiteBright(ep.italic(ep.black(` ${n} `)))}: ${ep.gray(r.startsWith("http")?ep.underline(r):r)}`}).join("\n");return`
176
+ ${ad("豆包应用服务信息")}
183
177
 
184
178
  ${r}
185
179
 
186
180
  `}return`
187
- ${aa("豆包应用服务信息")}:
181
+ ${ad("豆包应用服务信息")}:
188
182
 
189
- 调试服务未运行。`})(l,p)),await ao(e)}let c=(o=!1,a=[],{add(e){e&&(o?e():a.push(e))},cleanup:()=>{o=!0,a.splice(0).forEach(e=>e())},isDisposed:()=>o});if(e.devServerInteractive){let t={context:e,appId:l,appletUrl:p,pages:s.pages,widgets:s.widgets,driver:r,isSigned:n,openWebDebugger:d,isDisposed:c.isDisposed};c.add(nd.instance.addListener(e=>{let r=e.trim().toLowerCase();return("r"===r||"web"===r)&&(process.stdout.write(H(2)),"r"===r?af(t).catch(nc):t.openWebDebugger(),!0)},"devCommands",-1))}i(c.cleanup);try{if(!r){e.devServerInteractive&&tP.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");return}c.add(await ah(l,p,s.pages,s.widgets,r,n,{interactive:e.devServerInteractive}))}catch(e){throw c.cleanup(),e}}let ay=(e,t,r)=>{if(!tu())return void r();let n=process.hrtime.bigint(),i=e.method,o=e.url;t.on("finish",()=>{let e=Number(process.hrtime.bigint()-n)/1e6,r=o?new URL(o,"http://localhost").pathname:"",a=t.statusCode;tP.request({method:i||"UNKNOWN",url:r,statusCode:a,durationMs:e})}),r()},ab=new Set(["EACCES","EPERM"]),a_=new Set(["MODULE_NOT_FOUND","ERR_MODULE_NOT_FOUND"]),av=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT","ERR_REQUEST_TIMEOUT"]),aw=new Set(["ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETUNREACH","ENOTFOUND","EAI_AGAIN","EPIPE"]),aE=new Set(["EEXIST","EISDIR","EMFILE","ENOENT","ENOSPC","ENOTDIR","EROFS"]),aS={SyntaxError:"syntax_error",TypeError:"type_error",ModuleNotFoundError:"dependency_error",ModuleBuildError:"compilation_error",ValidationError:"config_error",TimeoutError:"timeout_error",FetchError:"network_error",LoaderError:"loader_error",PluginError:"plugin_error"};function ax(e,t){if(!e||"object"!=typeof e||!(t in e))return;let r=e[t];return"string"==typeof r?r:void 0}function aA(e){if(!e||"object"!=typeof e)return[];if(Array.isArray(e.errors)&&e.errors.length>0)return e.errors;if(Array.isArray(e.stats))return e.stats.flatMap(aA);let t=e.stats&&"object"==typeof e.stats?e.stats:e;try{let e=t.toJson?.({all:!1,errors:!0}).errors;return Array.isArray(e)?e:[]}catch{return[]}}function aT(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 aC(e,t){Object.assign(e,aT(t))}function aI(e,{scene:t,commandStartTime:r,compileStartTime:n}){let i=e.commandStartTime===r,o=e.prepareDurations,a=e.builderInitStartTime,s=e.appInfoDurationMs,l=e.appInfoMeasured;i&&void 0!==a&&(o.builderInitMs=Math.max(0,n-a)),aC(e,r),e.scene=t,e.compileStartTime=n,i&&(e.prepareDurations=o,e.appInfoDurationMs=s,e.appInfoMeasured=l)}function aO(e,t,r){e.compilePhaseEndTimes[t]=Math.max(e.compilePhaseEndTimes[t]??0,r)}function aP(e){return Math.max(0,Math.round(Number.isFinite(e)?e:0))}let ak=new class{uploader;constructor(e){this.uploader=e}async report(e){try{var t,r;let n,i,o,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:aA(e.error)[0]??e.error}:{...u,status:e.status,pageCount:Object.keys(e.context.pages).length,widgetCount:Object.keys(e.context.widgets).length,securityMode:(n=e.context.signingEncryptionOptions,i=!!n?.signing.enabled,o=!!n?.encryption.enabled,i&&o?"signing_and_encryption":i?"signing":o?"encryption":"none"),durations:(t=e.context.compileLifecycle,r=e.compileEndTime,a=t.commandStartTime??r,s=t.compileStartTime??r,l=Math.min(r,Math.max(s,t.compilePhaseEndTimes.moduleProcess??r)),p=Math.min(r,Math.max(l,t.compilePhaseEndTimes.assetProcess??r)),{totalMs:r-a,prepareMs:s-a,compileMs:r-s,...t.prepareDurations,appInfoMs:t.appInfoDurationMs,appTemplateProcessMs:t.appTemplateProcessDurationMs,viewTemplateProcessMs:t.viewTemplateProcessDurationMs,moduleProcessMs:l-s,assetProcessMs:p-l,outputWriteMs:r-p})};await this.upload(m)}catch{}}async flush(e=3e3){try{await this.uploader?.flush?.(e)}catch{}}async upload(e){let{appDirectory:t,...r}=e;await (this.uploader??=new ec).upload(function(e,t){let r={kit_compile_id:function(){let e="unknown";try{e=(0,rT.userInfo)().username||e}catch{}return`${Date.now()}_${e}_${(0,ig.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&&(r.kit_appId=e.targetAppId),"success"===e.status)r.kit_page_count=e.pageCount,r.kit_widget_count=e.widgetCount,r.kit_security_mode=e.securityMode,r.kit_duration_ms_total=aP(e.durations.totalMs),r.kit_prepare_ms=aP(e.durations.prepareMs),r.kit_compile_ms=aP(e.durations.compileMs),r.kit_config_load_ms=aP(e.durations.configLoadMs),r.kit_project_scan_ms=aP(e.durations.projectScanMs),r.kit_context_bootstrap_ms=aP(e.durations.contextBootstrapMs),r.kit_app_info_ms=aP(e.durations.appInfoMs),r.kit_app_template_process_ms=aP(e.durations.appTemplateProcessMs),r.kit_view_template_process_ms=aP(e.durations.viewTemplateProcessMs),r.kit_plugin_bootstrap_ms=aP(e.durations.pluginBootstrapMs),r.kit_builder_init_ms=aP(e.durations.builderInitMs),r.kit_module_process_ms=aP(e.durations.moduleProcessMs),r.kit_asset_process_ms=aP(e.durations.assetProcessMs),r.kit_output_write_ms=aP(e.durations.outputWriteMs);else{r.kit_error_type=function(e){let t=ax(e,"code")?.toUpperCase();if(t){if(ab.has(t))return"permission_error";if(a_.has(t))return"dependency_error";if(av.has(t))return"timeout_error";if(aw.has(t))return"network_error";if(aE.has(t))return"filesystem_error"}let r="string"==typeof e?e:ax(e,"message")??"";if(/cannot find module|can't resolve|cannot resolve|module not found|package .+ not found/i.test(r))return"dependency_error";if(/permission denied|operation not permitted/i.test(r))return"permission_error";if(/timed out|timeout/i.test(r))return"timeout_error";if(/connection (?:refused|reset)|getaddrinfo|network error|socket hang up|unable to connect/i.test(r))return"network_error";if(/no such file|file does not exist|not a directory|directory does not exist/i.test(r))return"filesystem_error";if(/syntax\s*error|syntaxerror|unexpected token|failed to parse|pars(?:e|ing) error/i.test(r))return"syntax_error";if(/\bTS\d{4}:|\btype\s*error\b|\btypeerror\b/i.test(r))return"type_error";if(/appId is required|entry config|invalid config|configuration (?:is )?(?:invalid|missing)/i.test(r))return"config_error";if(/loader/i.test(r))return"loader_error";if(/plugin/i.test(r))return"plugin_error";let n=ax(e,"name");return n&&aS[n]||"unknown_error"}(e.error),e.errorStage&&(r.kit_error_stage=e.errorStage);let i=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(i){var n;let e=(n=t.appDirectory,(0,iL.stripVTControlCharacters)(i).replaceAll(ti.resolve(n),"<project>").replaceAll((0,rT.homedir)(),"<home>").replace(/\s+/g," ").trim().slice(0,1024));e&&(r.kit_error_message=e)}}return{name:"kit_compile",params:r}}(r,{appDirectory:t,kitVersion:"0.2.0-rc.0",runEnv:process.env.BUILD_VERSION?"SCM":process.env.CI_REPO_NAME?"CI":"LOCAL"}))}};function aD(e,t,r){r?.hasErrors()?ak.report({appDirectory:e.appDirectory,context:e,scene:t,status:"failed",errorStage:"compile",error:aA(r)[0]}):ak.report({appDirectory:e.appDirectory,context:e,scene:t,status:"success",compileEndTime:Date.now()})}let a$=f("crypto");class aR{constructor(e,t,r){this._content=t,this._hashCode=r,this.source=e}get content(){return this._content}get hashCode(){var e;return this._hashCode||(e=this.content,a$.createHash("sha256").update("string"==typeof e?e:new DataView(e.buffer,e.byteOffset,e.byteLength)).digest("hex").substring(0,8))}}class aN extends aR{constructor(e,t){super(e,t),this._manifest={applet:{pages:[],tools:[]},widgets:[]};try{this._manifest=ea(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){ea(this._manifest,e)}setSCMVersion(e){this._manifest.scmVersion=e}setVersionCode(e){this._manifest.versionCode=e}setAppletManifest(e){this._manifest.applet=e}mergeAppletManifest(e){ea(this._manifest.applet,e)}setRenderType(e=j.REACT_LYNX){this._manifest.renderType=e}appendWidget(e){this._manifest.widgets||(this._manifest.widgets=[]),this._manifest.widgets.push(e)}appendPage(e){this._manifest.applet.pages||(this._manifest.applet.pages=[]),this._manifest.applet.pages.push(e)}toString(){return JSON.stringify(this._manifest,null,2)}}class aL{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 aN(e,JSON.stringify({}))),this.getAsset(e)}}class aM{options;constructor(e){this.options=e}apply(e){let t,{pluginSystem:r}=this.options;e.hooks.thisCompilation.tap({name:aM.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},n=>{n.hooks.processAssets.tapPromise({name:aM.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{t=new aL,n.getAssets().forEach(e=>{let r=new aR(e.name,e.source.source(),e.info.contenthash?.[0]);t.addAsset(e.name,r)});let{entrypoints:i}=n,o={};i.forEach((e,r)=>{o[r]=e.getFiles().map(e=>{let r=t.getAsset(e);if(!r)throw Error(`Asset ${e} not found`);return new aR(r.source,r.content,r.hashCode)})});let a=this.options.context.appId;a&&tn.mkdirSync(ti.join(this.options.context.rootPath,a),{recursive:!0}),await r.callAssetsHooks("beforeEmit",{assets:t,chunks:o}),Object.keys(t.getAssets()).forEach(r=>{let i=t.getAsset(r);if(!i)return;let{source:o,destination:a}=i;if(!o||!a)return;n.getAsset(o)?n.renameAsset(o,a):n.emitAsset(a,new e.rspack.sources.RawSource(i.content));let s=n.getAsset(`${o}.map`);s&&n.renameAsset(s.name,`${a}.map`)}),await r.callAssetsHooks("afterEmit",{assets:{...t.getAssets()}})})})}}let aj=new Set(["@doubao-dev/template","@byted-doubao-apps/template"]);class aU{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(aU.name,e=>{e.hooks.finishModules.tap(aU.name,()=>{let t=new Map,r=n=>{if(!n)return!1;let i=t.get(n);if(void 0!==i)return i;if(function(e){var t;let r=e.resourceResolveData?.descriptionFileData?.name;if("string"==typeof r&&aj.has(r))return!0;let n=(t=e.resource,t?.split(/[?#]/)[0].replace(/\\/g,"/"));return[...aj].some(e=>n?.includes(`/node_modules/${e}/`))}(n))return t.set(n,!0),!0;for(let i of(t.set(n,!1),e.moduleGraph.getOutgoingConnections(n)))if(r(i.module))return t.set(n,!0),!0;return!1};e.entries.forEach((t,n)=>{t.dependencies.some(t=>r(e.moduleGraph.getModule(t)))&&this.options.markTemplateWidgetEntry(this.options.normalizeEntryName?.(n)??n)})})})}}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 aF(e){return e.replaceAll("\\","/")}function aW(e,t,r,n=`${t}.map`){return t!==r&&!!e.getAsset(t)&&(e.renameAsset(t,r),e.getAsset(n)&&e.renameAsset(n,`${r}.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,r;let n=this.context.metadata.getData(),i=this.context.command===eM.DEV?"all":"configured",o=rv(this.context.pages,this.context.normalizedAppConfig.pages.entries,i),a=rv(this.context.widgets,this.context.normalizedAppConfig.widgets.entries,i),s=n.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=n.pages,Object.keys(o).forEach(r=>{let n=aF(r),i=ry(n);aW(t,`${i}/template.js`,rt(s,e[r]?.path??re(n),rh),`${i}/background.js.map`)})),r=n.widgets,Object.keys(a).forEach(e=>{var n;let i=ry(aF(e));aW(t,`${i}/template.js`,(n=rb(a,r,e),`${n}/${rh}`),`${i}/background.js.map`)})})})}}class aG{entry;constructor(e){this.entry=e}apply(e){let t=new e.webpack.experiments.VirtualModulesPlugin;t.apply(e),e.hooks.thisCompilation.tap(aG.name,()=>{t.writeModule(eX,""),t.writeModule(eZ,eQ),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 aq={templatesByEntry:{},templatesByWidget:{}},aJ="/doubao-apps-framework.template.js",aK="/doubao-apps-api.template.js",az=(e,t)=>{let r=(e,r,n)=>({libraryName:n,url:t?`/wsd${e}`:e,background:{sectionPath:r},mainThread:{sectionPath:`${r}__main-thread`},async:!!t});return{"@byted-doubao-apps/bridge-base":r(aK,"api"),"@byted-doubao-apps/open-api":r(aK,"api"),...Object.fromEntries(Object.entries(e9).map(([t,n])=>[t,r(e?"/doubao-apps-react-dev.template.js":"/doubao-apps-react.template.js","reactLynx",["reactLynx",n])])),[`${to}/api`]:r(aK,"api"),[`${ta}/api`]:r(aK,"api"),[to]:r(aJ,"framework"),[ta]:r(aJ,"framework"),"@byted-doubao-apps/components":r(aJ,"components"),[tl(to)]:r(aJ,"components"),[tl(ta)]:r(aJ,"components")}},aY=f("node:url"),aX=(0,x.createRequire)(import.meta.url);function aZ(e,t){for(let r of e)try{return aX.resolve(r,{paths:t})}catch{}throw Error(`Cannot resolve package from candidates: ${e.join(", ")}`)}class aQ{pluginSystem;constructor(e){this.pluginSystem=e}async createEntry(){let{entry:e}=await this.pluginSystem.callViewHooks("modifyEntryOption",{entry:{}});return e}async createConfig({config:e}){var t,r,n,i,o;let{appDirectory:a,command:p,metadata:h,rootPath:f}=e.context,g=e.context.environment,y="1"===process.env.ENABLE_SELF_CONTAINED;await this.pluginSystem.callViewHooks("modifyEnvironment",{environment:g}),e.context.setEnvironment(g);let b=p===eM.DEV,_=await this.createEntry(),v=td(a),w=[a,ti.dirname((0,aY.fileURLToPath)(import.meta.url))],E=aX.resolve("@lynx-js/react/transform"),S=b?"all":"configured",A=rv(e.context.pages,e.context.normalizedAppConfig.pages.entries,S),T=new Set([...Object.keys(rv(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,S)),...Object.keys(A)]),C=T.size>0;C&&await ne({widgets:e.context.widgets,pages:e.context.pages,entries:_,collector:h,normalizedAppConfig:e.context.normalizedAppConfig,define:e.context.userConfig?.source?.define});let I={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":"({})"}},O=e=>[eX,eZ,e.filename],P={...I,entry:Object.fromEntries(Object.entries(_).map(([e,t])=>[e,O(t)]))},D=Object.fromEntries(Object.entries(_).filter(([e])=>T.has(e))),$=new Map(Object.keys(D).map(e=>[ry(e),e])),R={...P,entry:Object.fromEntries(Object.entries(D).map(([e,t])=>[ry(e),O(t)])),define:{...P.define,__DOUBAO_APPS_WEB__:JSON.stringify(!0),__LYNXVIEW__:JSON.stringify(!0)}},N=[...tm()?[]:[J({externals:az(b),globalObject:"lynx"})]],L=[function({metadata:e,resolveAppInfo:t}){return{name:"ai-manifest-plugin",setup(r){r.modifyBundlerChain((r,n)=>{let i=n?.environment?.name==="web"?ru:rc;r.plugin(rm.name).use(rm,[{metadata:e,resolveAppInfo:t,shouldInjectAsset:i}])})}}}({metadata:h,resolveAppInfo:()=>e.context.resolveAppInfo()})],M={source:P,plugins:N},j=[function e({metadata:t,entry:r,resolveSigningEncryptionOptions:n,onProcessDuration:i}){return{name:e.name,setup(e){e.modifyBundlerChain((o,a)=>{if(a?.environment?.name==="web")return;let s=e.useExposed(Symbol.for("LynxTemplatePlugin"));o.plugin(np.name).use(np,[s.LynxTemplatePlugin,t,r,n,i])})}}}({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(r){r.modifyBundlerChain((r,n)=>{let i=n?.environment?.name;r.plugin("template-widget-entry-plugin").use(aU,[{markTemplateWidgetEntry:t=>{e.addTemplateWidgetEntry(t)},normalizeEntryName:e=>t?.(e,i)}])})}}}({context:e.context,normalizeEntryName:(e,t)=>"web"===t?$.get(e):e}),(t=this.pluginSystem,r=e.context,{name:"output-plugin",setup(e){let n={pluginSystem:t,context:r};e.modifyBundlerChain((e,t)=>{t?.environment?.name!=="web"&&e.plugin("output-plugin").use(aM,[n])})}}),...p===eM.DEV&&C?[function({context:e}){let t;return e.getWidgetViewDataTemplates=async()=>{if(t)return t;try{t=function(e,t,r){let n=function(e){let t,r=(0,x.createRequire)(ti.join(e,"package.json"));try{t=r.resolve("typescript")}catch(e){return}return r(t)}(e);if(!n)return{templatesByEntry:{},templatesByWidget:{}};let i=[...new Set(Object.values(t).map(({filename:e})=>e))],o=n.createProgram({options:function(e,t){let r={allowJs:!0,checkJs:!1,jsx:e.JsxEmit.Preserve,noEmit:!0,skipLibCheck:!0,target:e.ScriptTarget.ESNext},n=e.findConfigFile(t,tn.existsSync);if(!n)return r;let i=e.readConfigFile(n,e.sys.readFile);return i.error?r:{...e.parseJsonConfigFileContent(i.config,e.sys,ti.dirname(n)).options,...r}}(n,e),rootNames:i}),a=o.getTypeChecker(),s=Object.fromEntries(Object.entries(t).map(([e,{filename:t}])=>{let r,i=o.getSourceFile(t);return[k(e),i?(r={},!function e(t){if(n.isCallExpression(t)&&("getViewData"===aV(n,t.expression)||"useViewData"===aV(n,t.expression))&&t.typeArguments?.[0]){let e=a.getTypeFromTypeNode(t.typeArguments[0]);for(let i of a.getPropertiesOfType(e)){let o=i.valueDeclaration??i.declarations?.[0]??t;r[i.getName()]=function e(t,r,n,i,o){let a=(r.isUnion()?r.types:[r]).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=>n.isArrayType(e)||n.isTupleType(e)))return[];let s=a.find(e=>e.flags&t.TypeFlags.Object);if(!s||o.has(s))return{};o.add(s);let l=Object.fromEntries(n.getPropertiesOfType(s).map(r=>{let a=r.valueDeclaration??r.declarations?.[0]??i;return[r.getName(),e(t,n.getTypeOfSymbolAtLocation(r,a),n,a,o)]}));return o.delete(s),l}(n,a.getTypeOfSymbolAtLocation(i,o),a,o,new Set([e]))}}n.forEachChild(t,e)}(i),r):{}]})),l=Object.fromEntries(Object.keys(t).map(e=>{let n=k(e);return[rb(t,r,e),s[n]??{}]}));return{templatesByEntry:s,templatesByWidget:l}}(e.appDirectory,e.widgets,e.metadata.getData().widgets)}catch{t=aq}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 r,n=!1,i=!1;t.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t(e,{server:{setup({server:e}){e.middlewares.use(ay)}}})),t.onAfterDevCompile(async({stats:o})=>{if(o.hasErrors()||n)return;let{devServer:a}=t.context;if(!a)return;n=!0;let s=await t$({debugDriver:e.userConfig.debugDriver,skipAdbForegroundAppWatch:e.userConfig.skipAdbForegroundAppWatch}).catch(nc);i||await ag({context:e,port:a.port,driver:s,isSigned:e.isSignedEncryption,onCleanupReady(e){i?e():r=e}})}),t.onCloseDevServer(()=>{i=!0,r?.(),r=void 0})}}))({context:e.context}),function({context:e}){let t="KitMonitorPlugin";return{name:t,setup(r){if(r.onAfterCreateCompiler(({compiler:r})=>{for(let n of"compilers"in r?r.compilers:[r])n.hooks.finishMake.tap(t,()=>{aO(e.compileLifecycle,"moduleProcess",Date.now())}),n.hooks.emit.tap(t,()=>{aO(e.compileLifecycle,"assetProcess",Date.now())}),n.hooks.failed.tap(t,t=>{ak.report({appDirectory:e.appDirectory,context:e,scene:e.compileLifecycle.scene??(e.command===eM.DEV?"dev_initial":e.command),status:"failed",errorStage:"compile",error:t})})}),e.command!==eM.DEV){let t=e.command;r.onBeforeBuild(()=>{let r=Date.now();aI(e.compileLifecycle,{scene:t,commandStartTime:e.compileLifecycle.commandStartTime??r,compileStartTime:r})}),r.onAfterBuild(({stats:r})=>{aD(e,t,r)})}else r.onBeforeDevCompile(({isFirstCompile:t})=>{let r=Date.now();aI(e.compileLifecycle,{scene:t?"dev_initial":"hot_update",commandStartTime:t?e.compileLifecycle.commandStartTime??r:r,compileStartTime:r})}),r.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}=aX(aZ(["@byted/rsdoctor"],w));for(let r of e)r.plugins??=[],r.plugins.push(new t({disableClientServer:!0,supports:{banner:!0}}))})}}]:[],(n=this.pluginSystem,i=e.context,{name:"view-hooks-plugin",setup(e){e.modifyBundlerChain((e,t)=>{t?.environment?.name==="web"||e.plugin("view-hooks-plugin").use(aB,[{pluginSystem:n,context:i}])})}}),(({getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:r,metadata:n,resolveSigningEncryptionOptions:i,onProcessDuration:o})=>({name:"lynx:encode-worker",async setup(a){th()||a.modifyBundlerChain((a,s)=>{s?.environment?.name!=="web"&&a.plugin(nl.name).use(nl,[{getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:r,metadata:n,resolveSigningEncryptionOptions:i,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||[]],U=[{name:"web-virtual-entry-plugin",setup(e){e.modifyBundlerChain((e,{environment:t})=>{"web"===t.name&&e.plugin(aG.name).use(aG,[D])})}},(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 r of Object.keys(e.plugins.entries()??{}))r.startsWith("lynx:template-")&&e.plugin(r).tap(e=>{let r=e[0];return r?.intermediate?.startsWith(t)&&(r.intermediate=r.intermediate.slice(t.length)),e});e.plugins.has("lynx:sourcemap")&&e.plugin("lynx:sourcemap").tap(e=>{var t;let r,n=e[0];return n.ignoreList=[/^(?!file:\/\/\/)/,/\/(?:externals-loading-runtime|webpack\/runtime)(?:\/|$)/,/\/node_modules\//,/\.(?:css|less|sass|scss)(?:[?#]|$)/],t=o.appDirectory,r=ti.resolve(t),n.moduleFilenameTemplate=({absoluteResourcePath:e,query:t=""})=>{let n=ti.relative(r,e),i=".."!==n&&!n.startsWith(`..${ti.sep}`)&&!ti.isAbsolute(n),o=i?aF(n):aF(e).replace(/^\/+/,"");return`${i?"file":"webpack"}:///${o}${t}`},e}),e.plugin(aH.name).use(aH,[o])}}})}})],B=d({mode:p===eM.DEV?"development":"production",environments:C?{lynx:M,web:{source:R,output:{distPath:{css:"",js:"base/web-common"},cleanDistPath:!1,filename:{assets:"[name]/web.bundle"},sourceMap:{js:!!b&&"cheap-module-source-map",css:!1}},plugins:[J({externals:az(p===eM.DEV,!0),globalObject:"lynx"})]}}:{lynx:M},tools:{rspack:{module:{rules:[{enforce:"pre",test:/\.(t|j)sx$/,loader:function(e,t,r=ti.join(ti.dirname((0,aY.fileURLToPath)(import.meta.url)),"components-loader.js"),n=aZ){try{return n(t===ta?["@doubao-dev/kit/components-loader","@byted-doubao-apps/kit/components-loader"]:["@byted-doubao-apps/kit/components-loader","@doubao-dev/kit/components-loader"],e)}catch(e){if((0,tn.existsSync)(r))return r;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:{...I,entry:{}},server:{cors:!0,host:nr()},dev:{writeToDisk:tu(),hmr:p===eM.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:tu(),...tm()&&!y?{chunkSplit:{strategy:"split-by-experience"}}:{}},...y?{splitChunks:!1}:{},plugins:[{name:"replace-lynx-react-alias",setup(e){en({LAYERS:s,lazy:!1,rootPath:ti.dirname((0,aY.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:[...ts]}}),{name:"pin-react-transform-path",pre:["lynx:react"],setup(e){e.modifyBundlerChain((e,{CHAIN_ID:t})=>{let r=e.module.rule(t.RULE.JS).oneOf(t.ONE_OF.JS_MAIN);for(let e of[s.BACKGROUND,s.MAIN_THREAD]){let t=r.oneOfs.get(e)?.uses.get(e);if(!t)throw Error(`React transform loader not found for layer: ${e}`);t.tap(e=>({...e,transformPath:E}))}})}},function(e){let{compilerOptionsKeys:t=rI.compilerOptionsKeys,configKeys:r=rI.configKeys,validate:n=rY,dslPluginName2PkgName:i=rX,upgradeRspeedyLink:o="https://www.npmjs.com/package/upgrade-rspeedy"}=(void 0)??{};return n(e),{name:"lynx:config",async setup(n){n.expose(Symbol.for("lynx.config"),{config:e}),n.modifyBundlerChain(a=>{let s=n.useExposed(Symbol.for("LynxTemplatePlugin"));if(!s){let e="Rspeedy and plugins";throw Object.entries(i).forEach(([t,r])=>{n.isPluginExists(t)&&(e=r)}),Error(`\
190
- [pluginLynxConfig] No \`LynxTemplatePlugin\` exposed to ${rF("the plugin API","https://rsbuild.rs/plugins/dev/core#apiexpose")}.
183
+ 调试服务未运行。`})(p,s)),await al(e)}let u=(o=!1,a=[],{add(e){e&&(o?e():a.push(e))},cleanup:()=>{o=!0,a.splice(0).forEach(e=>e())},isDisposed:()=>o});if(e.devServerInteractive){let t={context:e,appId:p,appletUrl:s,pages:d.pages,widgets:d.widgets,driver:r,isSigned:n,openWebDebugger:c,isDisposed:u.isDisposed};u.add(nd.instance.addListener(e=>{let r=e.trim().toLowerCase();return("r"===r||"web"===r)&&(process.stdout.write(W(2)),"r"===r?ab(t).catch(np):t.openWebDebugger(),!0)},"devCommands",-1))}i(u.cleanup);try{if(!r){e.devServerInteractive&&tD.info("尝试将应用推送到 Android 设备,但未检测到可用设备。\n");return}u.add(await ay(p,s,d.pages,d.widgets,r,n,{interactive:e.devServerInteractive}))}catch(e){throw u.cleanup(),e}}let av=(e,t,r)=>{if(!tm())return void r();let n=process.hrtime.bigint(),i=e.method,o=e.url;t.on("finish",()=>{let e=Number(process.hrtime.bigint()-n)/1e6,r=o?new URL(o,"http://localhost").pathname:"",a=t.statusCode;tD.request({method:i||"UNKNOWN",url:r,statusCode:a,durationMs:e})}),r()},aw=new Set(["EACCES","EPERM"]),aS=new Set(["MODULE_NOT_FOUND","ERR_MODULE_NOT_FOUND"]),aE=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT","ERR_REQUEST_TIMEOUT"]),ax=new Set(["ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETUNREACH","ENOTFOUND","EAI_AGAIN","EPIPE"]),aA=new Set(["EEXIST","EISDIR","EMFILE","ENOENT","ENOSPC","ENOTDIR","EROFS"]),aT={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 aC(e,t){if(!e||"object"!=typeof e||!(t in e))return;let r=e[t];return"string"==typeof r?r:void 0}function aI(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(aI);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 aO(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 aP(e,t){Object.assign(e,aO(t))}function ak(e,{scene:t,commandStartTime:r,compileStartTime:n}){let i=e.commandStartTime===r,o=e.prepareDurations,a=e.builderInitStartTime,s=e.appInfoDurationMs,l=e.appInfoMeasured;i&&void 0!==a&&(o.builderInitMs=Math.max(0,n-a)),aP(e,r),e.scene=t,e.compileStartTime=n,i&&(e.prepareDurations=o,e.appInfoDurationMs=s,e.appInfoMeasured=l)}function aD(e,t,r){e.compilePhaseEndTimes[t]=Math.max(e.compilePhaseEndTimes[t]??0,r)}function a$(e){return Math.max(0,Math.round(Number.isFinite(e)?e:0))}let aR=new class{uploader;constructor(e){this.uploader=e}async report(e){try{var t,r;let n,i,o,a,s,l,d,p=e.context?.compileLifecycle;if(p){if(p.reported)return;p.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 aa(t)?t:void 0}catch{return}}(e.context),scene:e.scene,command:c},h="failed"===e.status?{...u,status:e.status,errorStage:e.errorStage,error:aI(e.error)[0]??e.error}:{...u,status:e.status,pageCount:Object.keys(e.context.pages).length,widgetCount:Object.keys(e.context.widgets).length,securityMode:(n=e.context.signingEncryptionOptions,i=!!n?.signing.enabled,o=!!n?.encryption.enabled,i&&o?"signing_and_encryption":i?"signing":o?"encryption":"none"),durations:(t=e.context.compileLifecycle,r=e.compileEndTime,a=t.commandStartTime??r,s=t.compileStartTime??r,l=Math.min(r,Math.max(s,t.compilePhaseEndTimes.moduleProcess??r)),d=Math.min(r,Math.max(l,t.compilePhaseEndTimes.assetProcess??r)),{totalMs:r-a,prepareMs:s-a,compileMs:r-s,...t.prepareDurations,appInfoMs:t.appInfoDurationMs,appTemplateProcessMs:t.appTemplateProcessDurationMs,viewTemplateProcessMs:t.viewTemplateProcessDurationMs,moduleProcessMs:l-s,assetProcessMs:d-l,outputWriteMs:r-d})};await this.upload(h)}catch{}}async flush(e=3e3){try{await this.uploader?.flush?.(e)}catch{}}async upload(e){let{appDirectory:t,...r}=e;await (this.uploader??=new ec).upload(function(e,t){let r={kit_compile_id:function(){let e="unknown";try{e=(0,rI.userInfo)().username||e}catch{}return`${Date.now()}_${e}_${(0,ib.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&&(r.kit_appId=e.targetAppId),"success"===e.status)r.kit_page_count=e.pageCount,r.kit_widget_count=e.widgetCount,r.kit_security_mode=e.securityMode,r.kit_duration_ms_total=a$(e.durations.totalMs),r.kit_prepare_ms=a$(e.durations.prepareMs),r.kit_compile_ms=a$(e.durations.compileMs),r.kit_config_load_ms=a$(e.durations.configLoadMs),r.kit_project_scan_ms=a$(e.durations.projectScanMs),r.kit_context_bootstrap_ms=a$(e.durations.contextBootstrapMs),r.kit_app_info_ms=a$(e.durations.appInfoMs),r.kit_app_template_process_ms=a$(e.durations.appTemplateProcessMs),r.kit_view_template_process_ms=a$(e.durations.viewTemplateProcessMs),r.kit_plugin_bootstrap_ms=a$(e.durations.pluginBootstrapMs),r.kit_builder_init_ms=a$(e.durations.builderInitMs),r.kit_module_process_ms=a$(e.durations.moduleProcessMs),r.kit_asset_process_ms=a$(e.durations.assetProcessMs),r.kit_output_write_ms=a$(e.durations.outputWriteMs);else{r.kit_error_type=function(e){let t=aC(e,"code")?.toUpperCase();if(t){if(aw.has(t))return"permission_error";if(aS.has(t))return"dependency_error";if(aE.has(t))return"timeout_error";if(ax.has(t))return"network_error";if(aA.has(t))return"filesystem_error"}let r="string"==typeof e?e:aC(e,"message")??"";if(/cannot find module|can't resolve|cannot resolve|module not found|package .+ not found/i.test(r))return"dependency_error";if(/permission denied|operation not permitted/i.test(r))return"permission_error";if(/timed out|timeout/i.test(r))return"timeout_error";if(/connection (?:refused|reset)|getaddrinfo|network error|socket hang up|unable to connect/i.test(r))return"network_error";if(/no such file|file does not exist|not a directory|directory does not exist/i.test(r))return"filesystem_error";if(/syntax\s*error|syntaxerror|unexpected token|failed to parse|pars(?:e|ing) error/i.test(r))return"syntax_error";if(/\bTS\d{4}:|\btype\s*error\b|\btypeerror\b/i.test(r))return"type_error";if(/appId is required|entry config|invalid config|configuration (?:is )?(?:invalid|missing)/i.test(r))return"config_error";if(/loader/i.test(r))return"loader_error";if(/plugin/i.test(r))return"plugin_error";let n=aC(e,"name");return n&&aT[n]||"unknown_error"}(e.error),e.errorStage&&(r.kit_error_stage=e.errorStage);let i=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(i){var n;let e=(n=t.appDirectory,(0,iU.stripVTControlCharacters)(i).replaceAll(ta.resolve(n),"<project>").replaceAll((0,rI.homedir)(),"<home>").replace(/\s+/g," ").trim().slice(0,1024));e&&(r.kit_error_message=e)}}return{name:"kit_compile",params:r}}(r,{appDirectory:t,kitVersion:"0.3.0-rc.2",runEnv:process.env.BUILD_VERSION?"SCM":process.env.CI_REPO_NAME?"CI":"LOCAL"}))}};function aN(e,t,r){r?.hasErrors()?aR.report({appDirectory:e.appDirectory,context:e,scene:t,status:"failed",errorStage:"compile",error:aI(r)[0]}):aR.report({appDirectory:e.appDirectory,context:e,scene:t,status:"success",compileEndTime:Date.now()})}let aL=f("crypto");class aM{constructor(e,t,r){this._content=t,this._hashCode=r,this.source=e}get content(){return this._content}get hashCode(){var e;return this._hashCode||(e=this.content,aL.createHash("sha256").update("string"==typeof e?e:new DataView(e.buffer,e.byteOffset,e.byteLength)).digest("hex").substring(0,8))}}class aj extends aM{constructor(e,t){super(e,t),this._manifest={applet:{pages:[],tools:[]},widgets:[]};try{this._manifest=j(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){j(this._manifest,e)}setSCMVersion(e){this._manifest.scmVersion=e}setVersionCode(e){this._manifest.versionCode=e}setAppletManifest(e){this._manifest.applet=e}mergeAppletManifest(e){j(this._manifest.applet,e)}setRenderType(e=en.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 aU{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 aj(e,JSON.stringify({}))),this.getAsset(e)}}class aB{options;constructor(e){this.options=e}apply(e){let t,{pluginSystem:r}=this.options;e.hooks.thisCompilation.tap({name:aB.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},n=>{n.hooks.processAssets.tapPromise({name:aB.name,stage:e.rspack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{t=new aU,n.getAssets().forEach(e=>{let r=new aM(e.name,e.source.source(),e.info.contenthash?.[0]);t.addAsset(e.name,r)});let{entrypoints:i}=n,o={};i.forEach((e,r)=>{o[r]=e.getFiles().map(e=>{let r=t.getAsset(e);if(!r)throw Error(`Asset ${e} not found`);return new aM(r.source,r.content,r.hashCode)})});let a=this.options.context.appId;a&&to.mkdirSync(ta.join(this.options.context.rootPath,a),{recursive:!0}),await r.callAssetsHooks("beforeEmit",{assets:t,chunks:o}),Object.keys(t.getAssets()).forEach(r=>{let i=t.getAsset(r);if(!i)return;let{source:o,destination:a}=i;if(!o||!a)return;n.getAsset(o)?n.renameAsset(o,a):n.emitAsset(a,new e.rspack.sources.RawSource(i.content));let s=n.getAsset(`${o}.map`);s&&n.renameAsset(s.name,`${a}.map`)}),await r.callAssetsHooks("afterEmit",{assets:{...t.getAssets()}})})})}}let aF=new Set(["@doubao-dev/template","@byted-doubao-apps/template"]);class aW{options;constructor(e){this.options=e}apply(e){e.hooks.thisCompilation.tap(aW.name,e=>{e.hooks.finishModules.tap(aW.name,()=>{let t=new Map,r=n=>{if(!n)return!1;let i=t.get(n);if(void 0!==i)return i;if(function(e){var t;let r=e.resourceResolveData?.descriptionFileData?.name;if("string"==typeof r&&aF.has(r))return!0;let n=(t=e.resource,t?.split(/[?#]/)[0].replace(/\\/g,"/"));return[...aF].some(e=>n?.includes(`/node_modules/${e}/`))}(n))return t.set(n,!0),!0;for(let i of(t.set(n,!1),e.moduleGraph.getOutgoingConnections(n)))if(r(i.module))return t.set(n,!0),!0;return!1};e.entries.forEach((t,n)=>{t.dependencies.some(t=>r(e.moduleGraph.getModule(t)))&&this.options.markTemplateWidgetEntry(this.options.normalizeEntryName?.(n)??n)})})})}}class aH{options;constructor(e){this.options=e}apply(e){e.hooks.make.tapPromise(aH.name,async()=>{await this.options.pluginSystem.callViewHooks("collectMetaData",{collector:this.options.context.metadata})}),e.hooks.thisCompilation.tap(aH.name,e=>{e.hooks.optimizeTree.tapPromise(aH.name,async t=>{await this.options.pluginSystem.callViewHooks("build",{metadata:this.options.context.metadata,fileDependencies:e.fileDependencies})})}),e.hooks.done.tapPromise(aH.name,async e=>{await this.options.pluginSystem.callViewHooks("afterBuild",{stats:e})})}}function aV(e){return e.replaceAll("\\","/")}function aG(e,t,r,n=`${t}.map`){return t!==r&&!!e.getAsset(t)&&(e.renameAsset(t,r),e.getAsset(n)&&e.renameAsset(n,`${r}.map`),!0)}class aq{context;constructor(e){this.context=e}apply(e){e.hooks.thisCompilation.tap(aq.name,t=>{t.hooks.processAssets.tapPromise({name:aq.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT},async()=>{var e,r;let n=this.context.metadata.getData(),i=this.context.command===eU.DEV?"all":"configured",o=rS(this.context.pages,this.context.normalizedAppConfig.pages.entries,i),a=rS(this.context.widgets,this.context.normalizedAppConfig.widgets.entries,i),s=n.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=n.pages,Object.keys(o).forEach(r=>{let n=aV(r),i=r_(n);aG(t,`${i}/template.js`,rn(s,e[r]?.path??rr(n),rg),`${i}/background.js.map`)})),r=n.widgets,Object.keys(a).forEach(e=>{var n;let i=r_(aV(e));aG(t,`${i}/template.js`,(n=rv(a,r,e),`${n}/${rg}`),`${i}/background.js.map`)})})})}}class aJ{entry;constructor(e){this.entry=e}apply(e){let t=new e.webpack.experiments.VirtualModulesPlugin;t.apply(e),e.hooks.thisCompilation.tap(aJ.name,()=>{t.writeModule(eQ,""),t.writeModule(e0,e1),Object.values(this.entry).forEach(e=>{t.writeModule(e.filename,e.toString())})})}}function aK(e,t){return e.isIdentifier(t)?t.text:e.isPropertyAccessExpression(t)?t.name.text:void 0}let az={templatesByEntry:{},templatesByWidget:{}},aY="/doubao-apps-framework.template.js",aX="/doubao-apps-api.template.js",aZ=(e,t)=>{let r=(e,r,n)=>({libraryName:n,url:t?`/wsd${e}`:e,background:{sectionPath:r},mainThread:{sectionPath:`${r}__main-thread`},async:!!t});return{"@byted-doubao-apps/bridge-base":r(aX,"api"),"@byted-doubao-apps/open-api":r(aX,"api"),...Object.fromEntries(Object.entries(e7).map(([t,n])=>[t,r(e?"/doubao-apps-react-dev.template.js":"/doubao-apps-react.template.js","reactLynx",["reactLynx",n])])),[`${ts}/api`]:r(aX,"api"),[`${tl}/api`]:r(aX,"api"),[ts]:r(aY,"framework"),[tl]:r(aY,"framework"),"@byted-doubao-apps/components":r(aY,"components"),[tp(ts)]:r(aY,"components"),[tp(tl)]:r(aY,"components")}},aQ=f("node:url"),a0=(0,A.createRequire)(import.meta.url);function a1(e,t){for(let r of e)try{return a0.resolve(r,{paths:t})}catch{}throw Error(`Cannot resolve package from candidates: ${e.join(", ")}`)}class a2{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,r,n,i,o;let{appDirectory:a,command:d,metadata:m,rootPath:f}=e.context,g=e.context.environment,y="1"===process.env.ENABLE_SELF_CONTAINED;await this.pluginSystem.callViewHooks("modifyEnvironment",{environment:g}),e.context.setEnvironment(g);let b=d===eU.DEV,_=await this.createEntry(),v=tu(a),w=[a,ta.dirname((0,aQ.fileURLToPath)(import.meta.url))],S=a0.resolve("@lynx-js/react/transform"),E=b?"all":"configured",x=rS(e.context.pages,e.context.normalizedAppConfig.pages.entries,E),T=new Set([...Object.keys(rS(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,E)),...Object.keys(x)]),C=T.size>0;C&&await nr({widgets:e.context.widgets,pages:e.context.pages,entries:_,collector:m,normalizedAppConfig:e.context.normalizedAppConfig,define:e.context.userConfig?.source?.define});let I={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":"({})"}},O=e=>[eQ,e0,e.filename],P={...I,entry:Object.fromEntries(Object.entries(_).map(([e,t])=>[e,O(t)]))},k=Object.fromEntries(Object.entries(_).filter(([e])=>T.has(e))),D=new Map(Object.keys(k).map(e=>[r_(e),e])),$={...P,entry:Object.fromEntries(Object.entries(k).map(([e,t])=>[r_(e),O(t)])),define:{...P.define,__DOUBAO_APPS_WEB__:JSON.stringify(!0),__LYNXVIEW__:JSON.stringify(!0)}},N=[...tf()?[]:[V({externals:aZ(b),globalObject:"lynx"})]],L=[function({metadata:e,resolveAppInfo:t}){return{name:"ai-manifest-plugin",setup(r){r.modifyBundlerChain((r,n)=>{let i=n?.environment?.name==="web"?rm:rh;r.plugin(rf.name).use(rf,[{metadata:e,resolveAppInfo:t,shouldInjectAsset:i}])})}}}({metadata:m,resolveAppInfo:()=>e.context.resolveAppInfo()})],M={source:P,plugins:N},j=[function e({metadata:t,entry:r,resolveSigningEncryptionOptions:n,onProcessDuration:i}){return{name:e.name,setup(e){e.modifyBundlerChain((o,a)=>{if(a?.environment?.name==="web")return;let s=e.useExposed(Symbol.for("LynxTemplatePlugin"));o.plugin(nl.name).use(nl,[s.LynxTemplatePlugin,t,r,n,i])})}}}({metadata:m,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(r){r.modifyBundlerChain((r,n)=>{let i=n?.environment?.name;r.plugin("template-widget-entry-plugin").use(aW,[{markTemplateWidgetEntry:t=>{e.addTemplateWidgetEntry(t)},normalizeEntryName:e=>t?.(e,i)}])})}}}({context:e.context,normalizeEntryName:(e,t)=>"web"===t?D.get(e):e}),(t=this.pluginSystem,r=e.context,{name:"output-plugin",setup(e){let n={pluginSystem:t,context:r};e.modifyBundlerChain((e,t)=>{t?.environment?.name!=="web"&&e.plugin("output-plugin").use(aB,[n])})}}),...d===eU.DEV&&C?[function({context:e}){let t;return e.getWidgetViewDataTemplates=async()=>{if(t)return t;try{t=function(e,t,r){let n=function(e){let t,r=(0,A.createRequire)(ta.join(e,"package.json"));try{t=r.resolve("typescript")}catch(e){return}return r(t)}(e);if(!n)return{templatesByEntry:{},templatesByWidget:{}};let i=[...new Set(Object.values(t).map(({filename:e})=>e))],o=n.createProgram({options:function(e,t){let r={allowJs:!0,checkJs:!1,jsx:e.JsxEmit.Preserve,noEmit:!0,skipLibCheck:!0,target:e.ScriptTarget.ESNext},n=e.findConfigFile(t,to.existsSync);if(!n)return r;let i=e.readConfigFile(n,e.sys.readFile);return i.error?r:{...e.parseJsonConfigFileContent(i.config,e.sys,ta.dirname(n)).options,...r}}(n,e),rootNames:i}),a=o.getTypeChecker(),s=Object.fromEntries(Object.entries(t).map(([e,{filename:t}])=>{let r,i=o.getSourceFile(t);return[Y(e),i?(r={},!function e(t){if(n.isCallExpression(t)&&("getViewData"===aK(n,t.expression)||"useViewData"===aK(n,t.expression))&&t.typeArguments?.[0]){let e=a.getTypeFromTypeNode(t.typeArguments[0]);for(let i of a.getPropertiesOfType(e)){let o=i.valueDeclaration??i.declarations?.[0]??t;r[i.getName()]=function e(t,r,n,i,o){let a=(r.isUnion()?r.types:[r]).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=>n.isArrayType(e)||n.isTupleType(e)))return[];let s=a.find(e=>e.flags&t.TypeFlags.Object);if(!s||o.has(s))return{};o.add(s);let l=Object.fromEntries(n.getPropertiesOfType(s).map(r=>{let a=r.valueDeclaration??r.declarations?.[0]??i;return[r.getName(),e(t,n.getTypeOfSymbolAtLocation(r,a),n,a,o)]}));return o.delete(s),l}(n,a.getTypeOfSymbolAtLocation(i,o),a,o,new Set([e]))}}n.forEachChild(t,e)}(i),r):{}]})),l=Object.fromEntries(Object.keys(t).map(e=>{let n=Y(e);return[rv(t,r,e),s[n]??{}]}));return{templatesByEntry:s,templatesByWidget:l}}(e.appDirectory,e.widgets,e.metadata.getData().widgets)}catch{t=az}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 r,n=!1,i=!1;t.modifyRsbuildConfig((e,{mergeRsbuildConfig:t})=>t(e,{server:{setup({server:e}){e.middlewares.use(av)}}})),t.onAfterCreateCompiler(({compiler:t})=>{for(let r of"compilers"in t?t.compilers:[t])r.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(n)return;let{devServer:a}=t.context;if(!a)return;n=!0;let s=await tN({debugDriver:e.userConfig.debugDriver,skipAdbForegroundAppWatch:e.userConfig.skipAdbForegroundAppWatch}).catch(np);i||(e.finishInitialDevCompile(),a_({context:e,port:a.port,driver:s,isSigned:e.isSignedEncryption,onCleanupReady(e){i?e():r=e}}).catch(e=>{i||tD.error("Failed to initialize dev server actions",{error:e})}))}),t.onCloseDevServer(()=>{i=!0,e.devServerAbort.abort(),r?.(),r=void 0})}}))({context:e.context}),function({context:e}){let t="KitMonitorPlugin";return{name:t,setup(r){if(r.onAfterCreateCompiler(({compiler:r})=>{for(let n of"compilers"in r?r.compilers:[r])n.hooks.finishMake.tap(t,()=>{aD(e.compileLifecycle,"moduleProcess",Date.now())}),n.hooks.emit.tap(t,()=>{aD(e.compileLifecycle,"assetProcess",Date.now())}),n.hooks.failed.tap(t,t=>{aR.report({appDirectory:e.appDirectory,context:e,scene:e.compileLifecycle.scene??(e.command===eU.DEV?"dev_initial":e.command),status:"failed",errorStage:"compile",error:t})})}),e.command!==eU.DEV){let t=e.command;r.onBeforeBuild(()=>{let r=Date.now();ak(e.compileLifecycle,{scene:t,commandStartTime:e.compileLifecycle.commandStartTime??r,compileStartTime:r})}),r.onAfterBuild(({stats:r})=>{aN(e,t,r)})}else r.onBeforeDevCompile(({isFirstCompile:t})=>{let r=Date.now();ak(e.compileLifecycle,{scene:t?"dev_initial":"hot_update",commandStartTime:t?e.compileLifecycle.commandStartTime??r:r,compileStartTime:r})}),r.onAfterDevCompile(({stats:t})=>{aN(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}=a0(a1(["@byted/rsdoctor"],w));for(let r of e)r.plugins??=[],r.plugins.push(new t({disableClientServer:!0,supports:{banner:!0}}))})}}]:[],(n=this.pluginSystem,i=e.context,{name:"view-hooks-plugin",setup(e){e.modifyBundlerChain((e,t)=>{t?.environment?.name==="web"||e.plugin("view-hooks-plugin").use(aH,[{pluginSystem:n,context:i}])})}}),(({getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:r,metadata:n,resolveSigningEncryptionOptions:i,onProcessDuration:o})=>({name:"lynx:encode-worker",async setup(a){tg()||a.modifyBundlerChain((a,s)=>{s?.environment?.name!=="web"&&a.plugin(ns.name).use(ns,[{getAppAssetPath:e,getAppMapAssetPath:t,engineVersion:r,metadata:n,resolveSigningEncryptionOptions:i,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||[]],U=[{name:"web-virtual-entry-plugin",setup(e){e.modifyBundlerChain((e,{environment:t})=>{"web"===t.name&&e.plugin(aJ.name).use(aJ,[k])})}},(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 r of Object.keys(e.plugins.entries()??{}))r.startsWith("lynx:template-")&&e.plugin(r).tap(e=>{let r=e[0];return r?.intermediate?.startsWith(t)&&(r.intermediate=r.intermediate.slice(t.length)),e});e.plugins.has("lynx:sourcemap")&&e.plugin("lynx:sourcemap").tap(e=>{var t;let r,n=e[0];return n.ignoreList=[/^(?!file:\/\/\/)/,/\/(?:externals-loading-runtime|webpack\/runtime)(?:\/|$)/,/\/node_modules\//,/\.(?:css|less|sass|scss)(?:[?#]|$)/],t=o.appDirectory,r=ta.resolve(t),n.moduleFilenameTemplate=({absoluteResourcePath:e,query:t=""})=>{let n=ta.relative(r,e),i=".."!==n&&!n.startsWith(`..${ta.sep}`)&&!ta.isAbsolute(n),o=i?aV(n):aV(e).replace(/^\/+/,"");return`${i?"file":"webpack"}:///${o}${t}`},e}),e.plugin(aq.name).use(aq,[o])}}})}})],B=p({mode:d===eU.DEV?"development":"production",environments:C?{lynx:M,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:[V({externals:aZ(d===eU.DEV,!0),globalObject:"lynx"})]}}:{lynx:M},tools:{rspack:{module:{rules:[{enforce:"pre",test:/\.(t|j)sx$/,loader:function(e,t,r=ta.join(ta.dirname((0,aQ.fileURLToPath)(import.meta.url)),"components-loader.js"),n=a1){try{return n(t===tl?["@doubao-dev/kit/components-loader","@byted-doubao-apps/kit/components-loader"]:["@byted-doubao-apps/kit/components-loader","@doubao-dev/kit/components-loader"],e)}catch(e){if((0,to.existsSync)(r))return r;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:{...I,entry:{}},server:{cors:!0,host:e.context.devServerHost},dev:{writeToDisk:tm(),hmr:d===eU.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:tm(),...tf()&&!y?{chunkSplit:{strategy:"split-by-experience"}}:{}},...y?{splitChunks:!1}:{},plugins:[{name:"replace-lynx-react-alias",setup(e){R({LAYERS:s,lazy:!1,rootPath:ta.dirname((0,aQ.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:[...td]}}),{name:"pin-react-transform-path",pre:["lynx:react"],setup(e){e.modifyBundlerChain((e,{CHAIN_ID:t})=>{let r=e.module.rule(t.RULE.JS).oneOf(t.ONE_OF.JS_MAIN);for(let e of[s.BACKGROUND,s.MAIN_THREAD]){let t=r.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=rP.compilerOptionsKeys,configKeys:r=rP.configKeys,validate:n=rZ,dslPluginName2PkgName:i=rQ,upgradeRspeedyLink:o="https://www.npmjs.com/package/upgrade-rspeedy"}=(void 0)??{};return n(e),{name:"lynx:config",async setup(n){n.expose(Symbol.for("lynx.config"),{config:e}),n.modifyBundlerChain(a=>{let s=n.useExposed(Symbol.for("LynxTemplatePlugin"));if(!s){let e="Rspeedy and plugins";throw Object.entries(i).forEach(([t,r])=>{n.isPluginExists(t)&&(e=r)}),Error(`\
184
+ [pluginLynxConfig] No \`LynxTemplatePlugin\` exposed to ${rH("the plugin API","https://rsbuild.rs/plugins/dev/core#apiexpose")}.
191
185
 
192
186
  Please upgrade ${e} to latest version.
193
187
 
194
- See ${rF(rK().yellow("Upgrade Rspeedy"),o)} for more details.
195
- `)}let{LynxTemplatePlugin:l}=s;a.plugin("lynx:config").use(rG,[{LynxTemplatePlugin:l,config:e,compilerOptionsKeys:t,configKeys:r}])})}}}({enableMultiTouch:!0,enableNewGesture:!0,enableCSSInlineVariables:!0,enableSimultaneousTap:!0,enableReloadLifecycle:!0}),m(),u(),...C?[]:N,...L,...j,...C?U:[]]});return await this.pluginSystem.callViewHooks("beforeBuild",{buildConfig:B}),B}}async function a0(e,t){let r=new aQ(t),n=await r.createConfig({config:e}),i=await p({rspeedyConfig:n,cwd:e.context.appDirectory});return i.removePlugins(["lynx:react-alias"]),i}async function a1(e,t){var r;let{entry:n}=await rp({config:e,pluginSystem:t});return await a0({...e,rsbuildPlugins:[...e.rsbuildPlugins||[],(r={context:e.context,entry:n,pluginSystem:t},{name:"worker-in-view-plugin",setup(e){e.modifyRspackConfig((e,{environment:t})=>{var n,i,o;let a;("lynx"===t.name||"web"===t.name)&&(n=e,i=r,o=t.name,n.entry??={},a=n.entry,Object.entries(i.entry).forEach(([e,t])=>{a[e]={filename:"web"===o?`${e}.js`:`base/${e}${th()?".js":".template.js"}`,import:"web"===o&&"development"===n.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 rA(r,"lynx"===t.name)),"web"===t.name&&e.plugins.push(new rw))})}})]},t)}function a2(e){if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}let a3=e=>{try{return tn.statSync(e,{throwIfNoEntry:!1})?.isFile()}catch(e){return!1}};async function a4({internal:e,appKey:t}){try{return await nV({internal:e,path:`/developer/resource_api/apps/${encodeURIComponent(t)}/dek/public_key`})}catch(e){throw tT.error("Failed to get KEK",{error:e,appKey:t,operation:"get-kek"}),e}}async function a5(e,t,r,n){if(!(n||tc("DISABLE_SIGNING_ENCRYPTION")||tc("LEGACY_FRAMEWORK"))){if(e)return e;if("production"===process.env.NODE_ENV&&t===eM.DEPLOY){if(!r)throw Error("appId is required to get KEK");let{data:e}=await a4({internal:!1,appKey:r}),t=Number(Object.keys(e.keys)[0]);return{signing:{enabled:!1},encryption:{enabled:!0,wrap_key:e.keys[t],key_id:t,salt:""}}}}}let a9=ez.join("node_modules",".doubao-dev","config.json");function a8(e,t,r){if(r){let t=ez.isAbsolute(r)?r:ez.resolve(e,r);if(t3.existsSync(t))return t;tA.warn("Cannot find config file",{path:t})}for(let r of te.map(r=>ez.resolve(e,`${t}${r}`)))if(a3(r))return r;return!1}async function a6(e){let t=(0,v.createJiti)((0,aY.fileURLToPath)(import.meta.url),{requireCache:!1,interopDefault:!0});return await t.import(e,{default:!0})}async function a7({cwd:e=process.cwd(),customConfigFile:t}){let r=a8(e,"doubao.config",t);if(!r)return{};try{return await a6(r)}catch(e){throw tA.error("Failed to load config file",{path:r}),e}}async function se({cwd:e=process.cwd()}={}){let t=a8(ez.resolve(e,"src"),e7);if(t)try{return await a6(t)}catch(e){throw tA.error("Failed to load app config file",{path:t}),e}}async function st(e){let t=globalThis,r=Object.prototype.hasOwnProperty.call(t,"defineAppConfig"),n=t.defineAppConfig;t.defineAppConfig=e=>e;try{return await a6(e)}finally{r?t.defineAppConfig=n:delete t.defineAppConfig}}async function sr({cwd:e=process.cwd()}={}){let t=a8(ez.resolve(e,"src"),e7);if(t)try{let e=await st(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 tA.error("Failed to load Taro app config file",{path:t}),e}}let sn=f("fs/promises"),si=async(e,t=ez.basename(e))=>{if(!t3.existsSync(e))return{};let r={};for(let n of(await sn.readdir(e))){let i=ez.resolve(e,n);if(!t3.statSync(i).isDirectory())continue;let o=ez.resolve(i,"index.tsx");t3.existsSync(o)&&(r[`${t}/${n}/index`]={folderName:`${n}/index`,renderType:j.REACT_LYNX,filename:o})}return r},so=async(e,t=ez.basename(e))=>{if(!t3.existsSync(e))return{viewEntries:{},apiEntries:{}};let r=await si(e,t),n={},i=ez.resolve(e,"login.ts");t3.existsSync(i)&&(n[`${t}/login`]={filename:i,folderName:e});let o=ez.resolve(e,"privacy.ts");return t3.existsSync(o)&&(n[`${t}/privacy`]={filename:o,folderName:e}),{viewEntries:r,apiEntries:n}},sa=async(e,t)=>t3.existsSync(e)?(await sn.readdir(e)).reduce((r,n)=>{let i=ez.resolve(e,n);return t3.statSync(i).isDirectory()&&t3.existsSync(ez.resolve(i,t))&&(r[n]=ez.resolve(i,t)),r},{}):{};function ss(e){return ti.resolve(e,"app.ts")}function sl(e,t,r,n){let i=`${r}/`;if(!t.startsWith(i))throw Error(`${r} config key must start with "${i}": ${t}`);let o=t.slice(i.length),a=ti.resolve(e,r,`${o}${n}`);if(!tn.existsSync(a))throw Error(`Configured entry file does not exist for ${t}: ${a}`);return{relativeEntry:o,filename:a}}function sp(e,t){let r=t.entries[e]?.name;if(void 0===r)return t7(e);if("string"!=typeof r||!r.trim())throw Error(`Configured Tool name must be a non-empty string: ${e}`);return r.trim()}let sd=async(e,t={entryNames:[],entries:{}})=>{let r=ti.resolve(e,"tools"),n={...await sa(r,"index.ts")};t.entryNames.forEach(r=>{let{filename:i}=sl(e,r,"tools",".ts"),o=sp(r,t),a=n[o];if(a&&a!==i)throw Error(`Tool name "${o}" is already used by another entry: ${a}`);n[o]=i});let i=ss(e);return{tools:n,app:tn.existsSync(i)?i:void 0}},sc=async(e,t)=>{let r=ti.resolve(e,"pages"),n=ti.resolve(e,"widgets"),i=ti.resolve(e,"auth"),o=ti.resolve(e,"mcp-ui"),[a,s,l,p]=await Promise.all([si(r),si(n),so(o),so(i)]),d=Object.keys(p.viewEntries).length>0||Object.keys(p.apiEntries).length>0?p:l,c=t.pages,u=t.widgets,m=(t,r,n)=>{let i={...t};return r.forEach(t=>{if(i[t])return;let{relativeEntry:r,filename:o}=sl(e,t,n,".tsx");i[t]={folderName:r,renderType:j.REACT_LYNX,filename:o,isVirtualFile:!1}}),i},h=m(a,c.entryNames,"pages");return{widgets:m(s,u.entryNames,"widgets"),pages:h,auth:d}};function su(e,t,r=!1,n=!1){let i=td(t);return Object.keys(e).reduce((o,a)=>{let{filename:s}=e[a],l=n&&e[a].isLoginPage?"defineLoginPage":n?"definePage":"defineWidget",p=`${eY}${ti.sep}${a}${ti.extname(s)}`,d=rn(ti.join(t,p,".."),s);return o[a]=new ri(p),o[a].appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:d,importSpecifiers:[{propertyName:"default",name:"ViewEntry"}]},{moduleSpecifier:i,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:l,name:l},{propertyName:"getViewContext",name:"getViewContext"}]}),o[a].appendContent(`
188
+ See ${rH(rY().yellow("Upgrade Rspeedy"),o)} for more details.
189
+ `)}let{LynxTemplatePlugin:l}=s;a.plugin("lynx:config").use(rq,[{LynxTemplatePlugin:l,config:e,compilerOptionsKeys:t,configKeys:r}])})}}}({enableMultiTouch:!0,enableNewGesture:!0,enableCSSInlineVariables:!0,enableSimultaneousTap:!0,enableReloadLifecycle:!0}),h(),u(),...C?[]:N,...L,...j,...C?U:[]]});return await this.pluginSystem.callViewHooks("beforeBuild",{buildConfig:B}),B}}async function a3(e,t){let r=new a2(t),n=await r.createConfig({config:e}),i=await d({rspeedyConfig:n,cwd:e.context.appDirectory});return i.removePlugins(["lynx:react-alias"]),i}async function a4(e,t){var r;let{entry:n}=await rc({config:e,pluginSystem:t});return await a3({...e,rsbuildPlugins:[...e.rsbuildPlugins||[],(r={context:e.context,entry:n,pluginSystem:t},{name:"worker-in-view-plugin",setup(e){e.modifyRspackConfig((e,{environment:t})=>{var n,i,o;let a;("lynx"===t.name||"web"===t.name)&&(n=e,i=r,o=t.name,n.entry??={},a=n.entry,Object.entries(i.entry).forEach(([e,t])=>{a[e]={filename:"web"===o?`${e}.js`:`base/${e}${tg()?".js":".template.js"}`,import:"web"===o&&"development"===n.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 rC(r,"lynx"===t.name)),"web"===t.name&&e.plugins.push(new rE))})}})]},t)}function a9(e){if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}let a5=e=>{try{return to.statSync(e,{throwIfNoEntry:!1})?.isFile()}catch(e){return!1}};async function a8({internal:e,appKey:t}){try{return await nq({internal:e,path:`/developer/resource_api/apps/${encodeURIComponent(t)}/dek/public_key`})}catch(e){throw tI.error("Failed to get KEK",{error:e,appKey:t,operation:"get-kek"}),e}}async function a7(e,t,r,n){if(!(n||th("DISABLE_SIGNING_ENCRYPTION")||th("LEGACY_FRAMEWORK"))){if(e)return e;if("production"===process.env.NODE_ENV&&t===eU.DEPLOY){if(!r)throw Error("appId is required to get KEK");let{data:e}=await a8({internal:!1,appKey:r}),t=Number(Object.keys(e.keys)[0]);return{signing:{enabled:!1},encryption:{enabled:!0,wrap_key:e.keys[t],key_id:t,salt:""}}}}}let a6=eX.join("node_modules",".doubao-dev","config.json");function se(e,t,r){if(r){let t=eX.isAbsolute(r)?r:eX.resolve(e,r);if(t9.existsSync(t))return t;tC.warn("Cannot find config file",{path:t})}for(let r of tr.map(r=>eX.resolve(e,`${t}${r}`)))if(a5(r))return r;return!1}async function st(e){let t=(0,w.createJiti)((0,aQ.fileURLToPath)(import.meta.url),{requireCache:!1,interopDefault:!0});return await t.import(e,{default:!0})}async function sr({cwd:e=process.cwd(),customConfigFile:t}){let r=se(e,"doubao.config",t);if(!r)return{};try{return await st(r)}catch(e){throw tC.error("Failed to load config file",{path:r}),e}}async function sn({cwd:e=process.cwd()}={}){let t=se(eX.resolve(e,"src"),tt);if(t)try{return await st(t)}catch(e){throw tC.error("Failed to load app config file",{path:t}),e}}async function si(e){let t=globalThis,r=Object.prototype.hasOwnProperty.call(t,"defineAppConfig"),n=t.defineAppConfig;t.defineAppConfig=e=>e;try{return await st(e)}finally{r?t.defineAppConfig=n:delete t.defineAppConfig}}async function so({cwd:e=process.cwd()}={}){let t=se(eX.resolve(e,"src"),tt);if(t)try{let e=await si(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 tC.error("Failed to load Taro app config file",{path:t}),e}}let sa=f("fs/promises"),ss=async(e,t=eX.basename(e))=>{if(!t9.existsSync(e))return{};let r={};for(let n of(await sa.readdir(e))){let i=eX.resolve(e,n);if(!t9.statSync(i).isDirectory())continue;let o=eX.resolve(i,"index.tsx");t9.existsSync(o)&&(r[`${t}/${n}/index`]={folderName:`${n}/index`,renderType:en.REACT_LYNX,filename:o})}return r},sl=async(e,t=eX.basename(e))=>{if(!t9.existsSync(e))return{viewEntries:{},apiEntries:{}};let r=await ss(e,t),n={},i=eX.resolve(e,"login.ts");t9.existsSync(i)&&(n[`${t}/login`]={filename:i,folderName:e});let o=eX.resolve(e,"privacy.ts");return t9.existsSync(o)&&(n[`${t}/privacy`]={filename:o,folderName:e}),{viewEntries:r,apiEntries:n}},sd=async(e,t)=>t9.existsSync(e)?(await sa.readdir(e)).reduce((r,n)=>{let i=eX.resolve(e,n);return t9.statSync(i).isDirectory()&&t9.existsSync(eX.resolve(i,t))&&(r[n]=eX.resolve(i,t)),r},{}):{};function sp(e){return ta.resolve(e,"app.ts")}function sc(e,t,r,n){let i=`${r}/`;if(!t.startsWith(i))throw Error(`${r} config key must start with "${i}": ${t}`);let o=t.slice(i.length),a=ta.resolve(e,r,`${o}${n}`);if(!to.existsSync(a))throw Error(`Configured entry file does not exist for ${t}: ${a}`);return{relativeEntry:o,filename:a}}function su(e,t){let r=t.entries[e]?.name;if(void 0===r)return rt(e);if("string"!=typeof r||!r.trim())throw Error(`Configured Tool name must be a non-empty string: ${e}`);return r.trim()}let sh=async(e,t={entryNames:[],entries:{}})=>{let r=ta.resolve(e,"tools"),n={...await sd(r,"index.ts")};t.entryNames.forEach(r=>{let{filename:i}=sc(e,r,"tools",".ts"),o=su(r,t),a=n[o];if(a&&a!==i)throw Error(`Tool name "${o}" is already used by another entry: ${a}`);n[o]=i});let i=sp(e);return{tools:n,app:to.existsSync(i)?i:void 0}},sm=async(e,t)=>{let r=ta.resolve(e,"pages"),n=ta.resolve(e,"widgets"),i=ta.resolve(e,"auth"),o=ta.resolve(e,"mcp-ui"),[a,s,l,d]=await Promise.all([ss(r),ss(n),sl(o),sl(i)]),p=Object.keys(d.viewEntries).length>0||Object.keys(d.apiEntries).length>0?d:l,c=t.pages,u=t.widgets,h=(t,r,n)=>{let i={...t};return r.forEach(t=>{if(i[t])return;let{relativeEntry:r,filename:o}=sc(e,t,n,".tsx");i[t]={folderName:r,renderType:en.REACT_LYNX,filename:o,isVirtualFile:!1}}),i},m=h(a,c.entryNames,"pages");return{widgets:h(s,u.entryNames,"widgets"),pages:m,auth:p}};function sf(e,t,r=!1,n=!1){let i=tu(t);return Object.keys(e).reduce((o,a)=>{let{filename:s}=e[a],l=n&&e[a].isLoginPage?"defineLoginPage":n?"definePage":"defineWidget",d=`${eZ}${ta.sep}${a}${ta.extname(s)}`,p=ro(ta.join(t,d,".."),s);return o[a]=new ra(d),o[a].appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:p,importSpecifiers:[{propertyName:"default",name:"ViewEntry"}]},{moduleSpecifier:i,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:l,name:l},{propertyName:"getViewContext",name:"getViewContext"}]}),o[a].appendContent(`
190
+ lynx.__DOUBAO_VIEW_TYPE__ = ${JSON.stringify(n?"page":"widget")};
191
+
196
192
  const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
197
193
 
198
194
  const View =
@@ -210,7 +206,9 @@ root.render(<FC />);
210
206
  if (import.meta.webpackHot) {
211
207
  import.meta.webpackHot.accept()
212
208
  }
213
- `),o},{})}let sm={name:"AuthPlugin",async setup(e){tc("DISABLE_GENERATE_LOGIN_CARD")||tc("LEGACY_FRAMEWORK")||(e.view.hooks.modifyEnvironment.tapPromise(sm.name,async({environment:e})=>{e.useAuth=!0}),e.view.hooks.modifyEntryOption.tapPromise({name:sm.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let r,n,i,o,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,(r=td(c),n=`${eY}${ez.sep}${e0}${ez.sep}${e3}.tsx`,u[i=`${e0}/${e3}`]={filename:n,renderType:j.REACT_LYNX,folderName:e3,isVirtualFile:!0,isSpecial:!0,internal:!0},o=new ri(n),a=ez.join(c,ez.dirname(n)),s=Object.values(d.apiEntries).find(e=>"login"===ez.parse(e.filename).name),l=Object.values(d.apiEntries).find(e=>"privacy"===ez.parse(e.filename).name),s&&o.appendImports({moduleSpecifier:rn(a,s.filename),importSpecifiers:[{propertyName:"default",name:"loginApi"}]}),l&&o.appendImports({moduleSpecifier:rn(a,l.filename),importSpecifiers:[{propertyName:"default",name:"privacyApi"}]}),o.appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:r,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"definePrivacyLoginWidget",name:"definePrivacyLoginWidget"}]},{moduleSpecifier:`${r}/components`,importSpecifiers:[{propertyName:"MCPAuthCard",name:"MCPAuthCard"}]}),o.appendContent(`
209
+ `),o},{})}let sg={name:"AuthPlugin",async setup(e){th("DISABLE_GENERATE_LOGIN_CARD")||th("LEGACY_FRAMEWORK")||(e.view.hooks.modifyEnvironment.tapPromise(sg.name,async({environment:e})=>{e.useAuth=!0}),e.view.hooks.modifyEntryOption.tapPromise({name:sg.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let r,n,i,o,a,s,l,{isDev:d,auth:p,appDirectory:c}=e.context,u={},h=Object.keys(p.viewEntries).reduce((e,t)=>(e[t]={...p.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(h),t=Object.assign(t,(r=tu(c),n=`${eZ}${ta.sep}${e2}${ta.sep}${e9}.tsx`,u[i=`${e2}/${e9}`]={filename:n,renderType:en.REACT_LYNX,folderName:e9,isVirtualFile:!0,isSpecial:!0,internal:!0},o=new ra(n),a=ta.join(c,ta.dirname(n)),s=Object.values(p.apiEntries).find(e=>"login"===ta.parse(e.filename).name),l=Object.values(p.apiEntries).find(e=>"privacy"===ta.parse(e.filename).name),s&&o.appendImports({moduleSpecifier:ro(a,s.filename),importSpecifiers:[{propertyName:"default",name:"loginApi"}]}),l&&o.appendImports({moduleSpecifier:ro(a,l.filename),importSpecifiers:[{propertyName:"default",name:"privacyApi"}]}),o.appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:r,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"definePrivacyLoginWidget",name:"definePrivacyLoginWidget"}]},{moduleSpecifier:`${r}/components`,importSpecifiers:[{propertyName:"MCPAuthCard",name:"MCPAuthCard"}]}),o.appendContent(`
210
+ lynx.__DOUBAO_VIEW_TYPE__ = 'widget';
211
+
214
212
  const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
215
213
 
216
214
  const View = definePrivacyLoginWidget({
@@ -228,11 +226,13 @@ const View = definePrivacyLoginWidget({
228
226
 
229
227
  const FC = bootstrapReactLynx(View, viewId);
230
228
  root.render(<FC />);
231
- `,p?`
229
+ `,d?`
232
230
  if (import.meta.webpackHot) {
233
231
  import.meta.webpackHot.accept()
234
232
  }
235
- `:""),{[i]:o}),su(m,c,p,!0)),e.context.appendWidgets(u),{entry:t}}))}};(eI=eB||(eB={}))[eI.DISABLED=0]="DISABLED",eI[eI.ENABLED=1]="ENABLED";let sh="AppletDoubaoAppInfoPlugin",sf={name:sh,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sh,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-1},async({assets:t})=>{if(e.context.command!==eM.DEV&&e.context.command!==eM.BUILD&&e.context.command!==eM.DEPLOY||!e.context.appId)return;let r=await e.context.resolveAppInfo();if(r){var n=t.getManifestAsset(e.context.manifestAssetPath),i=e.context.permissions;n.assignBasicManifest({permissions:void 0===i?Object.fromEntries(r.permissionList.filter(e=>e.status===eB.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(i.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:[]}]}))}),r?.appName&&n.mergeAppletManifest({name:r.appName}),r?.iconUrl&&n.mergeAppletManifest({icons:tU(r.iconUrl)})}})}},sg={name:"ExpiredWidgetPlugin",async setup(e){e.view.hooks.modifyEntryOption.tapPromise({name:sg.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let r,n,i,o,{isDev:a,appDirectory:s}=e.context,l={};return t=Object.assign(t,(r=td(s),n=`${eY}${ez.sep}${e0}${ez.sep}${e4}.tsx`,l[i=`${e0}/${e4}`]={filename:n,renderType:j.REACT_LYNX,folderName:e4,isVirtualFile:!0,isSpecial:!0,internal:!0},(o=new ri(n)).appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:r,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"defineWidget",name:"defineWidget"}]},{moduleSpecifier:`${r}/components`,importSpecifiers:[{propertyName:"UpdatedState",name:"UpdatedState"}]}),o.appendContent(`
233
+ `:""),{[i]:o}),sf(h,c,d,!0)),e.context.appendWidgets(u),{entry:t}}))}};(eP=eW||(eW={}))[eP.DISABLED=0]="DISABLED",eP[eP.ENABLED=1]="ENABLED";let sy="AppletDoubaoAppInfoPlugin",sb={name:sy,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sy,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-1},async({assets:t})=>{if(e.context.command!==eU.DEV&&e.context.command!==eU.BUILD&&e.context.command!==eU.DEPLOY||!e.context.appId)return;let r=await e.context.resolveAppInfo();if(r){var n=t.getManifestAsset(e.context.manifestAssetPath),i=e.context.permissions;n.assignBasicManifest({permissions:void 0===i?Object.fromEntries(r.permissionList.filter(e=>e.status===eW.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(i.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:[]}]}))}),r?.appName&&n.mergeAppletManifest({name:r.appName}),r?.iconUrl&&n.mergeAppletManifest({icons:tF(r.iconUrl)})}})}},s_={name:"ExpiredWidgetPlugin",async setup(e){e.view.hooks.modifyEntryOption.tapPromise({name:s_.name,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:t})=>{let r,n,i,o,{isDev:a,appDirectory:s}=e.context,l={};return t=Object.assign(t,(r=tu(s),n=`${eZ}${ta.sep}${e2}${ta.sep}${e5}.tsx`,l[i=`${e2}/${e5}`]={filename:n,renderType:en.REACT_LYNX,folderName:e5,isVirtualFile:!0,isSpecial:!0,internal:!0},(o=new ra(n)).appendImports({moduleSpecifier:"@lynx-js/react",importSpecifiers:[{propertyName:"root",name:"root"}]},{moduleSpecifier:r,importSpecifiers:[{propertyName:"bootstrapReactLynx",name:"bootstrapReactLynx"},{propertyName:"getViewContext",name:"getViewContext"},{propertyName:"defineWidget",name:"defineWidget"}]},{moduleSpecifier:`${r}/components`,importSpecifiers:[{propertyName:"UpdatedState",name:"UpdatedState"}]}),o.appendContent(`
234
+ lynx.__DOUBAO_VIEW_TYPE__ = 'widget';
235
+
236
236
  const viewId = __LEPUS__ ? '' : getViewContext()?.viewId ?? '';
237
237
 
238
238
  const View = defineWidget({
@@ -249,7 +249,7 @@ root.render(<FC />);
249
249
  if (import.meta.webpackHot) {
250
250
  import.meta.webpackHot.accept()
251
251
  }
252
- `:""),{[i]:o})),e.context.appendWidgets(l),{entry:t}})}},sy="LynxPlugin",sb={name:sy,async setup(e){e.view.hooks.modifyEnvironment.tapPromise(sy,async({environment:e})=>{e.useLynx=!0});let t={};e.view.hooks.modifyEntryOption.tapPromise({name:sy,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:r})=>{let{appDirectory:n,isDev:i,widgets:o,pages:a}=e.context;return t=r=Object.assign(r,su(o,n,i),su(a,n,i,!0)),{entry:r}}),e.view.hooks.collectMetaData.tapPromise({name:sy,stage:e.view.COLLECT_METADATA_STAGE_PROCESS_METADATA},async({collector:r})=>{let{normalizedAppConfig:n,userConfig:i,widgets:o,pages:a}=e.context;await ne({widgets:o,pages:a,entries:t,collector:r,normalizedAppConfig:n,define:i.source?.define})}),e.assets.hooks.beforeEmit.tapPromise({name:sy,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS},async({assets:t})=>{let{widgets:r,pages:n,app:i}=e.context.metadata.getInstance(),o=e.context.templateWidgetEntries;Object.keys(r).forEach(n=>{let i=r[n],a=`${n}/template.js`,s=t.getAsset(a);if(i&&s){let r=`${i.metadata.id}/template.js`;s.destination=r;let a=t.getManifestAsset(e.context.manifestAssetPath),l=i.toManifest(r,s.hashCode,j.LYNX);o.has(n)&&(l.titleType=B.NONE),a.appendWidget(l)}}),Object.keys(n).forEach(r=>{let o=n[r],a=`${r}/template.js`,s=t.getAsset(a);if(o&&s){let r=rt(i.metadata.appId,o.metadata.path,"template.js");s.destination=r,t.getManifestAsset(e.context.manifestAssetPath).appendPage(o.toManifest(r,s.hashCode,j.LYNX))}})}),e.assets.hooks.afterEmit.tapPromise(sy,async({assets:e})=>{}),e.view.hooks.afterBuild.tapPromise(sy,async({stats:e})=>{})}};async function s_(e,t,r){let{app:n,tools:i,collector:o,define:a}=r,s=i[t],l=e;(s||n===t)&&(a&&Object.keys(a).length>0&&(l=Object.keys(a).reduce((e,t)=>{let r=a[t];if("string"==typeof r)return e.replaceAll(t,r);throw Error(`Define value ${t} is not a string`)},e)),ep((0,r9.parseSync)(l,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(rZ(e.callee)&&["defineTool","defineApp"].includes(e.callee.value)){let t=e.arguments[0]?.expression;if(r2(t)){for(let e of t.properties)if(r4(e)&&rZ(e.key)&&"aiMeta"===e.key.value){let t=r5(e.value);s?o.addToolMeta(s,t):o.addAppMeta({...t,appId:t.appId??t.package})}}}}}))}async function sv({tools:e,app:t,collector:r,define:n,appConfig:i}){let o={collector:r,tools:Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),app:t,define:n};Object.entries(e).forEach(([e])=>{r.addToolMeta(e,{id:e})}),t3.existsSync(t)?await Promise.all(Object.values({...e,app:t}).filter(e=>/\.(ts|tsx|jsx|js)$/i.test(e)&&t3.existsSync(e)).map(e=>s_(t3.readFileSync(e,"utf-8"),e,o))):tA.warn("App file does not exist",{path:t});let a=r.app,s=i?.appId??a.appId;if(!s)throw Error("appId is required in app config or AI metadata");r.addAppMeta({...a,name:i?.name??a.name,description:i?.description??a.description,icons:i?.icons??a.icons,keywords:i?.keywords??a.keywords,version:i?.version??a.version,darkMode:i?.darkMode??a.darkMode,chat:i?.chat??a.chat,appId:s})}let sw={name:"AppletMainPlugin",setup:async e=>{e.context.app&&(e.worker.hooks.modifyEntryOption.tapPromise("AppletMainPlugin",async({entry:t})=>{var r,n,i;let o,{app:a,tools:s}=e.context,l=Object.fromEntries((r=e.context.normalizedAppConfig.tools).entryNames.map(e=>{let t=sp(e,r),n=s[t];if(!n)throw Error(`Configured Tool entry was not analyzed: ${e}`);return[t,n]}));return Object.assign(t,{app:(n=`${e.context.appDirectory}${ti.sep}${eY}${ti.sep}app.js`,o=(({dirname:e,app:t,tools:r})=>{let n=[],i=[],o=td(ez.resolve(t,"..",".."));Object.entries(r).forEach(([t,r],o)=>{let a=JSON.stringify(t);n.push(`import Tool${o} from "${rn(e,r)}";`),i.push(`toAppRuntimeTool(Tool${o}, ${a})`)});let a=i.length>0?`function toAppRuntimeTool(tool, id) {
252
+ `:""),{[i]:o})),e.context.appendWidgets(l),{entry:t}})}},sv="LynxPlugin",sw={name:sv,async setup(e){e.view.hooks.modifyEnvironment.tapPromise(sv,async({environment:e})=>{e.useLynx=!0});let t={};e.view.hooks.modifyEntryOption.tapPromise({name:sv,stage:e.view.MODIFY_ENTRY_OPTION_STAGE_CREATE_BASE},async({entry:r})=>{let{appDirectory:n,isDev:i,widgets:o,pages:a}=e.context;return t=r=Object.assign(r,sf(o,n,i),sf(a,n,i,!0)),{entry:r}}),e.view.hooks.collectMetaData.tapPromise({name:sv,stage:e.view.COLLECT_METADATA_STAGE_PROCESS_METADATA},async({collector:r})=>{let{normalizedAppConfig:n,userConfig:i,widgets:o,pages:a}=e.context;await nr({widgets:o,pages:a,entries:t,collector:r,normalizedAppConfig:n,define:i.source?.define})}),e.assets.hooks.beforeEmit.tapPromise({name:sv,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_VIEW_ASSETS},async({assets:t})=>{let{widgets:r,pages:n,app:i}=e.context.metadata.getInstance(),o=e.context.templateWidgetEntries;Object.keys(r).forEach(n=>{let i=r[n],a=`${n}/template.js`,s=t.getAsset(a);if(i&&s){let r=`${i.metadata.id}/template.js`;s.destination=r;let a=t.getManifestAsset(e.context.manifestAssetPath),l=i.toManifest(r,s.hashCode,en.LYNX);o.has(n)&&(l.titleType=ei.NONE),a.appendWidget(l)}}),Object.keys(n).forEach(r=>{let o=n[r],a=`${r}/template.js`,s=t.getAsset(a);if(o&&s){let r=rn(i.metadata.appId,o.metadata.path,"template.js");s.destination=r,t.getManifestAsset(e.context.manifestAssetPath).appendPage(o.toManifest(r,s.hashCode,en.LYNX))}})}),e.assets.hooks.afterEmit.tapPromise(sv,async({assets:e})=>{}),e.view.hooks.afterBuild.tapPromise(sv,async({stats:e})=>{})}};async function sS(e,t,r){let{app:n,tools:i,collector:o,define:a}=r,s=i[t],l=e;(s||n===t)&&(a&&Object.keys(a).length>0&&(l=Object.keys(a).reduce((e,t)=>{let r=a[t];if("string"==typeof r)return e.replaceAll(t,r);throw Error(`Define value ${t} is not a string`)},e)),ed((0,r7.parseSync)(l,{syntax:"typescript",tsx:!0,decorators:!0}),{CallExpression(e){if(r0(e.callee)&&["defineTool","defineApp"].includes(e.callee.value)){let t=e.arguments[0]?.expression;if(r4(t)){for(let e of t.properties)if(r5(e)&&r0(e.key)&&"aiMeta"===e.key.value){let t=r8(e.value);s?o.addToolMeta(s,t):o.addAppMeta({...t,appId:t.appId??t.package})}}}}}))}async function sE({tools:e,app:t,collector:r,define:n,appConfig:i}){let o={collector:r,tools:Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),app:t,define:n};Object.entries(e).forEach(([e])=>{r.addToolMeta(e,{id:e})}),t9.existsSync(t)?await Promise.all(Object.values({...e,app:t}).filter(e=>/\.(ts|tsx|jsx|js)$/i.test(e)&&t9.existsSync(e)).map(e=>sS(t9.readFileSync(e,"utf-8"),e,o))):tC.warn("App file does not exist",{path:t});let a=r.app,s=i?.appId??a.appId;if(!s)throw Error("appId is required in app config or AI metadata");r.addAppMeta({...a,name:i?.name??a.name,description:i?.description??a.description,icons:i?.icons??a.icons,keywords:i?.keywords??a.keywords,version:i?.version??a.version,darkMode:i?.darkMode??a.darkMode,chat:i?.chat??a.chat,appId:s})}let sx={name:"AppletMainPlugin",setup:async e=>{e.context.app&&(e.worker.hooks.modifyEntryOption.tapPromise("AppletMainPlugin",async({entry:t})=>{var r,n,i;let o,{app:a,tools:s}=e.context,l=Object.fromEntries((r=e.context.normalizedAppConfig.tools).entryNames.map(e=>{let t=su(e,r),n=s[t];if(!n)throw Error(`Configured Tool entry was not analyzed: ${e}`);return[t,n]}));return Object.assign(t,{app:(n=`${e.context.appDirectory}${ta.sep}${eZ}${ta.sep}app.js`,o=(({dirname:e,app:t,tools:r})=>{let n=[],i=[],o=tu(eX.resolve(t,"..",".."));Object.entries(r).forEach(([t,r],o)=>{let a=JSON.stringify(t);n.push(`import Tool${o} from "${ro(e,r)}";`),i.push(`toAppRuntimeTool(Tool${o}, ${a})`)});let a=i.length>0?`function toAppRuntimeTool(tool, id) {
253
253
  return typeof tool === 'object' &&
254
254
  tool !== null &&
255
255
  '__FUNCTIONAL__' in tool &&
@@ -269,20 +269,20 @@ if (import.meta.webpackHot) {
269
269
  });
270
270
  }`:"",s=i.length>0?"Applet, defineTool":"Applet";return`
271
271
  import { ${s} } from "${o}";
272
- import App from "${rn(e,t)}";
272
+ import App from "${ro(e,t)}";
273
273
 
274
274
  ${n.join("\n")}
275
275
 
276
276
  ${a}
277
277
 
278
278
  new Applet(App, [${i.join(", ")}]).bootstrap();
279
- `})({dirname:ez.dirname(n),app:a,tools:s}),new ri(n,o))}),Object.keys(l).length>0&&(t[e8]=(i=`${e.context.appDirectory}${ti.sep}${eY}${ti.sep}${e8}.js`,new ri(i,function({appDirectory:e,clientTools:t,dirname:r}){let n=td(e),i=[],o=[];return Object.entries(t).forEach(([e,t],n)=>{i.push(`import ClientTool${n} from "${rn(r,t)}";`),o.push(`{ name: ${JSON.stringify(e)}, handler: ClientTool${n} }`)}),`
279
+ `})({dirname:eX.dirname(n),app:a,tools:s}),new ra(n,o))}),Object.keys(l).length>0&&(t[e6]=(i=`${e.context.appDirectory}${ta.sep}${eZ}${ta.sep}${e6}.js`,new ra(i,function({appDirectory:e,clientTools:t,dirname:r}){let n=tu(e),i=[],o=[];return Object.entries(t).forEach(([e,t],n)=>{i.push(`import ClientTool${n} from "${ro(r,t)}";`),o.push(`{ name: ${JSON.stringify(e)}, handler: ClientTool${n} }`)}),`
280
280
  import { bootstrapClientToolRuntime } from "${n}";
281
281
 
282
282
  ${i.join("\n")}
283
283
 
284
284
  bootstrapClientToolRuntime([${o.join(", ")}]);
285
- `}({appDirectory:e.context.appDirectory,clientTools:l,dirname:ti.dirname(i)})))),{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:r,appConfig:n,tools:i,userConfig:o}=e.context;await sv({appConfig:n,tools:i,app:r,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:r})=>{var n,i;let{app:o,pages:a,tools:s}=e.context.metadata.getInstance(),l=t.getAsset(e.context.appAssetPath),p=r[e8]?.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?a[g]?.metadata.path:void 0,b=o.toManifest({toolsMetadata:s,hashCode:l?.hashCode??(n=l?.hashCode??c?.applet?.digest,i=u.join(""),a$.createHash("sha256").update(n+i).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})=>{}))}},sE={name:"AppletMainEntryCheckPlugin",setup:async e=>{let{srcDirectory:t}=e.context,r=ss(t);if(!tn.existsSync(r))throw Error("ENOENT: no such file or directory")}},sS={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:r}=await e.context.resolveSigningEncryptionOptions()||{};if(r?.enabled){let{signData:n}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),i=t.getManifestAsset(e.context.manifestAssetPath),{manifest:o}=i,{buffer:a,status:s,error_msg:l}=await n(Buffer.from(i.content),rr(r,{extra_config:{app_id:o.appId,bundle_id:""},output_mode:"sign_block"}));if(0!==s)throw Error(l);let p=new aR(e2,a);p.destination=e2,t.addAsset(e2,p)}})}},sx="AppletWebManifestPlugin",sA={name:sx,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sx,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-2},async({assets:t})=>{var r,n;let i=e.context.metadata.getData(),o=i.app.appId||e.context.appId,a=e.context.command===eM.DEV?"all":"configured",s=rv(e.context.pages,e.context.normalizedAppConfig.pages.entries,a),l=rv(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,a);if(!o&&Object.keys(s).length>0)throw Error("appId is required to resolve Web page entry paths");let p=o?(r=i.pages,Object.keys(s).map(e=>{let t=r[e]??{},n=t.path??re(e),i={entry:rt(o,n,rh)},a=r_(s[e]);return{path:n,entryName:e,web:i,debugHidden:a,manifest:{...t,path:n,digest:"",entry:"",renderType:j.LYNX,web:i,...a?{debugHidden:!0}:{}}}})):[],d=(n=i.widgets,Object.keys(l).map(e=>{let{id:t,...r}=n[e]??{},i=t??rb(l,n,e),o={entry:`${i}/${rh}`},a=r_(l[e]);return{id:i,entryName:e,web:o,debugHidden:a,manifest:{...r,widgetId:i,digest:"",entry:"",renderType:j.LYNX,web:o,...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 r=t.manifest;e.context.templateWidgetEntries.has(t.entryName)&&(r.titleType=B.NONE),c.appendWidget(r)}e.context.app&&(c.manifest.applet.web={appRuntimeEntry:rf,...e.context.normalizedAppConfig.tools.entryNames.length>0?{toolRuntimeEntry:rg}:{}})})}};function sT(e=((e=process.cwd())=>tp(e)===to)()){return e?"sso":"sms"}async function sC(e={},t={}){if(e.cookie)return e.cookie;let{ensureLoginCookie:r}=await import("./@byted-doubao-apps/login~1.js");return await r({route:sT(t.internal),browser:e.loginBrowser,browserPath:e.loginBrowserPath,force:t.force})}async function sI(e,t){if(e.cookie)return e.cookie;let{getCachedLoginCookie:r}=await import("./@byted-doubao-apps/login~1.js");return await r({route:sT(t)})}function sO(e,t){let r;if(!e)return{entryNames:[],entries:{}};if(Array.isArray(e))r=e;else if("object"==typeof e)t&&tA.warn(`${t} config object map is deprecated. Use an array of strings or { entry, ...metadata } objects instead.`),r=Object.entries(e).map(([e,t])=>{let r;return{...t,entry:(r=e.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"")).endsWith("/index")?r:`${r}/index`}});else throw Error("Entry config must be an array or object map.");let n=[],i={},o=new Set,a=[],s=new Set;return r.forEach(e=>{let t,r;if("string"==typeof e)t=e,r={};else{let{entry:n,...i}=e;if(!n)throw Error('Entry config object must include "entry".');t=n,r=i}o.has(t)?s.has(t)||(a.push(t),s.add(t)):(n.push(t),o.add(t)),i[t]=r}),t&&a.length>0&&tA.warn(`${t} config contains duplicate entries: ${a.join(", ")}. Entries are deduplicated, and the last metadata config takes effect.`),{entryNames:n,entries:i}}class sP{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:r,srcDirectory:n="",virtualEntryDir:i="",appDirectory:o=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=r,this._srcDirectory=n,this._virtualEntryDir=i,this._appDirectory=o,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===eM.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(tn.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 e1}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 sk({internal:e,domainId:t,appLimit:r,appOffset:n,keyWord:i,appKey:o,cookie:a}){return await nV({internal:e,domainId:t,path:"/app_developer/api/apps",query:{app_limit:r,app_offset:n,key_word:i,app_key:o},method:"GET",headers:a?{Cookie:a}:void 0})}async function sD({source:e,internal:t,domainId:r,appLimit:n,appOffset:i,releaseStatus:o,keyWord:a,appKey:s,cookie:l}){return await nV({internal:t,domainId:r,path:"/developer/api/apps",query:{source:e,app_limit:n,app_offset:i,release_status:o,key_word:a,app_key:s},method:"GET",headers:l?{Cookie:l}:void 0})}async function s$({appKey:e,source:t,internal:r,domainId:n,releaseStatus:i,limit:o,offset:a,status:s,keyWord:l,versionTag:p,cookie:d}){return await nV({internal:r,domainId:n,path:`/developer/api/apps/${encodeURIComponent(e)}/version`,query:{source:t,release_status:i,limit:o,offset:a,status:s,key_word:l,version_tag:p},method:"GET",headers:d?{Cookie:d}:void 0})}async function sR({appKey:e,versionTag:t,internal:r,domainId:n,pageSize:i,pageNum:o,cookie:a}){return await nV({internal:r,domainId:n,path:`/developer/api/apps/${encodeURIComponent(e)}/permission/versions/${encodeURIComponent(t)}/permission_list`,query:{page_size:i,page_num:o},method:"GET",headers:a?{Cookie:a}:void 0})}function sN(e){return e.is_latest||e.is_current}function sL(e){return Date.parse(e.updated_at??e.created_at??e.online_at??"")}function sM(e){return Number(e.version_code??e.qr_data?.artifact_version_code)}function sj(e){return e.version_tag}function sU(e,t){tu()&&tA.info(e,t)}async function sB({appKey:e,internal:t=!1,cookie:r,source:n=eG.REQUEST_SOURCE_IDE}){sU("[app-info] 开始获取应用信息",{appKey:e,internal:t,session:r?"present":"absent"});let i=await sk({internal:t,appLimit:1,appOffset:0,appKey:e,cookie:r}).then(({data:t,log_id:r})=>{let n=t?.app_list||[],i=n.find(t=>t.app_key===e);return sU("[app-info] MGetApps 请求完成",{appKey:e,appCount:n.length,exactMatch:!!i,logId:r}),i}).catch(t=>{if(sU("[app-info] MGetApps 请求失败",{appKey:e,reason:a2(t)}),ai(t))throw t}),o=i?void 0:await sD({source:n,internal:t,appLimit:1,appOffset:0,appKey:e,cookie:r}).then(({data:t,log_id:r})=>{let n=t?.org_list?.flatMap(e=>e.app_list)||[],i=n.find(t=>t.app_key===e),o=i||n[0];return sU("[app-info] MGetAppsDeprecated 请求完成",{appKey:e,appCount:n.length,exactMatch:!!i,logId:r}),o?.app_meta}).catch(t=>{sU("[app-info] MGetAppsDeprecated 请求失败",{appKey:e,reason:a2(t)})});if(!i&&!o)throw sU("[app-info] 应用信息查询结束,未找到可用结果",{appKey:e}),Error(`未找到应用 ${e}`);let a=i?void 0:await s$({appKey:e,source:n,internal:t,cookie:r}).then(({data:t,log_id:r})=>{let n=Array.isArray(t?.version_list)?t.version_list:[];if(sU("[app-info] MGetAppVersions 请求完成",{appKey:e,versionCount:n.length,logId:r}),0===n.length)return;let i=n.find(sN);return i||n.reduce((e,t)=>{let r,n;return!e||(r=sL(t),n=sL(e),(Number.isNaN(r)&&Number.isNaN(n)?sM(t)-sM(e):(Number.isNaN(r)?-1/0:r)-(Number.isNaN(n)?-1/0:n))>0)?t:e},void 0)}).catch(t=>{sU("[app-info] MGetAppVersions 请求失败",{appKey:e,reason:a2(t)})}),s=i?.current_version_tag||(a?sj(a):""),l=i?.icon_url||(a?a.icon_url:void 0)||o?.icon_url,p=i?.name||o?.name,d=a&&sj(a)===s?a:i?{version_tag:i.current_version_tag,icon_url:i.icon_url,updated_at:i.updated_at,online_at:i.online_at,offline_at:i.offline_at}:{version_tag:s,icon_url:l};if(i||!s||!r)return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:[],permissionTotal:0,version:d};let c=await sR({appKey:e,versionTag:s,pageSize:1e3,pageNum:1,internal:t,cookie:r}).then(t=>(sU("[app-info] FetchAppPermissionList 请求完成",{appKey:e,versionTag:s,permissionTotal:t.data?.total||0,logId:t.log_id}),t)).catch(t=>{throw sU("[app-info] FetchAppPermissionList 请求失败",{appKey:e,versionTag:s,reason:a2(t)}),t});return{appKey:e,appName:p,versionTag:s,iconUrl:l,permissionList:c.data?.permission_list||[],permissionTotal:c.data?.total||0,version:d}}function sF(){return function({fetch:e,getCacheKey:t,ttl:r,timeout:n,cacheFailures:i=!1,now:o=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=o(),m=a.get(c);if(m&&m.expiresAt>u)return m.promise;let h=(p=e(...s),void 0===n?p:Promise.race([p,new Promise((e,t)=>{d=setTimeout(()=>{t(Error(`Request timed out after ${n}ms`))},n)})]).finally(()=>{d&&clearTimeout(d)})).catch(e=>{throw i||a.get(c)?.promise!==h||a.delete(c),e});return a.set(c,{expiresAt:u+r,promise:h}),h}}({fetch:sB,getCacheKey:({appKey:e,internal:t,cookie:r})=>[e,t,r],ttl:6e4,timeout:1e4,cacheFailures:!0})}(eO=eF||(eF={}))[eO.APP_TYPE_MINI_APP=0]="APP_TYPE_MINI_APP",eO[eO.APP_TYPE_NATIVE=1]="APP_TYPE_NATIVE",(eP=eW||(eW={}))[eP.DRAFT=0]="DRAFT",eP[eP.UNDER_REVIEW=1]="UNDER_REVIEW",eP[eP.APPROVED=2]="APPROVED",eP[eP.REJECTED=3]="REJECTED",eP[eP.WITHDRAWN=4]="WITHDRAWN",eP[eP.PUBLISHING=5]="PUBLISHING",eP[eP.PUBLISHED=6]="PUBLISHED",eP[eP.ARCHIVED=7]="ARCHIVED",eP[eP.DELETED=8]="DELETED",(ek=eH||(eH={}))[ek.DRAFT=0]="DRAFT",ek[ek.PUBLISHED=1]="PUBLISHED",ek[ek.ARCHIVED=2]="ARCHIVED",(eD=eG||(eG={}))[eD.REQUEST_SOURCE_PLATFORM=0]="REQUEST_SOURCE_PLATFORM",eD[eD.REQUEST_SOURCE_IDE=1]="REQUEST_SOURCE_IDE",eD[eD.REQUEST_SOURCE_DEVICE=2]="REQUEST_SOURCE_DEVICE",eD[eD.REQUEST_SOURCE_OP_PLATFORM=3]="REQUEST_SOURCE_OP_PLATFORM";class sW extends sP{devServerInteractive=!0;getWidgetViewDataTemplates;webDebuggerLaunchOptions;compileLifecycle=aT();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=sF();_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(){var e;return{pages:{entryNames:[...(e=this._normalizedAppConfig).pages.entryNames],entries:Object.fromEntries(Object.entries(e.pages.entries).map(([e,t])=>[e,{...t}]))},tools:{entryNames:[...e.tools.entryNames],entries:Object.fromEntries(Object.entries(e.tools.entries).map(([e,t])=>[e,{...t}]))},widgets:{entryNames:[...e.widgets.entryNames],entries:Object.fromEntries(Object.entries(e.widgets.entries).map(([e,t])=>[e,{...t}]))}}}get templateWidgetEntries(){return new Set(this._templateWidgetEntries)}get 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 r="string"==typeof(e=this._appConfig.icons)?e.length>0?e:void 0:e?.["3x"]||e?.["2x"]||e?.["1x"],n={appKey:t,versionTag:this.versionTag??"",permissionList:[],permissionTotal:0,version:{},...this._appConfig.name?{appName:this._appConfig.name}:{},...r?{iconUrl:r}:{}};if(this._skipAppInfoFetch)return n;let i=await this.getCachedLoginCookie().catch(()=>void 0);try{return Object.assign(n,await this._fetchCachedAppInfo({appKey:t,cookie:i,internal:this.internal})),n.appName||=this._appConfig.name,n.iconUrl||=r,n}catch(e){if(this.command!==eM.DEV&&this.command!==eM.BUILD)throw e;if(ai(e))return n;return this._hasWarnedAppInfoFetchFailure||(this._hasWarnedAppInfoFetchFailure=!0,tA.warn("从平台获取 Doubao 应用信息失败,将使用本地 `app.config.ts` 配置的数据",{reason:a2(e)})),n}}async bootstrap({srcDirectory:e,appDirectory:t,rootPath:r,userConfig:n,appConfig:i={},normalizedAppConfig:o={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:E,cachedLoginCookieResolver:S}){await super.bootstrap({srcDirectory:e,appDirectory:t,virtualEntryDir:ti.resolve(t,eY),rootPath:r,manifestPath:ti.resolve(`${r}/${e1}`),command:a,metadata:s,versionTag:c,pages:u,widgets:m,auth:h,app:f,tools:g,loginCookieResolver:E,cachedLoginCookieResolver:S});let{icons:x,...A}=i??{};this._userConfig=n,this.devServerInteractive=v,this._env={...w},this._appConfig={...A,...void 0!==d?{appId:d}:{},...void 0!==x?{icons:tU(x)}:{}},this._normalizedAppConfig=o,this._internal=y??((e=process.cwd())=>tp(e)===to)(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??i?.appId,this._dek=Buffer.from(""),this._fetchCachedAppInfo=sF()}async resolveSigningEncryptionOptionsOnce(){let e=this._appId??this.metadata.appId;if(this._signingEncryptionOptions=await a5(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(),tu()&&console.log("DEK base64:",Buffer.from(this.dek.buffer,this.dek.byteOffset,this.dek.byteLength).toString("base64"))}return this.signingEncryptionOptions}}async function sH({appId:e,versionTag:t,versionCode:r,packagePath:n,internal:i,domainId:o,cookie:a,token:s,needAuth:l=!0}){let p=new FormData,d=new Blob([new Uint8Array(tn.readFileSync(n))],{type:"application/zip"});p.append("applet_file",d,"doubao_app.zip"),p.append("applet_version_code",r.toString());let c=`/developer/${l?"resource_api":"resource_internal_api"}/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/package/upload_applet`;return await nV({internal:i,domainId:s?"sms-external":o,path:c,method:"POST",body:p,headers:{...a?{Cookie:a}:{},...s?{"X-Developer-Open-Build-Token":s}:{}},auth:l&&!s})}async function sG({versionTag:e,appKey:t,manifest:r,rootPath:n,internal:i,needAuth:o=!0,cookie:a,token:s}){process.env.NODE_ENV="production";let{appId:l,packageName:p,versionCode:d}=r,c=function(e,t){let r=e||t.versionTag||t.versionName;if(!r)throw Error("Doubao Apps Platform deploy requires versionTag in params or app metadata.");return r}(e,r),{packageResource:u}=await t9({channelName:"doubao_app",manifest:r,rootPath:n});if(!u)throw Error("Failed to archive package");let m=await sH({appId:t||l||p,versionTag:c,versionCode:d,packagePath:u.resource,internal:i,needAuth:o,cookie:a,token:s});return console.log("Deploy success:",m),m}let sV=f("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),sq="x-db-llm-modifiable",sJ="x-db-is-entity-id",sK="x-db-is-refresh-key",sz=["entity_type"];function sY(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function sX(e,t,r){if(!sY(e))throw Error(`Tool "${r}" requires an object ${t}`);return e}function sZ(e,t,r,n,i=!1){let o=`Tool "${t}" ${r} property "${n}"`;if(!sY(e)||"string"!=typeof e.type||!e.type.trim())throw Error(`${o} requires a string type`);let a=e.type.trim(),s=e[sq];if(void 0!==s&&"boolean"!=typeof s)throw Error(`${o} ${sq} must be a boolean`);if(s&&"outputSchema"!==r)throw Error(`${o} ${sq} is only supported in outputSchema`);if(s&&"array"!==a)throw Error(`${o} ${sq} 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&&!i)throw Error(`${o} ${sJ} is only supported on top-level card output fields`);let p=e[sK];if(void 0!==p&&"boolean"!=typeof p)throw Error(`${o} ${sK} must be a boolean`);if(p&&!i)throw Error(`${o} ${sK} 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,o),...s?{llm_modifiable:!0}:{},...l?{is_entity_id:!0}:{},..."string"==typeof e.description&&e.description.trim()?{description:e.description.trim()}:{}};if("object"===a){if(!sY(e.properties))throw Error(`${o} requires object properties`);if(d.properties=Object.fromEntries(Object.entries(e.properties).map(([e,i])=>[e,sZ(i,t,r,`${n}.${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"===a){if(!sY(e.items))throw Error(`${o} requires object array items`);d.items=sZ(e.items,t,r,`${n}[]`)}return d}function sQ(e,t,r){let n=e[t];if(void 0===n)return{};if(!sY(n))throw Error(`manifest.yaml ${t} must be an object: ${r}`);return{...n}}function s0(e,t){if(!tn.existsSync(e)||!tn.statSync(e).isFile())throw Error(`${t} does not exist: ${e}`);return tn.readFileSync(e,"utf8")}class s1{pluginSystem;rootPath="dist";context;appDirectory;_userConfig;_appConfig;_appConfigLoaded=!1;_env={};constructor(e=process.cwd()){this.appDirectory=e}async prepare(e,t={},r){let n=this.context;try{let n=Date.now(),i=await this.getUserConfig(t),o={...await this.getAppConfig(),...t.appName?{name:t.appName}:{},...t.appIcon?{icons:tU(t.appIcon)}:{}},a={pages:sO(o?.pages,"pages"),tools:sO(o?.tools,"tools"),widgets:sO(o?.widgets,"widgets")},s=function(e){let t=ti.join(e,"events.json");if(tn.existsSync(t)&&tn.statSync(t).isFile())return{readJson:()=>tn.readFileSync(t,"utf8"),sourcePath:t}}(this.appDirectory),l=function({appDirectory:e,normalizedAppConfig:t}){let r=ti.join(e,"tools.json");if(!tn.existsSync(r))return;let n=ti.join(e,"manifest.yaml"),i=()=>s0(r,"tools.json"),o=()=>(function({tools:e,manifestPath:t,manifestText:r}){let n=function(e,t){let r;try{r=(0,sV.qg)(e)}catch(e){throw Error(`Failed to parse manifest.yaml: ${t}`,{cause:e})}if(!sY(r))throw Error(`manifest.yaml must contain an object: ${t}`);return r}(r,t),i=sQ(n,"tools",t),o=sQ(n,"entities",t);for(let t of e){if(t.name in i)throw Error(`Tool "${t.name}" conflicts with a tool in manifest.yaml`);if(i[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||!sY(e.properties))throw Error(`Tool "${t}" inputSchema requires type object and object properties`);let r=Object.fromEntries(Object.entries(e.properties).map(([e,r])=>[e,sZ(r,t,"inputSchema",e)])),n=e.required;if(void 0!==n&&(!Array.isArray(n)||n.some(e=>"string"!=typeof e)))throw Error(`Tool "${t}" inputSchema required must be a string array`);return{type:"object",properties:r,...n&&n.length>0?{required:n}:{}}}(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 r=t.name;if("array"!==e.type||!sY(e.items))throw Error(`Card Tool "${r}" outputSchema must be an array`);if("object"!==e.items.type||!sY(e.items.properties))throw Error(`Card Tool "${r}" outputSchema items must be objects`);let n=e.items.properties,i=sz.find(e=>e in n);if(i)throw Error(`Tool "${r}" outputSchema must not declare reserved field "${i}"`);let o=Object.entries(n).filter(([e,t])=>{if(!sY(t)||void 0===t[sJ])return!1;if("boolean"!=typeof t[sJ])throw Error(`Tool "${r}" outputSchema property "${e}" ${sJ} must be a boolean`);return t[sJ]});if(1!==o.length)throw Error(`Card Tool "${r}" outputSchema requires exactly one ${sJ} field; found ${o.length}`);let a=Object.entries(n).filter(([e,t])=>{if(!sY(t)||void 0===t[sK])return!1;if("boolean"!=typeof t[sK])throw Error(`Tool "${r}" outputSchema property "${e}" ${sK} must be a boolean`);return t[sK]});if("same_conversation"===t.expirePolicy){let e=o[0]?.[0];if(1!==a.length||a[0]?.[0]!==e)throw Error(`Card Tool "${r}" with expirePolicy "same_conversation" requires ${sK} on its ${sJ} field`)}return Object.fromEntries(Object.entries(n).map(([e,t])=>[e,sZ(t,r,"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,sV.As)({...n,tools:i,entities:o})})({tools:(()=>{let e=function(e,t){let r;try{r=JSON.parse(e)}catch(e){throw Error(`Failed to parse tools.json: ${t}`,{cause:e})}if(!sY(r)||!Array.isArray(r.tools)||0===r.tools.length)throw Error(`tools.json requires a non-empty tools array: ${t}`);let n=new Set;return{tools:r.tools.map((e,r)=>{let i=function(e,t,r){if(!sY(e))throw Error(`Tool at index ${t} must be an object: ${r}`);let n="string"==typeof e.name?e.name.trim():"",i="string"==typeof e.description?e.description.trim():"";if(!n||!i)throw Error(`Tool at index ${t} requires name and description: ${r}`);if(void 0!==e.tool_type&&"client"!==e.tool_type&&"server"!==e.tool_type)throw Error(`Tool "${n}" tool_type must be "client" or "server"`);let o=function(e,t){if(void 0===e)return{};if(!sY(e))throw Error(`Tool "${t}" _meta must be an object`);if(void 0===e.ui)return{};if(!sY(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 r=e.ui.widgetId;if(void 0!==r&&("string"!=typeof r||!r.trim()))throw Error(`Tool "${t}" _meta.ui.widgetId must be a non-empty string`);let n=e.ui.expirePolicy;if(void 0!==n&&"same_conversation"!==n)throw Error(`Tool "${t}" _meta.ui.expirePolicy must be "same_conversation" when provided`);if("same_conversation"===n&&"string"!=typeof r)throw Error(`Tool "${t}" _meta.ui.expirePolicy requires _meta.ui.widgetId`);return{..."string"==typeof r?{widgetId:r.trim()}:{},..."same_conversation"===n?{expirePolicy:n}:{}}}(e._meta,n);return{name:n,description:i,...o,inputSchema:sX(e.inputSchema,"inputSchema",n),outputSchema:sX(e.outputSchema,"outputSchema",n),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,n),toolType:"client"===e.tool_type?"client":"server"}}(e,r,t);if(n.has(i.name))throw Error(`Duplicate Tool name: ${i.name}`);return n.add(i.name),i})}}(i(),r);var n=e.tools;let o=new Set(t.widgets.entryNames.map(e=>t.widgets.entries[e]?.id??t7(e)));for(let e of n)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:n,manifestText:s0(n,"manifest.yaml")});return o(),{manifestSourcePath:n,readManifestYaml:o,readToolsJson:i,toolsSourcePath:r}}({appDirectory:this.appDirectory,normalizedAppConfig:a}),p=function(e){if(e)return!0===e?{mcpEndpoint:tf()}:{...e,mcpEndpoint:tf({mcpEndpoint:e.mcpEndpoint})}}(t.openWebDebugger),d=Date.now()-n;this.rootPath=ti.resolve(this.appDirectory,"dist"),tn.existsSync(ti.resolve(this.rootPath))&&tn.rmSync(ti.resolve(this.rootPath),{recursive:!0,force:!0}),this.context=new sW,aC(this.context.compileLifecycle,n),this.context.compileLifecycle.prepareDurations.configLoadMs=d;let c=ti.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 tq,_=((e=process.cwd())=>tp(e)===to)(this.appDirectory),v=Date.now();await this.context.bootstrap({srcDirectory:c,appDirectory:this.appDirectory,rootPath:this.rootPath,userConfig:i,env:this._env,appConfig:o,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:()=>sC(t,{internal:_}),cachedLoginCookieResolver:()=>sI(t,_)}),this.context.compileLifecycle.prepareDurations.contextBootstrapMs=Date.now()-v,this.context.webDebuggerLaunchOptions=p,this.context.eventsResources=s,this.context.toolsResources=l,this.pluginSystem=new t1(this.context,[sw,sb,sE,sm,sA,sf,sS,sg,...i.experiments?.taro?[function({name:e,appId:t,icons:r,widgets:n}){return{name:rs,setup:i=>{let o=(0,ra.createRequire)(import.meta.url);i.view.hooks.modifyEntryOption.tapPromise({name:rs,stage:i.view.MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY},async({entry:e})=>{let{appDirectory:t,isDev:r,pages:n,widgets:o}=i.context,a=ro(n,t,!1,r);return{entry:e=Object.assign(e,a,ro(o,t,!0,r))}}),i.view.hooks.beforeBuild.tapPromise({name:rs,stage:i.view.BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG},async({buildConfig:e})=>{let{appDirectory:t}=i.context;rr(e,{resolve:{alias:{"@tarojs/components":o.resolve("@doubao-dev/taro-runtime/components",{paths:[t]}),"@tarojs/taro":(0,ez.dirname)(o.resolve("@doubao-dev/taro-runtime/package.json",{paths:[t]}))}}})}),i.worker.hooks.modifyEntryOption.tapPromise({name:rs,stage:i.worker.MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE},async({entry:r})=>{let{appDirectory:n,isDev:o}=i.context,{app:a}=i.context;return a&&(r.app=function(e,t,r,n,i=!1){var o;let a=`${eY}${ti.sep}app.js`,s=(o=rn(ti.dirname(a),e)).startsWith(".")?o:`./${o}`,l=td(t);return new ri(a,`
285
+ `}({appDirectory:e.context.appDirectory,clientTools:l,dirname:ta.dirname(i)})))),{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:r,appConfig:n,tools:i,userConfig:o}=e.context;await sE({appConfig:n,tools:i,app:r,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:r})=>{var n,i;let{app:o,pages:a,tools:s}=e.context.metadata.getInstance(),l=t.getAsset(e.context.appAssetPath),d=r[e6]?.find(({source:e})=>e.endsWith(".js")),p=t.getManifestAsset(e.context.manifestAssetPath),{manifest:c}=p,u=[];c.applet.pages.forEach(e=>{u.push(e.digest)});let h=o.metadata.appId,m=e.context.versionTag;p.assignBasicManifest({manifestVersion:"3.0",packageName:h,appId:h,versionName:m,versionTag:m,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=o.toManifest({toolsMetadata:s,hashCode:l?.hashCode??(n=l?.hashCode??c?.applet?.digest,i=u.join(""),aL.createHash("sha256").update(n+i).digest("hex").substring(0,8)),appRuntimeEntry:f,appRuntimeType:e.context.environment.useLynx?"lynx":"js"});d&&(b.toolRuntimeEntry=d.source),p.mergeAppletManifest(b),y&&p.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})=>{}))}},sA={name:"AppletMainEntryCheckPlugin",setup:async e=>{let{srcDirectory:t}=e.context,r=sp(t);if(!to.existsSync(r))throw Error("ENOENT: no such file or directory")}},sT={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:r}=await e.context.resolveSigningEncryptionOptions()||{};if(r?.enabled){let{signData:n}=await import("node:module").then(function(e){return f.t(e.createRequire(import.meta.url)("@doubao-dev/security-tasm"),18)}),i=t.getManifestAsset(e.context.manifestAssetPath),{manifest:o}=i,{buffer:a,status:s,error_msg:l}=await n(Buffer.from(i.content),ri(r,{extra_config:{app_id:o.appId,bundle_id:""},output_mode:"sign_block"}));if(0!==s)throw Error(l);let d=new aM(e4,a);d.destination=e4,t.addAsset(e4,d)}})}},sC="AppletWebManifestPlugin",sI={name:sC,setup:async e=>{e.assets.hooks.beforeEmit.tapPromise({name:sC,stage:e.assets.BEFORE_EMIT_STAGE_PROCESS_MANIFEST_ASSETS-2},async({assets:t})=>{var r,n;let i=e.context.metadata.getData(),o=i.app.appId||e.context.appId,a=e.context.command===eU.DEV?"all":"configured",s=rS(e.context.pages,e.context.normalizedAppConfig.pages.entries,a),l=rS(e.context.widgets,e.context.normalizedAppConfig.widgets.entries,a);if(!o&&Object.keys(s).length>0)throw Error("appId is required to resolve Web page entry paths");let d=o?(r=i.pages,Object.keys(s).map(e=>{let t=r[e]??{},n=t.path??rr(e),i={entry:rn(o,n,rg)},a=rw(s[e]);return{path:n,entryName:e,web:i,debugHidden:a,manifest:{...t,path:n,digest:"",entry:"",renderType:en.LYNX,web:i,...a?{debugHidden:!0}:{}}}})):[],p=(n=i.widgets,Object.keys(l).map(e=>{let{id:t,...r}=n[e]??{},i=t??rv(l,n,e),o={entry:`${i}/${rg}`},a=rw(l[e]);return{id:i,entryName:e,web:o,debugHidden:a,manifest:{...r,widgetId:i,digest:"",entry:"",renderType:en.LYNX,web:o,...a?{debugHidden:!0}:{}}}}));if(0===d.length&&0===p.length&&0===e.context.normalizedAppConfig.tools.entryNames.length)return;let c=t.getManifestAsset(e.context.manifestAssetPath),u=new Map(d.map(e=>[e.path,e])),h=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))}),d))h.has(e.path)||c.appendPage(e.manifest);let m=new Map(p.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=m.get(e.widgetId);t&&(e.web=t.web,t.debugHidden&&(e.debugHidden=!0))}),p))if(!f.has(t.id)){let r=t.manifest;e.context.templateWidgetEntries.has(t.entryName)&&(r.titleType=ei.NONE),c.appendWidget(r)}e.context.app&&(c.manifest.applet.web={appRuntimeEntry:ry,...e.context.normalizedAppConfig.tools.entryNames.length>0?{toolRuntimeEntry:rb}:{}})})}};function sO(e=((e=process.cwd())=>tc(e)===ts)()){return e?"sso":"sms"}async function sP(e={},t={}){if(e.cookie)return e.cookie;let{ensureLoginCookie:r}=await import("./@byted-doubao-apps/login~1.js");return await r({route:sO(t.internal),browser:e.loginBrowser,browserPath:e.loginBrowserPath,force:t.force})}async function sk(e,t){if(e.cookie)return e.cookie;let{getCachedLoginCookie:r}=await import("./@byted-doubao-apps/login~1.js");return await r({route:sO(t)})}function sD(e,t){let r;if(!e)return{entryNames:[],entries:{}};if(Array.isArray(e))r=e;else if("object"==typeof e)t&&tC.warn(`${t} config object map is deprecated. Use an array of strings or { entry, ...metadata } objects instead.`),r=Object.entries(e).map(([e,t])=>{let r;return{...t,entry:(r=e.replace(/\.(?:t|j)sx?$/i,"").replace(/^\/+|\/+$/g,"")).endsWith("/index")?r:`${r}/index`}});else throw Error("Entry config must be an array or object map.");let n=[],i={},o=new Set,a=[],s=new Set;return r.forEach(e=>{let t,r;if("string"==typeof e)t=e,r={};else{let{entry:n,...i}=e;if(!n)throw Error('Entry config object must include "entry".');t=n,r=i}o.has(t)?s.has(t)||(a.push(t),s.add(t)):(n.push(t),o.add(t)),i[t]=r}),t&&a.length>0&&tC.warn(`${t} config contains duplicate entries: ${a.join(", ")}. Entries are deduplicated, and the last metadata config takes effect.`),{entryNames:n,entries:i}}class s${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:r,srcDirectory:n="",virtualEntryDir:i="",appDirectory:o=process.cwd(),rootPath:a="",manifestPath:s="",pages:l={},widgets:d={},auth:p,mcpUI:c,app:u="",tools:h={},environment:m={useLynx:!1,useAuth:!1},viewEntriesByType:f={},loginCookieResolver:g,cachedLoginCookieResolver:y}){this._command=e,this._metadata=t,this._versionTag=r,this._srcDirectory=n,this._virtualEntryDir=i,this._appDirectory=o,this._rootPath=a,this._manifestPath=s,this._pages={...l},this._widgets={...d};let b=p??c??{viewEntries:{},apiEntries:{}};this._auth={viewEntries:{...b.viewEntries},apiEntries:{...b.apiEntries}},this._app=u,this._tools={...h},this._environment={useLynx:m.useLynx,useAuth:!!(m.useAuth||m.useMcpUI)},this._cookie="",this._loginCookieResolver=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===eU.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(to.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 e3}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 sR({internal:e,domainId:t,appLimit:r,appOffset:n,keyWord:i,appKey:o,cookie:a}){return await nq({internal:e,domainId:t,path:"/app_developer/api/apps",query:{app_limit:r,app_offset:n,key_word:i,app_key:o},method:"GET",headers:a?{Cookie:a}:void 0})}async function sN({source:e,internal:t,domainId:r,appLimit:n,appOffset:i,releaseStatus:o,keyWord:a,appKey:s,cookie:l}){return await nq({internal:t,domainId:r,path:"/developer/api/apps",query:{source:e,app_limit:n,app_offset:i,release_status:o,key_word:a,app_key:s},method:"GET",headers:l?{Cookie:l}:void 0})}async function sL({appKey:e,source:t,internal:r,domainId:n,releaseStatus:i,limit:o,offset:a,status:s,keyWord:l,versionTag:d,cookie:p}){return await nq({internal:r,domainId:n,path:`/developer/api/apps/${encodeURIComponent(e)}/version`,query:{source:t,release_status:i,limit:o,offset:a,status:s,key_word:l,version_tag:d},method:"GET",headers:p?{Cookie:p}:void 0})}async function sM({appKey:e,versionTag:t,internal:r,domainId:n,pageSize:i,pageNum:o,cookie:a}){return await nq({internal:r,domainId:n,path:`/developer/api/apps/${encodeURIComponent(e)}/permission/versions/${encodeURIComponent(t)}/permission_list`,query:{page_size:i,page_num:o},method:"GET",headers:a?{Cookie:a}:void 0})}function sj(e){return e.is_latest||e.is_current}function sU(e){return Date.parse(e.updated_at??e.created_at??e.online_at??"")}function sB(e){return Number(e.version_code??e.qr_data?.artifact_version_code)}function sF(e){return e.version_tag}function sW(e,t){tm()&&tC.info(e,t)}async function sH({appKey:e,internal:t=!1,cookie:r,source:n=eq.REQUEST_SOURCE_IDE}){sW("[app-info] 开始获取应用信息",{appKey:e,internal:t,session:r?"present":"absent"});let i=await sR({internal:t,appLimit:1,appOffset:0,appKey:e,cookie:r}).then(({data:t,log_id:r})=>{let n=t?.app_list||[],i=n.find(t=>t.app_key===e);return sW("[app-info] MGetApps 请求完成",{appKey:e,appCount:n.length,exactMatch:!!i,logId:r}),i}).catch(t=>{if(sW("[app-info] MGetApps 请求失败",{appKey:e,reason:a9(t)}),as(t))throw t}),o=i?void 0:await sN({source:n,internal:t,appLimit:1,appOffset:0,appKey:e,cookie:r}).then(({data:t,log_id:r})=>{let n=t?.org_list?.flatMap(e=>e.app_list)||[],i=n.find(t=>t.app_key===e),o=i||n[0];return sW("[app-info] MGetAppsDeprecated 请求完成",{appKey:e,appCount:n.length,exactMatch:!!i,logId:r}),o?.app_meta}).catch(t=>{sW("[app-info] MGetAppsDeprecated 请求失败",{appKey:e,reason:a9(t)})});if(!i&&!o)throw sW("[app-info] 应用信息查询结束,未找到可用结果",{appKey:e}),Error(`未找到应用 ${e}`);let a=i?void 0:await sL({appKey:e,source:n,internal:t,cookie:r}).then(({data:t,log_id:r})=>{let n=Array.isArray(t?.version_list)?t.version_list:[];if(sW("[app-info] MGetAppVersions 请求完成",{appKey:e,versionCount:n.length,logId:r}),0===n.length)return;let i=n.find(sj);return i||n.reduce((e,t)=>{let r,n;return!e||(r=sU(t),n=sU(e),(Number.isNaN(r)&&Number.isNaN(n)?sB(t)-sB(e):(Number.isNaN(r)?-1/0:r)-(Number.isNaN(n)?-1/0:n))>0)?t:e},void 0)}).catch(t=>{sW("[app-info] MGetAppVersions 请求失败",{appKey:e,reason:a9(t)})}),s=i?.current_version_tag||(a?sF(a):""),l=i?.icon_url||(a?a.icon_url:void 0)||o?.icon_url,d=i?.name||o?.name,p=a&&sF(a)===s?a:i?{version_tag:i.current_version_tag,icon_url:i.icon_url,updated_at:i.updated_at,online_at:i.online_at,offline_at:i.offline_at}:{version_tag:s,icon_url:l};if(i||!s||!r)return{appKey:e,appName:d,versionTag:s,iconUrl:l,permissionList:[],permissionTotal:0,version:p};let c=await sM({appKey:e,versionTag:s,pageSize:1e3,pageNum:1,internal:t,cookie:r}).then(t=>(sW("[app-info] FetchAppPermissionList 请求完成",{appKey:e,versionTag:s,permissionTotal:t.data?.total||0,logId:t.log_id}),t)).catch(t=>{throw sW("[app-info] FetchAppPermissionList 请求失败",{appKey:e,versionTag:s,reason:a9(t)}),t});return{appKey:e,appName:d,versionTag:s,iconUrl:l,permissionList:c.data?.permission_list||[],permissionTotal:c.data?.total||0,version:p}}function sV(){return function({fetch:e,getCacheKey:t,ttl:r,timeout:n,cacheFailures:i=!1,now:o=Date.now}){let a=new Map;return function(...s){var l,d;let p,c="string"==typeof(l=t(...s))?l:JSON.stringify(l),u=o(),h=a.get(c);if(h&&h.expiresAt>u)return h.promise;let m=(d=e(...s),void 0===n?d:Promise.race([d,new Promise((e,t)=>{p=setTimeout(()=>{t(Error(`Request timed out after ${n}ms`))},n)})]).finally(()=>{p&&clearTimeout(p)})).catch(e=>{throw i||a.get(c)?.promise!==m||a.delete(c),e});return a.set(c,{expiresAt:u+r,promise:m}),m}}({fetch:sH,getCacheKey:({appKey:e,internal:t,cookie:r})=>[e,t,r],ttl:6e4,timeout:1e4,cacheFailures:!0})}function sG(){let e=Object.entries(rI.networkInterfaces()),t=[],r=[];for(let[n,i]of e){if(!i)continue;let e=/^(?:utun|tun|tap|ppp|ipsec|wg|docker|vboxnet|vmnet)\d*$/i.test(n)||/^br-/i.test(n)||/(?:vEthernet|Hyper-V|Docker|VirtualBox|VMware)/i.test(n);for(let n of i){let{address:i,family:o,internal:a}=n;a||"IPv4"!==o||(e||i.startsWith("169.254.")?r:t).push(i)}}return[...new Set([...t,...r])]}function sq(e,t=sG()[0]??"127.0.0.1"){return`http://${t}:${e}`}async function sJ(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,x.lookup)(e,{family:4})).address}async function sK(e,t,r){let n=await fetch(`${e}/base/manifest.json`,{signal:AbortSignal.any([r,AbortSignal.timeout(1500)]),redirect:"error"}),i=await n.json();if(!n.ok||t&&i?.appId!==t)throw Error(`Invalid dev manifest at ${e} (HTTP ${n.status}, appId: ${t})`)}async function sz(e,t,r,n){let i,o="0.0.0.0"===t,a=sq(e,o?"127.0.0.1":t),s=AbortSignal.any([n,AbortSignal.timeout(5e3)]);try{for(;;)try{await sK(a,r,s);break}catch(e){i=e,await (0,v.setTimeout)(200,void 0,{signal:s})}}catch{throw n.throwIfAborted(),Error(`Dev server manifest was not ready at ${a}/base/manifest.json within 5000ms after compilation`,{cause:i})}if(!o)return{host:a,artifactOrigin:a};let l=sG().map(t=>sq(e,t)),d=l.map(e=>sK(e,r,n).then(()=>e,()=>void 0)),p=a;for await(let e of d)if(e){p=e;break}return n.throwIfAborted(),p===a?tD.warn(`Dev server is available locally at ${p}. For network devices, check your network or use --host <IP>.`):l.length>1&&tD.info(`Dev server address: ${p}. If your device uses another network, restart with --host <IP>.`),{host:p,artifactOrigin:a}}(ek=eH||(eH={}))[ek.APP_TYPE_MINI_APP=0]="APP_TYPE_MINI_APP",ek[ek.APP_TYPE_NATIVE=1]="APP_TYPE_NATIVE",(eD=eV||(eV={}))[eD.DRAFT=0]="DRAFT",eD[eD.UNDER_REVIEW=1]="UNDER_REVIEW",eD[eD.APPROVED=2]="APPROVED",eD[eD.REJECTED=3]="REJECTED",eD[eD.WITHDRAWN=4]="WITHDRAWN",eD[eD.PUBLISHING=5]="PUBLISHING",eD[eD.PUBLISHED=6]="PUBLISHED",eD[eD.ARCHIVED=7]="ARCHIVED",eD[eD.DELETED=8]="DELETED",(e$=eG||(eG={}))[e$.DRAFT=0]="DRAFT",e$[e$.PUBLISHED=1]="PUBLISHED",e$[e$.ARCHIVED=2]="ARCHIVED",(eR=eq||(eq={}))[eR.REQUEST_SOURCE_PLATFORM=0]="REQUEST_SOURCE_PLATFORM",eR[eR.REQUEST_SOURCE_IDE=1]="REQUEST_SOURCE_IDE",eR[eR.REQUEST_SOURCE_DEVICE=2]="REQUEST_SOURCE_DEVICE",eR[eR.REQUEST_SOURCE_OP_PLATFORM=3]="REQUEST_SOURCE_OP_PLATFORM";class sY extends s${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(),sz(e,this.devServerHost,this.appId,this.devServerAbort.signal)})}getWidgetViewDataTemplates;webDebuggerLaunchOptions;compileLifecycle=aO();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=sV();_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(){var e;return{pages:{entryNames:[...(e=this._normalizedAppConfig).pages.entryNames],entries:Object.fromEntries(Object.entries(e.pages.entries).map(([e,t])=>[e,{...t}]))},tools:{entryNames:[...e.tools.entryNames],entries:Object.fromEntries(Object.entries(e.tools.entries).map(([e,t])=>[e,{...t}]))},widgets:{entryNames:[...e.widgets.entryNames],entries:Object.fromEntries(Object.entries(e.widgets.entries).map(([e,t])=>[e,{...t}]))}}}get templateWidgetEntries(){return new Set(this._templateWidgetEntries)}get 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(!aa(t))return;let r="string"==typeof(e=this._appConfig.icons)?e.length>0?e:void 0:e?.["3x"]||e?.["2x"]||e?.["1x"],n={appKey:t,versionTag:this.versionTag??"",permissionList:[],permissionTotal:0,version:{},...this._appConfig.name?{appName:this._appConfig.name}:{},...r?{iconUrl:r}:{}};if(this._skipAppInfoFetch)return n;let i=await this.getCachedLoginCookie().catch(()=>void 0);try{return Object.assign(n,await this._fetchCachedAppInfo({appKey:t,cookie:i,internal:this.internal})),n.appName||=this._appConfig.name,n.iconUrl||=r,n}catch(e){if(this.command!==eU.DEV&&this.command!==eU.BUILD)throw e;if(as(e))return n;return this._hasWarnedAppInfoFetchFailure||(this._hasWarnedAppInfoFetchFailure=!0,tC.warn("从平台获取 Doubao 应用信息失败,将使用本地 `app.config.ts` 配置的数据",{reason:a9(e)})),n}}async bootstrap({srcDirectory:e,appDirectory:t,rootPath:r,userConfig:n,appConfig:i={},normalizedAppConfig:o={pages:{entryNames:[],entries:{}},tools:{entryNames:[],entries:{}},widgets:{entryNames:[],entries:{}}},command:a,metadata:s,signingEncryptionOptions:l,disableSigningEncryption:d,appId:p,versionTag:c,pages:u,widgets:h,auth:m,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:ta.resolve(t,eZ),rootPath:r,manifestPath:ta.resolve(`${r}/${e3}`),command:a,metadata:s,versionTag:c,pages:u,widgets:h,auth:m,app:f,tools:g,loginCookieResolver:S,cachedLoginCookieResolver:E});let{icons:x,...A}=i??{};this._userConfig=n,this.devServerInteractive=v,this._env={...w},this._appConfig={...A,...void 0!==p?{appId:p}:{},...void 0!==x?{icons:tF(x)}:{}},this._normalizedAppConfig=o,this._internal=y??((e=process.cwd())=>tc(e)===ts)(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=!!d,this._appId=p??i?.appId,this._dek=Buffer.from(""),this._fetchCachedAppInfo=sV()}async resolveSigningEncryptionOptionsOnce(){let e=this._appId??this.metadata.appId;if(this._signingEncryptionOptions=await a7(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(),tm()&&console.log("DEK base64:",Buffer.from(this.dek.buffer,this.dek.byteOffset,this.dek.byteLength).toString("base64"))}return this.signingEncryptionOptions}}async function sX({appId:e,versionTag:t,versionCode:r,packagePath:n,internal:i,domainId:o,cookie:a,token:s,needAuth:l=!0}){let d=new FormData,p=new Blob([new Uint8Array(to.readFileSync(n))],{type:"application/zip"});d.append("applet_file",p,"doubao_app.zip"),d.append("applet_version_code",r.toString());let c=`/developer/${l?"resource_api":"resource_internal_api"}/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/package/upload_applet`;return await nq({internal:i,domainId:s?"sms-external":o,path:c,method:"POST",body:d,headers:{...a?{Cookie:a}:{},...s?{"X-Developer-Open-Build-Token":s}:{}},auth:l&&!s})}async function sZ({versionTag:e,appKey:t,manifest:r,rootPath:n,internal:i,needAuth:o=!0,cookie:a,token:s}){process.env.NODE_ENV="production";let{appId:l,packageName:d,versionCode:p}=r,c=function(e,t){let r=e||t.versionTag||t.versionName;if(!r)throw Error("Doubao Apps Platform deploy requires versionTag in params or app metadata.");return r}(e,r),{packageResource:u}=await t7({channelName:"doubao_app",manifest:r,rootPath:n});if(!u)throw Error("Failed to archive package");let h=await sX({appId:t||l||d,versionTag:c,versionCode:p,packagePath:u.resource,internal:i,needAuth:o,cookie:a,token:s});return console.log("Deploy success:",h),h}let sQ=f("../../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/dist/index.js"),s0="x-db-llm-modifiable",s1="x-db-is-entity-id",s2="x-db-is-refresh-key",s3=["entity_type"];function s4(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function s9(e,t,r){if(!s4(e))throw Error(`Tool "${r}" requires an object ${t}`);return e}function s5(e,t,r,n,i=!1){let o=`Tool "${t}" ${r} property "${n}"`;if(!s4(e)||"string"!=typeof e.type||!e.type.trim())throw Error(`${o} requires a string type`);let a=e.type.trim(),s=e[s0];if(void 0!==s&&"boolean"!=typeof s)throw Error(`${o} ${s0} must be a boolean`);if(s&&"outputSchema"!==r)throw Error(`${o} ${s0} is only supported in outputSchema`);if(s&&"array"!==a)throw Error(`${o} ${s0} is only supported for array fields`);let l=e[s1];if(void 0!==l&&"boolean"!=typeof l)throw Error(`${o} ${s1} must be a boolean`);if(l&&!i)throw Error(`${o} ${s1} is only supported on top-level card output fields`);let d=e[s2];if(void 0!==d&&"boolean"!=typeof d)throw Error(`${o} ${s2} must be a boolean`);if(d&&!i)throw Error(`${o} ${s2} is only supported on top-level card output fields`);let p={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,o),...s?{llm_modifiable:!0}:{},...l?{is_entity_id:!0}:{},..."string"==typeof e.description&&e.description.trim()?{description:e.description.trim()}:{}};if("object"===a){if(!s4(e.properties))throw Error(`${o} requires object properties`);if(p.properties=Object.fromEntries(Object.entries(e.properties).map(([e,i])=>[e,s5(i,t,r,`${n}.${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`);p.required=e.required}}if("array"===a){if(!s4(e.items))throw Error(`${o} requires object array items`);p.items=s5(e.items,t,r,`${n}[]`)}return p}function s8(e,t,r){let n=e[t];if(void 0===n)return{};if(!s4(n))throw Error(`manifest.yaml ${t} must be an object: ${r}`);return{...n}}function s7(e,t){if(!to.existsSync(e)||!to.statSync(e).isFile())throw Error(`${t} does not exist: ${e}`);return to.readFileSync(e,"utf8")}class s6{pluginSystem;rootPath="dist";context;appDirectory;_userConfig;_appConfig;_appConfigLoaded=!1;_env={};constructor(e=process.cwd()){this.appDirectory=e}async prepare(e,t={},r){let n=this.context;try{let n=Date.now(),i=await this.getUserConfig(t),o={...await this.getAppConfig(),...t.appName?{name:t.appName}:{},...t.appIcon?{icons:tF(t.appIcon)}:{}},a={pages:sD(o?.pages,"pages"),tools:sD(o?.tools,"tools"),widgets:sD(o?.widgets,"widgets")},s=function(e){let t=ta.join(e,"events.json");if(to.existsSync(t)&&to.statSync(t).isFile())return{readJson:()=>to.readFileSync(t,"utf8"),sourcePath:t}}(this.appDirectory),l=function({appDirectory:e,normalizedAppConfig:t}){let r=ta.join(e,"tools.json");if(!to.existsSync(r))return;let n=ta.join(e,"manifest.yaml"),i=()=>s7(r,"tools.json"),o=()=>(function({tools:e,manifestPath:t,manifestText:r}){let n=function(e,t){let r;try{r=(0,sQ.qg)(e)}catch(e){throw Error(`Failed to parse manifest.yaml: ${t}`,{cause:e})}if(!s4(r))throw Error(`manifest.yaml must contain an object: ${t}`);return r}(r,t),i=s8(n,"tools",t),o=s8(n,"entities",t);for(let t of e){if(t.name in i)throw Error(`Tool "${t.name}" conflicts with a tool in manifest.yaml`);if(i[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||!s4(e.properties))throw Error(`Tool "${t}" inputSchema requires type object and object properties`);let r=Object.fromEntries(Object.entries(e.properties).map(([e,r])=>[e,s5(r,t,"inputSchema",e)])),n=e.required;if(void 0!==n&&(!Array.isArray(n)||n.some(e=>"string"!=typeof e)))throw Error(`Tool "${t}" inputSchema required must be a string array`);return{type:"object",properties:r,...n&&n.length>0?{required:n}:{}}}(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 r=t.name;if("array"!==e.type||!s4(e.items))throw Error(`Card Tool "${r}" outputSchema must be an array`);if("object"!==e.items.type||!s4(e.items.properties))throw Error(`Card Tool "${r}" outputSchema items must be objects`);let n=e.items.properties,i=s3.find(e=>e in n);if(i)throw Error(`Tool "${r}" outputSchema must not declare reserved field "${i}"`);let o=Object.entries(n).filter(([e,t])=>{if(!s4(t)||void 0===t[s1])return!1;if("boolean"!=typeof t[s1])throw Error(`Tool "${r}" outputSchema property "${e}" ${s1} must be a boolean`);return t[s1]});if(1!==o.length)throw Error(`Card Tool "${r}" outputSchema requires exactly one ${s1} field; found ${o.length}`);let a=Object.entries(n).filter(([e,t])=>{if(!s4(t)||void 0===t[s2])return!1;if("boolean"!=typeof t[s2])throw Error(`Tool "${r}" outputSchema property "${e}" ${s2} must be a boolean`);return t[s2]});if("same_conversation"===t.expirePolicy){let e=o[0]?.[0];if(1!==a.length||a[0]?.[0]!==e)throw Error(`Card Tool "${r}" with expirePolicy "same_conversation" requires ${s2} on its ${s1} field`)}return Object.fromEntries(Object.entries(n).map(([e,t])=>[e,s5(t,r,"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,sQ.As)({...n,tools:i,entities:o})})({tools:(()=>{let e=function(e,t){let r;try{r=JSON.parse(e)}catch(e){throw Error(`Failed to parse tools.json: ${t}`,{cause:e})}if(!s4(r)||!Array.isArray(r.tools)||0===r.tools.length)throw Error(`tools.json requires a non-empty tools array: ${t}`);let n=new Set;return{tools:r.tools.map((e,r)=>{let i=function(e,t,r){if(!s4(e))throw Error(`Tool at index ${t} must be an object: ${r}`);let n="string"==typeof e.name?e.name.trim():"",i="string"==typeof e.description?e.description.trim():"";if(!n||!i)throw Error(`Tool at index ${t} requires name and description: ${r}`);if(void 0!==e.tool_type&&"client"!==e.tool_type&&"server"!==e.tool_type)throw Error(`Tool "${n}" tool_type must be "client" or "server"`);let o=function(e,t){if(void 0===e)return{};if(!s4(e))throw Error(`Tool "${t}" _meta must be an object`);if(void 0===e.ui)return{};if(!s4(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 r=e.ui.widgetId;if(void 0!==r&&("string"!=typeof r||!r.trim()))throw Error(`Tool "${t}" _meta.ui.widgetId must be a non-empty string`);let n=e.ui.expirePolicy;if(void 0!==n&&"same_conversation"!==n)throw Error(`Tool "${t}" _meta.ui.expirePolicy must be "same_conversation" when provided`);if("same_conversation"===n&&"string"!=typeof r)throw Error(`Tool "${t}" _meta.ui.expirePolicy requires _meta.ui.widgetId`);return{..."string"==typeof r?{widgetId:r.trim()}:{},..."same_conversation"===n?{expirePolicy:n}:{}}}(e._meta,n);return{name:n,description:i,...o,inputSchema:s9(e.inputSchema,"inputSchema",n),outputSchema:s9(e.outputSchema,"outputSchema",n),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,n),toolType:"client"===e.tool_type?"client":"server"}}(e,r,t);if(n.has(i.name))throw Error(`Duplicate Tool name: ${i.name}`);return n.add(i.name),i})}}(i(),r);var n=e.tools;let o=new Set(t.widgets.entryNames.map(e=>t.widgets.entries[e]?.id??rt(e)));for(let e of n)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:n,manifestText:s7(n,"manifest.yaml")});return o(),{manifestSourcePath:n,readManifestYaml:o,readToolsJson:i,toolsSourcePath:r}}({appDirectory:this.appDirectory,normalizedAppConfig:a}),d=function(e){if(e)return!0===e?{mcpEndpoint:ty()}:{...e,mcpEndpoint:ty({mcpEndpoint:e.mcpEndpoint})}}(t.openWebDebugger),p=Date.now()-n;this.rootPath=ta.resolve(this.appDirectory,"dist"),to.existsSync(ta.resolve(this.rootPath))&&to.rmSync(ta.resolve(this.rootPath),{recursive:!0,force:!0}),this.context=new sY,aP(this.context.compileLifecycle,n),this.context.compileLifecycle.prepareDurations.configLoadMs=p;let c=ta.resolve(this.appDirectory,"src"),u=Date.now(),{pages:h,widgets:m,auth:f,app:g,tools:y}=await this.analyzeConvention(c,a);this.context.compileLifecycle.prepareDurations.projectScanMs=Date.now()-u;let b=new tK,_=((e=process.cwd())=>tc(e)===ts)(this.appDirectory),v=Date.now();await this.context.bootstrap({srcDirectory:c,appDirectory:this.appDirectory,rootPath:this.rootPath,userConfig:i,env:this._env,appConfig:o,normalizedAppConfig:a,command:e,metadata:b,signingEncryptionOptions:t.signingEncryptionOptions,skipAppInfoFetch:!!t.token,permissions:t.permissions,appId:t.appId,versionTag:t.versionTag,pages:h,widgets:m,auth:f,app:g,tools:y,internal:_,devServerInteractive:t.interactive,loginCookieResolver:()=>sP(t,{internal:_}),cachedLoginCookieResolver:()=>sk(t,_)}),this.context.compileLifecycle.prepareDurations.contextBootstrapMs=Date.now()-v,void 0!==t.host&&(this.context.devServerHost=await sJ(t.host)),this.context.webDebuggerLaunchOptions=d,this.context.eventsResources=s,this.context.toolsResources=l,this.pluginSystem=new t3(this.context,[sx,sw,sA,sg,sI,sb,sT,s_,...i.experiments?.taro?[function({name:e,appId:t,icons:r,widgets:n}){return{name:rd,setup:i=>{let o=(0,rl.createRequire)(import.meta.url);i.view.hooks.modifyEntryOption.tapPromise({name:rd,stage:i.view.MODIFY_ENTRY_OPTION_STAGE_PROCESS_ENTRY},async({entry:e})=>{let{appDirectory:t,isDev:r,pages:n,widgets:o}=i.context,a=rs(n,t,!1,r);return{entry:e=Object.assign(e,a,rs(o,t,!0,r))}}),i.view.hooks.beforeBuild.tapPromise({name:rd,stage:i.view.BEFORE_BUILD_STAGE_MODIFY_BUNDLE_CONFIG},async({buildConfig:e})=>{let{appDirectory:t}=i.context;ri(e,{resolve:{alias:{"@tarojs/components":o.resolve("@doubao-dev/taro-runtime/components",{paths:[t]}),"@tarojs/taro":(0,eX.dirname)(o.resolve("@doubao-dev/taro-runtime/package.json",{paths:[t]}))}}})}),i.worker.hooks.modifyEntryOption.tapPromise({name:rd,stage:i.worker.MODIFY_ENTRY_OPTION_STAGE_OPTIMIZE},async({entry:r})=>{let{appDirectory:n,isDev:o}=i.context,{app:a}=i.context;return a&&(r.app=function(e,t,r,n,i=!1){var o;let a=`${eZ}${ta.sep}app.js`,s=(o=ro(ta.dirname(a),e)).startsWith(".")?o:`./${o}`,l=tu(t);return new ra(a,`
286
286
  import { Applet } from "${l}";
287
287
  import { defineApp } from '${l}';
288
288
  import { APP_ID, getLifecycle, setCurrentId } from '@doubao-dev/taro-runtime/internal';
@@ -327,4 +327,4 @@ if (import.meta.webpackHot) {
327
327
  import.meta.webpackHot.accept()
328
328
  }
329
329
  `:""}
330
- `)}(a,n,e,t,o)),{entry:r}}),i.worker.hooks.collectMetaData.tapPromise(rs,async({collector:n})=>{n.addAppMeta({name:e,appId:t,icons:r})}),i.view.hooks.collectMetaData.tapPromise({name:rs,stage:i.view.COLLECT_METADATA_STAGE_OPTIMIZE},async({collector:e})=>{let{pages:t,widgets:r}=i.context;Object.entries(t).forEach(([t,r])=>{let{folderName:n}=r;e.addPageMeta(t,{id:t7(t,n),path:re(t)})}),Object.entries(r).forEach(([t,r])=>{let i,{folderName:o}=r;e.addWidgetMeta(t,(i=t7(t,o),{...n?.[o]??n?.[t]??n?.[i]??{},id:i}))})})}}}(i.experiments.taro)]:[],...i.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 E=await a1({options:i,commandType:e,context:this.context,rsbuildPlugins:r},this.pluginSystem);return{userConfig:i,builder:E}}catch(t){throw ak.report({appDirectory:this.appDirectory,context:this.context===n?void 0:this.context,scene:e===eM.DEV?"dev_initial":e,status:"failed",errorStage:"prepare",error:t}),t}}async dev(e){let t,{builder:r}=await this.prepare(eM.DEV,e,e.rsbuildPlugins);this.context.manifestSettings=function({cwd:e=process.cwd()}={}){let t=ez.resolve(e,a9);if(t3.existsSync(t))try{let e=JSON.parse(t3.readFileSync(t,"utf-8"));if(!K(e))throw TypeError("Development config must be a JSON object");return e}catch(e){tA.warn("Failed to load development config file; ignoring it",{path:t,reason:a2(e)});return}}({cwd:this.appDirectory});let n=await r.startDevServer(),i=nn(n.port),o=this.context.webDebuggerLaunchOptions;try{t=o?await ar(this.context,{appId:this.context.appId,appDirectory:this.appDirectory,artifactOrigin:i,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 n.server.close(),e}let a=async()=>{tP.info("Shutting down...");try{await t?.close(),await n.server.close()}finally{await ak.flush()}tP.info("dev server closed")};return{host:i,...t?{webDebugger:t}:{},closeServer:a}}async build(e){let{builder:t}=await this.prepare(eM.BUILD,e,e.rsbuildPlugins);try{await t.build(),this.copyWebAssetsToRoot()}finally{if(e.skipCleanupRootPath||tu()){if(e.archive&&e.channel){let{channel:t}=e;await t9({channelName:t,manifest:this.context.manifest,rootPath:this.rootPath})}}else tn.rmSync(this.rootPath,{recursive:!0,force:!0})}}async analyze(e){let{builder:t}=await this.prepare(eM.ANALYZE,e);await t.build()}async perf(e){let{builder:t}=await this.prepare(eM.PERF,e);await t.build()}async deploy(e){let{builder:t}=await this.prepare(eM.DEPLOY,e),r=e.deployType||t6.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(r!==t6.NORMAL)return void tO.error("Please use deploy plugin in doubao.config.ts");let n=e.token?void 0:await this.context.getLoginCookie();if(!e.token&&!n)throw Error("Doubao Apps Platform 部署需要登录,请运行 `doubao login` 后重试。");return await t.build(),this.copyWebAssetsToRoot(),await sG({...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,...n?{cookie:n}:{},...e.token?{token:e.token}:{}})}(e.build||r===t6.NORMAL)&&(await t.build(),this.copyWebAssetsToRoot());try{await this.pluginSystem.callDeployHooks("deploy",{deployType:r})}finally{await this.pluginSystem.callDeployHooks("afterDeploy",{})}}async run(e,t){switch(e){case t2.DEV:return await this.dev(t);case t2.BUILD:return await this.build(t);case t2.ANALYZE:return await this.analyze(t);case t2.PERF:return await this.perf(t);case t2.DEPLOY:return await this.deploy(t)}}async getUserConfig(e){if(!this._userConfig){let t=(0,y.loadEnv)({cwd:this.appDirectory,mode:e.envMode}),r=await a7({cwd:this.appDirectory,customConfigFile:e.config});this._env=t.parsed,r.source||={},r.source.define={...t.publicVars,...r.source.define},e.debugDriver&&(r.debugDriver=e.debugDriver),void 0!==e.skipAdbForegroundAppWatch&&(r.skipAdbForegroundAppWatch=e.skipAdbForegroundAppWatch),this._userConfig=r}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=ti.resolve(this.appDirectory,"dist");for(let r of e){let e=ti.resolve(t,r);if(e!==t&&!e.startsWith(`${t}${ti.sep}`))throw Error(`Web artifact path escapes the Web output root: ${r}`);if(!tn.existsSync(e))throw Error(`Web artifact is missing after build: ${e}`);let n=ti.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`,r);tn.mkdirSync(ti.dirname(n),{recursive:!0}),tn.copyFileSync(e,n)}let r=ti.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`),n=ti.resolve(r,"base","manifest.json");tn.mkdirSync(ti.dirname(n),{recursive:!0}),tn.writeFileSync(n,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 sr({cwd:this.appDirectory}),this._appConfigLoaded=!0,this._appConfig;this._appConfig=await se({cwd:this.appDirectory}),this._appConfigLoaded=!0}return this._appConfig}async analyzeConvention(e,t){let{pages:r,widgets:n,auth:i}=await sc(e,t),{app:o,tools:a}=await sd(e,t.tools);return{pages:r,widgets:n,auth:i,app:o,tools:a}}}async function s2({appKey:e,versionTag:t,cloudBuildSource:r,runner:n,config:i,variables:o,properties:a,internal:s,domainId:l,cookie:p}){return await nV({internal:s,domainId:l,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/cloud_build/create_job`,method:"POST",body:JSON.stringify({cloud_build_source:r,runner:n,config:i,variables:o,properties:a}),headers:{"Content-Type":"application/json",...p?{Cookie:p}:{}}})}async function s3({appKey:e,jobId:t,reason:r,internal:n,domainId:i,cookie:o}){return await nV({internal:n,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/cancel`,method:"POST",body:JSON.stringify({reason:r}),headers:{"Content-Type":"application/json",...o?{Cookie:o}:{}}})}async function s4({appKey:e,jobId:t,internal:r,domainId:n,cookie:i}){return await nV({internal:r,domainId:n,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}`,method:"GET",headers:i?{Cookie:i}:void 0})}async function s5({appKey:e,jobId:t,start:r,end:n,internal:i,domainId:o,cookie:a}){return await nV({internal:i,domainId:o,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/logs`,query:{start:r,end:n},method:"GET",headers:a?{Cookie:a}:void 0})}async function s9({appKey:e,filename:t,sha256:r,category:n,internal:i,domainId:o,cookie:a,signal:s}){return await nV({internal:i,domainId:o,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/start`,method:"POST",body:JSON.stringify({filename:t,sha256:r,category:n}),headers:{"Content-Type":"application/json",...a?{Cookie:a}:{}},signal:s})}async function s8({appKey:e,uploadToken:t,size:r,internal:n,domainId:i,cookie:o,signal:a}){return await nV({internal:n,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/finish`,method:"POST",body:JSON.stringify({upload_token:t,size:r}),headers:{"Content-Type":"application/json",...o?{Cookie:o}:{}},signal:a})}async function s6({appId:e,category:t,filePath:r,filename:n=ti.basename(r),...i}){let o=new Uint8Array(tn.readFileSync(r)),a=(0,ig.createHash)("sha256").update(o).digest("hex"),s=(await s9({appKey:e,filename:n,sha256:a,category:t,...i})).data;if(!s?.upload_url||!s.upload_token)throw Error("File upload session is incomplete");await s7({uploadUrl:s.upload_url,body:new Blob([o]),headers:s.upload_headers||{},signal:i.signal});let l=await s8({appKey:e,uploadToken:s.upload_token,size:o.byteLength,...i});if(!l.data?.stored_file_id)throw Error("File upload finish response did not return stored_file_id");return l.data}async function s7({uploadUrl:e,body:t,headers:r,signal:n}){let i=await nH(e,{method:"PUT",body:t,headers:r,signal:n}),o=i.headers.get("x-tt-logid")||"";if(!i.ok){let e=await i.text();throw Error([`File upload failed with HTTP ${i.status}`,e?`message: ${e}`:"",o?`log_id: ${o}`:""].filter(Boolean).join(", "))}}(e$=eV||(eV={}))[e$.WAITING=0]="WAITING",e$[e$.QUEUED=1]="QUEUED",e$[e$.RUNNING=2]="RUNNING",e$[e$.PENDING=3]="PENDING",e$[e$.SUCCESS=4]="SUCCESS",e$[e$.FAIL=5]="FAIL",e$[e$.CANCELED=6]="CANCELED",e$[e$.TIMEOUT=7]="TIMEOUT",e$[e$.UNKNOWN=8]="UNKNOWN",(eR=eq||(eq={}))[eR.UNKNOWN=0]="UNKNOWN",eR[eR.SOURCE=1]="SOURCE",eR[eR.ARTIFACT=2]="ARTIFACT";let le=f("../../../node_modules/.pnpm/ora@5.4.1/node_modules/ora/index.js"),lt=new Set([eV.SUCCESS,eV.FAIL,eV.CANCELED,eV.TIMEOUT]);class lr{options;cwd;appDir;internal;env;secretEnv;appInfo;constructor(e,t){this.options=e,this.cwd=t,this.appDir=ti.resolve(e.appDir||t),(0,y.loadEnv)({cwd:this.appDir,mode:e.envMode}),this.internal=((e=process.cwd())=>tp(e)===to)(this.appDir)}async start({versionTag:e,logs:t,runner:r,config:n,variables:i,properties:o}={}){this.resolveEnv(),this.resolveSecretEnv();let a=await this.upload();if(!a)throw Error("Cloud upload did not return stored_file_id");let s=await this.build({sourceRef:a,versionTag:e,runner:r,config:n,variables:i,properties:o});return t&&await this.waitForBuildJob({jobId:s}),s}async package({outputDir:e}={}){let t={appDir:this.appDir,internal:this.internal,outputDir:e?ti.resolve(this.cwd,e):void 0},r=await this.runWithSpinner("Preparing cloud build source...",e=>N({...t,onProgress:e}));if(this.logSourceDiagnostics(r),tI.success("Cloud build source archive created",{archivePath:r.archivePath}),r.blockers.length>0)throw Error(r.blockers.join("\n"));return r.archivePath}async upload({packOnly:e,outputDir:t}={}){if(e)return void await this.package({outputDir:t});let r={appDir:this.appDir,internal:this.internal},n=await this.resolveAppId("upload"),i=await this.resolveCookie(),o=await this.runWithSpinner("Preparing cloud build source...",e=>N({...r,onProgress:e}));if(this.logSourceDiagnostics(o),o.blockers.length>0)throw Error(o.blockers.join("\n"));let a=(await this.runWithSpinner("Uploading cloud build source...",()=>s6({appId:n,category:eq.SOURCE,filePath:o.archivePath,internal:this.internal,cookie:i}))).stored_file_id;if(!a)throw Error("Cloud build source upload did not return stored_file_id");return tI.success("Cloud build source uploaded",{storedFileId:a}),a}async build({sourceRef:e,versionTag:t,runner:r,config:n,variables:i,properties:o}={}){let a;if(!e)throw Error("Cloud build requires --source-ref.");let{appId:s,appConfig:l}=await this.resolveAppInfo();if(!s)throw Error("Cloud build requires appId in doubao.config.ts or src/app.config.ts.");try{a=JSON.parse(tn.readFileSync(ti.resolve(this.appDir,"package.json"),"utf-8")).version}catch{a=void 0}let p=t||l.version||a;if(!p)throw Error("Cloud build requires --version-tag or version in src/app.config.ts/package.json.");let d=await this.resolveCookie(),c=(await this.runWithSpinner("Creating cloud build job...",()=>s2({appKey:s,versionTag:p,cloudBuildSource:{type:"stored_file",ref:e},runner:r,config:n,variables:this.resolveBuildVariables(i),properties:o,internal:this.internal,cookie:d}))).data;if(!c?.job_id)throw Error("Cloud build create_job response did not return job_id");let u=eV[c.status]||String(c.status);return tI.success("Cloud build job created",{jobId:c.job_id}),tI.info("Cloud build status",{status:u}),c.job_id}async cancel({jobId:e,reason:t}){if(!e)throw Error("Cloud cancel requires job id.");let r=await this.resolveAppId("cancel"),n=await this.resolveCookie(),i=await this.runWithSpinner("Canceling cloud build job...",()=>s3({appKey:r,jobId:e,reason:t||"Canceled by doubao CLI",internal:this.internal,cookie:n})),o=i.data?.job_id;if(!o)throw Error("Cloud build cancel response did not return job_id");return tI.success("Cloud build job canceled",{jobId:o}),o}async getStatus({jobId:e}){if(!e)throw Error("Cloud status requires job id.");let t=await this.resolveAppId("build"),r=await this.resolveCookie(),n=(await s4({appKey:t,jobId:e,internal:this.internal,cookie:r})).data;if(!n)throw Error("Cloud build status response did not return data");let i=eV[n.status]||String(n.status);return tI.info("Cloud build job",{jobId:n.job_id}),tI.info("Cloud build status",{status:i}),n}async log({jobId:e,start:t,end:r}){if(!e)throw Error("Cloud log requires job id.");let n=Number(t??1),i=Number(r??n+200-1);if(!Number.isInteger(n)||!Number.isInteger(i)||n<1||i<n)throw Error("Cloud log requires a valid line range.");let o=await this.resolveAppId("log"),a=await this.resolveCookie(),s=(await s5({appKey:o,jobId:e,start:n,end:i,internal:this.internal,cookie:a})).data;if(!s)throw Error("Cloud build log response did not return data");return this.printLogLines(s.lines),tI.info("Cloud build logs fetched",{start:s.start??n,end:s.end??i,totalLineCount:s.total_line_count}),s}async waitForBuildJob({jobId:e}){let t=await this.resolveAppId("build"),r=await this.resolveCookie(),n=le("Waiting for cloud build to finish...").start(),i=!1;try{for(;;){let o=await s4({appKey:t,jobId:e,internal:this.internal,cookie:r}),a=o.data?.status,s=void 0===a?"UNKNOWN":eV[a]||String(a);if(n.text=`Cloud build status: ${s}`,void 0!==a&&lt.has(a)){if(a===eV.SUCCESS){n.succeed(`Cloud build status: ${s}`),i=!0;return}throw n.fail(`Cloud build status: ${s}`),i=!0,await this.printFailureLogs({appId:t,jobId:e,cookie:r}),Error(`Cloud build ended with status: ${s}`)}await new Promise(e=>setTimeout(e,5e3))}}catch(e){throw i||n.fail(),e}}async printFailureLogs({appId:e,jobId:t,cookie:r}){let n=1,i=0,o=!1;try{for(tI.info("Fetching cloud build failure logs");i<1e3&&n<=1e3;){let a=Math.min(n+200-1,1e3),s=(await s5({appKey:e,jobId:t,start:n,end:a,internal:this.internal,cookie:r})).data;if(!s||0===s.lines.length)break;this.printLogLines(s.lines),i+=s.lines.length;let l=s.lines.at(-1)?.line_number,p=void 0!==l&&l>=n?l+1:void 0!==s.end&&s.end>=n?s.end+1:n,d=p>n;if(!(o=s.has_more_after&&d))break;n=p}o&&tI.warn("Cloud build failure logs truncated",{limit:1e3,jobId:t})}catch(e){tI.warn("Failed to fetch cloud build failure logs",{reason:a2(e)})}}async resolveCookie(){return await sC(this.options,{internal:this.internal})}resolveBuildVariables(e){let t=new Map;for(let[e,r]of Object.entries(this.resolveEnv()))t.set(e,{name:e,value:r,env_var_name:e});for(let[e,r]of Object.entries(this.resolveSecretEnv()))t.set(e,{name:e,value:r,env_var_name:e,is_secret:!0});for(let r of e||[])t.set(r.env_var_name||r.name,r);return t.size>0?Array.from(t.values()):void 0}resolveEnv(){return this.options.env?(this.env??=ln(this.resolveAppPath(this.options.env),"Env"),this.env):{}}resolveSecretEnv(){return this.options.secretEnv?(this.secretEnv??=ln(this.resolveAppPath(this.options.secretEnv),"Secret env"),this.secretEnv):{}}resolveAppPath(e){return ti.isAbsolute(e)?e:ti.resolve(this.appDir,e)}async resolveAppId(e){let{appId:t}=await this.resolveAppInfo();if(!t)throw Error(`Cloud ${e} requires appId in doubao.config.ts or src/app.config.ts.`);return t}async resolveAppInfo(){if(this.appInfo)return this.appInfo;let e=await a7({cwd:this.appDir,customConfigFile:this.options.config}),t=await se({cwd:this.appDir})??{};return this.appInfo={appId:e.experiments?.taro?.appId?e.experiments?.taro?.appId:t.appId,appConfig:t},this.appInfo}logSourceDiagnostics(e){for(let t of e.warnings)tI.warn(t);for(let t of e.blockers)tI.error(t)}printLogLines(e){for(let t of e)console.log(t.content)}async runWithSpinner(e,t){let r=le(e).start();try{let e=await t(e=>{r.text=e});return r.succeed(),e}catch(e){throw r.fail(),e}}}function ln(e,t){if(!tn.existsSync(e))throw Error(`${t} file does not exist: ${e}`);return function(e){let t={};for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e||e.startsWith("#"))continue;let n=e.startsWith("export ")?e.slice(7).trimStart():e,i=n.indexOf("=");if(i<=0)continue;let o=n.slice(0,i).trim();/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o)&&(t[o]=function(e){let t=e[0];if(('"'===t||"'"===t)&&e.endsWith(t))return e.slice(1,-1);let r=e.indexOf(" #");return -1===r?e:e.slice(0,r).trimEnd()}(n.slice(i+1).trim()))}return t}(tn.readFileSync(e,"utf8"))}async function li(e){let t=await t$(e);if(!t)throw Error("未检测到可用的 Android 设备。");return t}function lo({compileHooks:e,output:t}){let r=new Map,n={percentage:0},i=()=>{if(0===r.size)return;let e=[...r.values()].reduce((e,t)=>t.percentage<e.percentage?t:e);(e.percentage!==n.percentage||e.stage!==n.stage)&&(n=e,t?.onProgress?.(e))},o=e=>{for(let t of(r.clear(),e))r.set(t,{percentage:0});n={percentage:0}};return[{name:"DoubaoAppsDevPlugin",setup(n){t?.printLogs===!1&&(n.logger.level="silent"),t?.progressBar!==void 0&&n.modifyRsbuildConfig(e=>((e.dev??={}).progressBar=t.progressBar,e)),t?.onProgress&&(n.modifyRspackConfig((e,{appendPlugins:t,environment:n,environments:a})=>{0===r.size&&o(Object.keys(a)),t(new y.rspack.ProgressPlugin((e,t)=>{r.set(n.name,{percentage:Math.max(0,Math.min(1,e)),...t?{stage:t}:{}}),i()}))}),n.onBeforeDevCompile(({environments:e})=>{o(Object.keys(e))})),n.onAfterCreateCompiler(({compiler:t})=>{for(let r of"compilers"in t?t.compilers:[t])r.hooks.failed.tap("DoubaoAppsDevPlugin",t=>e?.onDevCompileFailed?.(t))}),n.onAfterDevCompile(({stats:t})=>{if(r.size>0){for(let e of r.keys())r.set(e,{percentage:1,stage:"done"});i()}e?.onAfterDevCompile?.(aA(t))})}}]}class la{appDirectory;launcher;constructor(e,t=s1){this.appDirectory=e,this.launcher=new t(e)}createCloudBuildLauncher(e={}){return new lr(e,this.appDirectory||process.cwd())}async create(e){await eu(e)}async dev(e={}){let{compileHooks:t,output:r,simulator:n,...i}=e,o=n;if("object"==typeof n){let{businessTemplatesPath:e,manifestPath:t,skillsDirectory:r,targetOrigin:i,...a}=n;o={...a,simulator:{businessTemplatesPath:e,manifestPath:t,skillsDirectory:r,targetOrigin:i}}}let a=()=>this.launcher.dev({...i,...void 0!==o?{openWebDebugger:o}:{},rsbuildPlugins:lo({compileHooks:t,output:r}),signingEncryptionOptions:e.signingEncryptionOptions});return r?await eg.run(r,a):await a()}async build(e={}){process.env.NODE_ENV="production";let{compileHooks:t,...r}=e;await this.launcher.build({...r,rsbuildPlugins:lo({compileHooks:t}),signingEncryptionOptions:e.signingEncryptionOptions,versionTag:e.versionTag})}async discoverWidgets(){return Object.values(this.launcher.context.metadata.getData().widgets).filter(({id:e})=>!e6(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:r,botId:n,widgetData:i,debugDriver:o,skipAdbForegroundAppWatch:a}=e,s=await li({debugDriver:o,deviceId:r,skipAdbForegroundAppWatch:a}),l=this.launcher.context.metadata.appId;s.pushWidget({appId:l,widgetId:t,widgetData:i,botId:n})}async openPage(e){let{pageId:t,pageData:r,pageSettings:n,mode:i,debugDriver:o,deviceId:a,skipAdbForegroundAppWatch:s}=e,l=await li({debugDriver:o,deviceId:a,skipAdbForegroundAppWatch:s}),p=this.launcher.context.metadata.appId;l.openPage({appId:p,pageId:t,pageData:r,pageSettings:n,mode:i})}async callTool(e){let{toolId:t,toolData:r,debugDriver:n,deviceId:i,skipAdbForegroundAppWatch:o}=e,a=await li({debugDriver:n,deviceId:i,skipAdbForegroundAppWatch:o}),s=this.launcher.context.metadata.appId;a.callTool({appId:s,toolId:t,toolData:r})}async executeDebugScene(e){let{matchedScene:t,variables:r,deviceId:n,debugDriver:i,skipAdbForegroundAppWatch:o}=e,a=this.launcher.context.metadata.appId,s=await li({debugDriver:i,deviceId:n,skipAdbForegroundAppWatch:o});await tM({matchedScene:t,appId:a,driver:s,variables:r})}async getDebugScenes(){let e=await tN(this.appDirectory||process.cwd());return await Promise.all(e.map(async e=>({...e,content:await tL(e.path)})))}async cloud(e={}){let{versionTag:t,logs:r,runner:n,createJobConfig:i,variables:o,properties:a,...s}=e;return await this.createCloudBuildLauncher(s).start({versionTag:t,logs:r,runner:n,config:i,variables:o,properties:a})}async cloudUpload(e={}){let{packOnly:t,outputDir:r,...n}=e;return await this.createCloudBuildLauncher(n).upload({packOnly:t,outputDir:r})}async cloudPackage(e={}){let{outputDir:t,...r}=e;return await this.createCloudBuildLauncher(r).package({outputDir:t})}async cloudBuild(e){let{sourceRef:t,versionTag:r,runner:n,createJobConfig:i,variables:o,properties:a,...s}=e;return await this.createCloudBuildLauncher(s).build({sourceRef:t,versionTag:r,runner:n,config:i,variables:o,properties:a})}async cloudCancel(e){let{jobId:t,reason:r,...n}=e;return await this.createCloudBuildLauncher(n).cancel({jobId:t,reason:r})}async cloudGetStatus(e){let{jobId:t,...r}=e;return await this.createCloudBuildLauncher(r).getStatus({jobId:t})}async cloudLog(e){let{jobId:t,start:r,end:n,...i}=e;return await this.createCloudBuildLauncher(i).log({jobId:t,start:r,end:n})}async deploy(e){let{versionTag:t,cookie:r,token:n,appKey:i,signingEncryptionOptions:o}=e;if(!r&&!n)throw Error("Doubao Apps SDK 部署需要 Cookie 或 Developer Open Build Token。");process.env.NODE_ENV="production",await this.launcher.build({skipCleanupRootPath:!0,cookie:r,signingEncryptionOptions:o,token:n,versionTag:t});let{manifest:a}=this.launcher.context;try{return await sG({versionTag:this.launcher.context.versionTag,...i?{appKey:i}:{},manifest:a,rootPath:this.launcher.rootPath,internal:e.internal??this.launcher.context.internal,cookie:r,token:n})}finally{tu()||tn.rmSync(this.launcher.rootPath,{recursive:!0,force:!0})}}}export{la as DoubaoAppsSDK,a2 as error_getErrorMessage};
330
+ `)}(a,n,e,t,o)),{entry:r}}),i.worker.hooks.collectMetaData.tapPromise(rd,async({collector:n})=>{n.addAppMeta({name:e,appId:t,icons:r})}),i.view.hooks.collectMetaData.tapPromise({name:rd,stage:i.view.COLLECT_METADATA_STAGE_OPTIMIZE},async({collector:e})=>{let{pages:t,widgets:r}=i.context;Object.entries(t).forEach(([t,r])=>{let{folderName:n}=r;e.addPageMeta(t,{id:rt(t,n),path:rr(t)})}),Object.entries(r).forEach(([t,r])=>{let i,{folderName:o}=r;e.addWidgetMeta(t,(i=rt(t,o),{...n?.[o]??n?.[t]??n?.[i]??{},id:i}))})})}}}(i.experiments.taro)]:[],...i.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 a4({options:i,commandType:e,context:this.context,rsbuildPlugins:r},this.pluginSystem);return{userConfig:i,builder:S}}catch(t){throw aR.report({appDirectory:this.appDirectory,context:this.context===n?void 0:this.context,scene:e===eU.DEV?"dev_initial":e,status:"failed",errorStage:"prepare",error:t}),t}}async dev(e){let t,r,{builder:n}=await this.prepare(eU.DEV,e,e.rsbuildPlugins);this.context.manifestSettings=function({cwd:e=process.cwd()}={}){let t=eX.resolve(e,a6);if(t9.existsSync(t))try{let e=JSON.parse(t9.readFileSync(t,"utf-8"));if(!el(e))throw TypeError("Development config must be a JSON object");return e}catch(e){tC.warn("Failed to load development config file; ignoring it",{path:t,reason:a9(e)});return}}({cwd:this.appDirectory});let i=await n.startDevServer(),o=this.context.webDebuggerLaunchOptions;try{let e=await this.context.resolveDevServer(i.port);t=e.host,r=o?await ao(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 i.server.close(),e}let a=async()=>{tD.info("Shutting down...");try{await r?.close(),await i.server.close()}finally{await aR.flush()}tD.info("dev server closed")};return{host:t,devServerReady:!0,...r?{webDebugger:r}:{},closeServer:a}}async build(e){let{builder:t}=await this.prepare(eU.BUILD,e,e.rsbuildPlugins);try{await t.build(),this.copyWebAssetsToRoot()}finally{if(e.skipCleanupRootPath||tm()){if(e.archive&&e.channel){let{channel:t}=e;await t7({channelName:t,manifest:this.context.manifest,rootPath:this.rootPath})}}else to.rmSync(this.rootPath,{recursive:!0,force:!0})}}async analyze(e){let{builder:t}=await this.prepare(eU.ANALYZE,e);await t.build()}async perf(e){let{builder:t}=await this.prepare(eU.PERF,e);await t.build()}async deploy(e){let{builder:t}=await this.prepare(eU.DEPLOY,e),r=e.deployType||re.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(r!==re.NORMAL)return void tk.error("Please use deploy plugin in doubao.config.ts");let n=e.token?void 0:await this.context.getLoginCookie();if(!e.token&&!n)throw Error("Doubao Apps Platform 部署需要登录,请运行 `doubao login` 后重试。");return await t.build(),this.copyWebAssetsToRoot(),await sZ({...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,...n?{cookie:n}:{},...e.token?{token:e.token}:{}})}(e.build||r===re.NORMAL)&&(await t.build(),this.copyWebAssetsToRoot());try{await this.pluginSystem.callDeployHooks("deploy",{deployType:r})}finally{await this.pluginSystem.callDeployHooks("afterDeploy",{})}}async run(e,t){switch(e){case t4.DEV:return await this.dev(t);case t4.BUILD:return await this.build(t);case t4.ANALYZE:return await this.analyze(t);case t4.PERF:return await this.perf(t);case t4.DEPLOY:return await this.deploy(t)}}async getUserConfig(e){if(!this._userConfig){let t=(0,y.loadEnv)({cwd:this.appDirectory,mode:e.envMode}),r=await sr({cwd:this.appDirectory,customConfigFile:e.config});this._env=t.parsed,r.source||={},r.source.define={...t.publicVars,...r.source.define},e.debugDriver&&(r.debugDriver=e.debugDriver),void 0!==e.skipAdbForegroundAppWatch&&(r.skipAdbForegroundAppWatch=e.skipAdbForegroundAppWatch),this._userConfig=r}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=ta.resolve(this.appDirectory,"dist");for(let r of e){let e=ta.resolve(t,r);if(e!==t&&!e.startsWith(`${t}${ta.sep}`))throw Error(`Web artifact path escapes the Web output root: ${r}`);if(!to.existsSync(e))throw Error(`Web artifact is missing after build: ${e}`);let n=ta.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`,r);to.mkdirSync(ta.dirname(n),{recursive:!0}),to.copyFileSync(e,n)}let r=ta.resolve(this.rootPath,`web_${this.context.manifest.versionCode}`),n=ta.resolve(r,"base","manifest.json");to.mkdirSync(ta.dirname(n),{recursive:!0}),to.writeFileSync(n,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 so({cwd:this.appDirectory}),this._appConfigLoaded=!0,this._appConfig;this._appConfig=await sn({cwd:this.appDirectory}),this._appConfigLoaded=!0}return this._appConfig}async analyzeConvention(e,t){let{pages:r,widgets:n,auth:i}=await sm(e,t),{app:o,tools:a}=await sh(e,t.tools);return{pages:r,widgets:n,auth:i,app:o,tools:a}}}async function le({appKey:e,versionTag:t,cloudBuildSource:r,runner:n,config:i,variables:o,properties:a,internal:s,domainId:l,cookie:d}){return await nq({internal:s,domainId:l,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/versions/${encodeURIComponent(t)}/cloud_build/create_job`,method:"POST",body:JSON.stringify({cloud_build_source:r,runner:n,config:i,variables:o,properties:a}),headers:{"Content-Type":"application/json",...d?{Cookie:d}:{}}})}async function lt({appKey:e,jobId:t,reason:r,internal:n,domainId:i,cookie:o}){return await nq({internal:n,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/cancel`,method:"POST",body:JSON.stringify({reason:r}),headers:{"Content-Type":"application/json",...o?{Cookie:o}:{}}})}async function lr({appKey:e,jobId:t,internal:r,domainId:n,cookie:i}){return await nq({internal:r,domainId:n,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}`,method:"GET",headers:i?{Cookie:i}:void 0})}async function ln({appKey:e,jobId:t,start:r,end:n,internal:i,domainId:o,cookie:a}){return await nq({internal:i,domainId:o,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/jobs/${encodeURIComponent(t)}/logs`,query:{start:r,end:n},method:"GET",headers:a?{Cookie:a}:void 0})}async function li({appKey:e,filename:t,sha256:r,category:n,internal:i,domainId:o,cookie:a,signal:s}){return await nq({internal:i,domainId:o,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/start`,method:"POST",body:JSON.stringify({filename:t,sha256:r,category:n}),headers:{"Content-Type":"application/json",...a?{Cookie:a}:{}},signal:s})}async function lo({appKey:e,uploadToken:t,size:r,internal:n,domainId:i,cookie:o,signal:a}){return await nq({internal:n,domainId:i,path:`/developer/resource_api/apps/${encodeURIComponent(e)}/cloud_build/file_upload/finish`,method:"POST",body:JSON.stringify({upload_token:t,size:r}),headers:{"Content-Type":"application/json",...o?{Cookie:o}:{}},signal:a})}async function la({appId:e,category:t,filePath:r,filename:n=ta.basename(r),...i}){let o=new Uint8Array(to.readFileSync(r)),a=(0,ib.createHash)("sha256").update(o).digest("hex"),s=(await li({appKey:e,filename:n,sha256:a,category:t,...i})).data;if(!s?.upload_url||!s.upload_token)throw Error("File upload session is incomplete");await ls({uploadUrl:s.upload_url,body:new Blob([o]),headers:s.upload_headers||{},signal:i.signal});let l=await lo({appKey:e,uploadToken:s.upload_token,size:o.byteLength,...i});if(!l.data?.stored_file_id)throw Error("File upload finish response did not return stored_file_id");return l.data}async function ls({uploadUrl:e,body:t,headers:r,signal:n}){let i=await nV(e,{method:"PUT",body:t,headers:r,signal:n}),o=i.headers.get("x-tt-logid")||"";if(!i.ok){let e=await i.text();throw Error([`File upload failed with HTTP ${i.status}`,e?`message: ${e}`:"",o?`log_id: ${o}`:""].filter(Boolean).join(", "))}}(eN=eJ||(eJ={}))[eN.WAITING=0]="WAITING",eN[eN.QUEUED=1]="QUEUED",eN[eN.RUNNING=2]="RUNNING",eN[eN.PENDING=3]="PENDING",eN[eN.SUCCESS=4]="SUCCESS",eN[eN.FAIL=5]="FAIL",eN[eN.CANCELED=6]="CANCELED",eN[eN.TIMEOUT=7]="TIMEOUT",eN[eN.UNKNOWN=8]="UNKNOWN",(eL=eK||(eK={}))[eL.UNKNOWN=0]="UNKNOWN",eL[eL.SOURCE=1]="SOURCE",eL[eL.ARTIFACT=2]="ARTIFACT";let ll=f("../../../node_modules/.pnpm/ora@5.4.1/node_modules/ora/index.js"),ld=new Set([eJ.SUCCESS,eJ.FAIL,eJ.CANCELED,eJ.TIMEOUT]);class lp{options;cwd;appDir;internal;env;secretEnv;appInfo;constructor(e,t){this.options=e,this.cwd=t,this.appDir=ta.resolve(e.appDir||t),(0,y.loadEnv)({cwd:this.appDir,mode:e.envMode}),this.internal=((e=process.cwd())=>tc(e)===ts)(this.appDir)}async start({versionTag:e,logs:t,runner:r,config:n,variables:i,properties:o}={}){this.resolveEnv(),this.resolveSecretEnv();let a=await this.upload();if(!a)throw Error("Cloud upload did not return stored_file_id");let s=await this.build({sourceRef:a,versionTag:e,runner:r,config:n,variables:i,properties:o});return t&&await this.waitForBuildJob({jobId:s}),s}async package({outputDir:e}={}){let t={appDir:this.appDir,internal:this.internal,outputDir:e?ta.resolve(this.cwd,e):void 0},r=await this.runWithSpinner("Preparing cloud build source...",e=>ee({...t,onProgress:e}));if(this.logSourceDiagnostics(r),tP.success("Cloud build source archive created",{archivePath:r.archivePath}),r.blockers.length>0)throw Error(r.blockers.join("\n"));return r.archivePath}async upload({packOnly:e,outputDir:t}={}){if(e)return void await this.package({outputDir:t});let r={appDir:this.appDir,internal:this.internal},n=await this.resolveAppId("upload"),i=await this.resolveCookie(),o=await this.runWithSpinner("Preparing cloud build source...",e=>ee({...r,onProgress:e}));if(this.logSourceDiagnostics(o),o.blockers.length>0)throw Error(o.blockers.join("\n"));let a=(await this.runWithSpinner("Uploading cloud build source...",()=>la({appId:n,category:eK.SOURCE,filePath:o.archivePath,internal:this.internal,cookie:i}))).stored_file_id;if(!a)throw Error("Cloud build source upload did not return stored_file_id");return tP.success("Cloud build source uploaded",{storedFileId:a}),a}async build({sourceRef:e,versionTag:t,runner:r,config:n,variables:i,properties:o}={}){let a;if(!e)throw Error("Cloud build requires --source-ref.");let{appId:s,appConfig:l}=await this.resolveAppInfo();if(!s)throw Error("Cloud build requires appId in doubao.config.ts or src/app.config.ts.");try{a=JSON.parse(to.readFileSync(ta.resolve(this.appDir,"package.json"),"utf-8")).version}catch{a=void 0}let d=t||l.version||a;if(!d)throw Error("Cloud build requires --version-tag or version in src/app.config.ts/package.json.");let p=await this.resolveCookie(),c=(await this.runWithSpinner("Creating cloud build job...",()=>le({appKey:s,versionTag:d,cloudBuildSource:{type:"stored_file",ref:e},runner:r,config:n,variables:this.resolveBuildVariables(i),properties:o,internal:this.internal,cookie:p}))).data;if(!c?.job_id)throw Error("Cloud build create_job response did not return job_id");let u=eJ[c.status]||String(c.status);return tP.success("Cloud build job created",{jobId:c.job_id}),tP.info("Cloud build status",{status:u}),c.job_id}async cancel({jobId:e,reason:t}){if(!e)throw Error("Cloud cancel requires job id.");let r=await this.resolveAppId("cancel"),n=await this.resolveCookie(),i=await this.runWithSpinner("Canceling cloud build job...",()=>lt({appKey:r,jobId:e,reason:t||"Canceled by doubao CLI",internal:this.internal,cookie:n})),o=i.data?.job_id;if(!o)throw Error("Cloud build cancel response did not return job_id");return tP.success("Cloud build job canceled",{jobId:o}),o}async getStatus({jobId:e}){if(!e)throw Error("Cloud status requires job id.");let t=await this.resolveAppId("build"),r=await this.resolveCookie(),n=(await lr({appKey:t,jobId:e,internal:this.internal,cookie:r})).data;if(!n)throw Error("Cloud build status response did not return data");let i=eJ[n.status]||String(n.status);return tP.info("Cloud build job",{jobId:n.job_id}),tP.info("Cloud build status",{status:i}),n}async log({jobId:e,start:t,end:r}){if(!e)throw Error("Cloud log requires job id.");let n=Number(t??1),i=Number(r??n+200-1);if(!Number.isInteger(n)||!Number.isInteger(i)||n<1||i<n)throw Error("Cloud log requires a valid line range.");let o=await this.resolveAppId("log"),a=await this.resolveCookie(),s=(await ln({appKey:o,jobId:e,start:n,end:i,internal:this.internal,cookie:a})).data;if(!s)throw Error("Cloud build log response did not return data");return this.printLogLines(s.lines),tP.info("Cloud build logs fetched",{start:s.start??n,end:s.end??i,totalLineCount:s.total_line_count}),s}async waitForBuildJob({jobId:e}){let t=await this.resolveAppId("build"),r=await this.resolveCookie(),n=ll("Waiting for cloud build to finish...").start(),i=!1;try{for(;;){let o=await lr({appKey:t,jobId:e,internal:this.internal,cookie:r}),a=o.data?.status,s=void 0===a?"UNKNOWN":eJ[a]||String(a);if(n.text=`Cloud build status: ${s}`,void 0!==a&&ld.has(a)){if(a===eJ.SUCCESS){n.succeed(`Cloud build status: ${s}`),i=!0;return}throw n.fail(`Cloud build status: ${s}`),i=!0,await this.printFailureLogs({appId:t,jobId:e,cookie:r}),Error(`Cloud build ended with status: ${s}`)}await new Promise(e=>setTimeout(e,5e3))}}catch(e){throw i||n.fail(),e}}async printFailureLogs({appId:e,jobId:t,cookie:r}){let n=1,i=0,o=!1;try{for(tP.info("Fetching cloud build failure logs");i<1e3&&n<=1e3;){let a=Math.min(n+200-1,1e3),s=(await ln({appKey:e,jobId:t,start:n,end:a,internal:this.internal,cookie:r})).data;if(!s||0===s.lines.length)break;this.printLogLines(s.lines),i+=s.lines.length;let l=s.lines.at(-1)?.line_number,d=void 0!==l&&l>=n?l+1:void 0!==s.end&&s.end>=n?s.end+1:n,p=d>n;if(!(o=s.has_more_after&&p))break;n=d}o&&tP.warn("Cloud build failure logs truncated",{limit:1e3,jobId:t})}catch(e){tP.warn("Failed to fetch cloud build failure logs",{reason:a9(e)})}}async resolveCookie(){return await sP(this.options,{internal:this.internal})}resolveBuildVariables(e){let t=new Map;for(let[e,r]of Object.entries(this.resolveEnv()))t.set(e,{name:e,value:r,env_var_name:e});for(let[e,r]of Object.entries(this.resolveSecretEnv()))t.set(e,{name:e,value:r,env_var_name:e,is_secret:!0});for(let r of e||[])t.set(r.env_var_name||r.name,r);return t.size>0?Array.from(t.values()):void 0}resolveEnv(){return this.options.env?(this.env??=lc(this.resolveAppPath(this.options.env),"Env"),this.env):{}}resolveSecretEnv(){return this.options.secretEnv?(this.secretEnv??=lc(this.resolveAppPath(this.options.secretEnv),"Secret env"),this.secretEnv):{}}resolveAppPath(e){return ta.isAbsolute(e)?e:ta.resolve(this.appDir,e)}async resolveAppId(e){let{appId:t}=await this.resolveAppInfo();if(!t)throw Error(`Cloud ${e} requires appId in doubao.config.ts or src/app.config.ts.`);return t}async resolveAppInfo(){if(this.appInfo)return this.appInfo;let e=await sr({cwd:this.appDir,customConfigFile:this.options.config}),t=await sn({cwd:this.appDir})??{};return this.appInfo={appId:e.experiments?.taro?.appId?e.experiments?.taro?.appId:t.appId,appConfig:t},this.appInfo}logSourceDiagnostics(e){for(let t of e.warnings)tP.warn(t);for(let t of e.blockers)tP.error(t)}printLogLines(e){for(let t of e)console.log(t.content)}async runWithSpinner(e,t){let r=ll(e).start();try{let e=await t(e=>{r.text=e});return r.succeed(),e}catch(e){throw r.fail(),e}}}function lc(e,t){if(!to.existsSync(e))throw Error(`${t} file does not exist: ${e}`);return function(e){let t={};for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e||e.startsWith("#"))continue;let n=e.startsWith("export ")?e.slice(7).trimStart():e,i=n.indexOf("=");if(i<=0)continue;let o=n.slice(0,i).trim();/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o)&&(t[o]=function(e){let t=e[0];if(('"'===t||"'"===t)&&e.endsWith(t))return e.slice(1,-1);let r=e.indexOf(" #");return -1===r?e:e.slice(0,r).trimEnd()}(n.slice(i+1).trim()))}return t}(to.readFileSync(e,"utf8"))}async function lu(e){let t=await tN(e);if(!t)throw Error("未检测到可用的 Android 设备。");return t}function lh({compileHooks:e,output:t}){let r=new Map,n={percentage:0},i=()=>{if(0===r.size)return;let e=[...r.values()].reduce((e,t)=>t.percentage<e.percentage?t:e);(e.percentage!==n.percentage||e.stage!==n.stage)&&(n=e,t?.onProgress?.(e))},o=e=>{for(let t of(r.clear(),e))r.set(t,{percentage:0});n={percentage:0}};return[{name:"DoubaoAppsDevPlugin",setup(n){t?.printLogs===!1&&(n.logger.level="silent"),t?.progressBar!==void 0&&n.modifyRsbuildConfig(e=>((e.dev??={}).progressBar=t.progressBar,e)),t?.onProgress&&(n.modifyRspackConfig((e,{appendPlugins:t,environment:n,environments:a})=>{0===r.size&&o(Object.keys(a)),t(new y.rspack.ProgressPlugin((e,t)=>{r.set(n.name,{percentage:Math.max(0,Math.min(1,e)),...t?{stage:t}:{}}),i()}))}),n.onBeforeDevCompile(({environments:e})=>{o(Object.keys(e))})),n.onAfterCreateCompiler(({compiler:t})=>{for(let r of"compilers"in t?t.compilers:[t])r.hooks.failed.tap("DoubaoAppsDevPlugin",t=>e?.onDevCompileFailed?.(t))}),n.onAfterDevCompile(({stats:t})=>{if(r.size>0){for(let e of r.keys())r.set(e,{percentage:1,stage:"done"});i()}e?.onAfterDevCompile?.(aI(t))})}}]}class lm{appDirectory;launcher;constructor(e,t=s6){this.appDirectory=e,this.launcher=new t(e)}createCloudBuildLauncher(e={}){return new lp(e,this.appDirectory||process.cwd())}async create(e){await em(e)}async dev(e={}){let{compileHooks:t,output:r,simulator:n,...i}=e,o=n;if("object"==typeof n){let{businessTemplatesPath:e,manifestPath:t,skillsDirectory:r,targetOrigin:i,...a}=n;o={...a,simulator:{businessTemplatesPath:e,manifestPath:t,skillsDirectory:r,targetOrigin:i}}}let a=()=>this.launcher.dev({...i,...void 0!==o?{openWebDebugger:o}:{},rsbuildPlugins:lh({compileHooks:t,output:r}),signingEncryptionOptions:e.signingEncryptionOptions});return r?await eb.run(r,a):await a()}async build(e={}){process.env.NODE_ENV="production";let{compileHooks:t,...r}=e;await this.launcher.build({...r,rsbuildPlugins:lh({compileHooks:t}),signingEncryptionOptions:e.signingEncryptionOptions,versionTag:e.versionTag})}async discoverWidgets(){return Object.values(this.launcher.context.metadata.getData().widgets).filter(({id:e})=>!te(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:r,botId:n,widgetData:i,debugDriver:o,skipAdbForegroundAppWatch:a}=e,s=await lu({debugDriver:o,deviceId:r,skipAdbForegroundAppWatch:a}),l=this.launcher.context.metadata.appId;s.pushWidget({appId:l,widgetId:t,widgetData:i,botId:n})}async openPage(e){let{pageId:t,pageData:r,pageSettings:n,mode:i,debugDriver:o,deviceId:a,skipAdbForegroundAppWatch:s}=e,l=await lu({debugDriver:o,deviceId:a,skipAdbForegroundAppWatch:s}),d=this.launcher.context.metadata.appId;l.openPage({appId:d,pageId:t,pageData:r,pageSettings:n,mode:i})}async callTool(e){let{toolId:t,toolData:r,debugDriver:n,deviceId:i,skipAdbForegroundAppWatch:o}=e,a=await lu({debugDriver:n,deviceId:i,skipAdbForegroundAppWatch:o}),s=this.launcher.context.metadata.appId;a.callTool({appId:s,toolId:t,toolData:r})}async executeDebugScene(e){let{matchedScene:t,variables:r,deviceId:n,debugDriver:i,skipAdbForegroundAppWatch:o}=e,a=this.launcher.context.metadata.appId,s=await lu({debugDriver:i,deviceId:n,skipAdbForegroundAppWatch:o});await tU({matchedScene:t,appId:a,driver:s,variables:r})}async getDebugScenes(){let e=await tM(this.appDirectory||process.cwd());return await Promise.all(e.map(async e=>({...e,content:await tj(e.path)})))}async cloud(e={}){let{versionTag:t,logs:r,runner:n,createJobConfig:i,variables:o,properties:a,...s}=e;return await this.createCloudBuildLauncher(s).start({versionTag:t,logs:r,runner:n,config:i,variables:o,properties:a})}async cloudUpload(e={}){let{packOnly:t,outputDir:r,...n}=e;return await this.createCloudBuildLauncher(n).upload({packOnly:t,outputDir:r})}async cloudPackage(e={}){let{outputDir:t,...r}=e;return await this.createCloudBuildLauncher(r).package({outputDir:t})}async cloudBuild(e){let{sourceRef:t,versionTag:r,runner:n,createJobConfig:i,variables:o,properties:a,...s}=e;return await this.createCloudBuildLauncher(s).build({sourceRef:t,versionTag:r,runner:n,config:i,variables:o,properties:a})}async cloudCancel(e){let{jobId:t,reason:r,...n}=e;return await this.createCloudBuildLauncher(n).cancel({jobId:t,reason:r})}async cloudGetStatus(e){let{jobId:t,...r}=e;return await this.createCloudBuildLauncher(r).getStatus({jobId:t})}async cloudLog(e){let{jobId:t,start:r,end:n,...i}=e;return await this.createCloudBuildLauncher(i).log({jobId:t,start:r,end:n})}async deploy(e){let{versionTag:t,cookie:r,token:n,appKey:i,signingEncryptionOptions:o}=e;if(!r&&!n)throw Error("Doubao Apps SDK 部署需要 Cookie 或 Developer Open Build Token。");process.env.NODE_ENV="production",await this.launcher.build({skipCleanupRootPath:!0,cookie:r,signingEncryptionOptions:o,token:n,versionTag:t});let{manifest:a}=this.launcher.context;try{return await sZ({versionTag:this.launcher.context.versionTag,...i?{appKey:i}:{},manifest:a,rootPath:this.launcher.rootPath,internal:e.internal??this.launcher.context.internal,cookie:r,token:n})}finally{tm()||to.rmSync(this.launcher.rootPath,{recursive:!0,force:!0})}}}export{lm as DoubaoAppsSDK,a9 as error_getErrorMessage};