@qwen-code/qwen-code 0.19.3-nightly.20260701.a974594d7 → 0.19.4

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 (234) hide show
  1. package/bundled/loop/loop-tick-resolver.test.ts +42 -0
  2. package/bundled/loop/loop-tick-resolver.ts +1 -1
  3. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  4. package/bundled/qc-helper/docs/configuration/settings.md +23 -11
  5. package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
  6. package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
  7. package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
  8. package/bundled/qc-helper/docs/features/code-review.md +17 -61
  9. package/bundled/qc-helper/docs/features/commands.md +6 -6
  10. package/bundled/qc-helper/docs/features/mcp.md +3 -1
  11. package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
  12. package/bundled/qc-helper/docs/qwen-serve.md +19 -0
  13. package/bundled/review/DESIGN.md +21 -26
  14. package/bundled/review/SKILL.md +45 -129
  15. package/chunks/{MaxSizedBox-UZHJ73JB.js → MaxSizedBox-ERTNFI22.js} +20 -18
  16. package/chunks/{StandaloneSessionPicker-GGUIZWCE.js → StandaloneSessionPicker-Y5NGRLRY.js} +32 -29
  17. package/chunks/{acpAgent-QYZFICEZ.js → acpAgent-UMN6OYTR.js} +473 -187
  18. package/chunks/{agent-2EN7YNSW.js → agent-56DZU4ZU.js} +17 -15
  19. package/chunks/{agent-headless-SLTEZ5LV.js → agent-headless-SR7N2IJG.js} +17 -15
  20. package/chunks/{anthropicContentGenerator-CA3JTAMO.js → anthropicContentGenerator-5OZFO6WQ.js} +1 -1
  21. package/chunks/{artifact-tool-RM7WINJO.js → artifact-tool-JVZMHA4B.js} +1 -1
  22. package/chunks/{askUserQuestion-J3P6QAJ7.js → askUserQuestion-CMJZ2F3D.js} +1 -1
  23. package/chunks/{bridge-HZVAUTMX.js → bridge-AUHNFOUS.js} +23 -21
  24. package/chunks/channel-worker-supervisor-A74FV522.js +308 -0
  25. package/chunks/{chunk-N4V4VBP6.js → chunk-2X2JUE47.js} +2 -2
  26. package/chunks/{chunk-JV7A66DR.js → chunk-4VZH35PN.js} +528 -358
  27. package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
  28. package/chunks/{chunk-WGY3GIPP.js → chunk-6AQR7732.js} +1 -1
  29. package/chunks/{chunk-FR3II765.js → chunk-6CIIP6OE.js} +4 -4
  30. package/chunks/{chunk-IKO44NAT.js → chunk-6TLY5W3B.js} +2 -2
  31. package/chunks/{chunk-VN4CKYUW.js → chunk-73H73ASU.js} +1 -1
  32. package/chunks/{chunk-IBEM64M4.js → chunk-75X2VLSH.js} +36 -25
  33. package/chunks/{chunk-PLQTLKMR.js → chunk-7KPI4LAI.js} +3 -3
  34. package/chunks/{chunk-NVTRORSK.js → chunk-7VPC7D7O.js} +2 -2
  35. package/chunks/chunk-AHNXYU4O.js +24 -0
  36. package/chunks/{chunk-MTJVHQDP.js → chunk-B7KGXIPZ.js} +302 -257
  37. package/chunks/{chunk-35FH347N.js → chunk-BFG6OZN7.js} +16097 -16236
  38. package/chunks/{chunk-T44AF4I6.js → chunk-BNJLLAQ7.js} +1 -1
  39. package/chunks/{chunk-OEY3YAL2.js → chunk-BQNJBEUA.js} +2 -2
  40. package/chunks/{chunk-Q7TDHJ2G.js → chunk-C2IHHGBZ.js} +10 -10
  41. package/chunks/chunk-CG7SVARK.js +367 -0
  42. package/chunks/{chunk-7SP275SH.js → chunk-CS5XYDBO.js} +5 -5
  43. package/chunks/{chunk-V5YJAUHW.js → chunk-CUGEBAKG.js} +1 -1
  44. package/chunks/{chunk-FQDMX5IL.js → chunk-D5KISTLW.js} +309 -72
  45. package/chunks/{chunk-I4MXURND.js → chunk-DQ74W65K.js} +356 -468
  46. package/chunks/chunk-E5A7LHNN.js +51 -0
  47. package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
  48. package/chunks/chunk-EDAGQADF.js +21 -0
  49. package/chunks/{chunk-HUGAEYZR.js → chunk-FNLXLI4I.js} +2 -2
  50. package/chunks/{chunk-WJAY4WXR.js → chunk-FYKX6XOT.js} +1 -1
  51. package/chunks/{chunk-CA4ML3VH.js → chunk-G7OQ3RFJ.js} +1 -1
  52. package/chunks/{chunk-VHRREANT.js → chunk-GICCHL2Q.js} +3 -1
  53. package/chunks/{chunk-QHHNFG22.js → chunk-GLPV75ES.js} +1 -1
  54. package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
  55. package/chunks/chunk-HI55Z6PR.js +3523 -0
  56. package/chunks/{chunk-B5MPZI4K.js → chunk-HJDF3ZVU.js} +2670 -1233
  57. package/chunks/{chunk-GDIG7TMG.js → chunk-HRZB5CSC.js} +1 -1
  58. package/chunks/{chunk-LDWTYE33.js → chunk-J3F7X3LW.js} +1 -1
  59. package/chunks/{chunk-FV4SQ54H.js → chunk-KVPFPC4J.js} +227 -85
  60. package/chunks/{chunk-Q3JOGB4U.js → chunk-L7QPM2YD.js} +1 -1
  61. package/chunks/{chunk-4722VFFU.js → chunk-L7VH7HQA.js} +6 -6
  62. package/chunks/{chunk-HWG4XLD7.js → chunk-LKWAVAB5.js} +1 -1
  63. package/chunks/{chunk-YCRTJYSQ.js → chunk-MEQWZGK5.js} +1 -1
  64. package/chunks/{chunk-6FIWYVN4.js → chunk-MKHC4BYZ.js} +30 -5
  65. package/chunks/{chunk-YCEHOJZJ.js → chunk-MNDTD5E5.js} +65 -38
  66. package/chunks/{chunk-ZGSV5ORL.js → chunk-MVZXZWGT.js} +809 -759
  67. package/chunks/chunk-MX2YXRER.js +44 -0
  68. package/chunks/{chunk-TMILTLP3.js → chunk-ND25GXEU.js} +21 -4
  69. package/chunks/{chunk-AIBPG5MB.js → chunk-OAFUMTWW.js} +2 -2
  70. package/chunks/chunk-OJCECIJA.js +238 -0
  71. package/chunks/{chunk-EUURTJY7.js → chunk-PIYV6COW.js} +1 -1
  72. package/chunks/{chunk-LXEW6BHF.js → chunk-Q7VHIRDD.js} +1 -1
  73. package/chunks/{chunk-DBR7PF4B.js → chunk-QAFQLTXG.js} +1 -1
  74. package/chunks/{chunk-3TK7FSCP.js → chunk-QMIND2AS.js} +3 -3
  75. package/chunks/{chunk-ESVSWG6Z.js → chunk-QOMAHFYI.js} +1 -1
  76. package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
  77. package/chunks/chunk-RM3PGSGL.js +66 -0
  78. package/chunks/chunk-RNBYOUGV.js +42 -0
  79. package/chunks/chunk-S5EQPDTM.js +91 -0
  80. package/chunks/{chunk-GZKQ36JS.js → chunk-SFN4TEHY.js} +4 -4
  81. package/chunks/{chunk-DHXWNSJA.js → chunk-T22H4V4R.js} +42 -0
  82. package/chunks/{chunk-LXGWLOCM.js → chunk-TENOUWY2.js} +1 -1
  83. package/chunks/{chunk-BLAE2TCO.js → chunk-TTFNVEO5.js} +3 -3
  84. package/chunks/{chunk-FZY7NH37.js → chunk-UANCYOOQ.js} +1 -1
  85. package/chunks/{chunk-E5I6YSNO.js → chunk-UQFP2FEF.js} +1 -1
  86. package/chunks/{chunk-3O2BJMFW.js → chunk-UQYOMM6J.js} +4 -4
  87. package/chunks/{chunk-JERW36RG.js → chunk-UT5JU5DJ.js} +15 -15
  88. package/chunks/{chunk-DJ25MIU2.js → chunk-VKGG724L.js} +8 -8
  89. package/chunks/{chunk-G525INVW.js → chunk-W2ZOAX7F.js} +3 -3
  90. package/chunks/{chunk-HIYUAXBG.js → chunk-W6X4FGWX.js} +1 -1
  91. package/chunks/{chunk-OE5J6UA7.js → chunk-XCUFHOAD.js} +1 -1
  92. package/chunks/{chunk-KXVVXAAC.js → chunk-YBDZ63KI.js} +3 -3
  93. package/chunks/{chunk-Z34RYLRO.js → chunk-ZJP5T7IA.js} +1 -1
  94. package/chunks/{chunk-NOYV2NXI.js → chunk-ZXCVPMIK.js} +411 -43
  95. package/chunks/{computer-use-FCNWHVPW.js → computer-use-VWN5HH6A.js} +20 -18
  96. package/chunks/{contextCommand-FVFMZZEU.js → contextCommand-DFFG5KDJ.js} +19 -17
  97. package/chunks/{cron-create-IY5NMIHQ.js → cron-create-CSSWJ67I.js} +1 -1
  98. package/chunks/{cron-delete-OLNEQWKO.js → cron-delete-E56CFQ7A.js} +1 -1
  99. package/chunks/{cron-list-YAUAUV24.js → cron-list-BKSINY6Y.js} +1 -1
  100. package/chunks/daemon-5T6IHWJV.js +8430 -0
  101. package/chunks/{daemon-status-provider-42JEXENZ.js → daemon-status-provider-V5UY7O7J.js} +26 -24
  102. package/chunks/{dist-4FCNM6KJ.js → dist-2HDL5SHQ.js} +2 -2
  103. package/chunks/{dist-SU6L7ZNJ.js → dist-B7SSDVWT.js} +3 -3
  104. package/chunks/{dist-VD7HXTML.js → dist-BL3SL665.js} +1 -1
  105. package/chunks/{dist-UKPWQJCL.js → dist-TAVAGZU6.js} +37 -13
  106. package/chunks/{dist-K4XZILIO.js → dist-XBOVZ3R5.js} +26 -5
  107. package/chunks/{earlyInputCapture-FFFEC6P4.js → earlyInputCapture-VVYU4FDO.js} +17 -15
  108. package/chunks/{edit-32ILSGZY.js → edit-F35PTMBA.js} +17 -15
  109. package/chunks/{en-U3LWGSFX.js → en-FZREZFPO.js} +18 -0
  110. package/chunks/{enter-worktree-XWZKIN6A.js → enter-worktree-3DIW7EGJ.js} +17 -15
  111. package/chunks/{enterPlanMode-LPFFY7BJ.js → enterPlanMode-QNXT77KP.js} +27 -15
  112. package/chunks/{errors-UXBPYPI2.js → errors-M53YG76R.js} +19 -17
  113. package/chunks/{exit-worktree-IBS4UIU7.js → exit-worktree-BSDWNWHZ.js} +17 -15
  114. package/chunks/{exitPlanMode-JA72YHII.js → exitPlanMode-EL7AY327.js} +41 -23
  115. package/chunks/{fast-path-7UU67Y2W.js → fast-path-DUCSMUFW.js} +2 -2
  116. package/chunks/{gemini-GMVKJNMX.js → gemini-F3IERB37.js} +59 -51
  117. package/chunks/{geminiContentGenerator-7NIFF2L4.js → geminiContentGenerator-6OULAKFQ.js} +1 -1
  118. package/chunks/{glob-4NJCW5HI.js → glob-ZMLFTD4T.js} +17 -15
  119. package/chunks/{grep-PAIMLQEL.js → grep-H5X66EI7.js} +17 -15
  120. package/chunks/{initializer-R6KU4VYM.js → initializer-LEOT2OLH.js} +21 -19
  121. package/chunks/{list-H7LXAO64.js → list-M3DKXML6.js} +23 -21
  122. package/chunks/{loadedSettingsAdapter-H27JMTLU.js → loadedSettingsAdapter-OKMQFGGG.js} +21 -19
  123. package/chunks/{loop-wakeup-Y3OIRQFM.js → loop-wakeup-FPBAVVPR.js} +2 -2
  124. package/chunks/{ls-TVJEYS7O.js → ls-UGWQXPTY.js} +1 -1
  125. package/chunks/{lsp-JZSDVR3F.js → lsp-24WV7NXB.js} +1 -1
  126. package/chunks/{monitor-JSIHDPXP.js → monitor-ARL5P45R.js} +19 -16
  127. package/chunks/{nonInteractiveCli-Y4CHOETG.js → nonInteractiveCli-NUVLF3YR.js} +53 -45
  128. package/chunks/{notebook-edit-SHRNL2UM.js → notebook-edit-ANTZ2DDY.js} +17 -15
  129. package/chunks/{openaiContentGenerator-ORZZ7VFO.js → openaiContentGenerator-TFGMKGHN.js} +6 -6
  130. package/chunks/pidfile-AWTL4C63.js +72 -0
  131. package/chunks/{qwenContentGenerator-H643PL2G.js → qwenContentGenerator-6QWAYTWS.js} +18 -16
  132. package/chunks/{qwenOAuth2-OI2B7PES.js → qwenOAuth2-LWLA6MQG.js} +3 -3
  133. package/chunks/{read-file-5PRNPTTY.js → read-file-EJY73XQ3.js} +4 -4
  134. package/chunks/{read-mcp-resource-QTXGKTEV.js → read-mcp-resource-NCBTPP7X.js} +1 -1
  135. package/chunks/{ripGrep-JIKZMABJ.js → ripGrep-HC4SA6CQ.js} +17 -15
  136. package/chunks/{run-qwen-serve-PQV7QOHZ.js → run-qwen-serve-AGLZ642J.js} +291 -55
  137. package/chunks/{scheduler-OS3R5MGU.js → scheduler-TURO7NGY.js} +17 -15
  138. package/chunks/{send-message-DKGHWSTF.js → send-message-3S2NYS3O.js} +5 -3
  139. package/chunks/{serve-LVYZDKCZ.js → serve-5DAMOIDW.js} +22 -19
  140. package/chunks/{server-P4YIH35I.js → server-4AGEK2HC.js} +2268 -1222
  141. package/chunks/{session-DE4TZBKH.js → session-7ZOQUC4Y.js} +54 -46
  142. package/chunks/{settings-DFTYMJYF.js → settings-DR4V6L5Y.js} +20 -18
  143. package/chunks/{shell-3GNQLNV7.js → shell-H5WFKUXH.js} +17 -15
  144. package/chunks/{skill-NCNG4KKZ.js → skill-ANHU5ZCR.js} +4 -4
  145. package/chunks/{spawnChannel-DHRIMDVL.js → spawnChannel-VN5LJV7Z.js} +19 -17
  146. package/chunks/{src-PNZYGM3R.js → src-OVZLTVVM.js} +49 -17
  147. package/chunks/{startInteractiveUI-P6GZBFQW.js → startInteractiveUI-OA22V32P.js} +11110 -10670
  148. package/chunks/{syntheticOutput-X7L5HWLN.js → syntheticOutput-SV7GBHZ5.js} +2 -2
  149. package/chunks/{task-create-AWEUI4GI.js → task-create-W2H2UJCH.js} +6 -5
  150. package/chunks/{task-list-KZ3VJLDU.js → task-list-THBOPV4G.js} +5 -4
  151. package/chunks/{task-stop-GUNOZKJ5.js → task-stop-33FVCNCJ.js} +1 -1
  152. package/chunks/{task-update-Y56GP6DU.js → task-update-LVFQLXEI.js} +6 -5
  153. package/chunks/{team-create-6JMW3KQK.js → team-create-OYL5CAQO.js} +17 -15
  154. package/chunks/{team-delete-6AFRGDJY.js → team-delete-NTUQ25UY.js} +5 -4
  155. package/chunks/{theme-manager-FEHQO22G.js → theme-manager-XCMPF2SI.js} +17 -15
  156. package/chunks/{todoWrite-JRS6NOEU.js → todoWrite-SEPO2RI3.js} +1 -1
  157. package/chunks/{tool-search-IXAEKS7J.js → tool-search-YXW55X6Z.js} +29 -5
  158. package/chunks/{trustedFolders-SJRXNHZE.js → trustedFolders-TEPGM5YL.js} +18 -16
  159. package/chunks/{validateNonInterActiveAuth-HCH7OBDH.js → validateNonInterActiveAuth-OQIS7WUE.js} +50 -42
  160. package/chunks/{web-fetch-RELNL37A.js → web-fetch-OE7LHURA.js} +4 -4
  161. package/chunks/{workflow-M2COBI7R.js → workflow-RTUWORAP.js} +48 -27
  162. package/chunks/{workspace-providers-status-GOCWYDMK.js → workspace-providers-status-DM2XANVB.js} +23 -21
  163. package/chunks/{workspace-service-34C7SUBU.js → workspace-service-VKBI2KZD.js} +27 -25
  164. package/chunks/{write-file-E52WRXZL.js → write-file-WGALQ53L.js} +17 -15
  165. package/chunks/{zh-TW-LKLBTZHE.js → zh-TW-6GIKXEAN.js} +18 -0
  166. package/chunks/{zh-F5T4WWZO.js → zh-V3B4TFWL.js} +18 -0
  167. package/cli.js +6 -6
  168. package/locales/en.js +30 -0
  169. package/locales/fr.js +1 -2
  170. package/locales/ja.js +1 -2
  171. package/locales/zh-TW.js +29 -0
  172. package/locales/zh.js +29 -0
  173. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  174. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  175. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  176. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  177. package/package.json +3 -3
  178. package/web-shell/assets/{arc-C2DILvUl.js → arc-Det5Ccum.js} +1 -1
  179. package/web-shell/assets/{architectureDiagram-3BPJPVTR-b8gZ2cNw.js → architectureDiagram-3BPJPVTR-DqNWVFpl.js} +1 -1
  180. package/web-shell/assets/{blockDiagram-GPEHLZMM-BuRpghMj.js → blockDiagram-GPEHLZMM-CYl7tYBi.js} +1 -1
  181. package/web-shell/assets/{c4Diagram-AAUBKEIU-2ItdhFmE.js → c4Diagram-AAUBKEIU-DaAEi0NQ.js} +1 -1
  182. package/web-shell/assets/channel-Bm0bFauD.js +1 -0
  183. package/web-shell/assets/{chunk-2J33WTMH-B1QXa0q3.js → chunk-2J33WTMH-Df2CDEE2.js} +1 -1
  184. package/web-shell/assets/{chunk-4BX2VUAB-DXfhKlNq.js → chunk-4BX2VUAB-DNBFcyL2.js} +1 -1
  185. package/web-shell/assets/{chunk-55IACEB6-ClSNjxLo.js → chunk-55IACEB6-BKjF-0HI.js} +1 -1
  186. package/web-shell/assets/{chunk-727SXJPM-Dsh2wisB.js → chunk-727SXJPM-DYwAwfIM.js} +1 -1
  187. package/web-shell/assets/{chunk-AQP2D5EJ-C1TkY5AR.js → chunk-AQP2D5EJ-C6FswLqy.js} +1 -1
  188. package/web-shell/assets/{chunk-FMBD7UC4-CGtN9XR6.js → chunk-FMBD7UC4-DRWAcZSY.js} +1 -1
  189. package/web-shell/assets/{chunk-ND2GUHAM-BHiPi1SS.js → chunk-ND2GUHAM-AoL16mNR.js} +1 -1
  190. package/web-shell/assets/{chunk-QZHKN3VN-CzG3I5o1.js → chunk-QZHKN3VN-a8PtLMck.js} +1 -1
  191. package/web-shell/assets/classDiagram-4FO5ZUOK--NgUfb55.js +1 -0
  192. package/web-shell/assets/classDiagram-v2-Q7XG4LA2--NgUfb55.js +1 -0
  193. package/web-shell/assets/{cose-bilkent-S5V4N54A-EgrIoH_K.js → cose-bilkent-S5V4N54A-C4Aeu5qf.js} +1 -1
  194. package/web-shell/assets/{dagre-BM42HDAG-BUnpdX8S.js → dagre-BM42HDAG-BOulamjo.js} +1 -1
  195. package/web-shell/assets/{diagram-2AECGRRQ-BlLUCVYu.js → diagram-2AECGRRQ-D1wt2ykO.js} +1 -1
  196. package/web-shell/assets/{diagram-5GNKFQAL-FG-enmjQ.js → diagram-5GNKFQAL-BRseus-O.js} +1 -1
  197. package/web-shell/assets/{diagram-KO2AKTUF-BlzmTONk.js → diagram-KO2AKTUF-XSMkNzpZ.js} +1 -1
  198. package/web-shell/assets/{diagram-LMA3HP47-CoBQ8mIx.js → diagram-LMA3HP47-21KNLqoi.js} +1 -1
  199. package/web-shell/assets/{diagram-OG6HWLK6-DvxV6sX8.js → diagram-OG6HWLK6-DnUI8F5G.js} +1 -1
  200. package/web-shell/assets/{erDiagram-TEJ5UH35-Jq1tpAoj.js → erDiagram-TEJ5UH35-BVSOMuM2.js} +1 -1
  201. package/web-shell/assets/{flowDiagram-I6XJVG4X-CbtYOry5.js → flowDiagram-I6XJVG4X-fYtDPJsW.js} +1 -1
  202. package/web-shell/assets/{ganttDiagram-6RSMTGT7-ZEn2VEKR.js → ganttDiagram-6RSMTGT7-CmRXosW_.js} +1 -1
  203. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BZh-LkhJ.js → gitGraphDiagram-PVQCEYII-DPrmySxO.js} +1 -1
  204. package/web-shell/assets/index-BpKnmyFV.js +717 -0
  205. package/web-shell/assets/index-fLrtxpOG.css +5 -0
  206. package/web-shell/assets/{infoDiagram-5YYISTIA-B9HuZygK.js → infoDiagram-5YYISTIA-x3VbEuCV.js} +1 -1
  207. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D76cNpYG.js → ishikawaDiagram-YF4QCWOH-SmitHRMC.js} +1 -1
  208. package/web-shell/assets/{journeyDiagram-JHISSGLW-6bGo7P1t.js → journeyDiagram-JHISSGLW-BxvA551S.js} +1 -1
  209. package/web-shell/assets/{kanban-definition-UN3LZRKU-DuYyRBvB.js → kanban-definition-UN3LZRKU-DNHC16jY.js} +1 -1
  210. package/web-shell/assets/{linear-CpdSW1BC.js → linear-CQ6irBL9.js} +1 -1
  211. package/web-shell/assets/{mermaid.core-s5xbZMMj.js → mermaid.core-DtB6NO1e.js} +72 -72
  212. package/web-shell/assets/{mindmap-definition-RKZ34NQL-go01fZ2y.js → mindmap-definition-RKZ34NQL-QKMAgV2v.js} +1 -1
  213. package/web-shell/assets/{pieDiagram-4H26LBE5-BfuZiEHO.js → pieDiagram-4H26LBE5-bvb6dGn6.js} +1 -1
  214. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DsoINqV6.js → quadrantDiagram-W4KKPZXB-DLgdlG4D.js} +1 -1
  215. package/web-shell/assets/{requirementDiagram-4Y6WPE33-B7FU4LiU.js → requirementDiagram-4Y6WPE33-2M9YH4GF.js} +1 -1
  216. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BEDjFnGB.js → sankeyDiagram-5OEKKPKP-DzwfclTH.js} +1 -1
  217. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-gzmmL5tK.js → sequenceDiagram-3UESZ5HK-BvPmTuy2.js} +1 -1
  218. package/web-shell/assets/{stateDiagram-AJRCARHV-BtHD4IN_.js → stateDiagram-AJRCARHV-BjwUmrJF.js} +1 -1
  219. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C4L8zXeL.js +1 -0
  220. package/web-shell/assets/{timeline-definition-PNZ67QCA-T_8gmMCf.js → timeline-definition-PNZ67QCA-CXzS6qqz.js} +1 -1
  221. package/web-shell/assets/{vennDiagram-CIIHVFJN-DdjuqnjO.js → vennDiagram-CIIHVFJN-yRSolF5B.js} +1 -1
  222. package/web-shell/assets/{wardley-L42UT6IY-Cgtrvb37.js → wardley-L42UT6IY-ClLJjHPG.js} +1 -1
  223. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BW3f3-yW.js → wardleyDiagram-YWT4CUSO-VIa6t2p2.js} +1 -1
  224. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BUS9IKkc.js → xychartDiagram-2RQKCTM6-CtmrkezW.js} +1 -1
  225. package/web-shell/index.html +18 -2
  226. package/chunks/chunk-2JKEQWDZ.js +0 -1596
  227. package/chunks/chunk-32MCHZQC.js +0 -73
  228. package/chunks/chunk-UAKXW3DN.js +0 -30
  229. package/web-shell/assets/channel-eRvn2UA3.js +0 -1
  230. package/web-shell/assets/classDiagram-4FO5ZUOK-YZNwy1rx.js +0 -1
  231. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-YZNwy1rx.js +0 -1
  232. package/web-shell/assets/index-5FhE0ORO.css +0 -5
  233. package/web-shell/assets/index-CDTGmqVm.js +0 -720
  234. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DFy6gLDd.js +0 -1
@@ -467,6 +467,24 @@ var require_errors = __commonJS({
467
467
  }
468
468
  [kSecureProxyConnectionError] = true;
469
469
  };
470
+ var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED");
471
+ var MessageSizeExceededError = class extends UndiciError {
472
+ static {
473
+ __name(this, "MessageSizeExceededError");
474
+ }
475
+ constructor(message) {
476
+ super(message);
477
+ this.name = "MessageSizeExceededError";
478
+ this.message = message || "Max decompressed message size exceeded";
479
+ this.code = "UND_ERR_WS_MESSAGE_SIZE_EXCEEDED";
480
+ }
481
+ static [Symbol.hasInstance](instance) {
482
+ return instance && instance[kMessageSizeExceededError] === true;
483
+ }
484
+ get [kMessageSizeExceededError]() {
485
+ return true;
486
+ }
487
+ };
470
488
  module.exports = {
471
489
  AbortError,
472
490
  HTTPParserError,
@@ -490,7 +508,8 @@ var require_errors = __commonJS({
490
508
  ResponseExceededMaxSizeError,
491
509
  RequestRetryError,
492
510
  ResponseError,
493
- SecureProxyConnectionError
511
+ SecureProxyConnectionError,
512
+ MessageSizeExceededError
494
513
  };
495
514
  }
496
515
  });
@@ -1557,6 +1576,9 @@ var require_request = __commonJS({
1557
1576
  if (upgrade && typeof upgrade !== "string") {
1558
1577
  throw new InvalidArgumentError("upgrade must be a string");
1559
1578
  }
1579
+ if (upgrade && !isValidHeaderValue(upgrade)) {
1580
+ throw new InvalidArgumentError("invalid upgrade header");
1581
+ }
1560
1582
  if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {
1561
1583
  throw new InvalidArgumentError("invalid headersTimeout");
1562
1584
  }
@@ -1789,12 +1811,18 @@ var require_request = __commonJS({
1789
1811
  } else {
1790
1812
  val = `${val}`;
1791
1813
  }
1792
- if (request.host === null && headerName === "host") {
1814
+ if (headerName === "host") {
1815
+ if (request.host !== null) {
1816
+ throw new InvalidArgumentError("duplicate host header");
1817
+ }
1793
1818
  if (typeof val !== "string") {
1794
1819
  throw new InvalidArgumentError("invalid host header");
1795
1820
  }
1796
1821
  request.host = val;
1797
- } else if (request.contentLength === null && headerName === "content-length") {
1822
+ } else if (headerName === "content-length") {
1823
+ if (request.contentLength !== null) {
1824
+ throw new InvalidArgumentError("duplicate content-length header");
1825
+ }
1798
1826
  request.contentLength = parseInt(val, 10);
1799
1827
  if (!Number.isFinite(request.contentLength)) {
1800
1828
  throw new InvalidArgumentError("invalid content-length header");
@@ -1900,16 +1928,24 @@ var require_dispatcher_base = __commonJS({
1900
1928
  var kOnDestroyed = Symbol("onDestroyed");
1901
1929
  var kOnClosed = Symbol("onClosed");
1902
1930
  var kInterceptedDispatch = Symbol("Intercepted Dispatch");
1931
+ var kWebSocketOptions = Symbol("webSocketOptions");
1903
1932
  var DispatcherBase = class extends Dispatcher {
1904
1933
  static {
1905
1934
  __name(this, "DispatcherBase");
1906
1935
  }
1907
- constructor() {
1936
+ constructor(opts) {
1908
1937
  super();
1909
1938
  this[kDestroyed] = false;
1910
1939
  this[kOnDestroyed] = null;
1911
1940
  this[kClosed] = false;
1912
1941
  this[kOnClosed] = [];
1942
+ this[kWebSocketOptions] = opts?.webSocket ?? {};
1943
+ }
1944
+ get webSocketOptions() {
1945
+ return {
1946
+ maxFragments: this[kWebSocketOptions].maxFragments ?? 131072,
1947
+ maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024
1948
+ };
1913
1949
  }
1914
1950
  get destroyed() {
1915
1951
  return this[kDestroyed];
@@ -5708,6 +5744,9 @@ var require_client_h1 = __commonJS({
5708
5744
  var FastBuffer = Buffer[Symbol.species];
5709
5745
  var addListener = util.addListener;
5710
5746
  var removeAllListeners = util.removeAllListeners;
5747
+ var kIdleSocketValidation = Symbol("kIdleSocketValidation");
5748
+ var kIdleSocketValidationTimeout = Symbol("kIdleSocketValidationTimeout");
5749
+ var kSocketUsed = Symbol("kSocketUsed");
5711
5750
  var extractBody;
5712
5751
  async function lazyllhttp() {
5713
5752
  const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
@@ -5874,24 +5913,55 @@ var require_client_h1 = __commonJS({
5874
5913
  currentBufferRef = null;
5875
5914
  }
5876
5915
  const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
5877
- if (ret === constants.ERROR.PAUSED_UPGRADE) {
5878
- this.onUpgrade(data.slice(offset));
5879
- } else if (ret === constants.ERROR.PAUSED) {
5880
- this.paused = true;
5881
- socket.unshift(data.slice(offset));
5882
- } else if (ret !== constants.ERROR.OK) {
5883
- const ptr = llhttp.llhttp_get_error_reason(this.ptr);
5884
- let message = "";
5885
- if (ptr) {
5886
- const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
5887
- message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
5916
+ if (ret !== constants.ERROR.OK) {
5917
+ const body = data.subarray(offset);
5918
+ if (ret === constants.ERROR.PAUSED_UPGRADE) {
5919
+ this.onUpgrade(body);
5920
+ } else if (ret === constants.ERROR.PAUSED) {
5921
+ this.paused = true;
5922
+ socket.unshift(body);
5923
+ } else {
5924
+ throw this.createError(ret, body);
5888
5925
  }
5889
- throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset));
5890
5926
  }
5891
5927
  } catch (err) {
5892
5928
  util.destroy(socket, err);
5893
5929
  }
5894
5930
  }
5931
+ finish() {
5932
+ assert(currentParser === null);
5933
+ assert(this.ptr != null);
5934
+ assert(!this.paused);
5935
+ const { llhttp } = this;
5936
+ let ret;
5937
+ try {
5938
+ currentParser = this;
5939
+ ret = llhttp.llhttp_finish(this.ptr);
5940
+ } finally {
5941
+ currentParser = null;
5942
+ }
5943
+ if (ret === constants.ERROR.OK) {
5944
+ return null;
5945
+ }
5946
+ if (ret === constants.ERROR.PAUSED || ret === constants.ERROR.PAUSED_UPGRADE) {
5947
+ this.paused = true;
5948
+ return null;
5949
+ }
5950
+ return this.createError(ret, EMPTY_BUF);
5951
+ }
5952
+ createError(ret, data) {
5953
+ const { llhttp, contentLength, bytesRead } = this;
5954
+ if (contentLength && bytesRead !== parseInt(contentLength, 10)) {
5955
+ return new ResponseContentLengthMismatchError();
5956
+ }
5957
+ const ptr = llhttp.llhttp_get_error_reason(this.ptr);
5958
+ let message = "";
5959
+ if (ptr) {
5960
+ const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
5961
+ message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
5962
+ }
5963
+ return new HTTPParserError(message, constants.ERROR[ret], data);
5964
+ }
5895
5965
  destroy() {
5896
5966
  assert(this.ptr != null);
5897
5967
  assert(currentParser == null);
@@ -5911,6 +5981,10 @@ var require_client_h1 = __commonJS({
5911
5981
  if (socket.destroyed) {
5912
5982
  return -1;
5913
5983
  }
5984
+ if (client[kRunning] === 0) {
5985
+ util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
5986
+ return -1;
5987
+ }
5914
5988
  const request = client[kQueue][client[kRunningIdx]];
5915
5989
  if (!request) {
5916
5990
  return -1;
@@ -5990,6 +6064,10 @@ var require_client_h1 = __commonJS({
5990
6064
  if (socket.destroyed) {
5991
6065
  return -1;
5992
6066
  }
6067
+ if (client[kRunning] === 0) {
6068
+ util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
6069
+ return -1;
6070
+ }
5993
6071
  const request = client[kQueue][client[kRunningIdx]];
5994
6072
  if (!request) {
5995
6073
  return -1;
@@ -6115,6 +6193,7 @@ var require_client_h1 = __commonJS({
6115
6193
  }
6116
6194
  request.onComplete(headers);
6117
6195
  client[kQueue][client[kRunningIdx]++] = null;
6196
+ socket[kSocketUsed] = true;
6118
6197
  if (socket[kWriting]) {
6119
6198
  assert(client[kRunning] === 0);
6120
6199
  util.destroy(socket, new InformationalError("reset"));
@@ -6159,12 +6238,19 @@ var require_client_h1 = __commonJS({
6159
6238
  socket[kWriting] = false;
6160
6239
  socket[kReset] = false;
6161
6240
  socket[kBlocking] = false;
6241
+ socket[kIdleSocketValidation] = 0;
6242
+ socket[kIdleSocketValidationTimeout] = null;
6243
+ socket[kSocketUsed] = false;
6162
6244
  socket[kParser] = new Parser(client, socket, llhttpInstance);
6163
6245
  addListener(socket, "error", function(err) {
6164
6246
  assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
6165
6247
  const parser = this[kParser];
6166
6248
  if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
6167
- parser.onMessageComplete();
6249
+ const parserErr = parser.finish();
6250
+ if (parserErr) {
6251
+ this[kError] = parserErr;
6252
+ this[kClient][kOnError](parserErr);
6253
+ }
6168
6254
  return;
6169
6255
  }
6170
6256
  this[kError] = err;
@@ -6179,7 +6265,10 @@ var require_client_h1 = __commonJS({
6179
6265
  addListener(socket, "end", function() {
6180
6266
  const parser = this[kParser];
6181
6267
  if (parser.statusCode && !parser.shouldKeepAlive) {
6182
- parser.onMessageComplete();
6268
+ const parserErr = parser.finish();
6269
+ if (parserErr) {
6270
+ util.destroy(this, parserErr);
6271
+ }
6183
6272
  return;
6184
6273
  }
6185
6274
  util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this)));
@@ -6187,9 +6276,10 @@ var require_client_h1 = __commonJS({
6187
6276
  addListener(socket, "close", function() {
6188
6277
  const client2 = this[kClient];
6189
6278
  const parser = this[kParser];
6279
+ clearIdleSocketValidation(this);
6190
6280
  if (parser) {
6191
6281
  if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
6192
- parser.onMessageComplete();
6282
+ this[kError] = parser.finish() || this[kError];
6193
6283
  }
6194
6284
  this[kParser].destroy();
6195
6285
  this[kParser] = null;
@@ -6238,7 +6328,7 @@ var require_client_h1 = __commonJS({
6238
6328
  return socket.destroyed;
6239
6329
  },
6240
6330
  busy(request) {
6241
- if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {
6331
+ if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
6242
6332
  return true;
6243
6333
  }
6244
6334
  if (request) {
@@ -6257,6 +6347,26 @@ var require_client_h1 = __commonJS({
6257
6347
  };
6258
6348
  }
6259
6349
  __name(connectH1, "connectH1");
6350
+ function clearIdleSocketValidation(socket) {
6351
+ if (socket[kIdleSocketValidationTimeout]) {
6352
+ clearTimeout(socket[kIdleSocketValidationTimeout]);
6353
+ socket[kIdleSocketValidationTimeout] = null;
6354
+ }
6355
+ socket[kIdleSocketValidation] = 0;
6356
+ }
6357
+ __name(clearIdleSocketValidation, "clearIdleSocketValidation");
6358
+ function scheduleIdleSocketValidation(client, socket) {
6359
+ socket[kIdleSocketValidation] = 1;
6360
+ socket[kIdleSocketValidationTimeout] = setTimeout(() => {
6361
+ socket[kIdleSocketValidationTimeout] = null;
6362
+ socket[kIdleSocketValidation] = 2;
6363
+ if (client[kSocket] === socket && !socket.destroyed) {
6364
+ client[kResume]();
6365
+ }
6366
+ }, 0);
6367
+ socket[kIdleSocketValidationTimeout].unref?.();
6368
+ }
6369
+ __name(scheduleIdleSocketValidation, "scheduleIdleSocketValidation");
6260
6370
  function resumeH1(client) {
6261
6371
  const socket = client[kSocket];
6262
6372
  if (socket && !socket.destroyed) {
@@ -6269,6 +6379,29 @@ var require_client_h1 = __commonJS({
6269
6379
  socket.ref();
6270
6380
  socket[kNoRef] = false;
6271
6381
  }
6382
+ if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) {
6383
+ if (socket[kIdleSocketValidation] === 0) {
6384
+ scheduleIdleSocketValidation(client, socket);
6385
+ socket[kParser].readMore();
6386
+ if (socket.destroyed) {
6387
+ return;
6388
+ }
6389
+ return;
6390
+ }
6391
+ if (socket[kIdleSocketValidation] === 1) {
6392
+ socket[kParser].readMore();
6393
+ if (socket.destroyed) {
6394
+ return;
6395
+ }
6396
+ return;
6397
+ }
6398
+ }
6399
+ if (client[kRunning] === 0) {
6400
+ socket[kParser].readMore();
6401
+ if (socket.destroyed) {
6402
+ return;
6403
+ }
6404
+ }
6272
6405
  if (client[kSize] === 0) {
6273
6406
  if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {
6274
6407
  socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE);
@@ -6323,6 +6456,7 @@ var require_client_h1 = __commonJS({
6323
6456
  process.emitWarning(new RequestContentLengthMismatchError());
6324
6457
  }
6325
6458
  const socket = client[kSocket];
6459
+ clearIdleSocketValidation(socket);
6326
6460
  const abort = /* @__PURE__ */ __name((err) => {
6327
6461
  if (request.aborted || request.completed) {
6328
6462
  return;
@@ -7545,9 +7679,10 @@ var require_client = __commonJS({
7545
7679
  autoSelectFamilyAttemptTimeout,
7546
7680
  // h2
7547
7681
  maxConcurrentStreams,
7548
- allowH2
7682
+ allowH2,
7683
+ webSocket
7549
7684
  } = {}) {
7550
- super();
7685
+ super({ webSocket });
7551
7686
  if (keepAlive !== void 0) {
7552
7687
  throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead");
7553
7688
  }
@@ -8073,8 +8208,8 @@ var require_pool_base = __commonJS({
8073
8208
  static {
8074
8209
  __name(this, "PoolBase");
8075
8210
  }
8076
- constructor() {
8077
- super();
8211
+ constructor(opts) {
8212
+ super(opts);
8078
8213
  this[kQueue] = new FixedQueue();
8079
8214
  this[kClients] = [];
8080
8215
  this[kQueued] = 0;
@@ -8250,7 +8385,6 @@ var require_pool = __commonJS({
8250
8385
  allowH2,
8251
8386
  ...options
8252
8387
  } = {}) {
8253
- super();
8254
8388
  if (connections != null && (!Number.isFinite(connections) || connections < 0)) {
8255
8389
  throw new InvalidArgumentError("invalid connections");
8256
8390
  }
@@ -8271,6 +8405,7 @@ var require_pool = __commonJS({
8271
8405
  ...connect
8272
8406
  });
8273
8407
  }
8408
+ super(options);
8274
8409
  this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : [];
8275
8410
  this[kConnections] = connections || null;
8276
8411
  this[kUrl] = util.parseOrigin(origin);
@@ -8481,7 +8616,6 @@ var require_agent = __commonJS({
8481
8616
  __name(this, "Agent");
8482
8617
  }
8483
8618
  constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) {
8484
- super();
8485
8619
  if (typeof factory !== "function") {
8486
8620
  throw new InvalidArgumentError("factory must be a function.");
8487
8621
  }
@@ -8491,6 +8625,7 @@ var require_agent = __commonJS({
8491
8625
  if (!Number.isInteger(maxRedirections) || maxRedirections < 0) {
8492
8626
  throw new InvalidArgumentError("maxRedirections must be a positive number");
8493
8627
  }
8628
+ super(options);
8494
8629
  if (connect && typeof connect !== "function") {
8495
8630
  connect = { ...connect };
8496
8631
  }
@@ -14477,23 +14612,25 @@ var require_fetch = __commonJS({
14477
14612
  if (status < 200) {
14478
14613
  return;
14479
14614
  }
14480
- let codings = [];
14481
14615
  let location = "";
14482
14616
  const headersList = new HeadersList();
14483
14617
  for (let i = 0; i < rawHeaders.length; i += 2) {
14484
14618
  headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true);
14485
14619
  }
14486
- const contentEncoding = headersList.get("content-encoding", true);
14487
- if (contentEncoding) {
14488
- codings = contentEncoding.toLowerCase().split(",").map((x) => x.trim());
14489
- }
14490
14620
  location = headersList.get("location", true);
14491
14621
  this.body = new Readable({ read: resume });
14492
14622
  const decoders = [];
14493
14623
  const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status);
14494
- if (codings.length !== 0 && request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
14624
+ if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
14625
+ const contentEncoding = headersList.get("content-encoding", true);
14626
+ const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : [];
14627
+ const maxContentEncodings = 5;
14628
+ if (codings.length > maxContentEncodings) {
14629
+ reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`));
14630
+ return true;
14631
+ }
14495
14632
  for (let i = codings.length - 1; i >= 0; --i) {
14496
- const coding = codings[i];
14633
+ const coding = codings[i].trim();
14497
14634
  if (coding === "x-gzip" || coding === "gzip") {
14498
14635
  decoders.push(zlib.createGunzip({
14499
14636
  // Be less strict when decoding compressed responses, since sometimes
@@ -16437,18 +16574,14 @@ var require_parse = __commonJS({
16437
16574
  } else if (attributeNameLowercase === "httponly") {
16438
16575
  cookieAttributeList.httpOnly = true;
16439
16576
  } else if (attributeNameLowercase === "samesite") {
16440
- let enforcement = "Default";
16441
16577
  const attributeValueLowercase = attributeValue.toLowerCase();
16442
- if (attributeValueLowercase.includes("none")) {
16443
- enforcement = "None";
16444
- }
16445
- if (attributeValueLowercase.includes("strict")) {
16446
- enforcement = "Strict";
16578
+ if (attributeValueLowercase === "none") {
16579
+ cookieAttributeList.sameSite = "None";
16580
+ } else if (attributeValueLowercase === "strict") {
16581
+ cookieAttributeList.sameSite = "Strict";
16582
+ } else if (attributeValueLowercase === "lax") {
16583
+ cookieAttributeList.sameSite = "Lax";
16447
16584
  }
16448
- if (attributeValueLowercase.includes("lax")) {
16449
- enforcement = "Lax";
16450
- }
16451
- cookieAttributeList.sameSite = enforcement;
16452
16585
  } else {
16453
16586
  cookieAttributeList.unparsed ??= [];
16454
16587
  cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
@@ -17097,13 +17230,17 @@ var require_util7 = __commonJS({
17097
17230
  }
17098
17231
  __name(parseExtensions, "parseExtensions");
17099
17232
  function isValidClientWindowBits(value) {
17233
+ if (value.length === 0) {
17234
+ return false;
17235
+ }
17100
17236
  for (let i = 0; i < value.length; i++) {
17101
17237
  const byte = value.charCodeAt(i);
17102
17238
  if (byte < 48 || byte > 57) {
17103
17239
  return false;
17104
17240
  }
17105
17241
  }
17106
- return true;
17242
+ const num = Number.parseInt(value, 10);
17243
+ return num >= 8 && num <= 15;
17107
17244
  }
17108
17245
  __name(isValidClientWindowBits, "isValidClientWindowBits");
17109
17246
  var hasIntl = typeof process.versions.icu === "string";
@@ -17415,6 +17552,7 @@ var require_permessage_deflate = __commonJS({
17415
17552
  init_esbuild_shims();
17416
17553
  var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("node:zlib");
17417
17554
  var { isValidClientWindowBits } = require_util7();
17555
+ var { MessageSizeExceededError } = require_errors();
17418
17556
  var tail = Buffer.from([0, 0, 255, 255]);
17419
17557
  var kBuffer = Symbol("kBuffer");
17420
17558
  var kLength = Symbol("kLength");
@@ -17425,10 +17563,21 @@ var require_permessage_deflate = __commonJS({
17425
17563
  /** @type {import('node:zlib').InflateRaw} */
17426
17564
  #inflate;
17427
17565
  #options = {};
17428
- constructor(extensions) {
17566
+ #maxPayloadSize = 0;
17567
+ /**
17568
+ * @param {Map<string, string>} extensions
17569
+ */
17570
+ constructor(extensions, options) {
17429
17571
  this.#options.serverNoContextTakeover = extensions.has("server_no_context_takeover");
17430
17572
  this.#options.serverMaxWindowBits = extensions.get("server_max_window_bits");
17573
+ this.#maxPayloadSize = options.maxPayloadSize;
17431
17574
  }
17575
+ /**
17576
+ * Decompress a compressed payload.
17577
+ * @param {Buffer} chunk Compressed data
17578
+ * @param {boolean} fin Final fragment flag
17579
+ * @param {Function} callback Callback function
17580
+ */
17432
17581
  decompress(chunk, fin, callback) {
17433
17582
  if (!this.#inflate) {
17434
17583
  let windowBits = Z_DEFAULT_WINDOWBITS;
@@ -17439,12 +17588,23 @@ var require_permessage_deflate = __commonJS({
17439
17588
  }
17440
17589
  windowBits = Number.parseInt(this.#options.serverMaxWindowBits);
17441
17590
  }
17442
- this.#inflate = createInflateRaw({ windowBits });
17591
+ try {
17592
+ this.#inflate = createInflateRaw({ windowBits });
17593
+ } catch (err) {
17594
+ callback(err);
17595
+ return;
17596
+ }
17443
17597
  this.#inflate[kBuffer] = [];
17444
17598
  this.#inflate[kLength] = 0;
17445
17599
  this.#inflate.on("data", (data) => {
17446
- this.#inflate[kBuffer].push(data);
17447
17600
  this.#inflate[kLength] += data.length;
17601
+ if (this.#maxPayloadSize > 0 && this.#inflate[kLength] > this.#maxPayloadSize) {
17602
+ callback(new MessageSizeExceededError());
17603
+ this.#inflate.removeAllListeners();
17604
+ this.#inflate = null;
17605
+ return;
17606
+ }
17607
+ this.#inflate[kBuffer].push(data);
17448
17608
  });
17449
17609
  this.#inflate.on("error", (err) => {
17450
17610
  this.#inflate = null;
@@ -17456,6 +17616,9 @@ var require_permessage_deflate = __commonJS({
17456
17616
  this.#inflate.write(tail);
17457
17617
  }
17458
17618
  this.#inflate.flush(() => {
17619
+ if (!this.#inflate) {
17620
+ return;
17621
+ }
17459
17622
  const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength]);
17460
17623
  this.#inflate[kBuffer].length = 0;
17461
17624
  this.#inflate[kLength] = 0;
@@ -17490,11 +17653,18 @@ var require_receiver = __commonJS({
17490
17653
  var { WebsocketFrameSend } = require_frame();
17491
17654
  var { closeWebSocketConnection } = require_connection();
17492
17655
  var { PerMessageDeflate } = require_permessage_deflate();
17656
+ var { MessageSizeExceededError } = require_errors();
17657
+ function failWebsocketConnectionWithCode(ws, code, reason) {
17658
+ closeWebSocketConnection(ws, code, reason, Buffer.byteLength(reason));
17659
+ failWebsocketConnection(ws, reason);
17660
+ }
17661
+ __name(failWebsocketConnectionWithCode, "failWebsocketConnectionWithCode");
17493
17662
  var ByteParser = class extends Writable {
17494
17663
  static {
17495
17664
  __name(this, "ByteParser");
17496
17665
  }
17497
17666
  #buffers = [];
17667
+ #fragmentsBytes = 0;
17498
17668
  #byteOffset = 0;
17499
17669
  #loop = false;
17500
17670
  #state = parserStates.INFO;
@@ -17502,12 +17672,23 @@ var require_receiver = __commonJS({
17502
17672
  #fragments = [];
17503
17673
  /** @type {Map<string, PerMessageDeflate>} */
17504
17674
  #extensions;
17505
- constructor(ws, extensions) {
17675
+ /** @type {number} */
17676
+ #maxFragments;
17677
+ /** @type {number} */
17678
+ #maxPayloadSize;
17679
+ /**
17680
+ * @param {import('./websocket').WebSocket} ws
17681
+ * @param {Map<string, string>|null} extensions
17682
+ * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options]
17683
+ */
17684
+ constructor(ws, extensions, options = {}) {
17506
17685
  super();
17507
17686
  this.ws = ws;
17508
17687
  this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions;
17688
+ this.#maxFragments = options.maxFragments ?? 0;
17689
+ this.#maxPayloadSize = options.maxPayloadSize ?? 0;
17509
17690
  if (this.#extensions.has("permessage-deflate")) {
17510
- this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions));
17691
+ this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options));
17511
17692
  }
17512
17693
  }
17513
17694
  /**
@@ -17520,6 +17701,13 @@ var require_receiver = __commonJS({
17520
17701
  this.#loop = true;
17521
17702
  this.run(callback);
17522
17703
  }
17704
+ #validatePayloadLength() {
17705
+ if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength + this.#fragmentsBytes > this.#maxPayloadSize) {
17706
+ failWebsocketConnectionWithCode(this.ws, 1009, "Payload size exceeds maximum allowed size");
17707
+ return false;
17708
+ }
17709
+ return true;
17710
+ }
17523
17711
  /**
17524
17712
  * Runs whenever a new chunk is received.
17525
17713
  * Callback is called whenever there are no more chunks buffering,
@@ -17579,6 +17767,9 @@ var require_receiver = __commonJS({
17579
17767
  if (payloadLength <= 125) {
17580
17768
  this.#info.payloadLength = payloadLength;
17581
17769
  this.#state = parserStates.READ_DATA;
17770
+ if (!this.#validatePayloadLength()) {
17771
+ return;
17772
+ }
17582
17773
  } else if (payloadLength === 126) {
17583
17774
  this.#state = parserStates.PAYLOADLENGTH_16;
17584
17775
  } else if (payloadLength === 127) {
@@ -17599,19 +17790,25 @@ var require_receiver = __commonJS({
17599
17790
  const buffer = this.consume(2);
17600
17791
  this.#info.payloadLength = buffer.readUInt16BE(0);
17601
17792
  this.#state = parserStates.READ_DATA;
17793
+ if (!this.#validatePayloadLength()) {
17794
+ return;
17795
+ }
17602
17796
  } else if (this.#state === parserStates.PAYLOADLENGTH_64) {
17603
17797
  if (this.#byteOffset < 8) {
17604
17798
  return callback();
17605
17799
  }
17606
17800
  const buffer = this.consume(8);
17607
17801
  const upper = buffer.readUInt32BE(0);
17608
- if (upper > 2 ** 31 - 1) {
17802
+ const lower = buffer.readUInt32BE(4);
17803
+ if (upper !== 0 || lower > 2 ** 31 - 1) {
17609
17804
  failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes.");
17610
17805
  return;
17611
17806
  }
17612
- const lower = buffer.readUInt32BE(4);
17613
- this.#info.payloadLength = (upper << 8) + lower;
17807
+ this.#info.payloadLength = lower;
17614
17808
  this.#state = parserStates.READ_DATA;
17809
+ if (!this.#validatePayloadLength()) {
17810
+ return;
17811
+ }
17615
17812
  } else if (this.#state === parserStates.READ_DATA) {
17616
17813
  if (this.#byteOffset < this.#info.payloadLength) {
17617
17814
  return callback();
@@ -17622,32 +17819,46 @@ var require_receiver = __commonJS({
17622
17819
  this.#state = parserStates.INFO;
17623
17820
  } else {
17624
17821
  if (!this.#info.compressed) {
17625
- this.#fragments.push(body);
17822
+ if (!this.writeFragments(body)) {
17823
+ return;
17824
+ }
17825
+ if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
17826
+ failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message);
17827
+ return;
17828
+ }
17626
17829
  if (!this.#info.fragmented && this.#info.fin) {
17627
- const fullMessage = Buffer.concat(this.#fragments);
17628
- websocketMessageReceived(this.ws, this.#info.binaryType, fullMessage);
17629
- this.#fragments.length = 0;
17830
+ websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments());
17630
17831
  }
17631
17832
  this.#state = parserStates.INFO;
17632
17833
  } else {
17633
- this.#extensions.get("permessage-deflate").decompress(body, this.#info.fin, (error, data) => {
17634
- if (error) {
17635
- closeWebSocketConnection(this.ws, 1007, error.message, error.message.length);
17636
- return;
17637
- }
17638
- this.#fragments.push(data);
17639
- if (!this.#info.fin) {
17640
- this.#state = parserStates.INFO;
17834
+ this.#extensions.get("permessage-deflate").decompress(
17835
+ body,
17836
+ this.#info.fin,
17837
+ (error, data) => {
17838
+ if (error) {
17839
+ const code = error instanceof MessageSizeExceededError ? 1009 : 1007;
17840
+ failWebsocketConnectionWithCode(this.ws, code, error.message);
17841
+ return;
17842
+ }
17843
+ if (!this.writeFragments(data)) {
17844
+ return;
17845
+ }
17846
+ if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
17847
+ failWebsocketConnectionWithCode(this.ws, 1009, new MessageSizeExceededError().message);
17848
+ return;
17849
+ }
17850
+ if (!this.#info.fin) {
17851
+ this.#state = parserStates.INFO;
17852
+ this.#loop = true;
17853
+ this.run(callback);
17854
+ return;
17855
+ }
17856
+ websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments());
17641
17857
  this.#loop = true;
17858
+ this.#state = parserStates.INFO;
17642
17859
  this.run(callback);
17643
- return;
17644
17860
  }
17645
- websocketMessageReceived(this.ws, this.#info.binaryType, Buffer.concat(this.#fragments));
17646
- this.#loop = true;
17647
- this.#state = parserStates.INFO;
17648
- this.#fragments.length = 0;
17649
- this.run(callback);
17650
- });
17861
+ );
17651
17862
  this.#loop = false;
17652
17863
  break;
17653
17864
  }
@@ -17690,6 +17901,26 @@ var require_receiver = __commonJS({
17690
17901
  this.#byteOffset -= n;
17691
17902
  return buffer;
17692
17903
  }
17904
+ writeFragments(fragment) {
17905
+ if (this.#maxFragments > 0 && this.#fragments.length === this.#maxFragments) {
17906
+ failWebsocketConnectionWithCode(this.ws, 1008, "Too many message fragments");
17907
+ return false;
17908
+ }
17909
+ this.#fragmentsBytes += fragment.length;
17910
+ this.#fragments.push(fragment);
17911
+ return true;
17912
+ }
17913
+ consumeFragments() {
17914
+ const fragments = this.#fragments;
17915
+ if (fragments.length === 1) {
17916
+ this.#fragmentsBytes = 0;
17917
+ return fragments.shift();
17918
+ }
17919
+ const output = Buffer.concat(fragments, this.#fragmentsBytes);
17920
+ this.#fragments = [];
17921
+ this.#fragmentsBytes = 0;
17922
+ return output;
17923
+ }
17693
17924
  parseCloseBody(data) {
17694
17925
  assert(data.length !== 1);
17695
17926
  let code;
@@ -18137,7 +18368,13 @@ var require_websocket = __commonJS({
18137
18368
  */
18138
18369
  #onConnectionEstablished(response, parsedExtensions) {
18139
18370
  this[kResponse] = response;
18140
- const parser = new ByteParser(this, parsedExtensions);
18371
+ const webSocketOptions = this[kController]?.dispatcher?.webSocketOptions;
18372
+ const maxFragments = webSocketOptions?.maxFragments;
18373
+ const maxPayloadSize = webSocketOptions?.maxPayloadSize;
18374
+ const parser = new ByteParser(this, parsedExtensions, {
18375
+ maxFragments,
18376
+ maxPayloadSize
18377
+ });
18141
18378
  parser.on("drain", onParserDrain);
18142
18379
  parser.on("error", onParserError.bind(this));
18143
18380
  response.socket.ws = this;