@qwen-code/qwen-code 0.19.9 → 0.19.10-nightly.20260716.506ce0a1a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +14 -6
  2. package/bundled/qc-helper/docs/features/approval-mode.md +2 -2
  3. package/bundled/qc-helper/docs/features/channels/dingtalk.md +33 -0
  4. package/bundled/qc-helper/docs/features/channels/overview.md +64 -20
  5. package/bundled/qc-helper/docs/features/channels/wecom.md +8 -7
  6. package/bundled/qc-helper/docs/features/code-review.md +88 -44
  7. package/bundled/qc-helper/docs/features/commands.md +6 -6
  8. package/bundled/qc-helper/docs/features/hooks.md +29 -0
  9. package/bundled/qc-helper/docs/features/sandbox.md +2 -0
  10. package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
  11. package/bundled/qc-helper/docs/qwen-serve.md +49 -20
  12. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  13. package/bundled/review/DESIGN.md +219 -33
  14. package/bundled/review/SKILL.md +429 -382
  15. package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-WOC3YDWA.js} +31 -32
  16. package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-H5HZCAFD.js} +49 -48
  17. package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-55YDJDNM.js} +922 -550
  18. package/chunks/{agent-HOLHB3RT.js → agent-H6VE5W3L.js} +26 -27
  19. package/chunks/{agent-headless-SXL6H56A.js → agent-headless-T4XJOCRU.js} +26 -27
  20. package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-HBRXJSP4.js} +78 -16
  21. package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-MIZLXBLF.js} +2 -2
  22. package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-XMJVPNWM.js} +2 -2
  23. package/chunks/{bridge-BCJQ7BBB.js → bridge-FTB6ZP3R.js} +31 -34
  24. package/chunks/{ca-UJ6HC4H2.js → ca-CODEN7TD.js} +9 -1
  25. package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
  26. package/chunks/channel-worker-manager-CUDPU4CN.js +418 -0
  27. package/chunks/channel-worker-supervisor-4XTO2ZD3.js +20 -0
  28. package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
  29. package/chunks/{chunk-VA4KQY6V.js → chunk-2JNR4VP2.js} +3 -3
  30. package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
  31. package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
  32. package/chunks/{chunk-CUMMSHH6.js → chunk-3DWIFU7L.js} +1 -1
  33. package/chunks/chunk-3MX7D6QN.js +516 -0
  34. package/chunks/{chunk-SJHDYNHF.js → chunk-4BJVSIS3.js} +3 -3
  35. package/chunks/{chunk-TO6QE22P.js → chunk-5CNYZ7TN.js} +26 -22
  36. package/chunks/{chunk-N3EMS75V.js → chunk-5DEJ4T6C.js} +1333 -1232
  37. package/chunks/chunk-5HBA2Z7V.js +28 -0
  38. package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
  39. package/chunks/{chunk-SCGXUJBT.js → chunk-6LI3L22E.js} +3 -3
  40. package/chunks/{chunk-K434OPES.js → chunk-6WPJRYLZ.js} +3 -3
  41. package/chunks/{chunk-YAUFFXDS.js → chunk-7GM2RWCR.js} +12 -11
  42. package/chunks/{chunk-OQ4DRIOA.js → chunk-7HWE2W74.js} +2 -2
  43. package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
  44. package/chunks/{chunk-MC23XKFE.js → chunk-A2HWMJVO.js} +37 -3
  45. package/chunks/{chunk-3G7CIHVV.js → chunk-ABNYOMDG.js} +4 -4
  46. package/chunks/{chunk-3AHXV67U.js → chunk-AGZLXLBY.js} +1 -1
  47. package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
  48. package/chunks/{chunk-Q4YQW46J.js → chunk-AMRZVQUY.js} +43 -40
  49. package/chunks/{chunk-W3JHSWRP.js → chunk-AN6C2U46.js} +4 -4
  50. package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
  51. package/chunks/{chunk-5SFOMFG4.js → chunk-AVEOWVOM.js} +36 -2
  52. package/chunks/{chunk-34MW4KTI.js → chunk-BA5JGE5F.js} +2 -2
  53. package/chunks/{chunk-5HOMWMCL.js → chunk-BSJAQUFD.js} +5492 -1336
  54. package/chunks/{chunk-L6P4KPHR.js → chunk-BWJKL5DB.js} +58 -38
  55. package/chunks/{chunk-PVZM22CK.js → chunk-C32JFRGV.js} +5 -5
  56. package/chunks/{chunk-AKIVHSJR.js → chunk-CZIHPO7L.js} +163 -782
  57. package/chunks/chunk-DL7RCO6V.js +493 -0
  58. package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
  59. package/chunks/{chunk-5VXNZWGF.js → chunk-ENUQSKEY.js} +1 -1
  60. package/chunks/{chunk-PDZ7MBDG.js → chunk-EWILX3BM.js} +27 -6
  61. package/chunks/{chunk-BMGVRZN4.js → chunk-EZWX232B.js} +1 -1
  62. package/chunks/{chunk-4GORAUCN.js → chunk-F333XEAU.js} +1 -1
  63. package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
  64. package/chunks/chunk-FEOZBUMT.js +77 -0
  65. package/chunks/{chunk-5U27BZ72.js → chunk-FKEGVMPX.js} +269 -83
  66. package/chunks/chunk-FNX3LGAK.js +34 -0
  67. package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
  68. package/chunks/{chunk-PODM4SZ4.js → chunk-G3BIBPI7.js} +5 -5
  69. package/chunks/{chunk-A3XKDTSH.js → chunk-GA65O2TB.js} +4 -4
  70. package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
  71. package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-GXGIM7QP.js} +67 -35
  72. package/chunks/{chunk-6PESIEKJ.js → chunk-GXUWGPYX.js} +68 -6
  73. package/chunks/chunk-GYTKQYDB.js +23 -0
  74. package/chunks/{chunk-GZRTYZ2R.js → chunk-H3XMJV7T.js} +218 -1
  75. package/chunks/{chunk-WQUQVGTF.js → chunk-HGRXW4HQ.js} +467 -106
  76. package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
  77. package/chunks/{chunk-ECNYL4AA.js → chunk-HUEWOHKV.js} +1 -1
  78. package/chunks/chunk-IDS7MSUP.js +74 -0
  79. package/chunks/{chunk-KHUQZZJ6.js → chunk-IHDRJLLR.js} +382 -36
  80. package/chunks/{chunk-CLFKOZEK.js → chunk-J4SEAF4X.js} +114 -4
  81. package/chunks/{chunk-B5ORX3FG.js → chunk-JGUT3LWZ.js} +6 -1
  82. package/chunks/{chunk-P67PFTUT.js → chunk-KEYEYCHZ.js} +4 -4
  83. package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
  84. package/chunks/{chunk-7PU4FYLG.js → chunk-KOXFAG6P.js} +4 -18
  85. package/chunks/{chunk-EGYZ275M.js → chunk-KWLVWNF5.js} +55 -7
  86. package/chunks/{chunk-XLA62MYB.js → chunk-KXECVZPD.js} +2 -2
  87. package/chunks/{chunk-IAVB3HM3.js → chunk-L4Y55KIS.js} +33 -1
  88. package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
  89. package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
  90. package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
  91. package/chunks/chunk-LXXMOYPL.js +22 -0
  92. package/chunks/{chunk-Q6I5QHMH.js → chunk-MFNKBXYH.js} +1 -1
  93. package/chunks/chunk-MR3PXB6E.js +48 -0
  94. package/chunks/{chunk-JZETEN3Z.js → chunk-N45S36AH.js} +3 -3
  95. package/chunks/{chunk-GWLSNBG4.js → chunk-NA3IG6XG.js} +748 -27
  96. package/chunks/{chunk-D5SKC4YG.js → chunk-O3M25JXE.js} +213 -29
  97. package/chunks/{chunk-EAXLGSFP.js → chunk-O6XGHDS5.js} +11 -11
  98. package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
  99. package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
  100. package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
  101. package/chunks/{chunk-CNEIYWSA.js → chunk-OVIV236K.js} +5 -5
  102. package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
  103. package/chunks/{chunk-E2IY465S.js → chunk-PWNOAWXB.js} +59 -12
  104. package/chunks/{chunk-B4G2WOFA.js → chunk-Q5MKHNIR.js} +28 -5
  105. package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
  106. package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
  107. package/chunks/{chunk-HKMAENAO.js → chunk-QDTGDM2T.js} +14 -9
  108. package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
  109. package/chunks/{chunk-W2UIXQDL.js → chunk-RTV5TUYB.js} +12 -4
  110. package/chunks/chunk-RW7DUKFO.js +91 -0
  111. package/chunks/{chunk-NVYTCB5Z.js → chunk-SA6QVLWI.js} +17325 -16259
  112. package/chunks/chunk-SJSI7PXU.js +59 -0
  113. package/chunks/{chunk-HVY356M2.js → chunk-SMGBWLNU.js} +3 -3
  114. package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
  115. package/chunks/{chunk-CC2ITGCF.js → chunk-STZQCNN3.js} +49 -6
  116. package/chunks/{chunk-HPDUL5MF.js → chunk-T2ZDAER2.js} +1 -1
  117. package/chunks/{chunk-XUOOWUZS.js → chunk-T3TQ3ACP.js} +1 -1
  118. package/chunks/{chunk-4C5BQ2D2.js → chunk-TIKDHS6V.js} +100 -17
  119. package/chunks/chunk-TV6K2FB4.js +224 -0
  120. package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
  121. package/chunks/{chunk-D2GFWEXB.js → chunk-UCUUH2JV.js} +6 -6
  122. package/chunks/{chunk-BAPGSC7U.js → chunk-UZP7K33Y.js} +23 -9
  123. package/chunks/{chunk-77XJ3SWN.js → chunk-VDAR6UO2.js} +8 -6
  124. package/chunks/{chunk-XYQSMABS.js → chunk-VKLVGA2D.js} +4 -4
  125. package/chunks/{chunk-JSG7ZSBC.js → chunk-VRR65QYW.js} +251 -3
  126. package/chunks/{chunk-U2NNEY4R.js → chunk-VT5AWJN4.js} +1 -1
  127. package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
  128. package/chunks/{chunk-X6TJ3YZV.js → chunk-WKEO3GLZ.js} +160 -60
  129. package/chunks/{chunk-J3JA76CF.js → chunk-WTNZ6DXB.js} +1 -1
  130. package/chunks/{chunk-VWPVHAMO.js → chunk-XIWQ5QST.js} +8 -1
  131. package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
  132. package/chunks/{chunk-3VAGG5T5.js → chunk-YYBZUIPL.js} +1015 -100
  133. package/chunks/{chunk-CCDMCZPP.js → chunk-YZ3SBNP7.js} +1 -1
  134. package/chunks/{chunk-ATAKVRIF.js → chunk-Z3XA2TNG.js} +7 -7
  135. package/chunks/{chunk-EMDMPBJ4.js → chunk-Z7SVC7PJ.js} +10 -3
  136. package/chunks/{chunk-AURZZYMD.js → chunk-ZIVSSTUG.js} +4 -4
  137. package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
  138. package/chunks/{chunk-34Z3U5RQ.js → chunk-ZQIYGQCG.js} +765 -168
  139. package/chunks/{computer-use-HM37RX6A.js → computer-use-NADT7ULB.js} +26 -27
  140. package/chunks/{config-utils-NV2SVGPB.js → config-utils-IQQT3GCI.js} +3 -2
  141. package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-U7NEJYJ7.js} +28 -29
  142. package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-EAB2U5XW.js} +2 -2
  143. package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-SUN33INC.js} +26 -27
  144. package/chunks/{cron-create-AMBKGZX6.js → cron-create-GMVKSXZT.js} +4 -4
  145. package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-VDZKUAVK.js} +4 -4
  146. package/chunks/{cron-list-WVP2JXER.js → cron-list-UG7C7RAR.js} +4 -4
  147. package/chunks/{daemon-ARHTSTXP.js → daemon-SJXEKP3H.js} +773 -126
  148. package/chunks/daemon-status-provider-WIIYLGZJ.js +74 -0
  149. package/chunks/{de-EBJN3OVN.js → de-NOXPCSYN.js} +9 -1
  150. package/chunks/{dist-XKU3ABM5.js → dist-4WCQEZIN.js} +4 -51
  151. package/chunks/{dist-QYCAEZIT.js → dist-DOPL5LSQ.js} +5 -1
  152. package/chunks/{dist-WKPOYU7O.js → dist-GXJVCOS7.js} +1 -1
  153. package/chunks/{dist-R7LN5AZE.js → dist-PX2ERZ6I.js} +2 -2
  154. package/chunks/{dist-PNVLTKTL.js → dist-V2YVLYOW.js} +215 -33
  155. package/chunks/{dist-VHV4EVHG.js → dist-VYWUKURL.js} +1 -1
  156. package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-6FRM6UMU.js} +27 -28
  157. package/chunks/{edit-VNI4NJ73.js → edit-7GOIQTCZ.js} +27 -28
  158. package/chunks/{en-5A6LA7RK.js → en-JFVULHTB.js} +11 -1
  159. package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-476E6WIK.js} +26 -27
  160. package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-IRJM6W3C.js} +42 -28
  161. package/chunks/{environment-5HSSRMJ7.js → environment-ROMULS2X.js} +30 -30
  162. package/chunks/{errors-HMFCJJ7P.js → errors-OUIWPUDY.js} +28 -29
  163. package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-PPSFK753.js} +26 -27
  164. package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-YKQMD4D7.js} +26 -27
  165. package/chunks/{fast-path-FRDMDVHG.js → fast-path-CNK2HHKH.js} +3 -3
  166. package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
  167. package/chunks/{fr-YXRABLYZ.js → fr-HVFNU42H.js} +9 -1
  168. package/chunks/{gemini-QYSEGHAX.js → gemini-WQNFT6TR.js} +216 -90
  169. package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-4QJH2JDP.js} +4 -4
  170. package/chunks/{glob-BRCSGFOT.js → glob-36TVLBWW.js} +28 -28
  171. package/chunks/{grep-EE2DUOSY.js → grep-QTYLNO2M.js} +26 -27
  172. package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-36FQFODK.js} +30 -31
  173. package/chunks/{i18n-BASPENNQ.js → i18n-JUGYPVSP.js} +27 -28
  174. package/chunks/initializer-OBBJUS25.js +72 -0
  175. package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-MCKTPX64.js} +27 -28
  176. package/chunks/{ja-7VQOANVG.js → ja-PY5AF544.js} +10 -2
  177. package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
  178. package/chunks/list-VW5QY4VJ.js +75 -0
  179. package/chunks/loadedSettingsAdapter-IELOOXG6.js +69 -0
  180. package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-QXWZSCYM.js} +5 -5
  181. package/chunks/{ls-ZB2BDP6T.js → ls-2OUTG3IZ.js} +4 -4
  182. package/chunks/{lsp-V5DN4YUJ.js → lsp-4VMNXZW6.js} +2 -2
  183. package/chunks/mcp-Q3EC37ZS.js +69 -0
  184. package/chunks/{monitor-X5Z3H4FY.js → monitor-DCZ27AFR.js} +26 -27
  185. package/chunks/nonInteractiveCli-KXD7PFO4.js +128 -0
  186. package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-YU4XF5LI.js} +27 -28
  187. package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-KL5WER2D.js} +13 -13
  188. package/chunks/{pidfile-D4I4FTVA.js → pidfile-WBOD7EJV.js} +27 -28
  189. package/chunks/processUtils-AOV4R34M.js +29 -0
  190. package/chunks/{pt-2C6YCSHL.js → pt-A3PRQXMU.js} +9 -1
  191. package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-YIGBHYE3.js} +28 -29
  192. package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
  193. package/chunks/{read-file-7SZSIZOL.js → read-file-WVL4Y76X.js} +9 -9
  194. package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-JUFHCKSC.js} +2 -2
  195. package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-DWSMBXYY.js} +2 -2
  196. package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-6GSWJERP.js} +26 -27
  197. package/chunks/{ru-6BBHVZZV.js → ru-IBCWUTOC.js} +9 -1
  198. package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-QYUQMEDT.js} +1233 -371
  199. package/chunks/{runtime-57WWRVHN.js → runtime-K2YZCNB3.js} +42 -38
  200. package/chunks/{scheduler-YBLGWSIL.js → scheduler-EQCSN7QV.js} +26 -27
  201. package/chunks/{send-message-F36YD6KQ.js → send-message-JZ752NWD.js} +3 -3
  202. package/chunks/{serve-R63NK3CV.js → serve-DX5UGZD4.js} +36 -35
  203. package/chunks/{server-Z22GCAXP.js → server-T6HJH3DR.js} +5869 -1398
  204. package/chunks/{session-HKAAI7BN.js → session-SNU6ACY6.js} +299 -100
  205. package/chunks/{settings-3EYN66GK.js → settings-AKHZZNEL.js} +34 -33
  206. package/chunks/{shell-6YXINTWJ.js → shell-EY74IEZK.js} +28 -27
  207. package/chunks/{skill-OO57P4X6.js → skill-DPU62O3H.js} +11 -11
  208. package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-RQZRWJ2V.js} +28 -30
  209. package/chunks/{src-G5UPLZSZ.js → src-7FITDSVC.js} +164 -52
  210. package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-XO3RK6DO.js} +28 -29
  211. package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-DVWZRHYQ.js} +728 -382
  212. package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-LELY6HAI.js} +3 -3
  213. package/chunks/{task-create-FRGOEIKY.js → task-create-QY3BIMNM.js} +8 -7
  214. package/chunks/{task-list-OW766BXZ.js → task-list-D2U47WBJ.js} +6 -5
  215. package/chunks/{task-stop-SIR5SNBN.js → task-stop-N6E5IYLH.js} +2 -2
  216. package/chunks/{task-update-YRA532MT.js → task-update-HJCQILLB.js} +8 -7
  217. package/chunks/{team-create-PECAAPXK.js → team-create-FOSRT62K.js} +26 -27
  218. package/chunks/{team-delete-6OSECUZC.js → team-delete-RCWYDRF4.js} +6 -5
  219. package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-6VUDV27J.js} +26 -27
  220. package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-6UT6IO5T.js} +27 -28
  221. package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-FKCGATPJ.js} +4 -4
  222. package/chunks/{tool-search-THVIWAPB.js → tool-search-ASSFMMN5.js} +10 -10
  223. package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-YYWUO23H.js} +32 -35
  224. package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
  225. package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-4BWV2IBK.js} +29 -29
  226. package/chunks/types-ML3TRJQ5.js +16 -0
  227. package/chunks/update-relaunch-74DLGH73.js +87 -0
  228. package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-CRFCGFO5.js} +31 -30
  229. package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-BTTEPBGQ.js} +76 -73
  230. package/chunks/{version-3UEA6ZIR.js → version-Y5JE5Q63.js} +1 -1
  231. package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-CFCWTCAP.js} +5 -6
  232. package/chunks/{workflow-QCCCMYP3.js → workflow-6WC7VPQN.js} +27 -28
  233. package/chunks/workspace-providers-status-RVG2C5ZS.js +72 -0
  234. package/chunks/workspace-registration-store-SLEU3D3X.js +27 -0
  235. package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-QMWGVOTF.js} +32 -35
  236. package/chunks/workspace-service-G572JSEU.js +84 -0
  237. package/chunks/workspace-skills-status-VSSMSMNK.js +71 -0
  238. package/chunks/{write-file-I3MUDRIE.js → write-file-5XVDRORP.js} +27 -28
  239. package/chunks/{zh-RQE7I22T.js → zh-PAUNIMHQ.js} +12 -2
  240. package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-GNEUIUFF.js} +12 -2
  241. package/cli-entry.js +92 -8
  242. package/cli.js +11 -11
  243. package/locales/ca.js +16 -0
  244. package/locales/de.js +16 -0
  245. package/locales/en.js +19 -0
  246. package/locales/fr.js +16 -0
  247. package/locales/ja.js +17 -1
  248. package/locales/pt.js +16 -0
  249. package/locales/ru.js +16 -0
  250. package/locales/zh-TW.js +20 -1
  251. package/locales/zh.js +20 -1
  252. package/package.json +3 -3
  253. package/web-shell/assets/{arc-C15hqnJe.js → arc-vx1tRwnX.js} +1 -1
  254. package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-DBi6iUA1.js} +1 -1
  255. package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-Ga9JJ4Ak.js} +1 -1
  256. package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-D8Vi5FYw.js} +1 -1
  257. package/web-shell/assets/channel-B29zQDTL.js +1 -0
  258. package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-CSV6yQpU.js} +1 -1
  259. package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-toYlppdI.js} +1 -1
  260. package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-DbjzuyAr.js} +1 -1
  261. package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-IkkSjSkk.js} +1 -1
  262. package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-D5wUL6Zm.js} +1 -1
  263. package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-C3o2DXG0.js} +1 -1
  264. package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-CutIi14T.js} +1 -1
  265. package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-DZ0NRHH-.js} +1 -1
  266. package/web-shell/assets/classDiagram-4FO5ZUOK-BNGI2SvC.js +1 -0
  267. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BNGI2SvC.js +1 -0
  268. package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-B3Dl88UJ.js} +1 -1
  269. package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-DfTxfF6-.js} +1 -1
  270. package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-CJyH98yO.js} +1 -1
  271. package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-EbOiJNmW.js} +1 -1
  272. package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-AYNqpqqA.js} +1 -1
  273. package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-BY5VPa4H.js} +1 -1
  274. package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-BhMYAKlk.js} +1 -1
  275. package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-Bp8S_F9l.js} +1 -1
  276. package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-az3TE9PU.js} +1 -1
  277. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-CfkAEpCe.js} +3 -3
  278. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-D1QmjMCy.js} +1 -1
  279. package/web-shell/assets/index-C8sDwQUv.js +1130 -0
  280. package/web-shell/assets/index-CaBoc5bb.js +3 -0
  281. package/web-shell/assets/index-Dpg5Wymg.css +5 -0
  282. package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-D3ompLrG.js} +1 -1
  283. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-D3MRWp9I.js} +1 -1
  284. package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-DVkKCa44.js} +1 -1
  285. package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-BLif81wF.js} +1 -1
  286. package/web-shell/assets/{linear-C8wKCbIC.js → linear-BDU96EGS.js} +1 -1
  287. package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-B-CwC26B.js} +5 -5
  288. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-CS1WOJ4G.js} +1 -1
  289. package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-BzgtNXVP.js} +1 -1
  290. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-BRfGC8MA.js} +1 -1
  291. package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-CPBZkC7g.js} +1 -1
  292. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-nqNvinIk.js} +1 -1
  293. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-CM_Wdjh3.js} +1 -1
  294. package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-L0y-48VE.js} +1 -1
  295. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BX1DdF8s.js +1 -0
  296. package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-B_n5rb3A.js} +1 -1
  297. package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-C9NmLV5e.js} +1 -1
  298. package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-CrefK9gt.js} +1 -1
  299. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BUccf-bC.js} +1 -1
  300. package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-DM6ef92l.js} +1 -1
  301. package/web-shell/index.html +2 -2
  302. package/chunks/chunk-524RQP4Q.js +0 -305
  303. package/chunks/chunk-CARU2RR2.js +0 -24
  304. package/chunks/chunk-CU3L64TP.js +0 -93
  305. package/chunks/chunk-OCPBI7J5.js +0 -18
  306. package/chunks/chunk-TEGEBB2I.js +0 -122
  307. package/chunks/chunk-VTU57BWZ.js +0 -30
  308. package/chunks/daemon-status-provider-B2UTZUJ2.js +0 -76
  309. package/chunks/initializer-UTQ7FB7G.js +0 -71
  310. package/chunks/list-DEICDL65.js +0 -74
  311. package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +0 -68
  312. package/chunks/mcp-L5JXEEIA.js +0 -68
  313. package/chunks/nonInteractiveCli-LS2K4X6A.js +0 -124
  314. package/chunks/types-JNKGKUJT.js +0 -12
  315. package/chunks/workspace-providers-status-4KMGETOJ.js +0 -71
  316. package/chunks/workspace-service-RVLBMSMZ.js +0 -80
  317. package/chunks/workspace-skills-status-DS4ZVFTO.js +0 -70
  318. package/web-shell/assets/channel-CLiQD50f.js +0 -1
  319. package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +0 -1
  320. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +0 -1
  321. package/web-shell/assets/index-D5IWFVk1.css +0 -5
  322. package/web-shell/assets/index-KFJRDhX7.js +0 -783
  323. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +0 -1
@@ -0,0 +1,493 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ MAX_WORKSPACE_PATH_LENGTH,
5
+ canonicalizeWorkspace
6
+ } from "./chunk-W7FJ3N32.js";
7
+ import {
8
+ MAX_DAEMON_WORKSPACES
9
+ } from "./chunk-5HBA2Z7V.js";
10
+ import {
11
+ getGlobalQwenDirLite
12
+ } from "./chunk-IDS7MSUP.js";
13
+ import {
14
+ isWithinRoot
15
+ } from "./chunk-MR3PXB6E.js";
16
+ import {
17
+ require_proper_lockfile
18
+ } from "./chunk-E2UVIFI2.js";
19
+ import {
20
+ init_esbuild_shims
21
+ } from "./chunk-5O2XNYP6.js";
22
+ import {
23
+ __name,
24
+ __toESM
25
+ } from "./chunk-J2S4EL5Y.js";
26
+
27
+ // packages/cli/src/serve/workspace-registration-store.ts
28
+ init_esbuild_shims();
29
+ var import_proper_lockfile = __toESM(require_proper_lockfile(), 1);
30
+ import { createHash } from "node:crypto";
31
+ import { constants } from "node:fs";
32
+ import * as fs from "node:fs/promises";
33
+ import * as os from "node:os";
34
+ import * as path from "node:path";
35
+
36
+ // packages/cli/src/serve/workspace-inputs.ts
37
+ init_esbuild_shims();
38
+ var MAX_REGISTERED_WORKSPACES = MAX_DAEMON_WORKSPACES;
39
+ var DuplicateWorkspaceInputError = class extends Error {
40
+ static {
41
+ __name(this, "DuplicateWorkspaceInputError");
42
+ }
43
+ constructor(workspace) {
44
+ super(
45
+ `Duplicate --workspace value resolves to ${JSON.stringify(workspace)}. Pass distinct --workspace values.`
46
+ );
47
+ this.name = "DuplicateWorkspaceInputError";
48
+ }
49
+ };
50
+ var NestedWorkspaceInputError = class extends Error {
51
+ static {
52
+ __name(this, "NestedWorkspaceInputError");
53
+ }
54
+ constructor(parent, child) {
55
+ super(
56
+ `Nested --workspace values are not supported yet: ${JSON.stringify(child)} is inside ${JSON.stringify(parent)}. Pass non-nested --workspace values.`
57
+ );
58
+ this.name = "NestedWorkspaceInputError";
59
+ }
60
+ };
61
+ var MissingWorkspaceInputError = class extends Error {
62
+ static {
63
+ __name(this, "MissingWorkspaceInputError");
64
+ }
65
+ constructor() {
66
+ super("--workspace requires a value.");
67
+ this.name = "MissingWorkspaceInputError";
68
+ }
69
+ };
70
+ function normalizeWorkspaceInputs(workspace) {
71
+ if (Array.isArray(workspace)) {
72
+ if (workspace.length === 0) {
73
+ throw new MissingWorkspaceInputError();
74
+ }
75
+ return workspace.map((value) => String(value));
76
+ }
77
+ if (workspace === void 0) return [process.cwd()];
78
+ return [String(workspace)];
79
+ }
80
+ __name(normalizeWorkspaceInputs, "normalizeWorkspaceInputs");
81
+ function isNestedWorkspace(parent, child) {
82
+ return parent !== child && isWithinRoot(child, parent);
83
+ }
84
+ __name(isNestedWorkspace, "isNestedWorkspace");
85
+ function rejectDuplicateOrNestedWorkspaceInputs(workspaces) {
86
+ if (workspaces.length <= 1) return;
87
+ let canonicalWorkspaces;
88
+ try {
89
+ canonicalWorkspaces = workspaces.map(
90
+ (workspace) => canonicalizeWorkspace(workspace)
91
+ );
92
+ } catch {
93
+ return;
94
+ }
95
+ const seen = /* @__PURE__ */ new Set();
96
+ for (const workspace of canonicalWorkspaces) {
97
+ if (seen.has(workspace)) {
98
+ throw new DuplicateWorkspaceInputError(workspace);
99
+ }
100
+ seen.add(workspace);
101
+ }
102
+ for (let i = 0; i < canonicalWorkspaces.length; i++) {
103
+ for (let j = i + 1; j < canonicalWorkspaces.length; j++) {
104
+ const first = canonicalWorkspaces[i];
105
+ const second = canonicalWorkspaces[j];
106
+ if (isNestedWorkspace(first, second)) {
107
+ throw new NestedWorkspaceInputError(first, second);
108
+ }
109
+ if (isNestedWorkspace(second, first)) {
110
+ throw new NestedWorkspaceInputError(second, first);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ __name(rejectDuplicateOrNestedWorkspaceInputs, "rejectDuplicateOrNestedWorkspaceInputs");
116
+ function resolveWorkspaceInputs(workspace) {
117
+ const workspaces = normalizeWorkspaceInputs(workspace);
118
+ rejectDuplicateOrNestedWorkspaceInputs(workspaces);
119
+ return workspaces;
120
+ }
121
+ __name(resolveWorkspaceInputs, "resolveWorkspaceInputs");
122
+
123
+ // packages/cli/src/serve/workspace-registration-store.ts
124
+ var SCHEMA_VERSION = 1;
125
+ var MAX_SECONDARY_WORKSPACES = MAX_REGISTERED_WORKSPACES - 1;
126
+ var MAX_STORE_BYTES = 256 * 1024;
127
+ var LOCK_OPTIONS = {
128
+ realpath: false,
129
+ stale: 1e4,
130
+ update: 2e3,
131
+ retries: {
132
+ retries: 120,
133
+ minTimeout: 10,
134
+ maxTimeout: 100,
135
+ factor: 1.2,
136
+ randomize: true
137
+ }
138
+ };
139
+ var WorkspaceRegistrationStoreError = class extends Error {
140
+ static {
141
+ __name(this, "WorkspaceRegistrationStoreError");
142
+ }
143
+ constructor(message) {
144
+ super(message);
145
+ this.name = "WorkspaceRegistrationStoreError";
146
+ }
147
+ };
148
+ var WorkspaceRegistrationStoreLimitError = class extends WorkspaceRegistrationStoreError {
149
+ static {
150
+ __name(this, "WorkspaceRegistrationStoreLimitError");
151
+ }
152
+ };
153
+ var WorkspaceRegistrationStoreCommittedError = class extends WorkspaceRegistrationStoreError {
154
+ static {
155
+ __name(this, "WorkspaceRegistrationStoreCommittedError");
156
+ }
157
+ };
158
+ function normalizedScopePath(primaryWorkspace) {
159
+ return os.platform() === "win32" ? primaryWorkspace.toLowerCase() : primaryWorkspace;
160
+ }
161
+ __name(normalizedScopePath, "normalizedScopePath");
162
+ function workspaceRegistrationScopeHash(primaryWorkspace) {
163
+ return createHash("sha256").update(normalizedScopePath(primaryWorkspace)).digest("hex");
164
+ }
165
+ __name(workspaceRegistrationScopeHash, "workspaceRegistrationScopeHash");
166
+ function workspaceRegistrationId(workspace) {
167
+ return createHash("sha256").update(workspace).digest("hex").slice(0, 16);
168
+ }
169
+ __name(workspaceRegistrationId, "workspaceRegistrationId");
170
+ function getWorkspaceRegistrationStorePath(primaryWorkspace, qwenHome = getGlobalQwenDirLite()) {
171
+ return path.join(
172
+ qwenHome,
173
+ "daemon",
174
+ "workspaces",
175
+ `${workspaceRegistrationScopeHash(primaryWorkspace)}.json`
176
+ );
177
+ }
178
+ __name(getWorkspaceRegistrationStorePath, "getWorkspaceRegistrationStorePath");
179
+ function emptySnapshot(primaryWorkspace) {
180
+ return {
181
+ schemaVersion: SCHEMA_VERSION,
182
+ primaryWorkspace,
183
+ workspaces: []
184
+ };
185
+ }
186
+ __name(emptySnapshot, "emptySnapshot");
187
+ function validateWorkspacePath(value, label) {
188
+ if (typeof value !== "string" || !path.isAbsolute(value)) {
189
+ throw new WorkspaceRegistrationStoreError(
190
+ `${label} must be an absolute path`
191
+ );
192
+ }
193
+ if (value.includes("\0") || value.length > MAX_WORKSPACE_PATH_LENGTH) {
194
+ throw new WorkspaceRegistrationStoreError(`${label} is invalid`);
195
+ }
196
+ return value;
197
+ }
198
+ __name(validateWorkspacePath, "validateWorkspacePath");
199
+ function parseSnapshot(raw, primaryWorkspace) {
200
+ let value;
201
+ try {
202
+ value = JSON.parse(raw);
203
+ } catch {
204
+ throw new WorkspaceRegistrationStoreError(
205
+ "Workspace registration store contains malformed JSON"
206
+ );
207
+ }
208
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
209
+ throw new WorkspaceRegistrationStoreError(
210
+ "Workspace registration store root must be an object"
211
+ );
212
+ }
213
+ const record = value;
214
+ if (record["schemaVersion"] !== SCHEMA_VERSION) {
215
+ throw new WorkspaceRegistrationStoreError(
216
+ `Unsupported workspace registration schema ${String(record["schemaVersion"])}`
217
+ );
218
+ }
219
+ const storedPrimary = validateWorkspacePath(
220
+ record["primaryWorkspace"],
221
+ "primaryWorkspace"
222
+ );
223
+ if (normalizedScopePath(storedPrimary) !== normalizedScopePath(primaryWorkspace)) {
224
+ throw new WorkspaceRegistrationStoreError(
225
+ "Workspace registration store primary does not match this daemon"
226
+ );
227
+ }
228
+ if (!Array.isArray(record["workspaces"])) {
229
+ throw new WorkspaceRegistrationStoreError(
230
+ "Workspace registration store workspaces must be an array"
231
+ );
232
+ }
233
+ if (record["workspaces"].length > MAX_SECONDARY_WORKSPACES) {
234
+ throw new WorkspaceRegistrationStoreError(
235
+ `Workspace registration store exceeds ${MAX_SECONDARY_WORKSPACES} entries`
236
+ );
237
+ }
238
+ const seen = /* @__PURE__ */ new Set();
239
+ const workspaces = record["workspaces"].map((entry, index) => {
240
+ const workspace = validateWorkspacePath(entry, `workspaces[${index}]`);
241
+ const normalizedWorkspace = normalizedScopePath(workspace);
242
+ if (normalizedWorkspace === normalizedScopePath(primaryWorkspace)) {
243
+ throw new WorkspaceRegistrationStoreError(
244
+ "Primary workspace cannot be stored as a secondary registration"
245
+ );
246
+ }
247
+ if (seen.has(normalizedWorkspace)) {
248
+ throw new WorkspaceRegistrationStoreError(
249
+ "Workspace registration store contains duplicate paths"
250
+ );
251
+ }
252
+ seen.add(normalizedWorkspace);
253
+ return workspace;
254
+ });
255
+ return { schemaVersion: SCHEMA_VERSION, primaryWorkspace, workspaces };
256
+ }
257
+ __name(parseSnapshot, "parseSnapshot");
258
+ var updateChains = /* @__PURE__ */ new Map();
259
+ async function withInProcessLock(filePath, work) {
260
+ const previous = updateChains.get(filePath) ?? Promise.resolve();
261
+ const next = previous.then(work, work);
262
+ const settled = next.catch(() => void 0).finally(() => {
263
+ if (updateChains.get(filePath) === settled) updateChains.delete(filePath);
264
+ });
265
+ updateChains.set(filePath, settled);
266
+ return next;
267
+ }
268
+ __name(withInProcessLock, "withInProcessLock");
269
+ function compromisedLockError() {
270
+ return new WorkspaceRegistrationStoreError(
271
+ "Workspace registration store lock was compromised"
272
+ );
273
+ }
274
+ __name(compromisedLockError, "compromisedLockError");
275
+ async function acquireFileLock(filePath) {
276
+ await fs.mkdir(path.dirname(filePath), { recursive: true, mode: 448 });
277
+ let compromised = false;
278
+ const release = await import_proper_lockfile.default.lock(filePath, {
279
+ ...LOCK_OPTIONS,
280
+ onCompromised: /* @__PURE__ */ __name(() => {
281
+ compromised = true;
282
+ }, "onCompromised")
283
+ });
284
+ return {
285
+ assertOwned: /* @__PURE__ */ __name(() => {
286
+ if (compromised) throw compromisedLockError();
287
+ }, "assertOwned"),
288
+ release: /* @__PURE__ */ __name(async () => {
289
+ try {
290
+ await release();
291
+ } catch (err) {
292
+ if (!compromised) throw err;
293
+ }
294
+ if (compromised) throw compromisedLockError();
295
+ }, "release")
296
+ };
297
+ }
298
+ __name(acquireFileLock, "acquireFileLock");
299
+ var WorkspaceRegistrationStore = class {
300
+ constructor(primaryWorkspace, qwenHome) {
301
+ this.primaryWorkspace = primaryWorkspace;
302
+ validateWorkspacePath(primaryWorkspace, "primaryWorkspace");
303
+ this.filePath = getWorkspaceRegistrationStorePath(
304
+ primaryWorkspace,
305
+ qwenHome
306
+ );
307
+ }
308
+ static {
309
+ __name(this, "WorkspaceRegistrationStore");
310
+ }
311
+ filePath;
312
+ /** Returns an unlocked point-in-time snapshot; mutations re-read under lock. */
313
+ async read() {
314
+ try {
315
+ const entry = await fs.lstat(this.filePath);
316
+ if (entry.isSymbolicLink() || !entry.isFile()) {
317
+ throw new WorkspaceRegistrationStoreError(
318
+ "Workspace registration store must be a regular file"
319
+ );
320
+ }
321
+ } catch (err) {
322
+ if (err.code === "ENOENT") {
323
+ return emptySnapshot(this.primaryWorkspace);
324
+ }
325
+ throw err;
326
+ }
327
+ let file;
328
+ try {
329
+ file = await fs.open(
330
+ this.filePath,
331
+ (constants.O_RDONLY ?? 0) | (constants.O_NOFOLLOW ?? 0)
332
+ );
333
+ } catch (err) {
334
+ if (err.code === "ENOENT") {
335
+ return emptySnapshot(this.primaryWorkspace);
336
+ }
337
+ if (err.code === "ELOOP") {
338
+ throw new WorkspaceRegistrationStoreError(
339
+ "Workspace registration store must be a regular file"
340
+ );
341
+ }
342
+ throw err;
343
+ }
344
+ try {
345
+ const stat = await file.stat();
346
+ if (!stat.isFile()) {
347
+ throw new WorkspaceRegistrationStoreError(
348
+ "Workspace registration store must be a regular file"
349
+ );
350
+ }
351
+ if (stat.size > MAX_STORE_BYTES) {
352
+ throw new WorkspaceRegistrationStoreError(
353
+ `Workspace registration store exceeds ${MAX_STORE_BYTES} bytes`
354
+ );
355
+ }
356
+ let buffer = Buffer.alloc(
357
+ Math.max(1, Math.min(stat.size + 1, MAX_STORE_BYTES + 1))
358
+ );
359
+ let totalBytesRead = 0;
360
+ for (; ; ) {
361
+ if (totalBytesRead === buffer.length) {
362
+ if (totalBytesRead > MAX_STORE_BYTES) break;
363
+ const grown = Buffer.alloc(
364
+ Math.min(
365
+ MAX_STORE_BYTES + 1,
366
+ Math.max(buffer.length * 2, totalBytesRead + 1)
367
+ )
368
+ );
369
+ buffer.copy(grown, 0, 0, totalBytesRead);
370
+ buffer = grown;
371
+ }
372
+ const { bytesRead } = await file.read(
373
+ buffer,
374
+ totalBytesRead,
375
+ buffer.length - totalBytesRead,
376
+ totalBytesRead
377
+ );
378
+ if (bytesRead === 0) break;
379
+ totalBytesRead += bytesRead;
380
+ }
381
+ if (totalBytesRead > MAX_STORE_BYTES) {
382
+ throw new WorkspaceRegistrationStoreError(
383
+ `Workspace registration store exceeds ${MAX_STORE_BYTES} bytes`
384
+ );
385
+ }
386
+ return parseSnapshot(
387
+ buffer.toString("utf8", 0, totalBytesRead),
388
+ this.primaryWorkspace
389
+ );
390
+ } finally {
391
+ await file.close();
392
+ }
393
+ }
394
+ async add(workspace) {
395
+ validateWorkspacePath(workspace, "workspace");
396
+ if (normalizedScopePath(workspace) === normalizedScopePath(this.primaryWorkspace)) {
397
+ throw new WorkspaceRegistrationStoreError(
398
+ "Primary workspace cannot be stored as a secondary registration"
399
+ );
400
+ }
401
+ return this.update((snapshot) => {
402
+ const normalizedWorkspace = normalizedScopePath(workspace);
403
+ if (snapshot.workspaces.some(
404
+ (stored) => normalizedScopePath(stored) === normalizedWorkspace
405
+ )) {
406
+ return false;
407
+ }
408
+ if (snapshot.workspaces.length >= MAX_SECONDARY_WORKSPACES) {
409
+ throw new WorkspaceRegistrationStoreLimitError(
410
+ `Workspace registration store limit of ${MAX_SECONDARY_WORKSPACES} reached`
411
+ );
412
+ }
413
+ snapshot.workspaces.push(workspace);
414
+ return true;
415
+ });
416
+ }
417
+ async removeById(id) {
418
+ return await this.removeByIds([id]) > 0;
419
+ }
420
+ async removeByIds(ids) {
421
+ const requested = new Set(ids);
422
+ if (requested.size === 0) return 0;
423
+ let removed = 0;
424
+ await this.update((snapshot) => {
425
+ const retained = snapshot.workspaces.filter((workspace) => {
426
+ if (!requested.has(workspaceRegistrationId(workspace))) return true;
427
+ removed++;
428
+ return false;
429
+ });
430
+ if (removed === 0) return false;
431
+ snapshot.workspaces.splice(0, snapshot.workspaces.length, ...retained);
432
+ return true;
433
+ });
434
+ return removed;
435
+ }
436
+ async update(mutate) {
437
+ const { atomicWriteFile } = await import("./src-7FITDSVC.js");
438
+ return withInProcessLock(this.filePath, async () => {
439
+ const lock = await acquireFileLock(this.filePath);
440
+ let committed = false;
441
+ let changed = false;
442
+ let workError;
443
+ try {
444
+ const snapshot = await this.read();
445
+ lock.assertOwned();
446
+ changed = mutate(snapshot);
447
+ if (changed) {
448
+ lock.assertOwned();
449
+ await atomicWriteFile(
450
+ this.filePath,
451
+ `${JSON.stringify(snapshot, null, 2)}
452
+ `,
453
+ { mode: 384, forceMode: true, noFollow: true }
454
+ );
455
+ committed = true;
456
+ }
457
+ } catch (err) {
458
+ workError = err;
459
+ }
460
+ let releaseError;
461
+ try {
462
+ await lock.release();
463
+ } catch (err) {
464
+ releaseError = committed ? new WorkspaceRegistrationStoreCommittedError(
465
+ `Workspace registration update committed but lock release failed: ${err instanceof Error ? err.message : String(err)}`
466
+ ) : err;
467
+ }
468
+ if (workError instanceof Error && releaseError !== void 0 && workError.cause === void 0) {
469
+ workError.cause = releaseError;
470
+ }
471
+ if (workError !== void 0) throw workError;
472
+ if (releaseError !== void 0) throw releaseError;
473
+ return changed;
474
+ });
475
+ }
476
+ };
477
+
478
+ export {
479
+ MAX_REGISTERED_WORKSPACES,
480
+ resolveWorkspaceInputs,
481
+ WorkspaceRegistrationStoreError,
482
+ WorkspaceRegistrationStoreLimitError,
483
+ WorkspaceRegistrationStoreCommittedError,
484
+ workspaceRegistrationScopeHash,
485
+ workspaceRegistrationId,
486
+ getWorkspaceRegistrationStorePath,
487
+ WorkspaceRegistrationStore
488
+ };
489
+ /**
490
+ * @license
491
+ * Copyright 2026 Qwen Team
492
+ * SPDX-License-Identifier: Apache-2.0
493
+ */