@qwen-code/qwen-code 0.21.7 → 0.21.8

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 (314) hide show
  1. package/README.md +2 -0
  2. package/bundled/qc-helper/docs/configuration/settings.md +43 -30
  3. package/bundled/qc-helper/docs/features/channels/dingtalk.md +40 -2
  4. package/bundled/qc-helper/docs/features/channels/feishu.md +13 -2
  5. package/bundled/qc-helper/docs/features/channels/github.md +13 -11
  6. package/bundled/qc-helper/docs/features/channels/gitlab.md +13 -11
  7. package/bundled/qc-helper/docs/features/channels/overview.md +49 -31
  8. package/bundled/qc-helper/docs/features/channels/plugins.md +2 -2
  9. package/bundled/qc-helper/docs/features/channels/qqbot.md +4 -2
  10. package/bundled/qc-helper/docs/features/channels/telegram.md +4 -2
  11. package/bundled/qc-helper/docs/features/channels/wecom.md +1 -1
  12. package/bundled/qc-helper/docs/features/code-review.md +4 -0
  13. package/bundled/qc-helper/docs/features/commands.md +1 -1
  14. package/bundled/qc-helper/docs/features/hooks.md +52 -0
  15. package/bundled/qc-helper/docs/integration-jetbrains.md +1 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +4 -1
  17. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +50 -36
  18. package/bundled/review/SKILL.md +28 -5
  19. package/chunks/{MaxSizedBox-ANWZBPTS.js → MaxSizedBox-7PM6BGJ5.js} +26 -22
  20. package/chunks/{StandaloneSessionPicker-XKS3VU3A.js → StandaloneSessionPicker-3UQHM7GV.js} +44 -40
  21. package/chunks/{acp-startup-profiler-ORIQ2CCQ.js → acp-startup-profiler-B5BYAMYQ.js} +2 -2
  22. package/chunks/{acpAgent-KUAZ3GCZ.js → acpAgent-5UWLFV6V.js} +534 -262
  23. package/chunks/{agent-T6PTGX5R.js → agent-624T2BLO.js} +26 -22
  24. package/chunks/{agent-headless-PR7YCB7S.js → agent-headless-2EE5J2KX.js} +26 -22
  25. package/chunks/{artifact-tool-U4VOZIK5.js → artifact-tool-N652YE4L.js} +1 -1
  26. package/chunks/{askUserQuestion-XOBQLPFA.js → askUserQuestion-ONW74PKJ.js} +1 -1
  27. package/chunks/{bridge-NU6YEEHK.js → bridge-JENKGFFP.js} +29 -25
  28. package/chunks/{ca-NYKNH222.js → ca-ZLKAB4K3.js} +6 -0
  29. package/chunks/{channel-management-service-FSQ7SHYI.js → channel-management-service-DDWUPHMU.js} +19 -10
  30. package/chunks/{channel-settings-store-35VQVUVV.js → channel-settings-store-SA6JZSPH.js} +34 -30
  31. package/chunks/{channel-worker-group-JWQK224X.js → channel-worker-group-E67EN3RV.js} +5 -5
  32. package/chunks/{channel-worker-manager-77E3OXRQ.js → channel-worker-manager-SW4C45CF.js} +5 -5
  33. package/chunks/{channel-worker-supervisor-62YWUGP2.js → channel-worker-supervisor-5SRD24FG.js} +3 -3
  34. package/chunks/{chunk-CJXIIILK.js → chunk-2FRY5CRX.js} +1 -1
  35. package/chunks/{chunk-ZJ3VGYHK.js → chunk-2ILAOM2I.js} +34 -17
  36. package/chunks/{chunk-6XJMFJ4D.js → chunk-2M4K4KYS.js} +177 -120
  37. package/chunks/{chunk-CNIID3TV.js → chunk-2UUMVNYT.js} +1 -1
  38. package/chunks/{chunk-22NBYCPD.js → chunk-3P2LV43B.js} +1 -1
  39. package/chunks/{chunk-2U3WZGZG.js → chunk-3PY4LPJF.js} +19 -131
  40. package/chunks/{chunk-SPMY6CX6.js → chunk-3SE7J4DR.js} +3 -3
  41. package/chunks/{chunk-6UWFTUQL.js → chunk-3WNQOYHQ.js} +66 -22
  42. package/chunks/{chunk-KXSDEOFU.js → chunk-4ALIARFY.js} +1 -1
  43. package/chunks/{chunk-D3UEZIQH.js → chunk-4DU3NCHG.js} +48 -55
  44. package/chunks/{chunk-BGG4MBYD.js → chunk-4PYCZH2V.js} +4 -187
  45. package/chunks/{chunk-H2UQ2M5Z.js → chunk-4WU6NY7F.js} +96 -22
  46. package/chunks/{chunk-TLV2IMHR.js → chunk-5ZGR6RKJ.js} +3 -3
  47. package/chunks/{chunk-3K7FH2KQ.js → chunk-67N6HB5H.js} +1310 -171
  48. package/chunks/{chunk-EORNAQDT.js → chunk-6TR7CFXH.js} +1 -1
  49. package/chunks/{chunk-NG2R4N5O.js → chunk-6ZRFAKXK.js} +1 -1
  50. package/chunks/{chunk-P2AJ7FTI.js → chunk-757GB46F.js} +1 -1
  51. package/chunks/{chunk-72LNFGUY.js → chunk-77QVBFCU.js} +3 -3
  52. package/chunks/{chunk-OH2VKQXH.js → chunk-7DVT4LVV.js} +37 -30
  53. package/chunks/{chunk-KKJJB5X6.js → chunk-7VUERJHS.js} +1503 -815
  54. package/chunks/{chunk-VOARQPTA.js → chunk-B52AWKBB.js} +65 -21
  55. package/chunks/{chunk-Y4EWSQF7.js → chunk-BF224XHL.js} +2 -2
  56. package/chunks/{chunk-PJOBIWUG.js → chunk-BF52U4XJ.js} +1 -1
  57. package/chunks/{chunk-55LYDVPU.js → chunk-C5VWPTGT.js} +1 -1
  58. package/chunks/{chunk-W7U4ESW2.js → chunk-CG3WBKJK.js} +1 -1
  59. package/chunks/chunk-COBO5EBO.js +135 -0
  60. package/chunks/chunk-CPG6P4GG.js +82 -0
  61. package/chunks/{chunk-DIEFUBV6.js → chunk-DIWZNWZT.js} +205 -35
  62. package/chunks/{chunk-AE77C5ZU.js → chunk-DQSDACD2.js} +1 -1
  63. package/chunks/{chunk-P3LEG54R.js → chunk-DX5W5AON.js} +2 -2
  64. package/chunks/{chunk-EUQTXRKZ.js → chunk-E4ZBKMSF.js} +5 -5
  65. package/chunks/{chunk-FPM27XN4.js → chunk-EIVICVHM.js} +4 -4
  66. package/chunks/{chunk-YHEEE624.js → chunk-EN2TKTFH.js} +1 -1
  67. package/chunks/chunk-F6WFNA7U.js +22 -0
  68. package/chunks/{chunk-FZBZSYKU.js → chunk-FN6YXJOP.js} +1 -1
  69. package/chunks/{chunk-KR4ZSC7K.js → chunk-FWBXMANW.js} +3 -3
  70. package/chunks/{chunk-LA7YLSR6.js → chunk-FYAXKJK7.js} +327 -67
  71. package/chunks/{chunk-CSZEXZBE.js → chunk-GBDINRIL.js} +3 -3
  72. package/chunks/{chunk-SCI7K3GM.js → chunk-GOEVOFQI.js} +19 -10
  73. package/chunks/{chunk-LEMXGVEP.js → chunk-GQCEQPYQ.js} +3 -3
  74. package/chunks/{chunk-Y7E5LNLO.js → chunk-GXSNGY5M.js} +1027 -876
  75. package/chunks/{chunk-6XU3PH66.js → chunk-HA3SAB64.js} +22 -69
  76. package/chunks/{chunk-Y4NGLFGJ.js → chunk-HUWENAHO.js} +1 -1
  77. package/chunks/{chunk-3ULCB3NE.js → chunk-HV76SFIA.js} +1 -1
  78. package/chunks/{chunk-CB2464BK.js → chunk-HWX5HPUG.js} +14 -4
  79. package/chunks/{chunk-LZC3B5N2.js → chunk-IA7TGCN2.js} +2 -2
  80. package/chunks/{chunk-RERATVSK.js → chunk-IBYULW65.js} +6 -6
  81. package/chunks/{chunk-HYRDKNUY.js → chunk-IUQ52YJK.js} +1 -1
  82. package/chunks/{chunk-TDXGKHDN.js → chunk-IYES5WOT.js} +2 -2
  83. package/chunks/{chunk-RGSBTHSU.js → chunk-KAQCJO6Y.js} +131 -4
  84. package/chunks/{chunk-VWOVHOTT.js → chunk-KJZ26VBX.js} +1 -1
  85. package/chunks/{chunk-6GONZVLS.js → chunk-KKDVZLGL.js} +1 -1
  86. package/chunks/{chunk-MKVZE4ZJ.js → chunk-KTJFU7RT.js} +3 -2
  87. package/chunks/{chunk-R574ATRM.js → chunk-M2PNLYGY.js} +41 -0
  88. package/chunks/{chunk-6EOI4HOK.js → chunk-M3STHEMM.js} +12 -17
  89. package/chunks/chunk-NGYI5EF5.js +244 -0
  90. package/chunks/{chunk-ALGGS7UH.js → chunk-NPQ5ZKRP.js} +82 -1
  91. package/chunks/{chunk-HQB2KUAN.js → chunk-NPUXXRJI.js} +1 -1
  92. package/chunks/{chunk-QETYKPMG.js → chunk-NVRDQFCX.js} +1 -1
  93. package/chunks/{chunk-PQBHU2IA.js → chunk-OHKJVAKG.js} +10 -10
  94. package/chunks/{chunk-CYR3HI5X.js → chunk-OQTXYMKW.js} +2 -2
  95. package/chunks/{chunk-DBOFL3LQ.js → chunk-PG62DFWD.js} +10 -10
  96. package/chunks/{chunk-2VSTGY6M.js → chunk-PJRW65JO.js} +1 -1
  97. package/chunks/{chunk-33ACCIIY.js → chunk-PLFATELK.js} +1 -1
  98. package/chunks/{chunk-IC4Z6LX6.js → chunk-PYQADEFD.js} +5 -0
  99. package/chunks/{chunk-MAJS7AT4.js → chunk-QGHSP65Z.js} +2 -2
  100. package/chunks/{chunk-OHJLEW5J.js → chunk-QQWD7LZV.js} +4 -4
  101. package/chunks/{chunk-ZXU5UHMI.js → chunk-QXVSWG66.js} +2 -2
  102. package/chunks/{chunk-E33LOKRA.js → chunk-RPWVIXDB.js} +18 -1
  103. package/chunks/{chunk-TYKC75AX.js → chunk-S3Y3GBFD.js} +1 -1
  104. package/chunks/{chunk-7UFKAV7Y.js → chunk-S6HYI3MF.js} +2 -2
  105. package/chunks/chunk-SAH4BD2J.js +92 -0
  106. package/chunks/{chunk-OMKQH5C5.js → chunk-SNRT2TJJ.js} +6 -23
  107. package/chunks/chunk-SR7RZ4MS.js +202 -0
  108. package/chunks/{chunk-CXE7E23H.js → chunk-TE3ZAJE7.js} +45 -17
  109. package/chunks/{chunk-S7CV4KO6.js → chunk-TKSZJ5BV.js} +3 -3
  110. package/chunks/{chunk-3NB7TSE2.js → chunk-U5SLIG7E.js} +1 -1
  111. package/chunks/chunk-UA5H3DS2.js +203 -0
  112. package/chunks/{chunk-24ER7UV4.js → chunk-UFALT4LK.js} +1 -1
  113. package/chunks/{chunk-YJQCUTT2.js → chunk-VWMUDKLC.js} +3 -3
  114. package/chunks/{chunk-RMH5OWLD.js → chunk-VXZ5HAOV.js} +1 -1
  115. package/chunks/{chunk-BVWVWGLE.js → chunk-WAUGQKUU.js} +4 -64
  116. package/chunks/{chunk-SHZYHGQH.js → chunk-WG6542MA.js} +1 -1
  117. package/chunks/{chunk-5KH532V7.js → chunk-WV5J6Q6N.js} +1 -1
  118. package/chunks/{chunk-RNVQB725.js → chunk-XHD7CRP2.js} +2 -2
  119. package/chunks/{chunk-W4B7UBUS.js → chunk-XZKQT2B2.js} +5 -5
  120. package/chunks/{chunk-6HVUFDS2.js → chunk-Y4TETC74.js} +22 -13
  121. package/chunks/{chunk-RZHU3ILK.js → chunk-YEF7XEO2.js} +4 -4
  122. package/chunks/{chunk-RUL4S3K3.js → chunk-YHJFF7KH.js} +146 -45
  123. package/chunks/{chunk-23RZCH76.js → chunk-YOM7DEGB.js} +3 -3
  124. package/chunks/{chunk-OFI7IGST.js → chunk-ZCLLJARV.js} +9 -9
  125. package/chunks/{chunk-GSS34377.js → chunk-ZHA242R4.js} +2 -2
  126. package/chunks/{chunk-TRLYP7OF.js → chunk-ZPLALRXZ.js} +17 -9
  127. package/chunks/{chunk-WUC6ZFXO.js → chunk-ZWBUH5UP.js} +1 -1
  128. package/chunks/{computer-use-KEAPATUY.js → computer-use-ESQYJ3JY.js} +26 -22
  129. package/chunks/{config-utils-K7SCOWHD.js → config-utils-XQHBJP7G.js} +4 -4
  130. package/chunks/{contextCommand-ZJA6A5K5.js → contextCommand-CX3YF4ZE.js} +28 -24
  131. package/chunks/{core-runtime-QMJPWHCI.js → core-runtime-DIAU7JMG.js} +30 -26
  132. package/chunks/{create-sub-session-DJE6XICH.js → create-sub-session-HDPD6HOA.js} +26 -22
  133. package/chunks/{create-sub-session-E4PBYXV5.js → create-sub-session-QIDZUOPU.js} +1 -1
  134. package/chunks/{cron-create-GRBWYMIJ.js → cron-create-VONA5JYY.js} +1 -1
  135. package/chunks/{cron-delete-4CMKBR2M.js → cron-delete-5JXSP2MI.js} +1 -1
  136. package/chunks/{cron-list-W7K4ASOA.js → cron-list-KE4F2CIR.js} +1 -1
  137. package/chunks/{daemon-SCTQMM7Z.js → daemon-VZBGJUNL.js} +30 -0
  138. package/chunks/{daemon-status-provider-FSWDPE2G.js → daemon-status-provider-H6O4UQ4F.js} +33 -29
  139. package/chunks/{daemon-trust-policy-P5L5VFAY.js → daemon-trust-policy-BNUXG6MT.js} +33 -29
  140. package/chunks/{daemon-trust-policy-monitor-73JYN6ET.js → daemon-trust-policy-monitor-E4EQ7GF4.js} +33 -29
  141. package/chunks/{de-VL76CPLV.js → de-LIW4XVLN.js} +5 -0
  142. package/chunks/{deferred-core-runtime-BWRCCFTE.js → deferred-core-runtime-CBMSHPAU.js} +26 -22
  143. package/chunks/{display-image-O2XFPQTC.js → display-image-NQRSIBXM.js} +2 -2
  144. package/chunks/{dist-DPPHJAVL.js → dist-EEEQGCZA.js} +918 -142
  145. package/chunks/{dist-K4WWQBHS.js → dist-HIACTZEK.js} +55 -15
  146. package/chunks/{dist-3BMEUGTG.js → dist-IRL7WA5Z.js} +1 -1
  147. package/chunks/{dist-HVBMEYWK.js → dist-KVISB2O2.js} +1 -1
  148. package/chunks/{dist-KS4O2NKE.js → dist-MBF3I5MX.js} +14 -8
  149. package/chunks/{dist-SFQ34F4M.js → dist-MKX5OSFF.js} +5 -4
  150. package/chunks/{dist-7JGAAQSC.js → dist-RCH3I7SS.js} +2 -2
  151. package/chunks/{dist-C5U4LJKW.js → dist-TUSWNE2I.js} +5 -4
  152. package/chunks/{earlyInputCapture-L5ST23A6.js → earlyInputCapture-UIOP7OIN.js} +26 -22
  153. package/chunks/{edit-LHHRFNFK.js → edit-ITMZYFKA.js} +26 -22
  154. package/chunks/{en-IRJ2WN5T.js → en-SY5GTIGX.js} +6 -0
  155. package/chunks/{enter-worktree-6NXCRZPF.js → enter-worktree-S4PL5UV6.js} +26 -22
  156. package/chunks/{enterPlanMode-ZVQT4U7D.js → enterPlanMode-YV52NNJT.js} +26 -22
  157. package/chunks/{environment-GJ2HWJOS.js → environment-NGOWPRZV.js} +30 -26
  158. package/chunks/{errors-6RLH3XXC.js → errors-BU26DTDX.js} +28 -24
  159. package/chunks/{exit-worktree-I2YLUHHY.js → exit-worktree-XRM6LH5F.js} +26 -22
  160. package/chunks/{exitPlanMode-7CCWKO7I.js → exitPlanMode-ZLI5F7KR.js} +26 -22
  161. package/chunks/{fast-path-DVFD4HQD.js → fast-path-UJWORIED.js} +23 -3
  162. package/chunks/{fast-path-settings-WQJU2LAT.js → fast-path-settings-37WQD5B2.js} +6 -3
  163. package/chunks/{fr-GK3HQYVB.js → fr-RQFO7U4P.js} +5 -0
  164. package/chunks/{gemini-7FWGOYD4.js → gemini-ZSKNDUMU.js} +77 -65
  165. package/chunks/{geminiContentGenerator-V2WVLIXU.js → geminiContentGenerator-YGEXOEKD.js} +1 -1
  166. package/chunks/{glob-3N6GGI75.js → glob-7KZG44BR.js} +26 -22
  167. package/chunks/{goal-tools-APOW6UXL.js → goal-tools-PXWN5VK3.js} +4 -2
  168. package/chunks/{grep-V43ILZVX.js → grep-6ZFC7RJ5.js} +26 -22
  169. package/chunks/{handleAutoUpdate-A5WFVWIA.js → handleAutoUpdate-KSEL3TQS.js} +30 -26
  170. package/chunks/{i18n-PLVQ4FBZ.js → i18n-ZIUXBW5V.js} +27 -23
  171. package/chunks/{image-gen-7C6IK6DC.js → image-gen-AUIZJJNK.js} +7 -5
  172. package/chunks/{initializer-CVAIKZYL.js → initializer-7AHY3N6Q.js} +33 -29
  173. package/chunks/{installationInfo-J6QDHNTK.js → installationInfo-VGBXMYLY.js} +27 -23
  174. package/chunks/{ja-3FA46IKD.js → ja-KOZKHJHZ.js} +5 -0
  175. package/chunks/{list-ZZ4OUUWV.js → list-PSFKQHLB.js} +36 -32
  176. package/chunks/{list-agents-KFFIIS2G.js → list-agents-Z4WABFDZ.js} +1 -1
  177. package/chunks/{loadedSettingsAdapter-QRYRJSWL.js → loadedSettingsAdapter-FTMRCTOF.js} +33 -29
  178. package/chunks/{loggingContentGenerator-OJCO75HM.js → loggingContentGenerator-MZAN52UV.js} +7 -5
  179. package/chunks/{loop-wakeup-TLMJPMMP.js → loop-wakeup-UZ5RL5Y2.js} +2 -2
  180. package/chunks/{ls-UVVE2XGE.js → ls-TVHDGIES.js} +1 -1
  181. package/chunks/{lsp-QMEA2VLB.js → lsp-CVN6OQPI.js} +1 -1
  182. package/chunks/{managed-npm-update-PCOSCP2N.js → managed-npm-update-O4NHK45X.js} +27 -23
  183. package/chunks/{mcp-M3WKKWKY.js → mcp-6CFP2AYQ.js} +33 -29
  184. package/chunks/{monitor-GN24FH6C.js → monitor-DAKD6OU4.js} +26 -22
  185. package/chunks/{nonInteractiveCli-KPTU3VSQ.js → nonInteractiveCli-RC7VIUZL.js} +66 -60
  186. package/chunks/{notebook-edit-4YM65BBO.js → notebook-edit-474DPMRL.js} +34 -22
  187. package/chunks/{openaiContentGenerator-EDQT6GTV.js → openaiContentGenerator-2NFY2MWO.js} +19 -9
  188. package/chunks/{pidfile-JOIIRN2C.js → pidfile-KBFVDNQP.js} +26 -22
  189. package/chunks/{process-registry-2CHQBXH5.js → process-registry-PMJOA5CO.js} +15 -0
  190. package/chunks/{processUtils-5SV4MX3Q.js → processUtils-6GRYH4Y3.js} +2 -2
  191. package/chunks/{pt-3AOBKPIJ.js → pt-U6AOCTMF.js} +5 -0
  192. package/chunks/{qwenContentGenerator-ODRJSUGR.js → qwenContentGenerator-KAHU6IZY.js} +33 -28
  193. package/chunks/{qwenOAuth2-NESCMZ47.js → qwenOAuth2-RRQTCP4W.js} +7 -5
  194. package/chunks/{read-file-HPSODLPK.js → read-file-3M6WXDXP.js} +6 -4
  195. package/chunks/{read-mcp-resource-2TNSJTC3.js → read-mcp-resource-PZ4ZF6YL.js} +1 -1
  196. package/chunks/{record-artifact-RAON52FC.js → record-artifact-P4HFMS7X.js} +2 -2
  197. package/chunks/{resumeHistoryUtils-TXCOFFMQ.js → resumeHistoryUtils-D6TAY3HX.js} +30 -26
  198. package/chunks/{ripGrep-ZKQGTQAO.js → ripGrep-PLPENT3E.js} +26 -22
  199. package/chunks/{ru-VJRAMC4W.js → ru-CMX4UMYP.js} +5 -0
  200. package/chunks/{run-qwen-serve-ZPKPKECF.js → run-qwen-serve-ZAFIJKJC.js} +168 -54
  201. package/chunks/{runtime-2FLNNM36.js → runtime-ZED7CYOZ.js} +38 -34
  202. package/chunks/{scheduler-365PJHNR.js → scheduler-MD3AL2W5.js} +26 -22
  203. package/chunks/{send-message-ZM7MRUGP.js → send-message-CAMSLG2L.js} +4 -3
  204. package/chunks/{serve-QD2RNLKJ.js → serve-E3VUDRZN.js} +33 -29
  205. package/chunks/{server-XLJVLTYM.js → server-OWMEMAKR.js} +450 -231
  206. package/chunks/{session-3VTUHH4Q.js → session-HZ57QK7K.js} +158 -97
  207. package/chunks/{settings-KULVPCQC.js → settings-V7BR3RKP.js} +32 -28
  208. package/chunks/{shell-3SWW22MH.js → shell-23OMNMW6.js} +26 -22
  209. package/chunks/{skill-KDHWYS7W.js → skill-6HBDYZRS.js} +7 -5
  210. package/chunks/{skill-settings-NMY4JEJC.js → skill-settings-HWJLTU7M.js} +32 -28
  211. package/chunks/{spawnChannel-ZKS4Q5OU.js → spawnChannel-N6KKUW5B.js} +27 -23
  212. package/chunks/{standalone-update-7CXPGAQ4.js → standalone-update-QGIKHATD.js} +28 -24
  213. package/chunks/{startInteractiveUI-2QQLEKM6.js → startInteractiveUI-GX2CRL42.js} +365 -155
  214. package/chunks/{syntheticOutput-ZLCUTKO2.js → syntheticOutput-PEBJQYJV.js} +2 -2
  215. package/chunks/{task-create-CQP5UEA3.js → task-create-5NWCQSJF.js} +5 -4
  216. package/chunks/{task-list-XLEZOJXP.js → task-list-53265TRZ.js} +1 -1
  217. package/chunks/{task-stop-7ZQM5CFF.js → task-stop-FPCOIRYX.js} +1 -1
  218. package/chunks/{task-update-JA75U2SN.js → task-update-5HN577LS.js} +5 -4
  219. package/chunks/{team-create-2WTNGAOX.js → team-create-CFFKU7KL.js} +26 -22
  220. package/chunks/{team-delete-MHY3UZGY.js → team-delete-MMQB4OSC.js} +1 -1
  221. package/chunks/{team-plan-approval-LZTYLEG4.js → team-plan-approval-6EFOKR6A.js} +26 -22
  222. package/chunks/{terminal-image-renderer-R5HHAFJN.js → terminal-image-renderer-TLDNACQY.js} +28 -24
  223. package/chunks/{theme-manager-PAUCSJFF.js → theme-manager-5LJ3H7VO.js} +26 -22
  224. package/chunks/{todoWrite-UPVOHYGD.js → todoWrite-JGV6VLOX.js} +1 -1
  225. package/chunks/{tool-search-2BFCGLI6.js → tool-search-UJV3A24H.js} +9 -6
  226. package/chunks/{total-session-admission-MK4SINFK.js → total-session-admission-D63QYXGO.js} +29 -25
  227. package/chunks/{trustedFolders-TJ5S26N7.js → trustedFolders-KZCOB53W.js} +30 -24
  228. package/chunks/{update-relaunch-N7AYLARF.js → update-relaunch-IFILM3SA.js} +5 -5
  229. package/chunks/{updateCheck-QRZ3DVT5.js → updateCheck-YZ2CRCFC.js} +29 -25
  230. package/chunks/{useAutoAcceptIndicator-DBJ7Y5AF.js → useAutoAcceptIndicator-AXEVNA3Q.js} +35 -31
  231. package/chunks/{validateNonInterActiveAuth-6ZQWUDS3.js → validateNonInterActiveAuth-3WTOJFWA.js} +61 -57
  232. package/chunks/{version-AJQGQWXC.js → version-GXK7OHZY.js} +1 -1
  233. package/chunks/{web-fetch-QWJYRXFL.js → web-fetch-ILB4GAVR.js} +12 -8
  234. package/chunks/{web-search-2AOXJGHU.js → web-search-HKRPGPZZ.js} +8 -6
  235. package/chunks/{workflow-ERH3SJG2.js → workflow-FXIPRQQA.js} +750 -147
  236. package/chunks/{workspace-providers-status-HZ474RA4.js → workspace-providers-status-NYHC7HSR.js} +35 -31
  237. package/chunks/{workspace-registration-store-6EUP4JXG.js → workspace-registration-store-AKEB7OMW.js} +1 -1
  238. package/chunks/{workspace-registry-R4APRRNC.js → workspace-registry-CDAS5TVZ.js} +29 -25
  239. package/chunks/{workspace-service-HFIFDMU7.js → workspace-service-PAMUKMAV.js} +36 -32
  240. package/chunks/{workspace-skills-status-HAHEIHGK.js → workspace-skills-status-YQSHCCMS.js} +33 -29
  241. package/chunks/{workspace-trust-reconciler-65GTAGDK.js → workspace-trust-reconciler-RPTXOIY2.js} +36 -32
  242. package/chunks/{write-file-B34CDELV.js → write-file-CGS57TS4.js} +26 -22
  243. package/chunks/{zh-ARWDLDLR.js → zh-AGL2FVBI.js} +6 -0
  244. package/chunks/{zh-TW-Y4RGI3P7.js → zh-TW-KI66MHQY.js} +6 -0
  245. package/chunks/{zoom-image-HPRBZHSS.js → zoom-image-E7D72GYV.js} +6 -4
  246. package/cli.js +13 -13
  247. package/locales/ca.js +10 -0
  248. package/locales/de.js +9 -0
  249. package/locales/en.js +10 -0
  250. package/locales/fr.js +9 -0
  251. package/locales/ja.js +9 -0
  252. package/locales/pt.js +9 -0
  253. package/locales/ru.js +9 -0
  254. package/locales/zh-TW.js +10 -0
  255. package/locales/zh.js +10 -0
  256. package/package.json +3 -3
  257. package/web-shell/assets/{arc-Ip-FFDJ0.js → arc-DybZaz32.js} +1 -1
  258. package/web-shell/assets/{architectureDiagram-3BPJPVTR-CChqgwIb.js → architectureDiagram-3BPJPVTR-jN3qBd19.js} +1 -1
  259. package/web-shell/assets/{blockDiagram-GPEHLZMM-BHN-Tfss.js → blockDiagram-GPEHLZMM-Ct5DZPrj.js} +1 -1
  260. package/web-shell/assets/{c4Diagram-AAUBKEIU-BhyjzDjN.js → c4Diagram-AAUBKEIU-CUAFMlUG.js} +1 -1
  261. package/web-shell/assets/channel-BMwLrwLW.js +1 -0
  262. package/web-shell/assets/{chunk-2J33WTMH-BB9eyHrx.js → chunk-2J33WTMH-CuV8n90B.js} +1 -1
  263. package/web-shell/assets/{chunk-4BX2VUAB-BeV7ce_J.js → chunk-4BX2VUAB-BUzl_kls.js} +1 -1
  264. package/web-shell/assets/{chunk-55IACEB6-DO7kXDiV.js → chunk-55IACEB6-BnDBLX6A.js} +1 -1
  265. package/web-shell/assets/{chunk-727SXJPM-B27MPznD.js → chunk-727SXJPM-B83uTOjm.js} +1 -1
  266. package/web-shell/assets/{chunk-AQP2D5EJ-DHIjqjD_.js → chunk-AQP2D5EJ-DM3HLgpT.js} +1 -1
  267. package/web-shell/assets/{chunk-FMBD7UC4-DabMqyN2.js → chunk-FMBD7UC4-CSQ5hgyb.js} +1 -1
  268. package/web-shell/assets/{chunk-ND2GUHAM-Dw7Nnnxc.js → chunk-ND2GUHAM-BWOF4SxX.js} +1 -1
  269. package/web-shell/assets/{chunk-QZHKN3VN-DdaZew1Q.js → chunk-QZHKN3VN-BsOH9LMi.js} +1 -1
  270. package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +1 -0
  271. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +1 -0
  272. package/web-shell/assets/{cose-bilkent-S5V4N54A-CgBpCYH5.js → cose-bilkent-S5V4N54A-IENqH2iJ.js} +1 -1
  273. package/web-shell/assets/{dagre-BM42HDAG-BB4IU8G0.js → dagre-BM42HDAG--dyzDTGo.js} +1 -1
  274. package/web-shell/assets/{diagram-2AECGRRQ-BcUTHU37.js → diagram-2AECGRRQ-BE7Dcqof.js} +1 -1
  275. package/web-shell/assets/{diagram-5GNKFQAL-B6Lyihyv.js → diagram-5GNKFQAL-Cr8-5OTj.js} +1 -1
  276. package/web-shell/assets/{diagram-KO2AKTUF-CRIJOjpG.js → diagram-KO2AKTUF-Bzey3uAY.js} +1 -1
  277. package/web-shell/assets/{diagram-LMA3HP47-DdNiwWWT.js → diagram-LMA3HP47-sErl28Xb.js} +1 -1
  278. package/web-shell/assets/{diagram-OG6HWLK6-Dz4b32Do.js → diagram-OG6HWLK6-Dq30ATIo.js} +1 -1
  279. package/web-shell/assets/{erDiagram-TEJ5UH35-D-8NGw77.js → erDiagram-TEJ5UH35-BkCoEfVW.js} +1 -1
  280. package/web-shell/assets/{flowDiagram-I6XJVG4X-Dun26LyM.js → flowDiagram-I6XJVG4X-DHwO0rrI.js} +1 -1
  281. package/web-shell/assets/{ganttDiagram-6RSMTGT7-F10Hu1Gc.js → ganttDiagram-6RSMTGT7-s7vAPxWq.js} +1 -1
  282. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Bf8Ez6-D.js → gitGraphDiagram-PVQCEYII-CQxhwPOU.js} +1 -1
  283. package/web-shell/assets/index-Bckpjr-I.css +5 -0
  284. package/web-shell/assets/{index-BXqw-nGq.js → index-CF4wApWp.js} +1 -1
  285. package/web-shell/assets/index-DwEr9HEW.js +1768 -0
  286. package/web-shell/assets/{infoDiagram-5YYISTIA-DVgTMLvj.js → infoDiagram-5YYISTIA-BnFrD0bq.js} +1 -1
  287. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-uT-KepvK.js → ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js} +1 -1
  288. package/web-shell/assets/{journeyDiagram-JHISSGLW-Vg_XadQf.js → journeyDiagram-JHISSGLW-CyGAhsxi.js} +1 -1
  289. package/web-shell/assets/{kanban-definition-UN3LZRKU-Dyv1ESBE.js → kanban-definition-UN3LZRKU-CbsK5akB.js} +1 -1
  290. package/web-shell/assets/{linear-BMIepYX3.js → linear-cQsF4P8D.js} +1 -1
  291. package/web-shell/assets/{mermaid.core-zA8pJ9ag.js → mermaid.core-Z4HVqrKY.js} +5 -5
  292. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BCW_BZ_5.js → mindmap-definition-RKZ34NQL-CYnrBo_f.js} +1 -1
  293. package/web-shell/assets/{pieDiagram-4H26LBE5-DseNEGp2.js → pieDiagram-4H26LBE5-CBzOfhrs.js} +1 -1
  294. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-6Z7wr1Fi.js → quadrantDiagram-W4KKPZXB-D4LK1Ebn.js} +1 -1
  295. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CVOlCRPf.js → requirementDiagram-4Y6WPE33-Bzti2Lcj.js} +1 -1
  296. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CGhgrUJZ.js → sankeyDiagram-5OEKKPKP-yTBw5Z2s.js} +1 -1
  297. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-dlqmpLuQ.js → sequenceDiagram-3UESZ5HK-D07UVRiZ.js} +1 -1
  298. package/web-shell/assets/{stateDiagram-AJRCARHV-B9EW10Xb.js → stateDiagram-AJRCARHV-UE_lHsTn.js} +1 -1
  299. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +1 -0
  300. package/web-shell/assets/{timeline-definition-PNZ67QCA-BBRh0mgZ.js → timeline-definition-PNZ67QCA-DRvYdiTs.js} +1 -1
  301. package/web-shell/assets/{vennDiagram-CIIHVFJN-B8Gs-REP.js → vennDiagram-CIIHVFJN-CQLIXs0u.js} +1 -1
  302. package/web-shell/assets/{wardley-L42UT6IY-D_y80Ur7.js → wardley-L42UT6IY-JZz_Xqse.js} +1 -1
  303. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D-CNfHJ-.js → wardleyDiagram-YWT4CUSO--i7BiJwB.js} +1 -1
  304. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DQ5CvELo.js → xychartDiagram-2RQKCTM6-Bkc-bW0S.js} +1 -1
  305. package/web-shell/index.html +2 -2
  306. package/chunks/chunk-6PEXNQTX.js +0 -68
  307. package/chunks/chunk-IUFV6FYU.js +0 -81
  308. package/web-shell/assets/channel-Cu8qd6OB.js +0 -1
  309. package/web-shell/assets/classDiagram-4FO5ZUOK-BI3KrXhq.js +0 -1
  310. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BI3KrXhq.js +0 -1
  311. package/web-shell/assets/index-QQlUCJGg.css +0 -5
  312. package/web-shell/assets/index-hcgjV7vS.js +0 -1768
  313. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CJTZJJ5X.js +0 -1
  314. package/chunks/{anthropicContentGenerator-DTMVEL5M.js → anthropicContentGenerator-SSFE2753.js} +9 -9
@@ -2,17 +2,17 @@
2
2
  "use strict";
3
3
  import {
4
4
  JsonOutputAdapter
5
- } from "./chunk-SHZYHGQH.js";
5
+ } from "./chunk-WG6542MA.js";
6
6
  import {
7
7
  settleChatRecording,
8
8
  subscribeToHeadlessChatRecordingFailures
9
- } from "./chunk-3NB7TSE2.js";
9
+ } from "./chunk-U5SLIG7E.js";
10
10
  import {
11
11
  StreamJsonOutputAdapter
12
- } from "./chunk-72LNFGUY.js";
12
+ } from "./chunk-77QVBFCU.js";
13
13
  import {
14
14
  handleAtCommand
15
- } from "./chunk-KR4ZSC7K.js";
15
+ } from "./chunk-FWBXMANW.js";
16
16
  import {
17
17
  buildInitialSystemReminders,
18
18
  buildSystemMessage,
@@ -24,11 +24,11 @@ import {
24
24
  insertAfterFunctionResponses,
25
25
  isSlashCommand,
26
26
  normalizePartList
27
- } from "./chunk-RUL4S3K3.js";
27
+ } from "./chunk-YHJFF7KH.js";
28
28
  import {
29
29
  RunBudgetEnforcer,
30
30
  cleanupReviewWorktreeLeases
31
- } from "./chunk-KKJJB5X6.js";
31
+ } from "./chunk-7VUERJHS.js";
32
32
  import {
33
33
  AlreadyReportedError,
34
34
  handleBudgetExceededError,
@@ -36,14 +36,13 @@ import {
36
36
  handleError,
37
37
  handleMaxTurnsExceededError,
38
38
  handleToolError
39
- } from "./chunk-TDXGKHDN.js";
39
+ } from "./chunk-IYES5WOT.js";
40
40
  import {
41
41
  isInlineModelOverrideAllowed
42
- } from "./chunk-CSZEXZBE.js";
42
+ } from "./chunk-GBDINRIL.js";
43
43
  import {
44
44
  PLAN_MODE_ENTRY_SIBLING_SKIP_MESSAGE,
45
45
  buildSessionRecoveryPlanFromApiHistory,
46
- canonicalToolName,
47
46
  clampInlineMediaPart,
48
47
  createDuplicateProviderToolCallResponse,
49
48
  detectAutonomousSentinel,
@@ -57,7 +56,7 @@ import {
57
56
  parseAndFormatApiError,
58
57
  partitionByConcurrencySafety,
59
58
  restoreWorktreeContext
60
- } from "./chunk-Y7E5LNLO.js";
59
+ } from "./chunk-GXSNGY5M.js";
61
60
  import {
62
61
  parsePositiveIntegerEnv
63
62
  } from "./chunk-6PVPNMXU.js";
@@ -66,10 +65,10 @@ import {
66
65
  } from "./chunk-O6GEWCJA.js";
67
66
  import {
68
67
  GoalPersistenceUnavailableError
69
- } from "./chunk-3K7FH2KQ.js";
68
+ } from "./chunk-67N6HB5H.js";
70
69
  import {
71
70
  isSystemReminderContent
72
- } from "./chunk-LZC3B5N2.js";
71
+ } from "./chunk-IA7TGCN2.js";
73
72
  import {
74
73
  formatFullTurnVisionNotice,
75
74
  formatVisionBridgeNotice,
@@ -79,10 +78,11 @@ import {
79
78
  shouldRunVisionBridge,
80
79
  splitImageParts,
81
80
  uiTelemetryService
82
- } from "./chunk-2U3WZGZG.js";
81
+ } from "./chunk-3PY4LPJF.js";
83
82
  import {
84
- ToolNames
85
- } from "./chunk-IC4Z6LX6.js";
83
+ ToolNames,
84
+ canonicalToolName
85
+ } from "./chunk-PYQADEFD.js";
86
86
  import {
87
87
  isTelemetrySdkInitialized,
88
88
  shutdownTelemetry
@@ -93,7 +93,7 @@ import {
93
93
  } from "./chunk-OIVKILPI.js";
94
94
  import {
95
95
  registerCleanup
96
- } from "./chunk-EORNAQDT.js";
96
+ } from "./chunk-6TR7CFXH.js";
97
97
  import {
98
98
  init_esbuild_shims
99
99
  } from "./chunk-5O2XNYP6.js";
@@ -104,6 +104,15 @@ import {
104
104
  // packages/cli/src/nonInteractiveCli.ts
105
105
  init_esbuild_shims();
106
106
  var debugLogger = createDebugLogger("NON_INTERACTIVE_CLI");
107
+ var TurnInterruptedError = class extends Error {
108
+ static {
109
+ __name(this, "TurnInterruptedError");
110
+ }
111
+ constructor() {
112
+ super("Operation cancelled.");
113
+ this.name = "TurnInterruptedError";
114
+ }
115
+ };
107
116
  var restoredBackgroundAgentSessions = /* @__PURE__ */ new WeakMap();
108
117
  var STRUCTURED_SHUTDOWN_HOLDBACK_MS = 500;
109
118
  function isHeadlessLoopSentinel(prompt) {
@@ -473,6 +482,9 @@ async function runNonInteractive(config, settings, input, prompt_id, options = {
473
482
  await handleBudgetExceededError(config, exceeded);
474
483
  throw new Error(exceeded.message);
475
484
  }
485
+ if (options.recoverableCancellation === true && abortController.signal.reason instanceof TurnInterruptedError) {
486
+ throw abortController.signal.reason;
487
+ }
476
488
  await handleCancellationError(config);
477
489
  throw new Error("Operation cancelled.");
478
490
  }, "routeAbort");
@@ -1836,7 +1848,8 @@ ${text}
1836
1848
  flushQueuedNotificationsToSdk(localQueue);
1837
1849
  finalizeOneShotMonitors();
1838
1850
  const budgetExceeded = budgetEnforcer.getExceeded();
1839
- const message = budgetExceeded ? budgetExceeded.message : error instanceof Error ? error.message : String(error);
1851
+ const recoverableCancellation = !budgetExceeded && options.recoverableCancellation === true && abortController.signal.reason instanceof TurnInterruptedError;
1852
+ const message = budgetExceeded ? budgetExceeded.message : recoverableCancellation ? abortController.signal.reason.message : error instanceof Error ? error.message : String(error);
1840
1853
  const metrics = uiTelemetryService.getMetrics();
1841
1854
  const usage = computeUsageFromMetrics(metrics);
1842
1855
  const stats = outputFormat === "json" /* JSON */ ? uiTelemetryService.getMetrics() : void 0;
@@ -1863,6 +1876,9 @@ ${text}
1863
1876
  if (budgetExceeded) {
1864
1877
  await handleBudgetExceededError(config, budgetExceeded);
1865
1878
  }
1879
+ if (recoverableCancellation) {
1880
+ return 130;
1881
+ }
1866
1882
  await handleError(error, config);
1867
1883
  } finally {
1868
1884
  await failClosedActiveGoalTurn(
@@ -1910,6 +1926,7 @@ ${text}
1910
1926
  __name(runNonInteractive, "runNonInteractive");
1911
1927
 
1912
1928
  export {
1929
+ TurnInterruptedError,
1913
1930
  skipHeadlessLoopSentinel,
1914
1931
  runNonInteractive
1915
1932
  };
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  formatHistoryGapNotice
5
- } from "./chunk-KXSDEOFU.js";
5
+ } from "./chunk-4ALIARFY.js";
6
6
  import {
7
7
  sanitizeTerminalText
8
8
  } from "./chunk-4NFY2S7N.js";
@@ -19,15 +19,18 @@ import {
19
19
  setGoalTerminalObserver,
20
20
  setLastGoalTerminal,
21
21
  unregisterGoalHook
22
- } from "./chunk-Y7E5LNLO.js";
22
+ } from "./chunk-GXSNGY5M.js";
23
+ import {
24
+ projectUserTranscriptForDisplay
25
+ } from "./chunk-67N6HB5H.js";
23
26
  import {
24
27
  apiActivityTracker,
25
28
  formatVisionBridgeNoticeDisplay,
26
29
  isVisionBridgeNoticeDisplay
27
- } from "./chunk-2U3WZGZG.js";
30
+ } from "./chunk-3PY4LPJF.js";
28
31
  import {
29
32
  ToolNames
30
- } from "./chunk-IC4Z6LX6.js";
33
+ } from "./chunk-PYQADEFD.js";
31
34
  import {
32
35
  createDebugLogger
33
36
  } from "./chunk-OIVKILPI.js";
@@ -695,21 +698,42 @@ init_esbuild_shims();
695
698
  // packages/core/dist/src/goals/goal-protocol.js
696
699
  init_esbuild_shims();
697
700
  var GOAL_STATE_VERSION = 2;
701
+ var GOAL_CHECKPOINT_CLAIM_LIMIT = 32;
702
+ var GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS = 2e3;
703
+ var GOAL_CHECKPOINT_CLAIM_MAX_BYTES = 16e3;
704
+ var GOAL_CHECKPOINT_SOURCE_REFERENCE_LIMIT = 32;
705
+ function isGoalEvidenceProofKind(value) {
706
+ return value === "user_input" || value === "delivered_output" || value === "external_fact";
707
+ }
708
+ __name(isGoalEvidenceProofKind, "isGoalEvidenceProofKind");
698
709
 
699
710
  // packages/core/dist/src/goals/goal-reducer.js
700
711
  init_esbuild_shims();
701
712
  var MAX_BLOCKED_AUDIT_COUNT = 3;
702
713
  function parseGoalStateRecordPayloadV2(value) {
703
- if (!isRecord(value) || !hasOnlyKeys(value, ["v", "cause", "snapshot", "blockedAudit"]) || value["v"] !== GOAL_STATE_VERSION || !isGoalStateCause(value["cause"]) || !isBlockedAudit(value["blockedAudit"])) {
714
+ if (!isRecord(value) || !hasOnlyKeys(value, [
715
+ "v",
716
+ "cause",
717
+ "snapshot",
718
+ "checkpointPending",
719
+ "blockedAudit"
720
+ ]) || value["v"] !== GOAL_STATE_VERSION || !isGoalStateCause(value["cause"]) || !isCheckpointPending(value["checkpointPending"]) || !isBlockedAudit(value["blockedAudit"])) {
704
721
  return void 0;
705
722
  }
706
723
  const parsedSnapshot = parseGoalSnapshotV2(value["snapshot"]);
707
- return parsedSnapshot?.activity === "idle" ? {
724
+ if (parsedSnapshot?.activity !== "idle")
725
+ return void 0;
726
+ const checkpointPending = value["checkpointPending"];
727
+ if (checkpointPending && (parsedSnapshot.goal?.status !== "active" || checkpointPending.permit.goalId !== parsedSnapshot.goal.goalId || checkpointPending.permit.revision !== parsedSnapshot.goal.revision || checkpointPending.recordUuid === parsedSnapshot.goal.evidenceCursor.recordId || value["cause"] !== "turn_finished" && value["cause"] !== "verifier_reject")) {
728
+ return void 0;
729
+ }
730
+ return {
708
731
  v: GOAL_STATE_VERSION,
709
732
  cause: value["cause"],
710
733
  snapshot: parsedSnapshot,
734
+ ...checkpointPending ? { checkpointPending: structuredClone(checkpointPending) } : {},
711
735
  ...value["blockedAudit"] ? { blockedAudit: structuredClone(value["blockedAudit"]) } : {}
712
- } : void 0;
736
+ };
713
737
  }
714
738
  __name(parseGoalStateRecordPayloadV2, "parseGoalStateRecordPayloadV2");
715
739
  function parseGoalSnapshotV2(value) {
@@ -727,6 +751,10 @@ function parseGoalSnapshotV2(value) {
727
751
  return goal ? { v: GOAL_STATE_VERSION, goal, activity: value["activity"] } : void 0;
728
752
  }
729
753
  __name(parseGoalSnapshotV2, "parseGoalSnapshotV2");
754
+ function parseGoalStateCause(value) {
755
+ return isGoalStateCause(value) ? value : void 0;
756
+ }
757
+ __name(parseGoalStateCause, "parseGoalStateCause");
730
758
  function copyCursor(cursor) {
731
759
  return { recordId: cursor.recordId };
732
760
  }
@@ -742,8 +770,12 @@ function parseGoalRecord(value) {
742
770
  "activeTimeMs",
743
771
  "createdAt",
744
772
  "updatedAt",
773
+ "evidenceCheckpoint",
745
774
  "lastReason"
746
- ]) || typeof value["goalId"] !== "string" || !value["goalId"] || !isNonNegativeInteger(value["revision"]) || value["revision"] === 0 || typeof value["objective"] !== "string" || !value["objective"].trim() || !isGoalStatus(value["status"]) || !isTranscriptCursor(value["evidenceCursor"]) || !isNonNegativeInteger(value["turnCount"]) || !isNonNegativeNumber(value["activeTimeMs"]) || !isFiniteNumber(value["createdAt"]) || !isFiniteNumber(value["updatedAt"]) || value["lastReason"] !== void 0 && typeof value["lastReason"] !== "string") {
775
+ ]) || typeof value["goalId"] !== "string" || !value["goalId"] || !isNonNegativeInteger(value["revision"]) || value["revision"] === 0 || typeof value["objective"] !== "string" || !value["objective"].trim() || !isGoalStatus(value["status"]) || !isTranscriptCursor(value["evidenceCursor"]) || !isNonNegativeInteger(value["turnCount"]) || !isNonNegativeNumber(value["activeTimeMs"]) || !isFiniteNumber(value["createdAt"]) || !isFiniteNumber(value["updatedAt"]) || !isGoalEvidenceCheckpoint(value["evidenceCheckpoint"]) || value["lastReason"] !== void 0 && typeof value["lastReason"] !== "string") {
776
+ return void 0;
777
+ }
778
+ if (value["evidenceCheckpoint"] && value["evidenceCursor"].recordId !== value["evidenceCheckpoint"].checkpointId) {
747
779
  return void 0;
748
780
  }
749
781
  return {
@@ -756,6 +788,9 @@ function parseGoalRecord(value) {
756
788
  activeTimeMs: value["activeTimeMs"],
757
789
  createdAt: value["createdAt"],
758
790
  updatedAt: value["updatedAt"],
791
+ ...value["evidenceCheckpoint"] === void 0 ? {} : {
792
+ evidenceCheckpoint: structuredClone(value["evidenceCheckpoint"])
793
+ },
759
794
  ...value["lastReason"] === void 0 ? {} : { lastReason: value["lastReason"] }
760
795
  };
761
796
  }
@@ -773,9 +808,35 @@ function isGoalActivity(value) {
773
808
  }
774
809
  __name(isGoalActivity, "isGoalActivity");
775
810
  function isGoalStateCause(value) {
776
- return value === "create" || value === "replace" || value === "edit" || value === "pause" || value === "resume" || value === "turn_finished" || value === "verifier_accept" || value === "verifier_reject" || value === "complete" || value === "blocked" || value === "usage_limited" || value === "clear" || value === "migrated";
811
+ return value === "create" || value === "replace" || value === "edit" || value === "pause" || value === "resume" || value === "turn_finished" || value === "checkpoint" || value === "verifier_accept" || value === "verifier_reject" || value === "complete" || value === "blocked" || value === "usage_limited" || value === "clear" || value === "migrated";
777
812
  }
778
813
  __name(isGoalStateCause, "isGoalStateCause");
814
+ function isGoalEvidenceCheckpoint(value) {
815
+ if (value === void 0)
816
+ return true;
817
+ if (!isRecord(value) || !hasOnlyKeys(value, ["checkpointId", "createdAt", "claims"]) || typeof value["checkpointId"] !== "string" || value["checkpointId"].length === 0 || !isFiniteNumber(value["createdAt"]) || !Array.isArray(value["claims"]) || value["claims"].length === 0 || value["claims"].length > GOAL_CHECKPOINT_CLAIM_LIMIT) {
818
+ return false;
819
+ }
820
+ let checkpointBytes = 0;
821
+ for (const [index, claim] of value["claims"].entries()) {
822
+ if (!isRecord(claim) || !hasOnlyKeys(claim, ["id", "proofKind", "claim", "sourceRefs"]) || claim["id"] !== `${value["checkpointId"]}:${index + 1}` || !isGoalEvidenceProofKind(claim["proofKind"]) || typeof claim["claim"] !== "string" || claim["claim"].trim().length === 0 || [...claim["claim"]].length > GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS || !Array.isArray(claim["sourceRefs"]) || claim["sourceRefs"].length === 0 || claim["sourceRefs"].length > GOAL_CHECKPOINT_SOURCE_REFERENCE_LIMIT || new Set(claim["sourceRefs"]).size !== claim["sourceRefs"].length || claim["sourceRefs"].some((reference) => typeof reference !== "string" || reference.length === 0)) {
823
+ return false;
824
+ }
825
+ checkpointBytes += new TextEncoder().encode(claim["claim"]).byteLength;
826
+ if (checkpointBytes > GOAL_CHECKPOINT_CLAIM_MAX_BYTES)
827
+ return false;
828
+ }
829
+ return true;
830
+ }
831
+ __name(isGoalEvidenceCheckpoint, "isGoalEvidenceCheckpoint");
832
+ function isCheckpointPending(value) {
833
+ return value === void 0 || isRecord(value) && hasOnlyKeys(value, ["permit", "recordUuid"]) && isGoalTurnPermit(value["permit"]) && typeof value["recordUuid"] === "string" && value["recordUuid"].length > 0;
834
+ }
835
+ __name(isCheckpointPending, "isCheckpointPending");
836
+ function isGoalTurnPermit(value) {
837
+ return isRecord(value) && hasOnlyKeys(value, ["goalId", "revision", "turnId"]) && typeof value["goalId"] === "string" && value["goalId"].length > 0 && isNonNegativeInteger(value["revision"]) && value["revision"] > 0 && typeof value["turnId"] === "string" && value["turnId"].length > 0;
838
+ }
839
+ __name(isGoalTurnPermit, "isGoalTurnPermit");
779
840
  function isBlockedAudit(value) {
780
841
  return value === void 0 || isRecord(value) && hasOnlyKeys(value, ["fingerprint", "count", "turnIds"]) && typeof value["fingerprint"] === "string" && value["fingerprint"].length > 0 && isNonNegativeInteger(value["count"]) && value["count"] > 0 && value["count"] <= MAX_BLOCKED_AUDIT_COUNT && Array.isArray(value["turnIds"]) && value["turnIds"].length === value["count"] && value["turnIds"].every((turnId) => typeof turnId === "string" && turnId.length > 0);
781
842
  }
@@ -835,6 +896,24 @@ function projectGoalStateToLegacy(payload, previousGoal = null) {
835
896
  };
836
897
  }
837
898
  __name(projectGoalStateToLegacy, "projectGoalStateToLegacy");
899
+ function isGoalCheckpointBookkeepingTransition(previous, next) {
900
+ const previousGoal = previous?.goal;
901
+ const nextGoal = next.goal;
902
+ if (!previousGoal || !nextGoal)
903
+ return false;
904
+ return previousGoal.goalId === nextGoal.goalId && previousGoal.revision === nextGoal.revision && previousGoal.objective === nextGoal.objective && previousGoal.status === nextGoal.status && previousGoal.turnCount === nextGoal.turnCount && previousGoal.createdAt === nextGoal.createdAt && previousGoal.lastReason === nextGoal.lastReason;
905
+ }
906
+ __name(isGoalCheckpointBookkeepingTransition, "isGoalCheckpointBookkeepingTransition");
907
+ function isGoalCheckpointBookkeepingCause(cause, previousCause) {
908
+ if (cause === "checkpoint")
909
+ return true;
910
+ return cause === "verifier_reject" && (previousCause === "verifier_reject" || previousCause === "checkpoint");
911
+ }
912
+ __name(isGoalCheckpointBookkeepingCause, "isGoalCheckpointBookkeepingCause");
913
+ function isGoalCheckpointBookkeepingRecord(input) {
914
+ return isGoalCheckpointBookkeepingTransition(input.previous, input.next) && isGoalCheckpointBookkeepingCause(input.cause, input.previousCause);
915
+ }
916
+ __name(isGoalCheckpointBookkeepingRecord, "isGoalCheckpointBookkeepingRecord");
838
917
  function legacyStatusKind(payload) {
839
918
  switch (payload.cause) {
840
919
  case "create":
@@ -853,6 +932,7 @@ function legacyStatusKind(payload) {
853
932
  case "usage_limited":
854
933
  return "aborted";
855
934
  case "turn_finished":
935
+ case "checkpoint":
856
936
  case "verifier_accept":
857
937
  case "verifier_reject":
858
938
  return payload.snapshot.goal?.status === "complete" ? "achieved" : payload.snapshot.goal?.status === "blocked" || payload.snapshot.goal?.status === "usage_limited" ? "aborted" : "checking";
@@ -866,27 +946,6 @@ function assertNever(value) {
866
946
  }
867
947
  __name(assertNever, "assertNever");
868
948
 
869
- // packages/core/dist/src/hooks/user-prompt-submit-context.js
870
- init_esbuild_shims();
871
- var USER_PROMPT_SUBMIT_CONTEXT_OPEN_TAG = "<qwen:user-prompt-submit-context>";
872
- var USER_PROMPT_SUBMIT_CONTEXT_CLOSE_TAG = "</qwen:user-prompt-submit-context>";
873
- function isUserPromptSubmitContextPartText(text) {
874
- const trimmed = text.trim();
875
- return trimmed.startsWith(USER_PROMPT_SUBMIT_CONTEXT_OPEN_TAG) && trimmed.endsWith(USER_PROMPT_SUBMIT_CONTEXT_CLOSE_TAG) && trimmed.length >= USER_PROMPT_SUBMIT_CONTEXT_OPEN_TAG.length + USER_PROMPT_SUBMIT_CONTEXT_CLOSE_TAG.length;
876
- }
877
- __name(isUserPromptSubmitContextPartText, "isUserPromptSubmitContextPartText");
878
- function stripTrailingUserPromptSubmitContextPart(parts) {
879
- if (parts.length <= 1) {
880
- return parts;
881
- }
882
- const last = parts[parts.length - 1];
883
- if (!last || typeof last.text !== "string" || !isUserPromptSubmitContextPartText(last.text)) {
884
- return parts;
885
- }
886
- return parts.slice(0, -1);
887
- }
888
- __name(stripTrailingUserPromptSubmitContextPart, "stripTrailingUserPromptSubmitContextPart");
889
-
890
949
  // packages/acp-bridge/src/transcript-replay.ts
891
950
  var MISSING_TRANSCRIPT_TOOL_RESULT_MESSAGE = "Tool result missing from saved history; the previous run likely ended before this tool completed.";
892
951
  var TRANSCRIPT_GOAL_STATUS_KINDS = /* @__PURE__ */ new Set([
@@ -901,6 +960,25 @@ function isObjectRecord(value) {
901
960
  return typeof value === "object" && value !== null && !Array.isArray(value);
902
961
  }
903
962
  __name(isObjectRecord, "isObjectRecord");
963
+ function replaceTextPartsForDisplay(parts, displayText) {
964
+ const projected = [];
965
+ let replacedText = false;
966
+ for (const part of parts ?? []) {
967
+ if (isObjectRecord(part) && typeof part["text"] === "string") {
968
+ if (!replacedText && displayText.length > 0) {
969
+ projected.push({ text: displayText });
970
+ }
971
+ replacedText = true;
972
+ } else {
973
+ projected.push(part);
974
+ }
975
+ }
976
+ if (!replacedText && displayText.length > 0) {
977
+ projected.push({ text: displayText });
978
+ }
979
+ return projected;
980
+ }
981
+ __name(replaceTextPartsForDisplay, "replaceTextPartsForDisplay");
904
982
  function toTranscriptEpochMs(timestamp) {
905
983
  if (typeof timestamp === "number") {
906
984
  return Number.isFinite(timestamp) ? timestamp : void 0;
@@ -1060,6 +1138,7 @@ var DefaultTranscriptReplayMachine = class {
1060
1138
  );
1061
1139
  this.usage = { ...initialState.cumulativeUsage };
1062
1140
  this.goalState = initialState.goalState;
1141
+ this.goalCause = initialState.goalCause;
1063
1142
  for (const pending of initialState.pendingToolCalls) {
1064
1143
  this.pendingToolCalls.set(pending.callId, pending);
1065
1144
  this.usedToolCallIds.add(pending.callId);
@@ -1079,6 +1158,7 @@ var DefaultTranscriptReplayMachine = class {
1079
1158
  usage;
1080
1159
  finalized = false;
1081
1160
  goalState;
1161
+ goalCause;
1082
1162
  *project(record) {
1083
1163
  if (this.finalized) {
1084
1164
  throw new Error(
@@ -1167,16 +1247,17 @@ var DefaultTranscriptReplayMachine = class {
1167
1247
  ...pending
1168
1248
  })),
1169
1249
  cumulativeUsage: { ...this.usage },
1170
- ...this.goalState ? { goalState: this.goalState } : {}
1250
+ ...this.goalState ? { goalState: this.goalState } : {},
1251
+ ...this.goalCause ? { goalCause: this.goalCause } : {}
1171
1252
  };
1172
1253
  }
1173
1254
  *projectUserRecord(record, emit, meta) {
1255
+ const payload = isObjectRecord(record.systemPayload) ? record.systemPayload : void 0;
1174
1256
  if (record.subtype === "goal_runtime" || record.subtype === "notification" || record.subtype === "cron" || record.subtype === "mid_turn_user_message") {
1175
- const payload = isObjectRecord(record.systemPayload) ? record.systemPayload : void 0;
1176
1257
  const displayText = payload && typeof payload["displayText"] === "string" ? payload["displayText"] : void 0;
1177
- const backgroundTask = payload && isObjectRecord(payload["backgroundTask"]) ? payload["backgroundTask"] : void 0;
1178
1258
  if (displayText) {
1179
1259
  const isNotification = record.subtype === "notification";
1260
+ const backgroundTask = payload && isObjectRecord(payload["backgroundTask"]) ? payload["backgroundTask"] : void 0;
1180
1261
  yield emit(
1181
1262
  createTranscriptMessageUpdate({
1182
1263
  role: "user",
@@ -1194,80 +1275,30 @@ var DefaultTranscriptReplayMachine = class {
1194
1275
  return;
1195
1276
  }
1196
1277
  if (record.subtype !== "mid_turn_user_message") return;
1197
- } else if (!record.subtype) {
1198
- const payload = isObjectRecord(record.systemPayload) ? record.systemPayload : void 0;
1199
- const displayText = payload && typeof payload["displayText"] === "string" ? payload["displayText"] : void 0;
1278
+ }
1279
+ const projection = projectUserTranscriptForDisplay(record);
1280
+ if (projection.displayText !== void 0) {
1200
1281
  yield* this.projectMessageParts(
1201
- displayText ? this.withUserPromptDisplayText(record, displayText) : this.withoutTrailingUserPromptSubmitContext(record),
1282
+ record,
1202
1283
  "user",
1203
1284
  emit,
1204
- meta
1285
+ meta,
1286
+ void 0,
1287
+ replaceTextPartsForDisplay(
1288
+ record.message?.parts,
1289
+ projection.displayText
1290
+ )
1205
1291
  );
1206
1292
  return;
1207
1293
  }
1208
- yield* this.projectMessageParts(record, "user", emit, meta);
1209
- }
1210
- /**
1211
- * Drops a trailing message part that is entirely a tagged UserPromptSubmit
1212
- * context block. Injection always appends after the user's own part(s), so
1213
- * a sole matching part is treated as user-authored and kept.
1214
- */
1215
- withoutTrailingUserPromptSubmitContext(record) {
1216
- const parts = record.message?.parts;
1217
- if (!Array.isArray(parts)) {
1218
- return record;
1219
- }
1220
- const nextParts = stripTrailingUserPromptSubmitContextPart(parts);
1221
- if (nextParts === parts) {
1222
- return record;
1223
- }
1224
- return {
1225
- ...record,
1226
- message: {
1227
- ...record.message,
1228
- parts: [...nextParts]
1229
- }
1230
- };
1231
- }
1232
- /**
1233
- * Rebuilds a plain user record for display: strip trailing tagged hook
1234
- * context, then replace every text part with a single `displayText` part at
1235
- * the first text position so images keep their relative order.
1236
- */
1237
- withUserPromptDisplayText(record, displayText) {
1238
- const stripped = this.withoutTrailingUserPromptSubmitContext(record);
1239
- const parts = stripped.message?.parts;
1240
- if (!Array.isArray(parts) || parts.length === 0) {
1241
- return {
1242
- ...stripped,
1243
- message: {
1244
- ...stripped.message,
1245
- parts: [{ text: displayText }]
1246
- }
1247
- };
1248
- }
1249
- let replaced = false;
1250
- const nextParts = [];
1251
- for (const part of parts) {
1252
- if (isObjectRecord(part) && typeof part["text"] === "string") {
1253
- if (!replaced) {
1254
- nextParts.push({ text: displayText });
1255
- replaced = true;
1256
- }
1257
- continue;
1258
- }
1259
- nextParts.push(part);
1260
- }
1261
- if (!replaced) {
1262
- nextParts.push({ text: displayText });
1263
- }
1264
- return {
1265
- ...stripped,
1266
- message: {
1267
- ...stripped.message,
1268
- parts: nextParts
1269
- }
1270
- };
1294
+ yield* this.projectMessageParts(
1295
+ record,
1296
+ "user",
1297
+ emit,
1298
+ meta,
1299
+ void 0,
1300
+ projection.parts
1301
+ );
1271
1302
  }
1272
1303
  *projectAssistantRecord(record, emit, meta) {
1273
1304
  const usageMetadata = isObjectRecord(record.usageMetadata) ? record.usageMetadata : void 0;
@@ -1288,8 +1319,8 @@ var DefaultTranscriptReplayMachine = class {
1288
1319
  const trailingUsage = takeUsageUpdate();
1289
1320
  if (trailingUsage) yield emit(trailingUsage);
1290
1321
  }
1291
- *projectMessageParts(record, role, emit, meta, beforeToolCall) {
1292
- const parts = record.message?.parts;
1322
+ *projectMessageParts(record, role, emit, meta, beforeToolCall, partsOverride) {
1323
+ const parts = partsOverride ?? record.message?.parts;
1293
1324
  if (!parts) return;
1294
1325
  for (let partIndex = 0; partIndex < parts.length; partIndex += 1) {
1295
1326
  const part = parts[partIndex];
@@ -1443,11 +1474,19 @@ var DefaultTranscriptReplayMachine = class {
1443
1474
  );
1444
1475
  return;
1445
1476
  }
1477
+ const bookkeepingOnly = isGoalCheckpointBookkeepingRecord({
1478
+ cause: payload2.cause,
1479
+ previousCause: this.goalCause,
1480
+ previous: this.goalState,
1481
+ next: payload2.snapshot
1482
+ });
1446
1483
  const projection = projectGoalStateToLegacy(
1447
1484
  payload2,
1448
1485
  this.goalState?.goal ?? null
1449
1486
  );
1450
1487
  this.goalState = payload2.snapshot;
1488
+ this.goalCause = payload2.cause;
1489
+ if (bookkeepingOnly) return;
1451
1490
  const { type: _type, ...goalStatus } = projection.goalStatus;
1452
1491
  yield emit(
1453
1492
  createTranscriptMessageUpdate({
@@ -1685,6 +1724,16 @@ function parseInitialState(value, onDiagnostic) {
1685
1724
  affectsCompleteness: true
1686
1725
  });
1687
1726
  }
1727
+ const rawGoalCause = value["goalCause"];
1728
+ const goalCause = rawGoalCause === void 0 ? void 0 : parseGoalStateCause(rawGoalCause);
1729
+ if (rawGoalCause !== void 0 && !goalCause) {
1730
+ onDiagnostic?.({
1731
+ code: "invalid_replay_state",
1732
+ severity: "warning",
1733
+ message: "Dropped a malformed Goal cause from replay state.",
1734
+ affectsCompleteness: true
1735
+ });
1736
+ }
1688
1737
  return {
1689
1738
  v: 1,
1690
1739
  pendingToolCalls,
@@ -1694,7 +1743,8 @@ function parseInitialState(value, onDiagnostic) {
1694
1743
  candidateTokens: usage["candidateTokens"],
1695
1744
  apiTimeMs: usage["apiTimeMs"]
1696
1745
  } : emptyUsage(),
1697
- ...goalState ? { goalState } : {}
1746
+ ...goalState ? { goalState } : {},
1747
+ ...goalCause ? { goalCause } : {}
1698
1748
  };
1699
1749
  }
1700
1750
  __name(parseInitialState, "parseInitialState");
@@ -1894,6 +1944,13 @@ __name(dedupeStrings, "dedupeStrings");
1894
1944
  // packages/cli/src/acp-integration/session/emitters/MessageEmitter.ts
1895
1945
  init_esbuild_shims();
1896
1946
 
1947
+ // packages/cli/src/acp-integration/session/types.ts
1948
+ init_esbuild_shims();
1949
+ function hasFullSessionContext(context) {
1950
+ return "config" in context;
1951
+ }
1952
+ __name(hasFullSessionContext, "hasFullSessionContext");
1953
+
1897
1954
  // packages/cli/src/acp-integration/session/emitters/base-emitter.ts
1898
1955
  init_esbuild_shims();
1899
1956
  var BaseEmitter = class {
@@ -2088,6 +2145,19 @@ var MessageEmitter = class extends BaseEmitter {
2088
2145
  }
2089
2146
  })
2090
2147
  );
2148
+ if (!Number.isFinite(durationMs) || subagentMeta || !hasFullSessionContext(this.ctx)) {
2149
+ return;
2150
+ }
2151
+ const used = usageMetadata.promptTokenCount ?? usageMetadata.totalTokenCount;
2152
+ const size = this.ctx.config.getContentGeneratorConfig()?.contextWindowSize;
2153
+ if (typeof used !== "number" || !Number.isSafeInteger(used) || used < 0 || typeof size !== "number" || !Number.isSafeInteger(size) || size <= 0) {
2154
+ return;
2155
+ }
2156
+ await this.sendUpdate({
2157
+ sessionUpdate: "usage_update",
2158
+ used,
2159
+ size
2160
+ });
2091
2161
  }
2092
2162
  /**
2093
2163
  * Emits a message chunk based on role and thought flag.
@@ -2154,15 +2224,6 @@ var PlanEmitter = class extends BaseEmitter {
2154
2224
 
2155
2225
  // packages/cli/src/acp-integration/session/emitters/tool-call-emitter.ts
2156
2226
  init_esbuild_shims();
2157
-
2158
- // packages/cli/src/acp-integration/session/types.ts
2159
- init_esbuild_shims();
2160
- function hasFullSessionContext(context) {
2161
- return "config" in context;
2162
- }
2163
- __name(hasFullSessionContext, "hasFullSessionContext");
2164
-
2165
- // packages/cli/src/acp-integration/session/emitters/tool-call-emitter.ts
2166
2227
  var KIND_MAP = {
2167
2228
  ["read" /* Read */]: "read",
2168
2229
  ["edit" /* Edit */]: "edit",
@@ -2556,7 +2617,8 @@ var HistoryReplayer = class {
2556
2617
  candidateTokens: 0,
2557
2618
  apiTimeMs: 0
2558
2619
  },
2559
- ...options.goalState ? { goalState: options.goalState } : {}
2620
+ ...options.goalState ? { goalState: options.goalState } : {},
2621
+ ...options.goalCause ? { goalCause: options.goalCause } : {}
2560
2622
  };
2561
2623
  return createTranscriptReplayMachine({
2562
2624
  initialState,
@@ -2869,7 +2931,7 @@ async function extractMetadata(conversation, config) {
2869
2931
  const gitBranch = firstRecord?.gitBranch;
2870
2932
  let gitRepo;
2871
2933
  if (cwd) {
2872
- const { getGitRepoName } = await import("./deferred-core-runtime-BWRCCFTE.js");
2934
+ const { getGitRepoName } = await import("./deferred-core-runtime-CBMSHPAU.js");
2873
2935
  gitRepo = getGitRepoName(cwd);
2874
2936
  }
2875
2937
  let model;
@@ -3759,11 +3821,6 @@ export {
3759
3821
  * Copyright 2025 Qwen Team
3760
3822
  * SPDX-License-Identifier: Apache-2.0
3761
3823
  */
3762
- /**
3763
- * @license
3764
- * Copyright 2025 Qwen Code
3765
- * SPDX-License-Identifier: Apache-2.0
3766
- */
3767
3824
  /**
3768
3825
  * @license
3769
3826
  * Copyright 2025 Qwen
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-GNPNYXJB.js";
23
23
  import {
24
24
  ToolNames
25
- } from "./chunk-IC4Z6LX6.js";
25
+ } from "./chunk-PYQADEFD.js";
26
26
  import {
27
27
  Storage,
28
28
  createDebugLogger,
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-NAVJD2PQ.js";
6
6
  import {
7
7
  formatFetchErrorForUser
8
- } from "./chunk-3ULCB3NE.js";
8
+ } from "./chunk-HV76SFIA.js";
9
9
  import {
10
10
  combineAbortSignals
11
11
  } from "./chunk-DJ2GSRLV.js";