@qwen-code/qwen-code 0.21.6 → 0.21.7-nightly.20260808.4ec0371e6

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 (323) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +50 -31
  2. package/bundled/qc-helper/docs/features/channels/dingtalk.md +41 -3
  3. package/bundled/qc-helper/docs/features/channels/feishu.md +13 -2
  4. package/bundled/qc-helper/docs/features/channels/github.md +13 -11
  5. package/bundled/qc-helper/docs/features/channels/gitlab.md +13 -11
  6. package/bundled/qc-helper/docs/features/channels/overview.md +49 -31
  7. package/bundled/qc-helper/docs/features/channels/plugins.md +2 -2
  8. package/bundled/qc-helper/docs/features/channels/qqbot.md +4 -2
  9. package/bundled/qc-helper/docs/features/channels/telegram.md +4 -2
  10. package/bundled/qc-helper/docs/features/channels/wecom.md +1 -1
  11. package/bundled/qc-helper/docs/features/code-review.md +31 -0
  12. package/bundled/qc-helper/docs/features/hooks.md +2 -0
  13. package/bundled/qc-helper/docs/qwen-serve.md +4 -1
  14. package/bundled/review/SKILL.md +52 -16
  15. package/chunks/{MaxSizedBox-2HFKP4LI.js → MaxSizedBox-COZBVNCI.js} +42 -41
  16. package/chunks/{StandaloneSessionPicker-RBV72M5N.js → StandaloneSessionPicker-3OF2FS6S.js} +59 -57
  17. package/chunks/{acpAgent-WO6JFCVQ.js → acpAgent-3JCJ6KWG.js} +236 -185
  18. package/chunks/{agent-AHGLYNZ4.js → agent-DBSC47CD.js} +39 -38
  19. package/chunks/{agent-headless-NTXKKGRO.js → agent-headless-ZJHZ7I3S.js} +39 -38
  20. package/chunks/{anthropicContentGenerator-3CAHEZBM.js → anthropicContentGenerator-SSFE2753.js} +15 -15
  21. package/chunks/{artifact-tool-RROCCJDA.js → artifact-tool-N652YE4L.js} +2 -2
  22. package/chunks/{askUserQuestion-2EPPBPUZ.js → askUserQuestion-ONW74PKJ.js} +2 -2
  23. package/chunks/{bridge-RPAU64CA.js → bridge-NFBYT4ZI.js} +43 -42
  24. package/chunks/{channel-management-service-IGEUOVRT.js → channel-management-service-LXSJXQGM.js} +19 -10
  25. package/chunks/{channel-settings-store-ON64MF7G.js → channel-settings-store-LABKDKSI.js} +46 -45
  26. package/chunks/{channel-worker-group-JWQK224X.js → channel-worker-group-MTW2AGT3.js} +4 -4
  27. package/chunks/{channel-worker-manager-77E3OXRQ.js → channel-worker-manager-UU6PTQSI.js} +4 -4
  28. package/chunks/{channel-worker-supervisor-62YWUGP2.js → channel-worker-supervisor-5SRD24FG.js} +3 -3
  29. package/chunks/{chunk-XC656O42.js → chunk-22NBYCPD.js} +3 -3
  30. package/chunks/{chunk-K2B3X3E7.js → chunk-26ISE5EG.js} +4 -4
  31. package/chunks/{chunk-Z7JILXGX.js → chunk-2UUMVNYT.js} +3 -3
  32. package/chunks/{chunk-ACZRB7AD.js → chunk-3ARO4N5G.js} +3 -3
  33. package/chunks/{chunk-CJ5WLD5Y.js → chunk-3HS6Y4UA.js} +96 -22
  34. package/chunks/{chunk-MBEMTXQT.js → chunk-3K7FH2KQ.js} +1 -32
  35. package/chunks/{chunk-QYPT3QUD.js → chunk-3ULCB3NE.js} +3 -3
  36. package/chunks/{chunk-IMOQO6YL.js → chunk-4Q6N3SNL.js} +1 -1
  37. package/chunks/{chunk-3UOLYNTF.js → chunk-4QJJHIZ5.js} +23 -14
  38. package/chunks/{chunk-VGFPFM4U.js → chunk-5PGKKSO6.js} +42 -16
  39. package/chunks/{chunk-NGJOAKJY.js → chunk-5YT3Y33M.js} +3 -3
  40. package/chunks/{chunk-T4JSA7KU.js → chunk-64YLXLMY.js} +3 -3
  41. package/chunks/{chunk-5L6CQ4ZU.js → chunk-6M26GBKX.js} +2 -2
  42. package/chunks/{chunk-ZPPP6VCL.js → chunk-6ZRFAKXK.js} +1 -1
  43. package/chunks/{chunk-OP2OHZ7K.js → chunk-764F335K.js} +18 -9
  44. package/chunks/{chunk-PPUOYL77.js → chunk-77WOUGCA.js} +53 -22
  45. package/chunks/{chunk-33FNCQSY.js → chunk-7MH4J33A.js} +2 -2
  46. package/chunks/{chunk-S7CV4KO6.js → chunk-AB4A73VL.js} +2 -2
  47. package/chunks/{chunk-O7V7N4G7.js → chunk-ACHMWGC5.js} +198 -35
  48. package/chunks/{chunk-NKSF7HYF.js → chunk-AG3P2RES.js} +1 -1
  49. package/chunks/{chunk-6PEXNQTX.js → chunk-ALFTV7GA.js} +26 -2
  50. package/chunks/{chunk-JELIWHXD.js → chunk-AOHJKPKL.js} +1 -1
  51. package/chunks/{chunk-XA4TMLFN.js → chunk-APMRLB2H.js} +580 -394
  52. package/chunks/{chunk-75QMRMO7.js → chunk-APNNM3JC.js} +3 -3
  53. package/chunks/{chunk-GLNBDYUX.js → chunk-AXMWHKXA.js} +6 -2
  54. package/chunks/{chunk-VNQCPBC2.js → chunk-B23P3YWE.js} +3 -3
  55. package/chunks/{chunk-H36SETQS.js → chunk-B2GJNDTV.js} +1 -1
  56. package/chunks/{chunk-Q5RM32DR.js → chunk-BCMJPTXV.js} +1 -1
  57. package/chunks/{chunk-A4VTILZT.js → chunk-BFSQBXHV.js} +714 -398
  58. package/chunks/{chunk-QMBEW7EW.js → chunk-BGG4MBYD.js} +2 -2
  59. package/chunks/{chunk-SLSWFHDF.js → chunk-BJKFFPX2.js} +4 -4
  60. package/chunks/{chunk-N2GJU6KI.js → chunk-BN3OROB3.js} +12 -12
  61. package/chunks/chunk-CE5UCTKO.js +3508 -0
  62. package/chunks/{chunk-2UISUFHQ.js → chunk-CJXIIILK.js} +3 -3
  63. package/chunks/{chunk-WK4TJUEA.js → chunk-CKASRHZI.js} +1 -1
  64. package/chunks/chunk-CPG6P4GG.js +82 -0
  65. package/chunks/{chunk-KKN2IE7Q.js → chunk-CTJLZLB5.js} +1 -1
  66. package/chunks/{chunk-DIEFUBV6.js → chunk-DIWZNWZT.js} +205 -35
  67. package/chunks/{chunk-CA4UIDFU.js → chunk-DPH3MUAP.js} +1 -1
  68. package/chunks/{chunk-4LKVQFHM.js → chunk-DREZZAZM.js} +2 -2
  69. package/chunks/{chunk-2DNKEBXY.js → chunk-EI3HZX6C.js} +1 -1
  70. package/chunks/{chunk-U25CMJYY.js → chunk-EKPKKXY2.js} +1 -1
  71. package/chunks/{chunk-432XCUHF.js → chunk-EQL65XGA.js} +1 -1
  72. package/chunks/{chunk-TYERNYH4.js → chunk-EUNWC2VS.js} +2 -2
  73. package/chunks/{chunk-4JH77A2U.js → chunk-EZ53KMUN.js} +1 -1
  74. package/chunks/{chunk-HY25ULVN.js → chunk-F3LPXDJP.js} +157 -56
  75. package/chunks/{chunk-D3UEZIQH.js → chunk-FJ6YHWHZ.js} +2 -2
  76. package/chunks/{chunk-UH7Z7Y45.js → chunk-FOGU3LJX.js} +1 -1
  77. package/chunks/{chunk-E4WHKETF.js → chunk-FVKHVJZQ.js} +2 -49
  78. package/chunks/{chunk-YZQTA3ID.js → chunk-GDXET5XU.js} +31 -3396
  79. package/chunks/{chunk-A5YZ3FA2.js → chunk-GM463R2B.js} +1 -1
  80. package/chunks/{chunk-MOHAWIAW.js → chunk-GNPNYXJB.js} +2 -2
  81. package/chunks/{chunk-SUKEUUAA.js → chunk-GUFY6D3E.js} +1 -1
  82. package/chunks/{chunk-FZFP7RZI.js → chunk-H2352CX2.js} +3 -3
  83. package/chunks/{chunk-GWRHVJY2.js → chunk-HKCYGZZ4.js} +22 -22
  84. package/chunks/{chunk-3PRJYMXC.js → chunk-HUWENAHO.js} +1 -1
  85. package/chunks/{chunk-G5NNWEYE.js → chunk-HY2INPTA.js} +4 -4
  86. package/chunks/{chunk-WVAESIM6.js → chunk-IA7TGCN2.js} +4 -4
  87. package/chunks/{chunk-HU5TUALO.js → chunk-IIJEYBNH.js} +3 -3
  88. package/chunks/{chunk-XM2O73NC.js → chunk-IMK3SJ43.js} +5703 -4343
  89. package/chunks/{chunk-4S4OEQ6U.js → chunk-J6SZID63.js} +2 -2
  90. package/chunks/{chunk-OWSW7EYP.js → chunk-JACAHYEN.js} +7 -7
  91. package/chunks/{chunk-R5RBXLNC.js → chunk-JRIJOZXO.js} +5 -5
  92. package/chunks/{chunk-SQOMTWQT.js → chunk-JSJTZ6GO.js} +4 -4
  93. package/chunks/{chunk-VWOVHOTT.js → chunk-KJZ26VBX.js} +1 -1
  94. package/chunks/{chunk-BFHXDAR7.js → chunk-KKBPOU75.js} +1 -1
  95. package/chunks/{chunk-TGGEZINK.js → chunk-KKRGVSHC.js} +7 -7
  96. package/chunks/{chunk-RK2EE3T7.js → chunk-KPMB4JEZ.js} +4 -4
  97. package/chunks/{chunk-MKVZE4ZJ.js → chunk-KTJFU7RT.js} +3 -2
  98. package/chunks/{chunk-MGSSJT27.js → chunk-L4N6TIP7.js} +5 -3
  99. package/chunks/{chunk-U4AF3QLU.js → chunk-L4OW63GW.js} +8 -8
  100. package/chunks/{chunk-C4CBJQKY.js → chunk-LDUGDB5H.js} +1 -1
  101. package/chunks/{chunk-W5DXUTXD.js → chunk-LDY4J4G6.js} +8 -8
  102. package/chunks/{chunk-GK2H5GRC.js → chunk-LMEIS6WW.js} +16 -6
  103. package/chunks/{chunk-6O5DVH27.js → chunk-M6HMMKVG.js} +1 -1
  104. package/chunks/{chunk-TOGZTG4X.js → chunk-MIA37QO3.js} +2 -2
  105. package/chunks/{chunk-536SWZTA.js → chunk-MV7VUCIG.js} +4 -4
  106. package/chunks/{chunk-T5U6IM4C.js → chunk-MVUQRLOH.js} +3 -3
  107. package/chunks/{chunk-GLWP3FDB.js → chunk-MZSJ43WV.js} +31 -2
  108. package/chunks/{chunk-UGTWD35F.js → chunk-NLREQJFK.js} +1 -1
  109. package/chunks/{chunk-RFUHDCNF.js → chunk-O7VQ3F22.js} +1 -1
  110. package/chunks/{chunk-3RXUYQJI.js → chunk-OIVKILPI.js} +49 -0
  111. package/chunks/{chunk-LBWNSLJK.js → chunk-ONSZH6VM.js} +2 -2
  112. package/chunks/{chunk-4WTAQEHV.js → chunk-OQTXYMKW.js} +3 -3
  113. package/chunks/{chunk-DYA25Y7U.js → chunk-OWMAZHIX.js} +1 -1
  114. package/chunks/{chunk-LAAFLUQV.js → chunk-P74TZRXD.js} +2 -2
  115. package/chunks/{chunk-BOGOR4HB.js → chunk-P7HUJDBZ.js} +7 -7
  116. package/chunks/chunk-PJRW65JO.js +107 -0
  117. package/chunks/{chunk-D7D7RXIJ.js → chunk-PYQADEFD.js} +6 -1
  118. package/chunks/{chunk-WO2B5E5B.js → chunk-Q3JQ7OSU.js} +1 -1
  119. package/chunks/{chunk-3LZKY4V4.js → chunk-QKJT5K4Q.js} +5 -5
  120. package/chunks/{chunk-OXX3FG2N.js → chunk-R2KZWK5Z.js} +3 -3
  121. package/chunks/{chunk-QZKYZCN3.js → chunk-REHWPCG2.js} +3 -3
  122. package/chunks/{chunk-2POQWYM6.js → chunk-RFA6VDCR.js} +3 -3
  123. package/chunks/{chunk-DIT4V3XH.js → chunk-RGTB44BO.js} +1 -1
  124. package/chunks/{chunk-SQC6K5HI.js → chunk-RPWVIXDB.js} +19 -2
  125. package/chunks/{chunk-ODPXHGLL.js → chunk-RZMGG3HP.js} +2 -2
  126. package/chunks/{chunk-2AGOQ7QO.js → chunk-S6HYI3MF.js} +118 -6
  127. package/chunks/chunk-SAH4BD2J.js +92 -0
  128. package/chunks/{chunk-JE44IPH6.js → chunk-SDUDZNF4.js} +2 -2
  129. package/chunks/{chunk-YAVY33G4.js → chunk-SEZ556DZ.js} +1 -1
  130. package/chunks/chunk-SOORFWKY.js +155 -0
  131. package/chunks/{chunk-KHUA3NQV.js → chunk-TAOSTUHI.js} +2 -2
  132. package/chunks/{chunk-VSALQLT7.js → chunk-TSYIQDG7.js} +1 -1
  133. package/chunks/{chunk-ULPQQSDN.js → chunk-TX3KSSDN.js} +3 -3
  134. package/chunks/{chunk-KVUBYJDM.js → chunk-TZEZYNYD.js} +1 -1
  135. package/chunks/{chunk-24ER7UV4.js → chunk-UFALT4LK.js} +1 -1
  136. package/chunks/{chunk-GESMMPAK.js → chunk-UKAYEQDU.js} +91 -63
  137. package/chunks/{chunk-XC2VAFVZ.js → chunk-UVX4Y6IN.js} +1 -1
  138. package/chunks/chunk-VDS2WYM5.js +244 -0
  139. package/chunks/{chunk-DVBEGGLG.js → chunk-VLFX3L3X.js} +10 -9
  140. package/chunks/{chunk-WNU7TZTO.js → chunk-VT3VNFVW.js} +3 -3
  141. package/chunks/{chunk-6WBWIPBF.js → chunk-WAUGQKUU.js} +4 -64
  142. package/chunks/{chunk-URN76TKR.js → chunk-WCG5O7IP.js} +2 -2
  143. package/chunks/{chunk-PX5DNLSA.js → chunk-XCG76UE6.js} +18 -10
  144. package/chunks/{chunk-TSERKWCX.js → chunk-XCWO3SMQ.js} +3 -3
  145. package/chunks/{chunk-5MJGUQU5.js → chunk-XIDHBXUI.js} +3 -3
  146. package/chunks/{chunk-3LGZEYOF.js → chunk-YHEEE624.js} +2 -2
  147. package/chunks/{chunk-SKNE3KQC.js → chunk-Z5ZAWED3.js} +19 -10
  148. package/chunks/{chunk-YMBOEAF4.js → chunk-Z6W3XDLN.js} +1 -1
  149. package/chunks/{chunk-EXCEQD22.js → chunk-ZKUJ4AO7.js} +4 -4
  150. package/chunks/{chunk-RHTTKJTP.js → chunk-ZQGHESAS.js} +1 -1
  151. package/chunks/{chunk-WUC6ZFXO.js → chunk-ZWBUH5UP.js} +1 -1
  152. package/chunks/{computer-use-5HXJ2P4X.js → computer-use-QLJ27OCZ.js} +39 -38
  153. package/chunks/{config-utils-VXD4SPVR.js → config-utils-KIEXWA4F.js} +4 -4
  154. package/chunks/{contextCommand-7BEHRX2H.js → contextCommand-JDTOJRBO.js} +41 -40
  155. package/chunks/{core-runtime-U4VJ5TIV.js → core-runtime-MZIAVYQC.js} +43 -42
  156. package/chunks/{create-sub-session-6EWLAZD5.js → create-sub-session-QIDZUOPU.js} +2 -2
  157. package/chunks/{create-sub-session-QZNQY332.js → create-sub-session-YBBCNSHE.js} +39 -38
  158. package/chunks/{cron-create-CCRIULJE.js → cron-create-VONA5JYY.js} +4 -4
  159. package/chunks/{cron-delete-FCFW6BGP.js → cron-delete-5JXSP2MI.js} +4 -4
  160. package/chunks/{cron-list-QDBVCHRF.js → cron-list-KE4F2CIR.js} +4 -4
  161. package/chunks/{daemon-YI5RY62O.js → daemon-SCTQMM7Z.js} +50 -2
  162. package/chunks/{daemon-status-provider-UJUGTDTL.js → daemon-status-provider-BZ7RD4ZJ.js} +47 -46
  163. package/chunks/{daemon-trust-policy-ZHDD5VYQ.js → daemon-trust-policy-2E4C3M7S.js} +45 -44
  164. package/chunks/{daemon-trust-policy-monitor-5SHYBDGA.js → daemon-trust-policy-monitor-UYLFH6RW.js} +45 -44
  165. package/chunks/{deferred-core-runtime-QWAEBTR5.js → deferred-core-runtime-6XZYMJZB.js} +39 -38
  166. package/chunks/{display-image-GUJA352B.js → display-image-NQRSIBXM.js} +4 -4
  167. package/chunks/{dist-SFQ34F4M.js → dist-26RK5XZO.js} +1 -1
  168. package/chunks/{dist-DPPHJAVL.js → dist-BATY7GI4.js} +187 -6
  169. package/chunks/{dist-A7H2KKUC.js → dist-HIACTZEK.js} +332 -113
  170. package/chunks/{dist-3BMEUGTG.js → dist-IRL7WA5Z.js} +1 -1
  171. package/chunks/{dist-HVBMEYWK.js → dist-KVISB2O2.js} +1 -1
  172. package/chunks/{dist-KS4O2NKE.js → dist-MBF3I5MX.js} +14 -8
  173. package/chunks/{dist-7JGAAQSC.js → dist-RCH3I7SS.js} +2 -2
  174. package/chunks/{dist-C5U4LJKW.js → dist-TUSWNE2I.js} +5 -4
  175. package/chunks/{earlyInputCapture-5BMSGKOI.js → earlyInputCapture-LATQCGDC.js} +40 -39
  176. package/chunks/{edit-IVQQVYYK.js → edit-72DP57CD.js} +39 -38
  177. package/chunks/{enter-worktree-P3DF2N6O.js → enter-worktree-B4FY2ZPP.js} +39 -38
  178. package/chunks/{enterPlanMode-KKTDVLAD.js → enterPlanMode-TQBWGCPL.js} +39 -38
  179. package/chunks/{environment-W5TRDM3G.js → environment-MOGZGZDS.js} +42 -41
  180. package/chunks/{errors-GJJB36IG.js → errors-PGON5GH7.js} +41 -40
  181. package/chunks/{exit-worktree-LV5RLOCU.js → exit-worktree-EYUD4YP2.js} +39 -38
  182. package/chunks/{exitPlanMode-TUGOB2LL.js → exitPlanMode-4Q7BSQXR.js} +39 -38
  183. package/chunks/{fast-path-2FU23PAQ.js → fast-path-WI7D5MER.js} +23 -3
  184. package/chunks/{fast-path-settings-WQJU2LAT.js → fast-path-settings-YBRL24DB.js} +2 -2
  185. package/chunks/{gemini-KDULDQPP.js → gemini-ZXURGM6Y.js} +87 -82
  186. package/chunks/{geminiContentGenerator-LOCFHNVA.js → geminiContentGenerator-EOODO75Y.js} +6 -6
  187. package/chunks/{glob-Z4NQFKWS.js → glob-QNRIUOS6.js} +39 -38
  188. package/chunks/{goal-tools-3AZKX5WQ.js → goal-tools-QSYW65HV.js} +3 -3
  189. package/chunks/{grep-Z67Z7EN6.js → grep-56MTW67B.js} +39 -38
  190. package/chunks/{handleAutoUpdate-DFUZE6I6.js → handleAutoUpdate-XGFIPVT4.js} +43 -42
  191. package/chunks/{i18n-R4FMZ7N2.js → i18n-RZB35L4B.js} +40 -39
  192. package/chunks/{image-gen-4CQJPQP5.js → image-gen-OE2EEKN3.js} +9 -9
  193. package/chunks/{initializer-DK672ZVE.js → initializer-YPVMTMKD.js} +46 -45
  194. package/chunks/{installationInfo-PO4Z3ES7.js → installationInfo-ZTMTMYNW.js} +40 -39
  195. package/chunks/{keychain-token-storage-7BT4TQ2A.js → keychain-token-storage-TVAMTNP7.js} +2 -2
  196. package/chunks/{list-QXQF6C53.js → list-NIW3WID5.js} +48 -47
  197. package/chunks/{list-agents-GC4BRET7.js → list-agents-Z4WABFDZ.js} +2 -2
  198. package/chunks/{loadedSettingsAdapter-4D7GUGW6.js → loadedSettingsAdapter-VSLILTOZ.js} +45 -44
  199. package/chunks/{loggingContentGenerator-2P3MNACM.js → loggingContentGenerator-KFZYVAGV.js} +17 -17
  200. package/chunks/{loop-wakeup-SQQSBMEY.js → loop-wakeup-UZ5RL5Y2.js} +5 -5
  201. package/chunks/{ls-63CC3NNX.js → ls-TVHDGIES.js} +4 -4
  202. package/chunks/{lsp-P6NVJVNT.js → lsp-CVN6OQPI.js} +2 -2
  203. package/chunks/{managed-npm-update-LWVJQTWO.js → managed-npm-update-WHTA2K5V.js} +40 -39
  204. package/chunks/{mcp-GHETAR6V.js → mcp-7KGK3CS3.js} +45 -44
  205. package/chunks/{monitor-4T7W4M6Q.js → monitor-FDWEJQWP.js} +39 -38
  206. package/chunks/nonInteractiveCli-2MVJ6TCS.js +155 -0
  207. package/chunks/{notebook-edit-OC2V7U5D.js → notebook-edit-ZUVK2XWE.js} +47 -38
  208. package/chunks/{openaiContentGenerator-RAJUFWQY.js → openaiContentGenerator-TNLWOPH5.js} +28 -21
  209. package/chunks/{pidfile-HVPYVRLS.js → pidfile-BB6SKPH2.js} +40 -39
  210. package/chunks/{process-registry-2CHQBXH5.js → process-registry-PMJOA5CO.js} +15 -0
  211. package/chunks/{processUtils-VIQ4JHVX.js → processUtils-WKHJOPDH.js} +2 -2
  212. package/chunks/{qwenContentGenerator-2QLCUFNZ.js → qwenContentGenerator-FZS2DYF7.js} +48 -46
  213. package/chunks/{qwenOAuth2-J2X3EN43.js → qwenOAuth2-UYMYRXBB.js} +9 -9
  214. package/chunks/{read-file-ZNAN2B26.js → read-file-FMTE6LPA.js} +10 -10
  215. package/chunks/{read-mcp-resource-RTSSEER5.js → read-mcp-resource-PZ4ZF6YL.js} +2 -2
  216. package/chunks/{record-artifact-E6AWQU2Z.js → record-artifact-P4HFMS7X.js} +3 -3
  217. package/chunks/{resumeHistoryUtils-RCY7AL5Y.js → resumeHistoryUtils-Z34RCZFF.js} +45 -43
  218. package/chunks/{ripGrep-C3KMLZM5.js → ripGrep-DUIYUZGM.js} +39 -38
  219. package/chunks/{run-qwen-serve-3JN75CIQ.js → run-qwen-serve-KOHHR3F4.js} +145 -62
  220. package/chunks/{runtime-VUA4WQYD.js → runtime-K4NTZSAU.js} +50 -49
  221. package/chunks/{scheduler-Z4IBXCOY.js → scheduler-6G6AMURS.js} +39 -38
  222. package/chunks/{sdk-exporters-http-IL2346MJ.js → sdk-exporters-http-KHAB5JSD.js} +2 -2
  223. package/chunks/{sdk-impl-SYKGVWOZ.js → sdk-impl-KD7FSTC3.js} +2 -2
  224. package/chunks/{send-message-TL6FIMMN.js → send-message-CAMSLG2L.js} +6 -5
  225. package/chunks/{serve-67T3P7XI.js → serve-NMG2TM5K.js} +46 -45
  226. package/chunks/{server-46ZO2CLV.js → server-FS7KDELS.js} +679 -360
  227. package/chunks/{session-B4IFAFC4.js → session-XZADUVKJ.js} +82 -81
  228. package/chunks/{settings-AI2BTBOZ.js → settings-G75R6FOA.js} +44 -43
  229. package/chunks/{shell-BKII3B6E.js → shell-3D3PMQHE.js} +39 -38
  230. package/chunks/{skill-6CFOWVGA.js → skill-TSEYMVQ2.js} +14 -14
  231. package/chunks/{skill-settings-6BFQWMW4.js → skill-settings-HJC2CPBJ.js} +44 -43
  232. package/chunks/{spawnChannel-FJXW35U7.js → spawnChannel-YWCN74G5.js} +41 -40
  233. package/chunks/{standalone-update-WVINHRNS.js → standalone-update-HLYOLX6V.js} +41 -40
  234. package/chunks/{startInteractiveUI-YE57CJ57.js → startInteractiveUI-ROUIQ5KU.js} +486 -187
  235. package/chunks/{syntheticOutput-BN7E626U.js → syntheticOutput-PEBJQYJV.js} +3 -3
  236. package/chunks/{task-create-Q727MXHJ.js → task-create-5NWCQSJF.js} +10 -9
  237. package/chunks/{task-list-G6KPQ5JT.js → task-list-53265TRZ.js} +5 -5
  238. package/chunks/{task-stop-TNXRNAL2.js → task-stop-FPCOIRYX.js} +2 -2
  239. package/chunks/{task-update-YB7PXO4R.js → task-update-5HN577LS.js} +10 -9
  240. package/chunks/{team-create-GNC7NFY6.js → team-create-OTP5SSB2.js} +39 -38
  241. package/chunks/{team-delete-GDO7H2T4.js → team-delete-MMQB4OSC.js} +5 -5
  242. package/chunks/{team-plan-approval-ECALJLIO.js → team-plan-approval-TQX5TMXU.js} +39 -38
  243. package/chunks/{terminal-image-renderer-II74TFVW.js → terminal-image-renderer-KF3GKNWW.js} +45 -39
  244. package/chunks/{theme-manager-2MGEDD22.js → theme-manager-XVWAAGAM.js} +40 -39
  245. package/chunks/{todoWrite-MHWHO5UO.js → todoWrite-JGV6VLOX.js} +4 -4
  246. package/chunks/{tool-search-S6LRRACA.js → tool-search-7N4D4O56.js} +14 -13
  247. package/chunks/{total-session-admission-7WVAWQPU.js → total-session-admission-ZQ4VKIRW.js} +43 -42
  248. package/chunks/{trustedFolders-NFS4KHO4.js → trustedFolders-4XYFPWVV.js} +40 -39
  249. package/chunks/{update-relaunch-Q5HLZ6UW.js → update-relaunch-L4GSBLUU.js} +5 -5
  250. package/chunks/{updateCheck-UOVZSTP7.js → updateCheck-PCUTVRFE.js} +42 -41
  251. package/chunks/{useAutoAcceptIndicator-PC6MOJCO.js → useAutoAcceptIndicator-WMXY7MND.js} +47 -46
  252. package/chunks/{validateNonInterActiveAuth-YMQP3ZM7.js → validateNonInterActiveAuth-5S3U2D56.js} +78 -77
  253. package/chunks/{version-T4AQFZJH.js → version-P57IQU2T.js} +1 -1
  254. package/chunks/{web-fetch-JQCJHEEX.js → web-fetch-5ZLLLCDD.js} +13 -13
  255. package/chunks/{web-search-QGZ2KY4G.js → web-search-NELKANTW.js} +10 -10
  256. package/chunks/web-shell-static-O73YPVVC.js +33 -0
  257. package/chunks/{workflow-YIT27YWZ.js → workflow-RXKBF3LO.js} +42 -40
  258. package/chunks/{workspace-providers-status-FIDZQ2PL.js → workspace-providers-status-HAEMNAWC.js} +48 -47
  259. package/chunks/{workspace-registration-store-RCSPE4DU.js → workspace-registration-store-U3U3YM6V.js} +1 -1
  260. package/chunks/{workspace-registry-5PEUCY6E.js → workspace-registry-ZFP33GVB.js} +43 -42
  261. package/chunks/{workspace-service-LANDVPL7.js → workspace-service-QMISJBMA.js} +50 -49
  262. package/chunks/{workspace-skills-status-2IQVJNIN.js → workspace-skills-status-K7EOUGXL.js} +46 -45
  263. package/chunks/{workspace-trust-reconciler-CZPZZCZC.js → workspace-trust-reconciler-BFPKULDZ.js} +50 -49
  264. package/chunks/{write-file-G5VNGCOG.js → write-file-2F76RRFE.js} +39 -38
  265. package/chunks/{zoom-image-6RBLD7X6.js → zoom-image-DPR22XWY.js} +10 -10
  266. package/cli.js +12 -12
  267. package/package.json +3 -3
  268. package/web-shell/assets/{arc-B-Vtkp1W.js → arc-CunFPPcQ.js} +1 -1
  269. package/web-shell/assets/{architectureDiagram-3BPJPVTR-qmTXIj64.js → architectureDiagram-3BPJPVTR-D3SqCgeM.js} +1 -1
  270. package/web-shell/assets/{blockDiagram-GPEHLZMM-ZlnXEtdP.js → blockDiagram-GPEHLZMM-CPRx90S_.js} +1 -1
  271. package/web-shell/assets/{c4Diagram-AAUBKEIU-Wyoirf6Z.js → c4Diagram-AAUBKEIU-CahP9Ue4.js} +1 -1
  272. package/web-shell/assets/channel-zbv7GWAw.js +1 -0
  273. package/web-shell/assets/{chunk-2J33WTMH-WQwbq9d8.js → chunk-2J33WTMH-DckIWZ12.js} +1 -1
  274. package/web-shell/assets/{chunk-4BX2VUAB-DQKnAXC4.js → chunk-4BX2VUAB-D2Kfctyn.js} +1 -1
  275. package/web-shell/assets/{chunk-55IACEB6-DIdgXNcO.js → chunk-55IACEB6-DkI11FTX.js} +1 -1
  276. package/web-shell/assets/{chunk-727SXJPM-CUwGOLEd.js → chunk-727SXJPM-rR-TSCIi.js} +1 -1
  277. package/web-shell/assets/{chunk-AQP2D5EJ-CCBGZFZ4.js → chunk-AQP2D5EJ-DFGKcGRO.js} +1 -1
  278. package/web-shell/assets/{chunk-FMBD7UC4-DMGXProk.js → chunk-FMBD7UC4-CjWqcTPE.js} +1 -1
  279. package/web-shell/assets/{chunk-ND2GUHAM-yejcFqsh.js → chunk-ND2GUHAM-RXe-87UV.js} +1 -1
  280. package/web-shell/assets/{chunk-QZHKN3VN-DxCyqTf7.js → chunk-QZHKN3VN-Dz0c_Yrn.js} +1 -1
  281. package/web-shell/assets/classDiagram-4FO5ZUOK-DSjLkJJZ.js +1 -0
  282. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DSjLkJJZ.js +1 -0
  283. package/web-shell/assets/{cose-bilkent-S5V4N54A-DOrF3cg_.js → cose-bilkent-S5V4N54A-ZHF0-jvV.js} +1 -1
  284. package/web-shell/assets/{dagre-BM42HDAG-Be6CdYQ_.js → dagre-BM42HDAG-7Umz_ygJ.js} +1 -1
  285. package/web-shell/assets/{diagram-2AECGRRQ-B_Rjsft2.js → diagram-2AECGRRQ-DomN8nxq.js} +1 -1
  286. package/web-shell/assets/{diagram-5GNKFQAL-BvQbKSm1.js → diagram-5GNKFQAL-eebvj2OL.js} +1 -1
  287. package/web-shell/assets/{diagram-KO2AKTUF-BsdmMdpS.js → diagram-KO2AKTUF-IR1mmn9d.js} +1 -1
  288. package/web-shell/assets/{diagram-LMA3HP47-CrQlBaNr.js → diagram-LMA3HP47-CKysx5KF.js} +1 -1
  289. package/web-shell/assets/{diagram-OG6HWLK6-aB1MD_DL.js → diagram-OG6HWLK6-cBy5puHn.js} +1 -1
  290. package/web-shell/assets/{erDiagram-TEJ5UH35-F-eUUn9n.js → erDiagram-TEJ5UH35-B5RJagPG.js} +1 -1
  291. package/web-shell/assets/{flowDiagram-I6XJVG4X-DY_d8lUK.js → flowDiagram-I6XJVG4X-CfHgDmPg.js} +1 -1
  292. package/web-shell/assets/{ganttDiagram-6RSMTGT7-Dqu7KBPg.js → ganttDiagram-6RSMTGT7-DUfFF5nb.js} +1 -1
  293. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-2IkU_VEj.js → gitGraphDiagram-PVQCEYII-M9dt57k5.js} +1 -1
  294. package/web-shell/assets/{index-QQlUCJGg.css → index-B8e-CkuC.css} +2 -2
  295. package/web-shell/assets/{index-BuSbqggh.js → index-CKjO4myk.js} +1 -1
  296. package/web-shell/assets/index-Dc-fTO0V.js +1768 -0
  297. package/web-shell/assets/{infoDiagram-5YYISTIA-C4orwzPw.js → infoDiagram-5YYISTIA-CTKMmIro.js} +1 -1
  298. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-fXUEfef_.js → ishikawaDiagram-YF4QCWOH-DJIJDP4s.js} +1 -1
  299. package/web-shell/assets/{journeyDiagram-JHISSGLW-Bs0I1_J5.js → journeyDiagram-JHISSGLW-DgRnvn6S.js} +1 -1
  300. package/web-shell/assets/{kanban-definition-UN3LZRKU-BPRj1dw_.js → kanban-definition-UN3LZRKU-VUwO8yrg.js} +1 -1
  301. package/web-shell/assets/{linear-DFS6ZDpW.js → linear-BCvgV5I_.js} +1 -1
  302. package/web-shell/assets/{mermaid.core-CZxjWMaO.js → mermaid.core-mv_kVV6q.js} +5 -5
  303. package/web-shell/assets/{mindmap-definition-RKZ34NQL-Dsr3PmNs.js → mindmap-definition-RKZ34NQL-sfnjMlOd.js} +1 -1
  304. package/web-shell/assets/{pieDiagram-4H26LBE5-D5Ngpz5Y.js → pieDiagram-4H26LBE5-BlhICse4.js} +1 -1
  305. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-WJK9I25z.js → quadrantDiagram-W4KKPZXB-BgTQzwen.js} +1 -1
  306. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CmrYcwOH.js → requirementDiagram-4Y6WPE33-CZ-FTrrN.js} +1 -1
  307. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-7SjCc4Mv.js → sankeyDiagram-5OEKKPKP-G5Wp_jn3.js} +1 -1
  308. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Dl9E0IRM.js → sequenceDiagram-3UESZ5HK-C8MKZ3i1.js} +1 -1
  309. package/web-shell/assets/{stateDiagram-AJRCARHV-CRRio7yV.js → stateDiagram-AJRCARHV-Bo0ZDm7y.js} +1 -1
  310. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-31TSCPcH.js +1 -0
  311. package/web-shell/assets/{timeline-definition-PNZ67QCA-DVyXjjfq.js → timeline-definition-PNZ67QCA-M3L9E01f.js} +1 -1
  312. package/web-shell/assets/{vennDiagram-CIIHVFJN-Nb2Lckzq.js → vennDiagram-CIIHVFJN-DD4eHCrm.js} +1 -1
  313. package/web-shell/assets/{wardley-L42UT6IY-DuL_otIP.js → wardley-L42UT6IY-DNEL_3g4.js} +1 -1
  314. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DVI9Q4Aa.js → wardleyDiagram-YWT4CUSO-q484OoqI.js} +1 -1
  315. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BNjAm7KD.js → xychartDiagram-2RQKCTM6-4mcNt1Yg.js} +1 -1
  316. package/web-shell/index.html +2 -2
  317. package/chunks/chunk-EMYZIABH.js +0 -81
  318. package/chunks/nonInteractiveCli-P4UKCJFM.js +0 -154
  319. package/web-shell/assets/channel-DXaHnfjS.js +0 -1
  320. package/web-shell/assets/classDiagram-4FO5ZUOK-BigU82A0.js +0 -1
  321. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BigU82A0.js +0 -1
  322. package/web-shell/assets/index-DrfC2e9s.js +0 -1768
  323. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-1atT7XaU.js +0 -1
@@ -5,14 +5,14 @@ import {
5
5
  isTranscribableVoiceModel,
6
6
  readVoiceLanguage,
7
7
  resolveVoiceTransport
8
- } from "./chunk-C4CBJQKY.js";
8
+ } from "./chunk-LDUGDB5H.js";
9
9
  import {
10
10
  resolvePath
11
- } from "./chunk-JELIWHXD.js";
11
+ } from "./chunk-AOHJKPKL.js";
12
12
  import {
13
13
  createDebugLogger,
14
14
  isSubpath
15
- } from "./chunk-3RXUYQJI.js";
15
+ } from "./chunk-OIVKILPI.js";
16
16
  import {
17
17
  init_esbuild_shims
18
18
  } from "./chunk-5O2XNYP6.js";
@@ -24,7 +24,7 @@ import {
24
24
  init_esbuild_shims();
25
25
  import process from "node:process";
26
26
  import { lookup as dnsLookup } from "node:dns/promises";
27
- import { isIP } from "node:net";
27
+ import { BlockList, isIP } from "node:net";
28
28
 
29
29
  // packages/cli/src/services/voice-keyterms.ts
30
30
  init_esbuild_shims();
@@ -238,6 +238,14 @@ var MIN_KEYTERM_ECHO_TOKENS = 8;
238
238
  var MIN_ABSOLUTE_KEYTERM_ECHO_TOKENS = 10;
239
239
  var MIN_KEYTERM_SET_ECHO_RATIO = 0.3;
240
240
  var debugLogger = createDebugLogger("VOICE_TRANSCRIBER");
241
+ var BLOCKED_TRANSITION_IPV6_ADDRESSES = new BlockList();
242
+ for (const [address, prefix] of [
243
+ ["64:ff9b:1::", 48],
244
+ ["2001::", 23],
245
+ ["2002::", 16]
246
+ ]) {
247
+ BLOCKED_TRANSITION_IPV6_ADDRESSES.addSubnet(address, prefix, "ipv6");
248
+ }
241
249
  function trimTrailingSlashes(value) {
242
250
  return value.replace(/\/+$/, "");
243
251
  }
@@ -264,35 +272,78 @@ function normalizeBaseUrl(baseUrl, modelName) {
264
272
  } catch {
265
273
  throw new Error(`Voice model '${modelName}' has an invalid baseUrl.`);
266
274
  }
267
- url.username = "";
268
- url.password = "";
275
+ if (url.username || url.password) {
276
+ throw new Error(
277
+ `Voice model '${modelName}' baseUrl must not contain embedded credentials.`
278
+ );
279
+ }
269
280
  return trimTrailingSlashes(url.toString());
270
281
  }
271
282
  __name(normalizeBaseUrl, "normalizeBaseUrl");
283
+ function normalizeAllowedVoiceBaseUrl(baseUrl) {
284
+ try {
285
+ const url = new URL(baseUrl.trim());
286
+ if (url.username || url.password) {
287
+ return void 0;
288
+ }
289
+ return trimTrailingSlashes(url.toString());
290
+ } catch {
291
+ return void 0;
292
+ }
293
+ }
294
+ __name(normalizeAllowedVoiceBaseUrl, "normalizeAllowedVoiceBaseUrl");
295
+ function isInsecureVoiceBaseUrlAllowed(settings, normalizedBaseUrl) {
296
+ const allowed = settings.merged.security?.allowedInsecureVoiceBaseUrls;
297
+ return Array.isArray(allowed) && allowed.some(
298
+ (candidate) => typeof candidate === "string" && normalizeAllowedVoiceBaseUrl(candidate) === normalizedBaseUrl
299
+ );
300
+ }
301
+ __name(isInsecureVoiceBaseUrlAllowed, "isInsecureVoiceBaseUrlAllowed");
272
302
  function normalizeHostname(hostname) {
273
303
  return hostname.toLowerCase().replace(/^\[|\]$/g, "");
274
304
  }
275
305
  __name(normalizeHostname, "normalizeHostname");
306
+ function normalizeIpAddress(address) {
307
+ const host = normalizeHostname(address);
308
+ if (isIP(host) !== 6) {
309
+ return host;
310
+ }
311
+ try {
312
+ return normalizeHostname(new URL(`http://[${host}]/`).hostname);
313
+ } catch {
314
+ return host;
315
+ }
316
+ }
317
+ __name(normalizeIpAddress, "normalizeIpAddress");
276
318
  function isLoopbackHost(hostname) {
277
319
  const host = normalizeHostname(hostname);
278
320
  return host === "localhost" || host === "127.0.0.1" || host === "::1";
279
321
  }
280
322
  __name(isLoopbackHost, "isLoopbackHost");
323
+ function isAwsIpv6MetadataAddress(hostname) {
324
+ const host = normalizeHostname(hostname);
325
+ if (isIP(host) !== 6) {
326
+ return false;
327
+ }
328
+ try {
329
+ return normalizeHostname(new URL(`http://[${host}]/`).hostname) === "fd00:ec2::254";
330
+ } catch {
331
+ return false;
332
+ }
333
+ }
334
+ __name(isAwsIpv6MetadataAddress, "isAwsIpv6MetadataAddress");
281
335
  function readIpv4CompatibleIpv6(host) {
282
336
  if (!host.startsWith("::") || host.startsWith("::ffff:")) {
283
337
  return void 0;
284
338
  }
285
339
  const parts = host.slice(2).split(":");
286
- if (parts.length === 0 || parts.length > 2 || parts.some((p) => !p)) {
340
+ if (parts.length === 0 || parts.length > 2 || parts.some((part) => !part)) {
287
341
  return void 0;
288
342
  }
289
343
  if (parts.some((part) => !/^[0-9a-f]{1,4}$/i.test(part))) {
290
344
  return void 0;
291
345
  }
292
346
  const hextets = parts.map((part) => Number.parseInt(part, 16));
293
- if (hextets.some((part) => !Number.isInteger(part) || part < 0 || part > 65535)) {
294
- return void 0;
295
- }
296
347
  const value = hextets.length === 1 ? hextets[0] : hextets[0] << 16 | hextets[1];
297
348
  return [
298
349
  value >>> 24 & 255,
@@ -302,39 +353,130 @@ function readIpv4CompatibleIpv6(host) {
302
353
  ].join(".");
303
354
  }
304
355
  __name(readIpv4CompatibleIpv6, "readIpv4CompatibleIpv6");
305
- function isPrivateNetworkIp(hostname) {
306
- const host = normalizeHostname(hostname);
307
- if (isLoopbackHost(host)) {
308
- return false;
356
+ function readIpv4MappedIpv6(host) {
357
+ const dotted = host.match(/^::ffff:(\d+(?:\.\d+){3})$/i);
358
+ if (dotted && isIP(dotted[1]) === 4) {
359
+ return dotted[1];
309
360
  }
310
- const ipv4Mapped = host.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
361
+ const hex = host.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);
362
+ if (!hex) {
363
+ return void 0;
364
+ }
365
+ return readIpv4HexPair(hex[1], hex[2]);
366
+ }
367
+ __name(readIpv4MappedIpv6, "readIpv4MappedIpv6");
368
+ function readIpv4HexPair(highHex, lowHex) {
369
+ const high = Number.parseInt(highHex, 16);
370
+ const low = Number.parseInt(lowHex, 16);
371
+ return [high >>> 8, high & 255, low >>> 8, low & 255].join(".");
372
+ }
373
+ __name(readIpv4HexPair, "readIpv4HexPair");
374
+ function readWellKnownNat64Ipv6(host) {
375
+ const prefix = "64:ff9b::";
376
+ if (!host.startsWith(prefix)) {
377
+ return void 0;
378
+ }
379
+ const suffix = host.slice(prefix.length);
380
+ if (!suffix) {
381
+ return "0.0.0.0";
382
+ }
383
+ const groups = suffix.split(":");
384
+ if (groups.length > 2 || groups.some((group) => !/^[0-9a-f]{1,4}$/i.test(group))) {
385
+ return void 0;
386
+ }
387
+ return groups.length === 1 ? readIpv4HexPair("0", groups[0]) : readIpv4HexPair(groups[0], groups[1]);
388
+ }
389
+ __name(readWellKnownNat64Ipv6, "readWellKnownNat64Ipv6");
390
+ function isBlockedTransitionIpv6Address(host) {
391
+ return isIP(host) === 6 && BLOCKED_TRANSITION_IPV6_ADDRESSES.check(host, "ipv6");
392
+ }
393
+ __name(isBlockedTransitionIpv6Address, "isBlockedTransitionIpv6Address");
394
+ function unwrapIpv6TransitionStep(host) {
395
+ const ipv4Mapped = readIpv4MappedIpv6(host);
311
396
  if (ipv4Mapped) {
312
- return isPrivateNetworkIp(ipv4Mapped[1]);
397
+ return { address: ipv4Mapped };
313
398
  }
314
- const ipv4Compatible = host.match(/^::(\d+\.\d+\.\d+\.\d+)$/);
399
+ const ipv4Compatible = readIpv4CompatibleIpv6(host);
315
400
  if (ipv4Compatible) {
316
- return isPrivateNetworkIp(ipv4Compatible[1]);
401
+ return { address: ipv4Compatible };
317
402
  }
318
- const normalizedIpv4Compatible = readIpv4CompatibleIpv6(host);
319
- if (normalizedIpv4Compatible) {
320
- return isPrivateNetworkIp(normalizedIpv4Compatible);
403
+ const nat64 = readWellKnownNat64Ipv6(host);
404
+ if (nat64) {
405
+ return { address: nat64 };
321
406
  }
322
407
  if (host.startsWith("::ffff:")) {
408
+ return "blocked";
409
+ }
410
+ return void 0;
411
+ }
412
+ __name(unwrapIpv6TransitionStep, "unwrapIpv6TransitionStep");
413
+ function isPrivateNetworkIp(hostname) {
414
+ const host = normalizeIpAddress(hostname);
415
+ if (isBlockedTransitionIpv6Address(host)) {
323
416
  return true;
324
417
  }
418
+ if (isLoopbackHost(host)) {
419
+ return false;
420
+ }
421
+ const step = unwrapIpv6TransitionStep(host);
422
+ if (step === "blocked") {
423
+ return true;
424
+ }
425
+ if (step) {
426
+ return isPrivateNetworkIp(step.address);
427
+ }
325
428
  if (isIP(host) === 4) {
326
429
  const [first = 0, second = 0] = host.split(".").map(Number);
327
430
  return first === 0 || first === 10 || first === 127 || first === 169 && second === 254 || first === 172 && second >= 16 && second <= 31 || first === 192 && second === 168 || first === 100 && second >= 64 && second <= 127;
328
431
  }
329
432
  if (isIP(host) === 6) {
330
- const firstHextet = Number.parseInt(host.split(":", 1)[0] || "", 16);
331
- const isLinkLocal = firstHextet >= 65152 && firstHextet <= 65215;
332
- const isUniqueLocal = (firstHextet & 65024) === 64512;
333
- return host === "::" || isLinkLocal || isUniqueLocal;
433
+ const firstHextet = Number.parseInt(host.split(":", 1)[0] || "0", 16);
434
+ return host === "::" || (firstHextet & 65472) === 65152 || (firstHextet & 65024) === 64512;
334
435
  }
335
436
  return false;
336
437
  }
337
438
  __name(isPrivateNetworkIp, "isPrivateNetworkIp");
439
+ function isAlwaysBlockedVoiceAddress(address) {
440
+ const host = normalizeIpAddress(address);
441
+ if (isBlockedTransitionIpv6Address(host)) {
442
+ return true;
443
+ }
444
+ if (isLoopbackHost(host)) {
445
+ return true;
446
+ }
447
+ const step = unwrapIpv6TransitionStep(host);
448
+ if (step === "blocked") {
449
+ return true;
450
+ }
451
+ if (step) {
452
+ return isAlwaysBlockedVoiceAddress(step.address);
453
+ }
454
+ if (isIP(host) === 4) {
455
+ const [first = 0, second = 0] = host.split(".").map(Number);
456
+ return first === 0 || first === 127 || first === 169 && second === 254 || host === "100.100.100.200";
457
+ }
458
+ if (isIP(host) === 6) {
459
+ const firstHextet = Number.parseInt(host.split(":", 1)[0] || "0", 16);
460
+ return host === "::" || isAwsIpv6MetadataAddress(host) || (firstHextet & 65472) === 65152;
461
+ }
462
+ return false;
463
+ }
464
+ __name(isAlwaysBlockedVoiceAddress, "isAlwaysBlockedVoiceAddress");
465
+ function isLoopbackVoiceAddress(address) {
466
+ const host = normalizeIpAddress(address);
467
+ if (isLoopbackHost(host)) {
468
+ return true;
469
+ }
470
+ const step = unwrapIpv6TransitionStep(host);
471
+ if (step && step !== "blocked") {
472
+ return isLoopbackVoiceAddress(step.address);
473
+ }
474
+ if (isIP(host) === 4) {
475
+ return host.startsWith("127.");
476
+ }
477
+ return false;
478
+ }
479
+ __name(isLoopbackVoiceAddress, "isLoopbackVoiceAddress");
338
480
  async function defaultLookupHost(hostname) {
339
481
  return dnsLookup(hostname, { all: true });
340
482
  }
@@ -345,9 +487,9 @@ async function assertVoiceBaseUrlNetworkAllowed(voiceConfig, lookupHost, abortSi
345
487
  return;
346
488
  }
347
489
  if (isIP(hostname) !== 0) {
348
- if (isPrivateNetworkIp(hostname)) {
490
+ if (isAlwaysBlockedVoiceAddress(hostname) || !voiceConfig.allowInsecureBaseUrl && isPrivateNetworkIp(hostname)) {
349
491
  throw new Error(
350
- `Voice model '${voiceConfig.model}' resolved to a private-network address.`
492
+ isLoopbackVoiceAddress(hostname) ? `Voice model '${voiceConfig.model}' uses a loopback address outside the accepted spellings. To use a local ASR endpoint, set the baseUrl to http://localhost, http://127.0.0.1, or http://[::1].` : `Voice model '${voiceConfig.model}' resolved to a private-network address.`
351
493
  );
352
494
  }
353
495
  return;
@@ -378,9 +520,13 @@ async function assertVoiceBaseUrlNetworkAllowed(voiceConfig, lookupHost, abortSi
378
520
  if (onAbort) abortSignal?.removeEventListener("abort", onAbort);
379
521
  }
380
522
  const records = Array.isArray(result) ? result : [result];
381
- if (records.some((record) => isPrivateNetworkIp(record.address))) {
523
+ if (records.some(
524
+ (record) => isAlwaysBlockedVoiceAddress(record.address) || !voiceConfig.allowInsecureBaseUrl && isPrivateNetworkIp(record.address)
525
+ )) {
382
526
  throw new Error(
383
- `Voice model '${voiceConfig.model}' resolved to a private-network address.`
527
+ records.some((record) => isLoopbackVoiceAddress(record.address)) ? `Voice model '${voiceConfig.model}' resolved to a loopback address. Loopback DNS results are always blocked; to use a local ASR endpoint, configure an explicit loopback baseUrl: http://localhost, http://127.0.0.1, or http://[::1].` : voiceConfig.allowInsecureBaseUrl && records.some(
528
+ (record) => isAlwaysBlockedVoiceAddress(record.address)
529
+ ) ? `Voice model '${voiceConfig.model}' resolved to an address that is always blocked (metadata, link-local, or transition range), even when the baseUrl is listed in security.allowedInsecureVoiceBaseUrls.` : `Voice model '${voiceConfig.model}' resolved to a private-network address.`
384
530
  );
385
531
  }
386
532
  }
@@ -390,7 +536,8 @@ function readApiKey(settings, model, baseUrl, env) {
390
536
  return void 0;
391
537
  }
392
538
  const envKey = model.envKey ?? DEFAULT_OPENAI_API_KEY;
393
- const envValue = (env ?? process.env)[envKey];
539
+ const envSource = env ?? process.env;
540
+ const envValue = Object.hasOwn(envSource, envKey) ? envSource[envKey] : void 0;
394
541
  if (envValue && envValue.trim().length > 0) {
395
542
  return envValue.trim();
396
543
  }
@@ -431,14 +578,28 @@ function resolveVoiceTranscriptionConfig({
431
578
  const normalizedBaseUrl = normalizeBaseUrl(baseUrl, voiceModel);
432
579
  const parsedBaseUrl = new URL(normalizedBaseUrl);
433
580
  const isLocalhost = isLoopbackHost(parsedBaseUrl.hostname);
434
- if (parsedBaseUrl.protocol !== "https:" && !isLocalhost) {
581
+ const allowInsecureBaseUrl = isInsecureVoiceBaseUrlAllowed(
582
+ settings,
583
+ normalizedBaseUrl
584
+ );
585
+ if (parsedBaseUrl.protocol !== "http:" && parsedBaseUrl.protocol !== "https:") {
586
+ throw new Error(
587
+ `Voice model '${voiceModel}' must use an http or https baseUrl.`
588
+ );
589
+ }
590
+ if (!isLocalhost && isAlwaysBlockedVoiceAddress(parsedBaseUrl.hostname)) {
591
+ throw new Error(
592
+ isLoopbackVoiceAddress(parsedBaseUrl.hostname) ? `Voice model '${voiceModel}' uses a loopback address outside the accepted spellings. To use a local ASR endpoint, set the baseUrl to http://localhost, http://127.0.0.1, or http://[::1].` : `Voice model '${voiceModel}' must not use a private-network baseUrl.`
593
+ );
594
+ }
595
+ if (parsedBaseUrl.protocol !== "https:" && !isLocalhost && !allowInsecureBaseUrl) {
435
596
  throw new Error(
436
- `Voice model '${voiceModel}' must use an https baseUrl. Voice audio must not be transmitted in cleartext.`
597
+ `Voice model '${voiceModel}' must use an https baseUrl. Voice audio must not be transmitted in cleartext. To trust this managed endpoint, add its exact complete normalized URL (${normalizedBaseUrl}) to security.allowedInsecureVoiceBaseUrls. This setting is only honored from User, System, or SystemDefaults scope settings; Workspace entries are ignored.`
437
598
  );
438
599
  }
439
- if (isPrivateNetworkIp(parsedBaseUrl.hostname)) {
600
+ if (!isLocalhost && !allowInsecureBaseUrl && isPrivateNetworkIp(parsedBaseUrl.hostname)) {
440
601
  throw new Error(
441
- `Voice model '${voiceModel}' must not use a private-network baseUrl.`
602
+ `Voice model '${voiceModel}' must not use a private-network baseUrl. To trust this managed endpoint, add its exact complete normalized URL (${normalizedBaseUrl}) to security.allowedInsecureVoiceBaseUrls. This setting is only honored from User, System, or SystemDefaults scope settings; Workspace entries are ignored.`
442
603
  );
443
604
  }
444
605
  const apiKey = readApiKey(settings, model, normalizedBaseUrl, env);
@@ -448,7 +609,8 @@ function resolveVoiceTranscriptionConfig({
448
609
  return {
449
610
  model: voiceModel,
450
611
  baseUrl: normalizedBaseUrl,
451
- ...apiKey ? { apiKey } : {}
612
+ ...apiKey ? { apiKey } : {},
613
+ ...allowInsecureBaseUrl ? { allowInsecureBaseUrl: true } : {}
452
614
  };
453
615
  }
454
616
  __name(resolveVoiceTranscriptionConfig, "resolveVoiceTranscriptionConfig");
@@ -472,6 +634,7 @@ function resolveVoiceStreamConfig(args) {
472
634
  baseUrl: base.baseUrl,
473
635
  model: base.model,
474
636
  ...base.apiKey ? { apiKey: base.apiKey } : {},
637
+ ...base.allowInsecureBaseUrl ? { allowInsecureBaseUrl: true } : {},
475
638
  ...language ? { language } : {},
476
639
  ...keytermsContext ? { keytermsContext } : {}
477
640
  };
@@ -6,7 +6,7 @@ import {
6
6
  getNestedProperty,
7
7
  getPersistScopeForModelSelection,
8
8
  restoreSettingsFromBackup
9
- } from "./chunk-PPUOYL77.js";
9
+ } from "./chunk-77WOUGCA.js";
10
10
  import {
11
11
  init_esbuild_shims
12
12
  } from "./chunk-5O2XNYP6.js";
@@ -9,6 +9,23 @@ import {
9
9
 
10
10
  // packages/cli/src/config/shared-env-keys.ts
11
11
  init_esbuild_shims();
12
+
13
+ // packages/cli/src/config/acp-channel-fallback.ts
14
+ init_esbuild_shims();
15
+ var QWEN_CODE_SERVE_ENV = "QWEN_CODE_SERVE";
16
+ var QWEN_CODE_DESKTOP_ENV = "QWEN_CODE_DESKTOP";
17
+ function resolveAcpChannelFallback(env = process.env) {
18
+ if (env[QWEN_CODE_DESKTOP_ENV]) {
19
+ return "desktop";
20
+ }
21
+ if (env[QWEN_CODE_SERVE_ENV]) {
22
+ return "daemon";
23
+ }
24
+ return "ACP";
25
+ }
26
+ __name(resolveAcpChannelFallback, "resolveAcpChannelFallback");
27
+
28
+ // packages/cli/src/config/shared-env-keys.ts
12
29
  var DEFAULT_EXCLUDED_ENV_VARS = ["DEBUG", "DEBUG_MODE"];
13
30
  var ENV_CORRUPTED_PATH = "QWEN_CODE_SETTINGS_CORRUPTED_PATH";
14
31
  var ENV_WAS_RECOVERED = "QWEN_CODE_SETTINGS_WAS_RECOVERED";
@@ -17,6 +34,10 @@ var PROJECT_ENV_HARDCODED_EXCLUSIONS = [
17
34
  "QWEN_RUNTIME_DIR",
18
35
  "QWEN_CODE_MCP_APPROVALS_PATH",
19
36
  "QWEN_CODE_TRUSTED_FOLDERS_PATH",
37
+ // Runtime attribution markers are stamped by trusted launchers. A project
38
+ // `.env` must not spoof client channel telemetry.
39
+ QWEN_CODE_SERVE_ENV,
40
+ QWEN_CODE_DESKTOP_ENV,
20
41
  ENV_CORRUPTED_PATH,
21
42
  ENV_WAS_RECOVERED,
22
43
  // QWEN_TLS_INSECURE (and NODE_TLS_REJECT_UNAUTHORIZED, which it mirrors)
@@ -49,6 +70,9 @@ function publishPendingCompileCache(env = process.env) {
49
70
  __name(publishPendingCompileCache, "publishPendingCompileCache");
50
71
 
51
72
  export {
73
+ QWEN_CODE_SERVE_ENV,
74
+ QWEN_CODE_DESKTOP_ENV,
75
+ resolveAcpChannelFallback,
52
76
  DEFAULT_EXCLUDED_ENV_VARS,
53
77
  ENV_CORRUPTED_PATH,
54
78
  ENV_WAS_RECOVERED,
@@ -58,11 +82,11 @@ export {
58
82
  };
59
83
  /**
60
84
  * @license
61
- * Copyright 2025 Qwen Team
85
+ * Copyright 2026 Qwen Team
62
86
  * SPDX-License-Identifier: Apache-2.0
63
87
  */
64
88
  /**
65
89
  * @license
66
- * Copyright 2026 Qwen Team
90
+ * Copyright 2025 Qwen Team
67
91
  * SPDX-License-Identifier: Apache-2.0
68
92
  */
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  expandHomeDir
5
- } from "./chunk-3RXUYQJI.js";
5
+ } from "./chunk-OIVKILPI.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";