@qwen-code/qwen-code 0.21.1-simplify-system-prompt.0 → 0.21.2

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 (422) hide show
  1. package/bundled/qc-helper/docs/configuration/model-providers.md +2 -0
  2. package/bundled/qc-helper/docs/configuration/settings.md +39 -28
  3. package/bundled/qc-helper/docs/features/channels/_meta.ts +2 -0
  4. package/bundled/qc-helper/docs/features/channels/github.md +139 -0
  5. package/bundled/qc-helper/docs/features/channels/gitlab.md +171 -0
  6. package/bundled/qc-helper/docs/features/channels/overview.md +61 -6
  7. package/bundled/qc-helper/docs/features/code-review.md +21 -1
  8. package/bundled/qc-helper/docs/features/hooks.md +72 -15
  9. package/bundled/qc-helper/docs/features/mcp.md +9 -1
  10. package/bundled/qc-helper/docs/features/scheduled-tasks.md +3 -1
  11. package/bundled/qc-helper/docs/features/sub-agents.md +42 -8
  12. package/bundled/qc-helper/docs/qwen-serve.md +11 -7
  13. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +2 -2
  14. package/bundled/qc-helper/docs/support/troubleshooting.md +2 -1
  15. package/bundled/review/DESIGN.md +19 -0
  16. package/bundled/review/SKILL.md +120 -61
  17. package/chunks/MaxSizedBox-TQBQ247P.js +88 -0
  18. package/chunks/{StandaloneSessionPicker-O6RKBPU4.js → StandaloneSessionPicker-2HPTKCLX.js} +71 -69
  19. package/chunks/{acp-startup-profiler-RV3IV562.js → acp-startup-profiler-2C4A5ZTJ.js} +2 -2
  20. package/chunks/{acpAgent-HYFVXVDR.js → acpAgent-PS6EDGH3.js} +1628 -590
  21. package/chunks/agent-VDOUB35F.js +84 -0
  22. package/chunks/agent-headless-EO53EFS2.js +78 -0
  23. package/chunks/{anthropicContentGenerator-LXUXMOE7.js → anthropicContentGenerator-OFHSZJBF.js} +61 -20
  24. package/chunks/{artifact-tool-Y5T7GG7F.js → artifact-tool-RDN2W7ND.js} +4 -4
  25. package/chunks/{askUserQuestion-2H6747FR.js → askUserQuestion-OZERWH5R.js} +4 -4
  26. package/chunks/bridge-W7AZSRZQ.js +94 -0
  27. package/chunks/{build-RV63TIRH.js → build-GDBLPA24.js} +1 -1
  28. package/chunks/{ca-25EDXPFZ.js → ca-6W3SK7OQ.js} +6 -1
  29. package/chunks/{channel-management-service-G74LFADV.js → channel-management-service-5S7YCWX5.js} +20 -5
  30. package/chunks/channel-settings-store-JFVRSNER.js +91 -0
  31. package/chunks/{channel-worker-group-PTJIJSKC.js → channel-worker-group-OVWGYMZS.js} +9 -5
  32. package/chunks/{channel-worker-manager-WIMGM2FD.js → channel-worker-manager-H55GKOQA.js} +9 -5
  33. package/chunks/{channel-worker-supervisor-KUFTR6P5.js → channel-worker-supervisor-CABBXYHK.js} +5 -4
  34. package/chunks/{chunk-6GMVPFB2.js → chunk-2IIJTXYF.js} +45 -16
  35. package/chunks/{chunk-BPJSQIJX.js → chunk-2J3OJGTL.js} +0 -2
  36. package/chunks/{chunk-I7XZ3RY5.js → chunk-2KKCCLPT.js} +1 -1
  37. package/chunks/{chunk-MSLKI6C2.js → chunk-2LEOZTBT.js} +49 -26
  38. package/chunks/{chunk-3QMGYBFN.js → chunk-3APUUXRF.js} +1 -80
  39. package/chunks/{chunk-VV6XU5L7.js → chunk-3F2WDAV6.js} +16 -11
  40. package/chunks/{chunk-MUP3T3AD.js → chunk-3I6DUGQD.js} +1 -35
  41. package/chunks/{chunk-66RMLJHC.js → chunk-44F4LBWZ.js} +577 -208
  42. package/chunks/{chunk-VAK25FTU.js → chunk-45IOTAUS.js} +1 -1
  43. package/chunks/{chunk-JZA3JUDJ.js → chunk-4KP2F2TE.js} +1 -1
  44. package/chunks/{chunk-DM4Q4JJH.js → chunk-54YCNSK5.js} +36562 -45062
  45. package/chunks/{chunk-2Q3OT4OV.js → chunk-56Z7QEAQ.js} +200 -77
  46. package/chunks/{chunk-ZOIFNCKL.js → chunk-5NNHICSA.js} +3 -23
  47. package/chunks/{chunk-A4UCTEB5.js → chunk-5WV5S2GT.js} +0 -1
  48. package/chunks/{chunk-RHLZR4E5.js → chunk-675H6PLP.js} +1 -1
  49. package/chunks/{chunk-YAF5VNU7.js → chunk-6CQWRWUC.js} +4 -5
  50. package/chunks/chunk-6FMJLI5M.js +1591 -0
  51. package/chunks/{chunk-HV3G62R6.js → chunk-6MPDY6ZG.js} +1 -1
  52. package/chunks/{chunk-32MVHM4T.js → chunk-6PQPKTXP.js} +1 -1
  53. package/chunks/{chunk-LG4GZIVV.js → chunk-6TAASXWL.js} +4 -4
  54. package/chunks/{chunk-OJGCZBB7.js → chunk-77V3VIKL.js} +41 -36
  55. package/chunks/{chunk-2OM7GEXO.js → chunk-7KAXXBER.js} +3 -3
  56. package/chunks/{chunk-2JM6GZ5D.js → chunk-7SJN2IWT.js} +8 -13
  57. package/chunks/{chunk-UUUTRMI2.js → chunk-7ULQIS27.js} +1 -1
  58. package/chunks/{chunk-2YZJCM5T.js → chunk-A7Y5H4TX.js} +4 -4
  59. package/chunks/{chunk-TOFQCPDC.js → chunk-AOHY3QJ3.js} +14 -8
  60. package/chunks/chunk-AQ37AY7B.js +93 -0
  61. package/chunks/{chunk-B6ZJ7SI6.js → chunk-AUOULH6Q.js} +383 -320
  62. package/chunks/{chunk-PJIZUQVC.js → chunk-AZQ3DT76.js} +2 -2
  63. package/chunks/{chunk-UH3WSE5L.js → chunk-B4AJNNOL.js} +1 -6
  64. package/chunks/{chunk-7FZEBPKS.js → chunk-BBIQAX4V.js} +23 -18
  65. package/chunks/{chunk-L26JL52R.js → chunk-CBBP4BMC.js} +64 -67
  66. package/chunks/{chunk-ZD6UTE4A.js → chunk-CNTR4GR6.js} +1 -1
  67. package/chunks/{chunk-4M377AZG.js → chunk-CO2U743O.js} +6 -6
  68. package/chunks/{chunk-3SJ43L4W.js → chunk-CPZAH673.js} +6 -0
  69. package/chunks/{chunk-VFSJ5VRH.js → chunk-CU47KXB5.js} +3 -3
  70. package/chunks/{chunk-EPDRMGT4.js → chunk-D4HTUMGX.js} +4 -28
  71. package/chunks/{chunk-XHRTVPG2.js → chunk-D6MDRSZ6.js} +7 -7
  72. package/chunks/{chunk-BYFNTGKI.js → chunk-DEEABGH2.js} +3111 -989
  73. package/chunks/{chunk-XVNQMZ2I.js → chunk-DGEIYUC3.js} +0 -1
  74. package/chunks/{chunk-BPZALHVR.js → chunk-DI35ZN7T.js} +1 -1
  75. package/chunks/{chunk-B4UMZKMU.js → chunk-DQ2O5QOJ.js} +1 -1
  76. package/chunks/{chunk-DLWL3Z7A.js → chunk-DSFHVTWD.js} +3 -3
  77. package/chunks/{chunk-RWS5VYWC.js → chunk-DUNI4EBW.js} +950 -446
  78. package/chunks/{chunk-NL7LTRLR.js → chunk-E2BHWIDT.js} +48 -72
  79. package/chunks/{chunk-3MSHSCSN.js → chunk-E2FN6SM7.js} +93 -3
  80. package/chunks/{chunk-USTWD7QV.js → chunk-E6CJ2SMM.js} +26 -16
  81. package/chunks/{chunk-TF2X2WCT.js → chunk-EQNUDTL6.js} +2 -2
  82. package/chunks/{chunk-PANH4R3B.js → chunk-EU5TBFJI.js} +18 -12
  83. package/chunks/{chunk-W4CQXHT6.js → chunk-FANRZEAJ.js} +1 -1
  84. package/chunks/{chunk-WBL3FJEU.js → chunk-FC4KQFCS.js} +1 -1
  85. package/chunks/{chunk-N3FAY5CM.js → chunk-FCYYAB4S.js} +157 -4
  86. package/chunks/{chunk-OKY7HXPG.js → chunk-FJ5WUMUQ.js} +2 -2
  87. package/chunks/{chunk-M4UKFCZ2.js → chunk-FNDXMN7I.js} +231 -171
  88. package/chunks/{chunk-FQK6JAFG.js → chunk-FS674JW4.js} +4 -4
  89. package/chunks/chunk-FYJ7W2PI.js +194 -0
  90. package/chunks/{chunk-INADJJGW.js → chunk-G7XXKQYS.js} +2 -2
  91. package/chunks/{chunk-LNARWLZQ.js → chunk-GJ2GBPBD.js} +2 -2
  92. package/chunks/{chunk-E5WH5O3C.js → chunk-GL4JOZXU.js} +4 -4
  93. package/chunks/{chunk-LS77BEZP.js → chunk-GLCZKT5V.js} +1 -5
  94. package/chunks/{chunk-KU5XMLDK.js → chunk-GURGAJTX.js} +4 -1
  95. package/chunks/{chunk-5THCYPLO.js → chunk-H6I4PGRV.js} +15 -8
  96. package/chunks/{chunk-A5L3JMUA.js → chunk-HC45LTEN.js} +18 -4
  97. package/chunks/{chunk-U7TXFVUN.js → chunk-HIVKI6O6.js} +118 -95
  98. package/chunks/{chunk-QY5MMZ6O.js → chunk-HX6RLYUO.js} +3 -3
  99. package/chunks/{chunk-GZXCZHCT.js → chunk-I3G5JWBV.js} +1 -1
  100. package/chunks/{chunk-ER5LWJR6.js → chunk-I5BT7ADR.js} +3 -3
  101. package/chunks/{chunk-L5UHQJTJ.js → chunk-IGTHU3T4.js} +1 -1
  102. package/chunks/{chunk-BIQWWWJN.js → chunk-IIUGIWWY.js} +1 -1
  103. package/chunks/{chunk-ML52PL6O.js → chunk-JCJ7LKNA.js} +5856 -5334
  104. package/chunks/{chunk-B7QDM6Z7.js → chunk-JE2CEOBO.js} +2 -2
  105. package/chunks/{chunk-S3TWXGKA.js → chunk-JE7KQ2UP.js} +4 -2
  106. package/chunks/{chunk-P5V4T7NK.js → chunk-JJPKFJBT.js} +11 -3
  107. package/chunks/{chunk-J6D3VXCC.js → chunk-JLZ3RBQG.js} +18 -5
  108. package/chunks/{chunk-PWTZEM3C.js → chunk-JXVC2PL3.js} +3 -37
  109. package/chunks/chunk-JYBU6YUE.js +378 -0
  110. package/chunks/{chunk-JCW2R7WC.js → chunk-K623ENWT.js} +3 -79
  111. package/chunks/{chunk-T2NCM2ET.js → chunk-K6KS3LTN.js} +2 -749
  112. package/chunks/{chunk-Z5BLYMZM.js → chunk-KR32NIAN.js} +6 -6
  113. package/chunks/{chunk-MK7VQDN3.js → chunk-KWHKHSIS.js} +8 -6
  114. package/chunks/{chunk-5U4IPFBR.js → chunk-KXDONCPU.js} +4 -4
  115. package/chunks/{chunk-DHHOYAPR.js → chunk-L2E5GFAG.js} +7 -7
  116. package/chunks/{chunk-V6VRAM7B.js → chunk-L32VV3ZJ.js} +12 -12
  117. package/chunks/{chunk-2W3OOD4W.js → chunk-L55JWS76.js} +6 -3
  118. package/chunks/{chunk-E5TUC6CA.js → chunk-LHKCY7DY.js} +3 -3
  119. package/chunks/{chunk-NH6KE4JX.js → chunk-LOY7RWQG.js} +3 -3
  120. package/chunks/{chunk-CC4N4M36.js → chunk-LYI2PZDK.js} +1 -1
  121. package/chunks/{chunk-3JAQDSXN.js → chunk-MB32MS4U.js} +80 -9
  122. package/chunks/{chunk-PR75REBZ.js → chunk-MM7TH7ZM.js} +12 -82
  123. package/chunks/{chunk-FODK6UMO.js → chunk-MPHPFVKK.js} +0 -2
  124. package/chunks/{chunk-M5JM7OSF.js → chunk-N4ACHWNH.js} +2 -3
  125. package/chunks/{chunk-JESCGQM3.js → chunk-NAVJD2PQ.js} +8 -7
  126. package/chunks/{chunk-J56UI34H.js → chunk-NBD76HUW.js} +4 -2
  127. package/chunks/{chunk-C3NS4F2Q.js → chunk-NHFEMWAZ.js} +1 -1
  128. package/chunks/{chunk-6PSLCFQ2.js → chunk-NTDH4IML.js} +18 -9
  129. package/chunks/{chunk-6OUGMXDC.js → chunk-NWNEANAT.js} +7 -7
  130. package/chunks/chunk-O6GEWCJA.js +21 -0
  131. package/chunks/chunk-OCPBI7J5.js +18 -0
  132. package/chunks/{chunk-ZE5WPL4I.js → chunk-OFZKFPYG.js} +3 -3
  133. package/chunks/{chunk-KIUFNBHR.js → chunk-P5VC5USY.js} +1 -1
  134. package/chunks/chunk-P755N4CS.js +2196 -0
  135. package/chunks/{chunk-BRRAJXPA.js → chunk-PCK4B6LR.js} +1 -1
  136. package/chunks/{chunk-TQCBGUHN.js → chunk-PJOHNFIY.js} +5 -5
  137. package/chunks/{chunk-G4WFQUYQ.js → chunk-PVNQRENX.js} +1 -1
  138. package/chunks/{chunk-DM22XS4K.js → chunk-PZEXDV3H.js} +357 -13
  139. package/chunks/{chunk-2JZBVYTU.js → chunk-Q3T5KA2V.js} +1 -8
  140. package/chunks/{chunk-SASBXAQL.js → chunk-Q5WZTTWE.js} +4 -4
  141. package/chunks/{chunk-SRZ6DXVG.js → chunk-QARJNL2V.js} +44 -136
  142. package/chunks/{chunk-YH6G52F2.js → chunk-QCXGC7QB.js} +4 -4
  143. package/chunks/{chunk-SQBYH7PX.js → chunk-QDK4F2N5.js} +1 -1
  144. package/chunks/{chunk-VDDGDZMA.js → chunk-QHWCP53L.js} +14 -7
  145. package/chunks/{chunk-H5FFA6TH.js → chunk-QTHQ6Z5X.js} +16 -3
  146. package/chunks/{chunk-5I2IWRSH.js → chunk-R2XWGR75.js} +2 -2
  147. package/chunks/{chunk-PHVR5UUY.js → chunk-RDJOB6S3.js} +1 -1
  148. package/chunks/{chunk-GDIPH4JY.js → chunk-RG64CDT2.js} +6 -6
  149. package/chunks/{chunk-3HBZKBMQ.js → chunk-RSVPYAGK.js} +5 -5
  150. package/chunks/{chunk-6AM5D4ME.js → chunk-S6LOFUVP.js} +0 -12
  151. package/chunks/{chunk-K4XWPEWB.js → chunk-SHN4KHDK.js} +4 -33
  152. package/chunks/{chunk-VYPFXUCB.js → chunk-SZ3KHTDR.js} +1 -1
  153. package/chunks/chunk-T26EAKDL.js +13 -0
  154. package/chunks/chunk-T3CHYWJZ.js +758 -0
  155. package/chunks/{chunk-FNQ6T3CV.js → chunk-TEGJSJDF.js} +10 -7
  156. package/chunks/{chunk-OHNBB4XR.js → chunk-THVU3RNH.js} +1 -1
  157. package/chunks/{record-artifact-RQKFYO5B.js → chunk-TIRRPCFS.js} +22 -7
  158. package/chunks/chunk-TTJZAIFP.js +319 -0
  159. package/chunks/{chunk-63P4EL5V.js → chunk-TZTAV5RH.js} +1 -1
  160. package/chunks/{chunk-52O2CIUL.js → chunk-UV6KF7T3.js} +130 -5
  161. package/chunks/{chunk-QPDRAXDJ.js → chunk-V25K5ID7.js} +1 -1
  162. package/chunks/{chunk-3IXOIAKE.js → chunk-V4XNUDPE.js} +18 -6
  163. package/chunks/{chunk-WDSWXQU3.js → chunk-VEMNQMHA.js} +2 -2
  164. package/chunks/{chunk-LNURQEMZ.js → chunk-VMX5RZQH.js} +12 -10
  165. package/chunks/{chunk-JALU3ZDU.js → chunk-W3UKBMSI.js} +154 -16
  166. package/chunks/{chunk-DN6ZX5AY.js → chunk-WWCMSZII.js} +61 -14
  167. package/chunks/{chunk-COH43MRJ.js → chunk-XCGIMOLN.js} +27 -1
  168. package/chunks/{chunk-FY3M44RD.js → chunk-XP4L6KS3.js} +3 -3
  169. package/chunks/{chunk-6FGBXPWM.js → chunk-XQK4XXTN.js} +38 -44
  170. package/chunks/{chunk-A6UO2C7C.js → chunk-XUGZYLDH.js} +167 -81
  171. package/chunks/{chunk-LZEMEFKY.js → chunk-YANIWTRZ.js} +1 -1
  172. package/chunks/{chunk-IPUUTYMV.js → chunk-YDLJGZHL.js} +1 -1
  173. package/chunks/{chunk-HIJQF5B5.js → chunk-YGE3IXJP.js} +1 -1
  174. package/chunks/{chunk-BJX6ZSUK.js → chunk-YUFIEIWC.js} +2 -2
  175. package/chunks/{chunk-BO4XCS7P.js → chunk-Z3S5EMOW.js} +20 -85
  176. package/chunks/chunk-Z4X5MTRT.js +133 -0
  177. package/chunks/{chunk-UW5EOVUN.js → chunk-ZBVS26BY.js} +4 -4
  178. package/chunks/{chunk-PSWQZHEA.js → chunk-ZMOJ7ISP.js} +1 -1
  179. package/chunks/{chunk-HTO4JFDZ.js → chunk-ZPJWUGCS.js} +0 -1
  180. package/chunks/{chunk-MVS3NS2N.js → chunk-ZPZ7ZJEE.js} +28 -5
  181. package/chunks/{computer-use-DOFAHZAB.js → computer-use-5QWCFNKD.js} +52 -50
  182. package/chunks/{config-utils-VFQXVGNR.js → config-utils-WADIDWGG.js} +4 -4
  183. package/chunks/contextCommand-4Z7T7TUM.js +83 -0
  184. package/chunks/core-runtime-6N4EFC2Q.js +137 -0
  185. package/chunks/{create-sub-session-IWW2IZ2T.js → create-sub-session-62YZWVAY.js} +3 -3
  186. package/chunks/{create-sub-session-7543K2QA.js → create-sub-session-AEREHZBQ.js} +49 -47
  187. package/chunks/{cron-create-YIID5XAW.js → cron-create-6E7GIQTG.js} +6 -6
  188. package/chunks/{cron-delete-ZVHYCEP2.js → cron-delete-JD26XY3W.js} +5 -5
  189. package/chunks/{cron-list-XEGS463Q.js → cron-list-CUWFB44G.js} +6 -6
  190. package/chunks/{daemon-VOMQW7KZ.js → daemon-PCNCI5YU.js} +239 -18
  191. package/chunks/daemon-status-provider-DDF7C5M7.js +93 -0
  192. package/chunks/daemon-trust-policy-Q4KSOJTR.js +88 -0
  193. package/chunks/daemon-trust-policy-monitor-V6FTE3IY.js +175 -0
  194. package/chunks/{de-HGRCYDEJ.js → de-SY6O76BF.js} +6 -1
  195. package/chunks/deferred-core-runtime-GHJ5GQHK.js +92 -0
  196. package/chunks/dist-26BIMQT6.js +4487 -0
  197. package/chunks/{dist-KTYYJ2C5.js → dist-2PERFI23.js} +12 -9
  198. package/chunks/{dist-NNVBBOGU.js → dist-OAOC5OV4.js} +2 -2
  199. package/chunks/{dist-K6Y4E7FX.js → dist-PVEAFLHY.js} +5 -4
  200. package/chunks/{dist-RTJFMNEZ.js → dist-SL2LUMML.js} +1449 -14
  201. package/chunks/dist-ULIG4M5H.js +13415 -0
  202. package/chunks/{dist-ANLAT3GS.js → dist-WGMNT3JQ.js} +2 -1
  203. package/chunks/{dist-BRB6EXK4.js → dist-ZHXOBXDN.js} +3 -3
  204. package/chunks/earlyInputCapture-TQXLLISD.js +85 -0
  205. package/chunks/{edit-RIEOJWKB.js → edit-FJEUV6KZ.js} +51 -49
  206. package/chunks/{en-MTWBNGDO.js → en-NBK3JKCE.js} +9 -1
  207. package/chunks/{enter-worktree-OGK5FQ3R.js → enter-worktree-7GE3TZ4P.js} +51 -49
  208. package/chunks/{enterPlanMode-IWZYALIB.js → enterPlanMode-KR5TMPCJ.js} +51 -49
  209. package/chunks/environment-SWL3CMB3.js +105 -0
  210. package/chunks/errors-XQE7BGZV.js +91 -0
  211. package/chunks/esm-K5FARBNI.js +5548 -0
  212. package/chunks/{exit-worktree-4TEYVIVP.js → exit-worktree-CHKTYNCV.js} +51 -49
  213. package/chunks/exitPlanMode-QYAG6LWX.js +76 -0
  214. package/chunks/{fast-path-HYE7IFEV.js → fast-path-Z2K7W6DC.js} +13 -3
  215. package/chunks/{fr-45RLL55O.js → fr-4KG5V7UT.js} +6 -1
  216. package/chunks/{gemini-NGRQX3YJ.js → gemini-YU4XKEDG.js} +107 -103
  217. package/chunks/{geminiContentGenerator-FQHPFZSR.js → geminiContentGenerator-ZZX6NBO4.js} +7 -7
  218. package/chunks/{getMachineId-bsd-V7W3GODC.js → getMachineId-bsd-FG7IUY6U.js} +1 -1
  219. package/chunks/{getMachineId-darwin-TDO75DQP.js → getMachineId-darwin-GLCJI2RA.js} +1 -1
  220. package/chunks/{getMachineId-linux-TF43WQT2.js → getMachineId-linux-O6OPPAKO.js} +1 -1
  221. package/chunks/{getMachineId-unsupported-ZGUO3TXT.js → getMachineId-unsupported-S6CKYVGC.js} +1 -1
  222. package/chunks/{getMachineId-win-ECFYZZFQ.js → getMachineId-win-X5SRNEH7.js} +1 -1
  223. package/chunks/{glob-FRTM3X2E.js → glob-VYF5CXSX.js} +51 -49
  224. package/chunks/goal-tools-HGO6VXPB.js +335 -0
  225. package/chunks/{grep-RKWVROCW.js → grep-5DP5ZUTW.js} +53 -50
  226. package/chunks/handleAutoUpdate-UVBJ56DL.js +84 -0
  227. package/chunks/i18n-UQNYHEUD.js +100 -0
  228. package/chunks/{image-gen-WIEM7KZA.js → image-gen-WHPIZNWF.js} +12 -12
  229. package/chunks/initializer-GMIICF4W.js +89 -0
  230. package/chunks/installationInfo-4MGG4WVI.js +83 -0
  231. package/chunks/{ja-B7DF7DFG.js → ja-F3GSQXMF.js} +6 -1
  232. package/chunks/{keychain-token-storage-MDTG3WRM.js → keychain-token-storage-IKO4G53C.js} +3 -3
  233. package/chunks/lib-RUF3WZA6.js +9 -0
  234. package/chunks/list-CPN2W334.js +92 -0
  235. package/chunks/{list-agents-5KJJHR6I.js → list-agents-PXJ7ZUFB.js} +3 -3
  236. package/chunks/loadedSettingsAdapter-ZQAV5NDO.js +86 -0
  237. package/chunks/{loggingContentGenerator-WGM27QAW.js → loggingContentGenerator-5E7W4IEP.js} +31 -30
  238. package/chunks/{loop-wakeup-FXKNNYSY.js → loop-wakeup-Y26NQZ5I.js} +15 -8
  239. package/chunks/{ls-NTK6VOQJ.js → ls-ONQTTMQR.js} +5 -5
  240. package/chunks/{lsp-2JI24STP.js → lsp-YGHHRGMD.js} +3 -3
  241. package/chunks/{managed-npm-update-JQ2CG3RH.js → managed-npm-update-MKKAXYXA.js} +50 -48
  242. package/chunks/mcp-V5NTJF6X.js +86 -0
  243. package/chunks/{monitor-7FEWXX5F.js → monitor-CO3ASY6E.js} +51 -49
  244. package/chunks/nonInteractiveCli-ZJYEOO7U.js +148 -0
  245. package/chunks/{notebook-edit-JGJV2K6J.js → notebook-edit-Z7AEE6FM.js} +51 -49
  246. package/chunks/{openaiContentGenerator-JPVXDTAO.js → openaiContentGenerator-CA3MQOP3.js} +25 -27
  247. package/chunks/pidfile-NL7MKDRU.js +89 -0
  248. package/chunks/process-registry-2CHQBXH5.js +157 -0
  249. package/chunks/{processUtils-V2LCK6T6.js → processUtils-PB5K2DYH.js} +2 -2
  250. package/chunks/{pt-22Q3FP73.js → pt-EQ33KWEN.js} +6 -1
  251. package/chunks/{qwenContentGenerator-TICV2W2Z.js → qwenContentGenerator-JYFNDCOS.js} +55 -53
  252. package/chunks/{qwenOAuth2-XGFI5XJG.js → qwenOAuth2-W2ALKQDD.js} +10 -10
  253. package/chunks/read-file-IEOR5H5W.js +29 -0
  254. package/chunks/{read-mcp-resource-4DKQWGHD.js → read-mcp-resource-U2IJN5HM.js} +4 -4
  255. package/chunks/record-artifact-MGPJ7EG4.js +21 -0
  256. package/chunks/resumeHistoryUtils-BNBTP5AS.js +94 -0
  257. package/chunks/ripGrep-UMQODKEB.js +76 -0
  258. package/chunks/{ru-FZCNZHDC.js → ru-7OZAUKGG.js} +6 -1
  259. package/chunks/{run-qwen-serve-3VCV4I7E.js → run-qwen-serve-RN2R6QQW.js} +982 -263
  260. package/chunks/runtime-QFJ2MJF5.js +122 -0
  261. package/chunks/{scheduler-RS2I6RU5.js → scheduler-AMYUFOZI.js} +49 -47
  262. package/chunks/{sdk-exporters-grpc-AK3LGHNO.js → sdk-exporters-grpc-54L4LS5L.js} +4 -4
  263. package/chunks/{sdk-exporters-http-FS6ZV7MF.js → sdk-exporters-http-4BQANSJ6.js} +7 -7
  264. package/chunks/{sdk-impl-7FZSCSXB.js → sdk-impl-Z4VXWVFX.js} +10 -10
  265. package/chunks/{send-message-Q6OOR6BR.js → send-message-PMP4ATVM.js} +8 -13
  266. package/chunks/serve-EIIYJVX3.js +92 -0
  267. package/chunks/{server-HRZ23U7M.js → server-EP2LLAPD.js} +4816 -1298
  268. package/chunks/{session-7XHZKTVV.js → session-GMPZBLOW.js} +101 -97
  269. package/chunks/{settings-7ZGZDXAS.js → settings-LN7RNKBS.js} +53 -51
  270. package/chunks/shell-EM2OWU5X.js +86 -0
  271. package/chunks/{skill-LIWXNLDW.js → skill-T5VPSK73.js} +22 -23
  272. package/chunks/skill-settings-GMR3GMNY.js +94 -0
  273. package/chunks/spawnChannel-YPCU62DI.js +85 -0
  274. package/chunks/standalone-update-JAKIM2NF.js +95 -0
  275. package/chunks/{startInteractiveUI-IW3CSKHA.js → startInteractiveUI-YETQWGYF.js} +1240 -903
  276. package/chunks/{syntheticOutput-I3757IWH.js → syntheticOutput-D7E6ZFKR.js} +4 -4
  277. package/chunks/task-create-NFCYD43L.js +26 -0
  278. package/chunks/{task-list-FOPULZEP.js → task-list-TAVMGEVD.js} +7 -7
  279. package/chunks/{task-stop-H6RHXFVQ.js → task-stop-ZDF2UJRM.js} +3 -3
  280. package/chunks/{task-update-M57TFZJT.js → task-update-6L7LHGEX.js} +12 -11
  281. package/chunks/{team-create-O2FROQ4R.js → team-create-LFJ6HGNY.js} +53 -51
  282. package/chunks/{team-delete-QE2UXJL7.js → team-delete-DPGGRQBU.js} +7 -7
  283. package/chunks/{team-plan-approval-Q6WDBXTQ.js → team-plan-approval-C2KLSDGO.js} +51 -49
  284. package/chunks/theme-manager-JQ3ZGBP5.js +80 -0
  285. package/chunks/{todoWrite-VQ7FKOHL.js → todoWrite-2UO5G6G6.js} +34 -6
  286. package/chunks/{tool-search-APECNQ3Z.js → tool-search-FAZBFRJZ.js} +21 -22
  287. package/chunks/total-session-admission-5CALIVYO.js +88 -0
  288. package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
  289. package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
  290. package/chunks/trustedFolders-KOPSP44S.js +98 -0
  291. package/chunks/{update-relaunch-ON5MDJQG.js → update-relaunch-6QL2TICS.js} +5 -5
  292. package/chunks/updateCheck-4Q6RIKFW.js +95 -0
  293. package/chunks/useAutoAcceptIndicator-Q5BMKZV3.js +96 -0
  294. package/chunks/{validateNonInterActiveAuth-JBLKBKRD.js → validateNonInterActiveAuth-GKOC5F6Z.js} +95 -91
  295. package/chunks/{version-LTNUBQJY.js → version-VSATY2LD.js} +1 -1
  296. package/chunks/{web-fetch-L5UTI53V.js → web-fetch-JCLKL6NL.js} +19 -21
  297. package/chunks/{web-search-KM33JOS3.js → web-search-DSQTFUBX.js} +13 -13
  298. package/chunks/{workflow-K7FAWV77.js → workflow-M6QAVKVJ.js} +52 -50
  299. package/chunks/workspace-providers-status-YKLTLMJA.js +89 -0
  300. package/chunks/{workspace-registration-store-6TGVDJV5.js → workspace-registration-store-5DMGKU64.js} +1 -1
  301. package/chunks/workspace-registry-PTYUSYXX.js +96 -0
  302. package/chunks/workspace-service-25ML3T47.js +103 -0
  303. package/chunks/workspace-skills-status-YKZWOYRX.js +89 -0
  304. package/chunks/workspace-trust-reconciler-5FI2S3OS.js +349 -0
  305. package/chunks/write-file-AY7VLP5X.js +78 -0
  306. package/chunks/xterm-headless-NTYVIBT3.js +3475 -0
  307. package/chunks/{zh-LUIGBD55.js → zh-H3YDK5QW.js} +9 -1
  308. package/chunks/{zh-TW-F5KG2IYD.js → zh-TW-JYCP7XUA.js} +9 -1
  309. package/chunks/zoom-image-S4LJZMD5.js +224 -0
  310. package/cli.js +50 -16
  311. package/locales/ca.js +7 -2
  312. package/locales/de.js +7 -2
  313. package/locales/en.js +10 -2
  314. package/locales/fr.js +7 -2
  315. package/locales/ja.js +7 -2
  316. package/locales/pt.js +7 -2
  317. package/locales/ru.js +7 -2
  318. package/locales/zh-TW.js +10 -2
  319. package/locales/zh.js +10 -2
  320. package/package.json +5 -4
  321. package/web-shell/assets/{arc-BbHijhiN.js → arc-xjArKHU2.js} +1 -1
  322. package/web-shell/assets/{architectureDiagram-3BPJPVTR-Cb4B_JD0.js → architectureDiagram-3BPJPVTR-BgrQDNYG.js} +1 -1
  323. package/web-shell/assets/{blockDiagram-GPEHLZMM-Dsjlh3H-.js → blockDiagram-GPEHLZMM-CXxWC-1_.js} +1 -1
  324. package/web-shell/assets/{c4Diagram-AAUBKEIU-Cp5AeR4U.js → c4Diagram-AAUBKEIU-Dx1tLm3v.js} +1 -1
  325. package/web-shell/assets/channel-B1cyk94G.js +1 -0
  326. package/web-shell/assets/{chunk-2J33WTMH-CLcY7W2e.js → chunk-2J33WTMH-CBxjogVR.js} +1 -1
  327. package/web-shell/assets/{chunk-4BX2VUAB-BUhvY2LR.js → chunk-4BX2VUAB-izb-rY5W.js} +1 -1
  328. package/web-shell/assets/{chunk-55IACEB6-kDIFC_71.js → chunk-55IACEB6-NzLyvSb8.js} +1 -1
  329. package/web-shell/assets/{chunk-727SXJPM-CIBO15f2.js → chunk-727SXJPM-DVyKb0dl.js} +1 -1
  330. package/web-shell/assets/{chunk-AQP2D5EJ-BJ_T_slV.js → chunk-AQP2D5EJ-BtqL7NzB.js} +1 -1
  331. package/web-shell/assets/{chunk-FMBD7UC4-BEkW35J8.js → chunk-FMBD7UC4-iNpdKIO0.js} +1 -1
  332. package/web-shell/assets/{chunk-ND2GUHAM-GGPxofay.js → chunk-ND2GUHAM-DI7cbFmX.js} +1 -1
  333. package/web-shell/assets/{chunk-QZHKN3VN-Bifllrb6.js → chunk-QZHKN3VN-3Y_-xFYs.js} +1 -1
  334. package/web-shell/assets/classDiagram-4FO5ZUOK-BpBYZoRE.js +1 -0
  335. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BpBYZoRE.js +1 -0
  336. package/web-shell/assets/{cose-bilkent-S5V4N54A-C-Add_Dp.js → cose-bilkent-S5V4N54A--raRatZn.js} +1 -1
  337. package/web-shell/assets/{dagre-BM42HDAG-B7MfwNq2.js → dagre-BM42HDAG-B8SU70mO.js} +1 -1
  338. package/web-shell/assets/{diagram-2AECGRRQ-CY_0zuDz.js → diagram-2AECGRRQ-ewgoakXo.js} +1 -1
  339. package/web-shell/assets/{diagram-5GNKFQAL-VyYSbCgA.js → diagram-5GNKFQAL-Bm_JLTnS.js} +1 -1
  340. package/web-shell/assets/{diagram-KO2AKTUF-CBiIZ2PL.js → diagram-KO2AKTUF-DEIUjUy9.js} +1 -1
  341. package/web-shell/assets/{diagram-LMA3HP47-BL3CrVOx.js → diagram-LMA3HP47-C2Wmrpj-.js} +1 -1
  342. package/web-shell/assets/{diagram-OG6HWLK6-CZUPx96P.js → diagram-OG6HWLK6-CtYe6bFx.js} +1 -1
  343. package/web-shell/assets/{erDiagram-TEJ5UH35-B81xHr1-.js → erDiagram-TEJ5UH35-DfpHcWLV.js} +1 -1
  344. package/web-shell/assets/{flowDiagram-I6XJVG4X-EZWhir-J.js → flowDiagram-I6XJVG4X-CAiUhio5.js} +1 -1
  345. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CVFSuIAg.js → ganttDiagram-6RSMTGT7-CYc7ezr4.js} +1 -1
  346. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-C1H2uQDv.js → gitGraphDiagram-PVQCEYII-70lbkcRS.js} +1 -1
  347. package/web-shell/assets/index-C1k3PDuU.css +5 -0
  348. package/web-shell/assets/index-C2GE3DAF.js +74 -0
  349. package/web-shell/assets/index-DZLIXILO.js +1750 -0
  350. package/web-shell/assets/{index-BYo99NBH.js → index-Ww86nT9f.js} +1 -1
  351. package/web-shell/assets/{infoDiagram-5YYISTIA-BwyFMlF8.js → infoDiagram-5YYISTIA-C7e8DWPa.js} +1 -1
  352. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CQ7Yhn2Y.js → ishikawaDiagram-YF4QCWOH-BYLr2op-.js} +1 -1
  353. package/web-shell/assets/{journeyDiagram-JHISSGLW-CJn2sf0l.js → journeyDiagram-JHISSGLW-hEibAHKX.js} +1 -1
  354. package/web-shell/assets/{kanban-definition-UN3LZRKU-DaNRqwVN.js → kanban-definition-UN3LZRKU-F2rt8Uhp.js} +1 -1
  355. package/web-shell/assets/{linear-DCKODZe2.js → linear-DPhyNezd.js} +1 -1
  356. package/web-shell/assets/{mermaid.core-CTGJOk27.js → mermaid.core-ZUtnug0n.js} +5 -5
  357. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BKU3_3rg.js → mindmap-definition-RKZ34NQL-DDWcMoi8.js} +1 -1
  358. package/web-shell/assets/{pieDiagram-4H26LBE5-COcwBJ82.js → pieDiagram-4H26LBE5-CTRKzw1_.js} +1 -1
  359. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CQnQ443x.js → quadrantDiagram-W4KKPZXB-CAEwYG_z.js} +1 -1
  360. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CZ2oj5cD.js → requirementDiagram-4Y6WPE33-CRjnH9D9.js} +1 -1
  361. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BxAv5mNu.js → sankeyDiagram-5OEKKPKP-LPQT_sOd.js} +1 -1
  362. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CztaySPs.js → sequenceDiagram-3UESZ5HK-Ht2Iqvb0.js} +1 -1
  363. package/web-shell/assets/{stateDiagram-AJRCARHV-CTQT1oGD.js → stateDiagram-AJRCARHV-CIUdqOXu.js} +1 -1
  364. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BmqqQZ6w.js +1 -0
  365. package/web-shell/assets/{timeline-definition-PNZ67QCA-K9Mkex5A.js → timeline-definition-PNZ67QCA-BcilneZF.js} +1 -1
  366. package/web-shell/assets/{vennDiagram-CIIHVFJN-B2rVIw76.js → vennDiagram-CIIHVFJN-BljwiiH1.js} +1 -1
  367. package/web-shell/assets/{wardley-L42UT6IY-Z1w2JR4M.js → wardley-L42UT6IY-DeKjkYjq.js} +1 -1
  368. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CIX9aKXf.js → wardleyDiagram-YWT4CUSO-L3U1H7KG.js} +1 -1
  369. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CI9DLIKB.js → xychartDiagram-2RQKCTM6-IJnWsgMT.js} +1 -1
  370. package/web-shell/index.html +2 -2
  371. package/chunks/MaxSizedBox-INHRH72H.js +0 -86
  372. package/chunks/agent-VXDAN5JK.js +0 -82
  373. package/chunks/agent-headless-K4ZMMNBD.js +0 -76
  374. package/chunks/bridge-LGPZCFHO.js +0 -91
  375. package/chunks/channel-settings-store-CHCDRTPY.js +0 -89
  376. package/chunks/chunk-SZRN75WQ.js +0 -29
  377. package/chunks/chunk-UGYMA4EI.js +0 -219
  378. package/chunks/chunk-VCBZUOSI.js +0 -8575
  379. package/chunks/contextCommand-QIZYHDR5.js +0 -81
  380. package/chunks/daemon-status-provider-OS5UWBHV.js +0 -90
  381. package/chunks/earlyInputCapture-WQT24RWD.js +0 -83
  382. package/chunks/environment-VZ7BRI4Q.js +0 -103
  383. package/chunks/errors-PCX25DVP.js +0 -89
  384. package/chunks/exitPlanMode-GHPUHBZJ.js +0 -423
  385. package/chunks/handleAutoUpdate-2CZQRJ66.js +0 -82
  386. package/chunks/i18n-XEQVMRKN.js +0 -98
  387. package/chunks/initializer-OVGZ4FLY.js +0 -87
  388. package/chunks/installationInfo-5UUQJI6Y.js +0 -81
  389. package/chunks/list-HODU6RXD.js +0 -90
  390. package/chunks/loadedSettingsAdapter-TYNLBALY.js +0 -84
  391. package/chunks/mcp-J3DFWX4A.js +0 -84
  392. package/chunks/nonInteractiveCli-F4GYSMHT.js +0 -144
  393. package/chunks/pidfile-4VNAR3EP.js +0 -87
  394. package/chunks/read-file-LZXUR4TO.js +0 -31
  395. package/chunks/resumeHistoryUtils-65OX3SGJ.js +0 -92
  396. package/chunks/ripGrep-2U2FRGMV.js +0 -74
  397. package/chunks/runtime-AXJWIEDU.js +0 -120
  398. package/chunks/serve-W2GC47CM.js +0 -90
  399. package/chunks/shell-45IPBDP5.js +0 -84
  400. package/chunks/spawnChannel-PVXQ5AGV.js +0 -83
  401. package/chunks/src-AY65BYR7.js +0 -3166
  402. package/chunks/standalone-update-ZMFNKAEY.js +0 -93
  403. package/chunks/task-create-N7WQSGYA.js +0 -25
  404. package/chunks/theme-manager-YYPZFBAH.js +0 -78
  405. package/chunks/total-session-admission-JXES723M.js +0 -85
  406. package/chunks/trustedFolders-HVI7IXUH.js +0 -94
  407. package/chunks/updateCheck-WUJGHWZZ.js +0 -93
  408. package/chunks/useAutoAcceptIndicator-CHSTZLZD.js +0 -94
  409. package/chunks/workspace-providers-status-GAKSF4LL.js +0 -87
  410. package/chunks/workspace-registry-A7NQUONG.js +0 -89
  411. package/chunks/workspace-service-STGVSO4N.js +0 -99
  412. package/chunks/workspace-skills-status-66AK3DUA.js +0 -86
  413. package/chunks/write-file-HUUCEG4P.js +0 -74
  414. package/web-shell/assets/channel-Bzdx6E8P.js +0 -1
  415. package/web-shell/assets/classDiagram-4FO5ZUOK-Cd6wbiuK.js +0 -1
  416. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cd6wbiuK.js +0 -1
  417. package/web-shell/assets/index-B2bXx96W.js +0 -1249
  418. package/web-shell/assets/index-_8mKjx8q.css +0 -5
  419. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BjMdT6E_.js +0 -1
  420. package/chunks/{chunk-TARRHLLG.js → chunk-QUGAUQGJ.js} +25 -25
  421. package/chunks/{chunk-U7ZFW55U.js → chunk-VOQXFAY5.js} +977 -977
  422. /package/chunks/{chunk-LXXMOYPL.js → chunk-VXZBKKQR.js} +0 -0
@@ -5,11 +5,11 @@ import {
5
5
  } from "./chunk-VGC4I5JJ.js";
6
6
  import {
7
7
  atomicWriteJSON
8
- } from "./chunk-A5L3JMUA.js";
8
+ } from "./chunk-HC45LTEN.js";
9
9
  import {
10
10
  Storage,
11
11
  getProjectHash
12
- } from "./chunk-NL7LTRLR.js";
12
+ } from "./chunk-E2BHWIDT.js";
13
13
  import {
14
14
  init_esbuild_shims
15
15
  } from "./chunk-5O2XNYP6.js";
@@ -104,10 +104,14 @@ async function readCronTasks(projectRoot) {
104
104
  return parsed;
105
105
  }
106
106
  __name(readCronTasks, "readCronTasks");
107
- async function writeCronTasks(projectRoot, tasks) {
107
+ async function writeCronTasks(projectRoot, tasks, options = {}) {
108
108
  const filePath = getCronFilePath(projectRoot);
109
+ options.assertCanCommit?.();
109
110
  await fs.mkdir(path.dirname(filePath), { recursive: true });
110
- await atomicWriteJSON(filePath, tasks, { noFollow: true });
111
+ await atomicWriteJSON(filePath, tasks, {
112
+ noFollow: true,
113
+ assertCanCommit: options.assertCanCommit
114
+ });
111
115
  }
112
116
  __name(writeCronTasks, "writeCronTasks");
113
117
  async function acquireUpdateLock(filePath) {
@@ -154,7 +158,7 @@ async function acquireUpdateLock(filePath) {
154
158
  }
155
159
  }
156
160
  __name(acquireUpdateLock, "acquireUpdateLock");
157
- async function updateCronTasks(projectRoot, mutate) {
161
+ async function updateCronTasks(projectRoot, mutate, options = {}) {
158
162
  const filePath = getCronFilePath(projectRoot);
159
163
  return getUpdateMutex(filePath).runExclusive(async () => {
160
164
  const release = await acquireUpdateLock(filePath);
@@ -162,7 +166,7 @@ async function updateCronTasks(projectRoot, mutate) {
162
166
  const tasks = await readCronTasks(projectRoot);
163
167
  const next = mutate(tasks);
164
168
  if (next !== tasks) {
165
- await writeCronTasks(projectRoot, next);
169
+ await writeCronTasks(projectRoot, next, options);
166
170
  }
167
171
  } finally {
168
172
  await release();
@@ -230,7 +234,6 @@ function isValidTask(value) {
230
234
  __name(isValidTask, "isValidTask");
231
235
 
232
236
  export {
233
- MAX_TASK_RUNS,
234
237
  MAX_CHANNEL_DELIVERY_NAME_LENGTH,
235
238
  MAX_CHANNEL_DELIVERY_TARGET_ID_LENGTH,
236
239
  appendCronRun,
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  createDebugLogger
5
- } from "./chunk-NL7LTRLR.js";
5
+ } from "./chunk-E2BHWIDT.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -5,9 +5,7 @@ import {
5
5
  BaseToolInvocation,
6
6
  ToolDisplayNames,
7
7
  ToolNames
8
- } from "./chunk-PR75REBZ.js";
9
- import "./chunk-NL7LTRLR.js";
10
- import "./chunk-TARRHLLG.js";
8
+ } from "./chunk-MM7TH7ZM.js";
11
9
  import {
12
10
  init_esbuild_shims
13
11
  } from "./chunk-5O2XNYP6.js";
@@ -18,9 +16,11 @@ import {
18
16
  // packages/core/src/tools/record-artifact.ts
19
17
  init_esbuild_shims();
20
18
  import path from "node:path";
21
- var DESCRIPTION = `Registers a session artifact so clients can show it in an artifacts panel. Use it after creating a useful file, URL, image, report, notebook, or other intermediate result that the user may want to open later.
19
+ var DESCRIPTION = `Registers a session artifact so clients can show it in an artifacts panel. Use it after creating a useful file, URL, image, report, notebook, or other intermediate result that the user may want to open later, unless the producing tool already returned artifact metadata. For example, write_file automatically records HTML, image, PDF, and notebook files it writes inside the workspace, so do not call record_artifact again for the same workspacePath; still call it for other formats such as Markdown, CSV, JSON, and plain text, and for files produced outside write_file.
22
20
 
23
21
  This tool only records metadata. It does not publish, upload, read, write, or verify the referenced resource. Provide exactly one locator: workspacePath, managedId, or url. Use the Artifact tool, not record_artifact, for published interactive HTML artifacts.`;
22
+ var ARTIFACT_TITLE_MAX_LENGTH = 200;
23
+ var ARTIFACT_WORKSPACE_PATH_MAX_LENGTH = 500;
24
24
  var RecordArtifactInvocation = class extends BaseToolInvocation {
25
25
  static {
26
26
  __name(this, "RecordArtifactInvocation");
@@ -135,7 +135,12 @@ var RecordArtifactTool = class _RecordArtifactTool extends BaseDeclarativeTool {
135
135
  }
136
136
  validateToolParamValues(params) {
137
137
  params.title = (params.title ?? "").trim();
138
- const titleError = validateString(params.title, "title", 200, true);
138
+ const titleError = validateString(
139
+ params.title,
140
+ "title",
141
+ ARTIFACT_TITLE_MAX_LENGTH,
142
+ true
143
+ );
139
144
  if (titleError) {
140
145
  return titleError;
141
146
  }
@@ -282,7 +287,12 @@ function hasUnsafeDisplayPayload(value) {
282
287
  __name(hasUnsafeDisplayPayload, "hasUnsafeDisplayPayload");
283
288
  function validateWorkspacePath(value) {
284
289
  const trimmed = value.trim();
285
- const stringError = validateString(trimmed, "workspacePath", 500, true);
290
+ const stringError = validateString(
291
+ trimmed,
292
+ "workspacePath",
293
+ ARTIFACT_WORKSPACE_PATH_MAX_LENGTH,
294
+ true
295
+ );
286
296
  if (stringError) {
287
297
  return stringError;
288
298
  }
@@ -333,8 +343,13 @@ function isArtifactKind(kind) {
333
343
  return kind === "file" || kind === "link" || kind === "html" || kind === "image" || kind === "video" || kind === "audio" || kind === "pdf" || kind === "notebook" || kind === "other";
334
344
  }
335
345
  __name(isArtifactKind, "isArtifactKind");
346
+
336
347
  export {
337
- RecordArtifactTool
348
+ ARTIFACT_TITLE_MAX_LENGTH,
349
+ ARTIFACT_WORKSPACE_PATH_MAX_LENGTH,
350
+ RecordArtifactTool,
351
+ hasControlCharacter,
352
+ hasUnsafeDisplayPayload
338
353
  };
339
354
  /**
340
355
  * @license
@@ -0,0 +1,319 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ getUserSettingsPath,
5
+ v1ToV2Migration
6
+ } from "./chunk-W3UKBMSI.js";
7
+ import {
8
+ getSystemDefaultsPath,
9
+ getSystemSettingsPath
10
+ } from "./chunk-IDS7MSUP.js";
11
+ import {
12
+ LoadedTrustedFolders,
13
+ TrustLevel,
14
+ getTrustedFoldersPath
15
+ } from "./chunk-P755N4CS.js";
16
+ import {
17
+ require_strip_json_comments
18
+ } from "./chunk-ALGGS7UH.js";
19
+ import {
20
+ arePathsEquivalent
21
+ } from "./chunk-MR3PXB6E.js";
22
+ import {
23
+ ideContextStore
24
+ } from "./chunk-54YCNSK5.js";
25
+ import {
26
+ init_esbuild_shims
27
+ } from "./chunk-5O2XNYP6.js";
28
+ import {
29
+ __name,
30
+ __toESM
31
+ } from "./chunk-J2S4EL5Y.js";
32
+
33
+ // packages/cli/src/config/daemon-trust-policy.ts
34
+ init_esbuild_shims();
35
+ import { createHash } from "node:crypto";
36
+ import * as fs from "node:fs/promises";
37
+ var import_strip_json_comments = __toESM(require_strip_json_comments(), 1);
38
+ var MAX_TRUSTED_FOLDERS_BYTES = 1024 * 1024;
39
+ var MAX_SETTINGS_BYTES = 4 * 1024 * 1024;
40
+ function policyError(code, filePath, error) {
41
+ return {
42
+ code,
43
+ path: filePath,
44
+ message: error instanceof Error ? error.message : String(error)
45
+ };
46
+ }
47
+ __name(policyError, "policyError");
48
+ async function readJsonObject(filePath, maxBytes, requireRegularFile, retryMissing = false) {
49
+ const delays = [0, 50, 200];
50
+ let result = {};
51
+ for (const delay of delays) {
52
+ if (delay > 0) {
53
+ await new Promise((resolve) => setTimeout(resolve, delay));
54
+ }
55
+ result = await readJsonObjectOnce(filePath, maxBytes, requireRegularFile);
56
+ if (!result.error && (!result.missing || !retryMissing)) return result;
57
+ }
58
+ return result;
59
+ }
60
+ __name(readJsonObject, "readJsonObject");
61
+ async function readJsonObjectOnce(filePath, maxBytes, requireRegularFile) {
62
+ let stat2;
63
+ try {
64
+ stat2 = await fs.lstat(filePath);
65
+ } catch (error) {
66
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
67
+ return { value: {}, missing: true };
68
+ }
69
+ return {
70
+ error: policyError("trust_policy_unreadable", filePath, error)
71
+ };
72
+ }
73
+ if (!requireRegularFile && stat2.isSymbolicLink()) {
74
+ try {
75
+ stat2 = await fs.stat(filePath);
76
+ } catch (error) {
77
+ return {
78
+ error: policyError("trust_policy_unreadable", filePath, error)
79
+ };
80
+ }
81
+ }
82
+ if (requireRegularFile && stat2.isSymbolicLink() || !stat2.isFile()) {
83
+ return {
84
+ error: policyError(
85
+ "trust_policy_invalid",
86
+ filePath,
87
+ new Error("Trust policy input must be a regular file.")
88
+ )
89
+ };
90
+ }
91
+ if (stat2.size > maxBytes) {
92
+ return {
93
+ error: policyError(
94
+ "trust_policy_invalid",
95
+ filePath,
96
+ new Error(`Trust policy input exceeds ${maxBytes} bytes.`)
97
+ )
98
+ };
99
+ }
100
+ try {
101
+ const raw = await fs.readFile(filePath, "utf8");
102
+ const parsed = JSON.parse((0, import_strip_json_comments.default)(raw));
103
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
104
+ throw new Error("Trust policy input must contain a JSON object.");
105
+ }
106
+ return { value: parsed };
107
+ } catch (error) {
108
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
109
+ return { value: {}, missing: true };
110
+ }
111
+ return { error: policyError("trust_policy_invalid", filePath, error) };
112
+ }
113
+ }
114
+ __name(readJsonObjectOnce, "readJsonObjectOnce");
115
+ function migrateFolderTrustSettings(value, scope) {
116
+ if (!value || !v1ToV2Migration.shouldMigrate(value)) return value;
117
+ return v1ToV2Migration.migrate(value, scope).settings;
118
+ }
119
+ __name(migrateFolderTrustSettings, "migrateFolderTrustSettings");
120
+ function folderTrustSetting(value, filePath) {
121
+ if (!value || !("security" in value)) return {};
122
+ const security = value?.["security"];
123
+ if (typeof security !== "object" || security === null || Array.isArray(security)) {
124
+ return {
125
+ error: policyError(
126
+ "trust_policy_invalid",
127
+ filePath,
128
+ new Error("`security` must be an object.")
129
+ )
130
+ };
131
+ }
132
+ if (!("folderTrust" in security)) return {};
133
+ const folderTrust = security["folderTrust"];
134
+ if (typeof folderTrust !== "object" || folderTrust === null || Array.isArray(folderTrust)) {
135
+ return {
136
+ error: policyError(
137
+ "trust_policy_invalid",
138
+ filePath,
139
+ new Error("`security.folderTrust` must be an object.")
140
+ )
141
+ };
142
+ }
143
+ if (!("enabled" in folderTrust)) return {};
144
+ const enabled = folderTrust["enabled"];
145
+ if (typeof enabled === "boolean") return { value: enabled };
146
+ return {
147
+ error: policyError(
148
+ "trust_policy_invalid",
149
+ filePath,
150
+ new Error("`security.folderTrust.enabled` must be a boolean.")
151
+ )
152
+ };
153
+ }
154
+ __name(folderTrustSetting, "folderTrustSetting");
155
+ function parseTrustedFolders(value, filePath) {
156
+ const config = {};
157
+ for (const [rulePath, rawLevel] of Object.entries(value ?? {})) {
158
+ if (!Object.values(TrustLevel).includes(rawLevel)) {
159
+ return {
160
+ config: {},
161
+ error: policyError(
162
+ "trust_policy_invalid",
163
+ filePath,
164
+ new Error(`Invalid trust level for ${JSON.stringify(rulePath)}.`)
165
+ )
166
+ };
167
+ }
168
+ config[rulePath] = rawLevel;
169
+ }
170
+ return { config };
171
+ }
172
+ __name(parseTrustedFolders, "parseTrustedFolders");
173
+ function semanticRevision(input) {
174
+ const sortedRules = Object.entries(input.trustedFolders).sort(
175
+ ([a], [b]) => a.localeCompare(b)
176
+ );
177
+ return createHash("sha256").update(
178
+ JSON.stringify({
179
+ folderTrustEnabled: input.folderTrustEnabled,
180
+ ideTrust: input.ideTrust ?? null,
181
+ trustedFolders: sortedRules,
182
+ settingsError: input.settingsError?.code ?? null,
183
+ trustedFoldersError: input.trustedFoldersError?.code ?? null
184
+ })
185
+ ).digest("hex");
186
+ }
187
+ __name(semanticRevision, "semanticRevision");
188
+ async function readDaemonTrustPolicySnapshot() {
189
+ const [user, system, systemDefaults] = await Promise.all([
190
+ readJsonObject(getUserSettingsPath(), MAX_SETTINGS_BYTES, false),
191
+ readJsonObject(getSystemSettingsPath(), MAX_SETTINGS_BYTES, false),
192
+ readJsonObject(getSystemDefaultsPath(), MAX_SETTINGS_BYTES, false)
193
+ ]);
194
+ const systemFolderTrust = folderTrustSetting(
195
+ migrateFolderTrustSettings(system.value, "System"),
196
+ getSystemSettingsPath()
197
+ );
198
+ const userFolderTrust = folderTrustSetting(
199
+ migrateFolderTrustSettings(user.value, "User"),
200
+ getUserSettingsPath()
201
+ );
202
+ const defaultsFolderTrust = folderTrustSetting(
203
+ migrateFolderTrustSettings(systemDefaults.value, "SystemDefaults"),
204
+ getSystemDefaultsPath()
205
+ );
206
+ const settingsError = system.error ?? systemFolderTrust.error ?? user.error ?? userFolderTrust.error ?? systemDefaults.error ?? defaultsFolderTrust.error;
207
+ const folderTrustEnabled = systemFolderTrust.value ?? userFolderTrust.value ?? defaultsFolderTrust.value ?? false;
208
+ const trustedFoldersFile = await readJsonObject(
209
+ getTrustedFoldersPath(),
210
+ MAX_TRUSTED_FOLDERS_BYTES,
211
+ true,
212
+ folderTrustEnabled
213
+ );
214
+ const parsedTrustedFolders = parseTrustedFolders(
215
+ trustedFoldersFile.value,
216
+ getTrustedFoldersPath()
217
+ );
218
+ const trustedFoldersError = trustedFoldersFile.error ?? parsedTrustedFolders.error;
219
+ const ideTrust = ideContextStore.get()?.workspaceState?.isTrusted;
220
+ const revision = semanticRevision({
221
+ folderTrustEnabled,
222
+ ideTrust,
223
+ trustedFolders: parsedTrustedFolders.config,
224
+ ...settingsError ? { settingsError } : {},
225
+ ...trustedFoldersError ? { trustedFoldersError } : {}
226
+ });
227
+ return {
228
+ revision,
229
+ folderTrustEnabled,
230
+ ideTrust,
231
+ trustedFolders: Object.freeze({ ...parsedTrustedFolders.config }),
232
+ ...settingsError ? { settingsError } : {},
233
+ ...trustedFoldersError ? { trustedFoldersError } : {}
234
+ };
235
+ }
236
+ __name(readDaemonTrustPolicySnapshot, "readDaemonTrustPolicySnapshot");
237
+ function explicitTrustLevel(snapshot, workspaceCwd) {
238
+ const folders = new LoadedTrustedFolders(
239
+ {
240
+ path: getTrustedFoldersPath(),
241
+ config: { ...snapshot.trustedFolders }
242
+ },
243
+ []
244
+ );
245
+ const effective = folders.isPathTrusted(workspaceCwd);
246
+ if (effective === void 0) return null;
247
+ for (const [rulePath, trustLevel] of Object.entries(
248
+ snapshot.trustedFolders
249
+ )) {
250
+ const preview = new LoadedTrustedFolders(
251
+ { path: getTrustedFoldersPath(), config: { [rulePath]: trustLevel } },
252
+ []
253
+ ).isPathTrusted(workspaceCwd);
254
+ if (preview === effective) return trustLevel;
255
+ }
256
+ return null;
257
+ }
258
+ __name(explicitTrustLevel, "explicitTrustLevel");
259
+ function evaluateDaemonWorkspaceTrust(snapshot, workspaceCwd, processCwd = process.cwd()) {
260
+ if (snapshot.settingsError) {
261
+ return {
262
+ state: "error",
263
+ targetTrusted: false,
264
+ source: "none",
265
+ explicitTrustLevel: null,
266
+ error: snapshot.settingsError
267
+ };
268
+ }
269
+ if (!snapshot.folderTrustEnabled) {
270
+ return {
271
+ state: "trusted",
272
+ targetTrusted: true,
273
+ source: "disabled",
274
+ explicitTrustLevel: null
275
+ };
276
+ }
277
+ if (snapshot.ideTrust !== void 0 && arePathsEquivalent(workspaceCwd, processCwd)) {
278
+ return {
279
+ state: snapshot.ideTrust ? "trusted" : "untrusted",
280
+ targetTrusted: snapshot.ideTrust,
281
+ source: "ide",
282
+ explicitTrustLevel: null
283
+ };
284
+ }
285
+ if (snapshot.trustedFoldersError) {
286
+ return {
287
+ state: "error",
288
+ targetTrusted: false,
289
+ source: "none",
290
+ explicitTrustLevel: null,
291
+ error: snapshot.trustedFoldersError
292
+ };
293
+ }
294
+ const folders = new LoadedTrustedFolders(
295
+ {
296
+ path: getTrustedFoldersPath(),
297
+ config: { ...snapshot.trustedFolders }
298
+ },
299
+ []
300
+ );
301
+ const trusted = folders.isPathTrusted(workspaceCwd);
302
+ return {
303
+ state: trusted === true ? "trusted" : trusted === false ? "untrusted" : "unknown",
304
+ targetTrusted: trusted === true,
305
+ source: trusted === void 0 ? "none" : "file",
306
+ explicitTrustLevel: explicitTrustLevel(snapshot, workspaceCwd)
307
+ };
308
+ }
309
+ __name(evaluateDaemonWorkspaceTrust, "evaluateDaemonWorkspaceTrust");
310
+
311
+ export {
312
+ readDaemonTrustPolicySnapshot,
313
+ evaluateDaemonWorkspaceTrust
314
+ };
315
+ /**
316
+ * @license
317
+ * Copyright 2026 Qwen Team
318
+ * SPDX-License-Identifier: Apache-2.0
319
+ */
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  createDebugLogger
5
- } from "./chunk-NL7LTRLR.js";
5
+ } from "./chunk-E2BHWIDT.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -2,15 +2,15 @@
2
2
  "use strict";
3
3
  import {
4
4
  sanitizeFilenameForDisplay
5
- } from "./chunk-IPUUTYMV.js";
5
+ } from "./chunk-YDLJGZHL.js";
6
6
  import {
7
7
  t
8
- } from "./chunk-VV6XU5L7.js";
8
+ } from "./chunk-3F2WDAV6.js";
9
9
  import {
10
10
  fetchGitDiff,
11
11
  findProviderByCredentials,
12
12
  resolveMetadataKey
13
- } from "./chunk-DM4Q4JJH.js";
13
+ } from "./chunk-54YCNSK5.js";
14
14
  import {
15
15
  init_esbuild_shims
16
16
  } from "./chunk-5O2XNYP6.js";
@@ -274,6 +274,115 @@ var diffCommand = {
274
274
  action: diffAction
275
275
  };
276
276
 
277
+ // packages/cli/src/ui/utils/inline-math.ts
278
+ init_esbuild_shims();
279
+ var INLINE_MATH_MAX_CHARS = 1024;
280
+ var INLINE_CODE_SPAN_PATTERN_SOURCE = String.raw`(?<!\`)(?<inlineCodeFence>\`+)(?!\`).+?(?<!\`)\k<inlineCodeFence>(?!\`)`;
281
+ var INLINE_CODE_SPAN_RE = new RegExp(INLINE_CODE_SPAN_PATTERN_SOURCE, "g");
282
+ function isEscapedAt(text, index) {
283
+ let slashCount = 0;
284
+ for (let cursor = index - 1; cursor >= 0 && text[cursor] === "\\"; cursor -= 1) {
285
+ slashCount += 1;
286
+ }
287
+ return slashCount % 2 === 1;
288
+ }
289
+ __name(isEscapedAt, "isEscapedAt");
290
+ function isUnescapedDollarAt(text, index) {
291
+ return text[index] === "$" && !isEscapedAt(text, index);
292
+ }
293
+ __name(isUnescapedDollarAt, "isUnescapedDollarAt");
294
+ function unescapeMarkdownDollars(text) {
295
+ return text.replace(
296
+ /(\\+)\$/g,
297
+ (_match, slashes) => `${"\\".repeat(Math.floor(slashes.length / 2))}$`
298
+ );
299
+ }
300
+ __name(unescapeMarkdownDollars, "unescapeMarkdownDollars");
301
+ function unescapeMarkdownBeforeMath(text) {
302
+ return unescapeMarkdownDollars(`${text}$`).slice(0, -1);
303
+ }
304
+ __name(unescapeMarkdownBeforeMath, "unescapeMarkdownBeforeMath");
305
+ function readInlineMathSpan(text, index) {
306
+ if (!isUnescapedDollarAt(text, index)) {
307
+ return null;
308
+ }
309
+ const previous = text[index - 1] ?? "";
310
+ const next = text[index + 1] ?? "";
311
+ if (/\w/.test(previous) || isUnescapedDollarAt(text, index - 1) || !next || /[\s\d$]/.test(next)) {
312
+ return null;
313
+ }
314
+ let closingIndex = index + 1;
315
+ while (closingIndex < text.length && text[closingIndex] !== "\n" && closingIndex - index - 1 <= INLINE_MATH_MAX_CHARS && !isUnescapedDollarAt(text, closingIndex)) {
316
+ closingIndex += 1;
317
+ }
318
+ if (!isUnescapedDollarAt(text, closingIndex)) {
319
+ return null;
320
+ }
321
+ const content = text.slice(index + 1, closingIndex);
322
+ const following = text[closingIndex + 1] ?? "";
323
+ if (content.length > INLINE_MATH_MAX_CHARS || /\s$/.test(content) || /[\w$]/.test(following)) {
324
+ return null;
325
+ }
326
+ return {
327
+ content,
328
+ index,
329
+ raw: text.slice(index, closingIndex + 1)
330
+ };
331
+ }
332
+ __name(readInlineMathSpan, "readInlineMathSpan");
333
+ function findNextInlineMath(text, fromIndex = 0) {
334
+ for (let index = fromIndex; index < text.length; index += 1) {
335
+ const span = readInlineMathSpan(text, index);
336
+ if (span) {
337
+ return span;
338
+ }
339
+ }
340
+ return null;
341
+ }
342
+ __name(findNextInlineMath, "findNextInlineMath");
343
+ function* mergeInlineMathMatches(text, markupRegex, enableInlineMath = true) {
344
+ markupRegex.lastIndex = 0;
345
+ const markupMatches = text.matchAll(markupRegex);
346
+ let nextMarkup = markupMatches.next();
347
+ let nextMath = enableInlineMath ? findNextInlineMath(text) : null;
348
+ let cursor = 0;
349
+ while (!nextMarkup.done || nextMath) {
350
+ while (!nextMarkup.done && (nextMarkup.value.index ?? 0) < cursor) {
351
+ nextMarkup = markupMatches.next();
352
+ }
353
+ if (nextMath && nextMath.index < cursor) {
354
+ nextMath = findNextInlineMath(text, cursor);
355
+ }
356
+ const markupIndex = nextMarkup.done ? Number.POSITIVE_INFINITY : nextMarkup.value.index ?? 0;
357
+ const mathIndex = nextMath?.index ?? Number.POSITIVE_INFINITY;
358
+ if (!nextMarkup.done && markupIndex <= mathIndex) {
359
+ const match = nextMarkup.value;
360
+ yield { kind: "markup", match };
361
+ cursor = markupIndex + match[0].length;
362
+ nextMarkup = markupMatches.next();
363
+ } else if (nextMath) {
364
+ yield { kind: "math", span: nextMath };
365
+ cursor = mathIndex + nextMath.raw.length;
366
+ nextMath = findNextInlineMath(text, cursor);
367
+ }
368
+ }
369
+ }
370
+ __name(mergeInlineMathMatches, "mergeInlineMathMatches");
371
+ function findInlineMathExpressions(text) {
372
+ const expressions = [];
373
+ for (const token of mergeInlineMathMatches(text, INLINE_CODE_SPAN_RE)) {
374
+ if (token.kind === "math") {
375
+ expressions.push(token.span.content);
376
+ }
377
+ }
378
+ return expressions;
379
+ }
380
+ __name(findInlineMathExpressions, "findInlineMathExpressions");
381
+ function readInlineMathSpanAt(text, index) {
382
+ return readInlineMathSpan(text, index)?.raw ?? null;
383
+ }
384
+ __name(readInlineMathSpanAt, "readInlineMathSpanAt");
385
+
277
386
  // packages/cli/src/utils/systemInfoFields.ts
278
387
  init_esbuild_shims();
279
388
  function getSystemInfoFields(info) {
@@ -390,10 +499,15 @@ init_esbuild_shims();
390
499
  function calculateCost(args) {
391
500
  const { inputTokens, outputTokens, pricing } = args;
392
501
  if (!pricing) return null;
502
+ if (pricing.inputPerMillionTokens == null && pricing.outputPerMillionTokens == null) {
503
+ return null;
504
+ }
505
+ if (inputTokens <= 0 && outputTokens <= 0) {
506
+ return null;
507
+ }
393
508
  const inputCost = pricing.inputPerMillionTokens != null ? inputTokens / 1e6 * pricing.inputPerMillionTokens : 0;
394
509
  const outputCost = pricing.outputPerMillionTokens != null ? outputTokens / 1e6 * pricing.outputPerMillionTokens : 0;
395
- const total = inputCost + outputCost;
396
- return total > 0 ? total : null;
510
+ return inputCost + outputCost;
397
511
  }
398
512
  __name(calculateCost, "calculateCost");
399
513
 
@@ -418,6 +532,12 @@ function levelLabel(level) {
418
532
  __name(levelLabel, "levelLabel");
419
533
 
420
534
  export {
535
+ INLINE_CODE_SPAN_PATTERN_SOURCE,
536
+ unescapeMarkdownDollars,
537
+ unescapeMarkdownBeforeMath,
538
+ mergeInlineMathMatches,
539
+ findInlineMathExpressions,
540
+ readInlineMathSpanAt,
421
541
  getSystemInfoFields,
422
542
  calculateErrorRate,
423
543
  calculateAverageLatency,
@@ -435,6 +555,11 @@ export {
435
555
  * Copyright 2025 Google LLC
436
556
  * SPDX-License-Identifier: Apache-2.0
437
557
  */
558
+ /**
559
+ * @license
560
+ * Copyright 2026 Qwen Team
561
+ * SPDX-License-Identifier: Apache-2.0
562
+ */
438
563
  /**
439
564
  * @license
440
565
  * Copyright 2025 Qwen
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  BaseJsonOutputAdapter
5
- } from "./chunk-P5V4T7NK.js";
5
+ } from "./chunk-JJPKFJBT.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";