gerege-cli 0.26.5 → 0.26.6

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 (237) hide show
  1. package/README.md +8 -8
  2. package/chunks/{MaxSizedBox-VMVLMS4X.js → MaxSizedBox-QCIXIS4P.js} +1 -1
  3. package/chunks/{StandaloneSessionPicker-UNORCVYY.js → StandaloneSessionPicker-BAFAIRT7.js} +1 -1
  4. package/chunks/{acp-subagent-executor-623ZUTJT.js → acp-subagent-executor-TPVXURLW.js} +1 -1
  5. package/chunks/{acpAgent-MTTDTK2C.js → acpAgent-67UN66PB.js} +3 -3
  6. package/chunks/{advisor-ANUGICJ5.js → advisor-SAXMI4QZ.js} +1 -1
  7. package/chunks/{agent-GNCQDICJ.js → agent-KV7BXY6C.js} +1 -1
  8. package/chunks/{agent-headless-OPUXAXQM.js → agent-headless-FQX3JGG6.js} +1 -1
  9. package/chunks/{agent-host-client-K6GRPTFD.js → agent-host-client-L5EHC4AC.js} +1 -1
  10. package/chunks/{agent-host-connections-MF3YBZU2.js → agent-host-connections-EDBMCVQF.js} +1 -1
  11. package/chunks/{anthropicContentGenerator-OK4PFE5Y.js → anthropicContentGenerator-V7TX2NXP.js} +1 -1
  12. package/chunks/{autofix-pr-MABTGEHZ.js → autofix-pr-WP34NYHL.js} +1 -1
  13. package/chunks/{batch-V2NJT3M5.js → batch-XFVQ4BLM.js} +1 -1
  14. package/chunks/{bridge-BJQ627CX.js → bridge-AE7AFEXB.js} +1 -1
  15. package/chunks/{channel-settings-store-4JMCI4UR.js → channel-settings-store-X63P5OVT.js} +1 -1
  16. package/chunks/{chunk-ZN57TOVA.js → chunk-2DU2WMTL.js} +1 -1
  17. package/chunks/{chunk-Z5XENA4A.js → chunk-2JGTWRZJ.js} +8 -7
  18. package/chunks/{chunk-MTW3A3KT.js → chunk-2LWJGXTW.js} +1 -1
  19. package/chunks/{chunk-OCBJCZC2.js → chunk-2N3NBTYJ.js} +1 -1
  20. package/chunks/{chunk-WI4UMN3Q.js → chunk-2TAJ5STJ.js} +1 -1
  21. package/chunks/{chunk-EIILQ6KT.js → chunk-32XHDDIA.js} +1 -1
  22. package/chunks/{chunk-FNXO5KWB.js → chunk-34HC2AXI.js} +2 -2
  23. package/chunks/{chunk-2X3UF2CF.js → chunk-3W32X2DH.js} +1 -1
  24. package/chunks/{chunk-CKZRJP4F.js → chunk-4ME3BUJK.js} +1 -1
  25. package/chunks/{chunk-NVSKOSFG.js → chunk-4NDJKNN6.js} +1 -1
  26. package/chunks/{chunk-BRPJ5EHA.js → chunk-5EXL4TKQ.js} +1 -1
  27. package/chunks/{chunk-3XBJYUWP.js → chunk-65ME4BOH.js} +1 -1
  28. package/chunks/{chunk-TQTIEK2W.js → chunk-7453BHJO.js} +1 -1
  29. package/chunks/{chunk-HSYBIGMS.js → chunk-76FSYQTG.js} +1 -1
  30. package/chunks/{chunk-FNB3DPQZ.js → chunk-7RNOS7R4.js} +1 -1
  31. package/chunks/{chunk-H57IX45A.js → chunk-AEKEZRIU.js} +1 -1
  32. package/chunks/{chunk-CXGGC4NO.js → chunk-AEZYXPFS.js} +1 -1
  33. package/chunks/{chunk-NGOIJH7K.js → chunk-AFO5ER23.js} +1 -1
  34. package/chunks/{chunk-UY2ET2AL.js → chunk-AYVCT5FF.js} +1 -1
  35. package/chunks/{chunk-QOYRDEXR.js → chunk-B37YY4XU.js} +1 -1
  36. package/chunks/{chunk-IDUGQMTP.js → chunk-BAUMVH4Q.js} +1 -1
  37. package/chunks/{chunk-CAPG7UVH.js → chunk-BCI62WSL.js} +1 -1
  38. package/chunks/{chunk-USJFJZ23.js → chunk-BGELKSQ4.js} +1 -1
  39. package/chunks/{chunk-6X73W4TL.js → chunk-BHIDG6VZ.js} +1 -1
  40. package/chunks/{chunk-26ISBUM7.js → chunk-BPFFRPWE.js} +6 -6
  41. package/chunks/{chunk-YGHM5CDT.js → chunk-BQZF3UKI.js} +1 -1
  42. package/chunks/{chunk-3NQESE5K.js → chunk-CBE6ZIHU.js} +1 -1
  43. package/chunks/{chunk-DEMXCA3K.js → chunk-CF6SZJNP.js} +1 -1
  44. package/chunks/{chunk-2VCDJ6UF.js → chunk-CGDFZEER.js} +1 -1
  45. package/chunks/{chunk-3WQPUP5U.js → chunk-CUP2TNJK.js} +1 -1
  46. package/chunks/{chunk-2IGE2K5V.js → chunk-DA6LOBSB.js} +1 -1
  47. package/chunks/{chunk-HFV6CQWE.js → chunk-EFIRES46.js} +1 -1
  48. package/chunks/{chunk-E5YRAQXM.js → chunk-EKRUF347.js} +1 -1
  49. package/chunks/{chunk-KN27BFXM.js → chunk-ELDZ4MNL.js} +1 -1
  50. package/chunks/{chunk-ADTFKUH2.js → chunk-ET5M5WFN.js} +1 -1
  51. package/chunks/{chunk-IBYFSHBB.js → chunk-EXIFPXMB.js} +1 -1
  52. package/chunks/{chunk-IA4K4PGK.js → chunk-EYPLBTMI.js} +1 -1
  53. package/chunks/{chunk-DTTC4ZKY.js → chunk-FEP6W4NJ.js} +1 -1
  54. package/chunks/{chunk-FHBGTZ4K.js → chunk-FKL3V5BO.js} +1 -1
  55. package/chunks/{chunk-Q5E5SOY2.js → chunk-FKZ46GKL.js} +1 -1
  56. package/chunks/{chunk-OPYGNTZP.js → chunk-FYBJGRX7.js} +1 -1
  57. package/chunks/{chunk-FPZPCZFS.js → chunk-G6DALGGS.js} +1 -1
  58. package/chunks/{chunk-3Y6LSWEW.js → chunk-GBSRWT7J.js} +1 -1
  59. package/chunks/{chunk-SMYBY353.js → chunk-GHIFIXNX.js} +1 -1
  60. package/chunks/{chunk-DE53B2R7.js → chunk-GRAECADD.js} +1 -1
  61. package/chunks/{chunk-UJYOILZR.js → chunk-GSPGIGO5.js} +3 -3
  62. package/chunks/{chunk-5UZT4SXG.js → chunk-H3IR3GIE.js} +1 -1
  63. package/chunks/{chunk-ADZI3OFT.js → chunk-HOG66S6K.js} +1 -1
  64. package/chunks/{chunk-WB34KMOT.js → chunk-HTAUIJB4.js} +1 -1
  65. package/chunks/{chunk-MPAR4JBP.js → chunk-I6PUY2T3.js} +1 -1
  66. package/chunks/{chunk-5ZQWQ3RK.js → chunk-IZ5MWA6E.js} +1 -1
  67. package/chunks/{chunk-7IERHQ63.js → chunk-JEDL4IKF.js} +1 -1
  68. package/chunks/{chunk-RVJJFDF3.js → chunk-JH3V5SPA.js} +1 -1
  69. package/chunks/{chunk-SELRSZFK.js → chunk-JRTOPEM3.js} +1 -1
  70. package/chunks/{chunk-SQQORHMS.js → chunk-JWNKPINR.js} +1 -1
  71. package/chunks/{chunk-55RVKT4O.js → chunk-KJGRCIVY.js} +1 -1
  72. package/chunks/{chunk-GSOBASYW.js → chunk-KZNYALFU.js} +1 -1
  73. package/chunks/{chunk-FDUXQAGW.js → chunk-LBLLWAKK.js} +1 -1
  74. package/chunks/{chunk-ZSVSRF4C.js → chunk-LT3J74BZ.js} +1 -1
  75. package/chunks/{chunk-AMTFJVDD.js → chunk-LTE4N6L3.js} +1 -1
  76. package/chunks/{chunk-F26LTWDZ.js → chunk-M6KB5RVD.js} +1 -1
  77. package/chunks/{chunk-2PY7R7GG.js → chunk-MGATL4OA.js} +1 -1
  78. package/chunks/{chunk-KGJ47CI5.js → chunk-MPVQDYPH.js} +1 -1
  79. package/chunks/{chunk-BBOJUFMW.js → chunk-MTDBCIDA.js} +1 -1
  80. package/chunks/{chunk-ZYTG6R7S.js → chunk-MYV7GY3H.js} +1 -1
  81. package/chunks/{chunk-4GC5HJZO.js → chunk-N7PWZBXV.js} +1 -1
  82. package/chunks/{chunk-2NOMOJWE.js → chunk-NA4ZF2FE.js} +2 -2
  83. package/chunks/{chunk-7MTBINFX.js → chunk-NEKPQLFY.js} +2 -2
  84. package/chunks/{chunk-ABJGFEES.js → chunk-NO7VTKRL.js} +1 -1
  85. package/chunks/{chunk-OHXQYU6S.js → chunk-NONBHCXP.js} +1 -1
  86. package/chunks/{chunk-ZOBX6C7E.js → chunk-NVOI6UDQ.js} +1 -1
  87. package/chunks/{chunk-YLAI26PX.js → chunk-OJ4K62S2.js} +1 -1
  88. package/chunks/{chunk-CCOUFBOY.js → chunk-OK7LBM5G.js} +1 -1
  89. package/chunks/{chunk-POA4NX4N.js → chunk-OOJ2AQT3.js} +1 -1
  90. package/chunks/{chunk-5WLKN3GD.js → chunk-OU7CEG7Q.js} +1 -1
  91. package/chunks/{chunk-4TYTJQWR.js → chunk-P3JEEDQZ.js} +1 -1
  92. package/chunks/{chunk-AQWHCRKY.js → chunk-P62S5JGM.js} +1 -1
  93. package/chunks/{chunk-B6D3KTUK.js → chunk-QDCUR3JB.js} +1 -1
  94. package/chunks/{chunk-XFLLE2J3.js → chunk-RSLTOIG5.js} +2 -2
  95. package/chunks/{chunk-ISGF3BVD.js → chunk-RXN7DUMP.js} +2 -2
  96. package/chunks/{chunk-PN62SUYK.js → chunk-SKGJ26HQ.js} +1 -1
  97. package/chunks/{chunk-62NLMVVT.js → chunk-SP6CQ3MO.js} +1 -1
  98. package/chunks/{chunk-4EQWJTJR.js → chunk-T2YTHAJW.js} +1 -1
  99. package/chunks/{chunk-NO26JN24.js → chunk-T53VMDXH.js} +1 -1
  100. package/chunks/{chunk-X4BFEDWU.js → chunk-T5DKF33F.js} +1 -1
  101. package/chunks/{chunk-KKBOCRPF.js → chunk-TB4AUC2L.js} +1 -1
  102. package/chunks/{chunk-Q6QS5JTK.js → chunk-U3Q72OGV.js} +1 -1
  103. package/chunks/{chunk-FLJLUMQF.js → chunk-UKLXKJKL.js} +1 -1
  104. package/chunks/{chunk-IH2PFVWO.js → chunk-VD2GSW64.js} +1 -1
  105. package/chunks/{chunk-VDRE7U3P.js → chunk-VRKYBH5G.js} +5 -5
  106. package/chunks/{chunk-MOPJNP5I.js → chunk-W2RQIZ6B.js} +1 -1
  107. package/chunks/{chunk-2LLPGSUK.js → chunk-W5Z4BWWA.js} +1 -1
  108. package/chunks/{chunk-CNFA5UUM.js → chunk-W66WWTOP.js} +1 -1
  109. package/chunks/{chunk-C56YJIEI.js → chunk-WGFX3EL3.js} +1 -1
  110. package/chunks/{chunk-6NI33TVK.js → chunk-X2TY7VTY.js} +1 -1
  111. package/chunks/{chunk-FIM7MM25.js → chunk-XISR37DQ.js} +1 -1
  112. package/chunks/{chunk-KDYUZBZC.js → chunk-YH2XRWRF.js} +1 -1
  113. package/chunks/{chunk-UBXLQ6TP.js → chunk-ZENMAISJ.js} +1 -1
  114. package/chunks/{codex-subagent-executor-EK3A2WBH.js → codex-subagent-executor-OLMGVPVS.js} +1 -1
  115. package/chunks/{config-utils-DLOK7OLM.js → config-utils-OWY5G5Y2.js} +1 -1
  116. package/chunks/{contextCommand-AVCUCHQC.js → contextCommand-IXFUZH65.js} +1 -1
  117. package/chunks/{core-runtime-QSS4ZTG6.js → core-runtime-O4LC4NY3.js} +1 -1
  118. package/chunks/{create-sub-session-PNF7QDKC.js → create-sub-session-6F7C3TMT.js} +1 -1
  119. package/chunks/{cron-create-C6JOFIU4.js → cron-create-2422NBSJ.js} +1 -1
  120. package/chunks/{daemon-git-worktree-guard-5XZAZ7D2.js → daemon-git-worktree-guard-EWPQA6NO.js} +1 -1
  121. package/chunks/{daemon-status-provider-MRNELSNJ.js → daemon-status-provider-FAHOXNFW.js} +1 -1
  122. package/chunks/{daemon-trust-policy-26CMW3WY.js → daemon-trust-policy-L3DM6AI5.js} +1 -1
  123. package/chunks/{daemon-trust-policy-monitor-3DWO6NQY.js → daemon-trust-policy-monitor-HNPY5KJ4.js} +1 -1
  124. package/chunks/{deferred-core-runtime-DEC3N46T.js → deferred-core-runtime-JF42NQJK.js} +1 -1
  125. package/chunks/{edit-3HMQPCHN.js → edit-E5LEI2LL.js} +1 -1
  126. package/chunks/{enterPlanMode-QHJF4JXZ.js → enterPlanMode-3COTUV5V.js} +1 -1
  127. package/chunks/{environment-NGIBJWOT.js → environment-XBBIB3VA.js} +1 -1
  128. package/chunks/{errors-MSTGCVGJ.js → errors-LNMQ7TUK.js} +1 -1
  129. package/chunks/{execution-tool-VR4TGOI4.js → execution-tool-QDDKJD2K.js} +1 -1
  130. package/chunks/{execution-worker-EJH7HIE2.js → execution-worker-TXGZRZXE.js} +1 -1
  131. package/chunks/{exitPlanMode-P25OHQJ6.js → exitPlanMode-Z7QEMWPE.js} +1 -1
  132. package/chunks/{fast-path-II433ZDP.js → fast-path-M6K2RACY.js} +1 -1
  133. package/chunks/{glob-4Q6DCT3F.js → glob-N2QT4U7U.js} +1 -1
  134. package/chunks/{goal-tools-FFMAJW6V.js → goal-tools-CUSQD3DG.js} +1 -1
  135. package/chunks/{handleAutoUpdate-QNM26NZK.js → handleAutoUpdate-QF2YQHF6.js} +1 -1
  136. package/chunks/{i18n-L5URVOBB.js → i18n-AGOA6MUI.js} +1 -1
  137. package/chunks/{initializer-NQ2NECYP.js → initializer-FRKYDUSX.js} +1 -1
  138. package/chunks/{installationInfo-BCTXASUM.js → installationInfo-OKA4WXAS.js} +1 -1
  139. package/chunks/{interactive-mod-session-PPTBI37E.js → interactive-mod-session-MWYN5IFK.js} +1 -1
  140. package/chunks/{list-7TE5TUZJ.js → list-DE7VUIR2.js} +1 -1
  141. package/chunks/{llm-BWWKUBBZ.js → llm-N3JGJHYC.js} +4 -4
  142. package/chunks/{llm-content-generator-QOTGPBYC.js → llm-content-generator-VMUBA7OJ.js} +1 -1
  143. package/chunks/{loadedSettingsAdapter-THAGI5M2.js → loadedSettingsAdapter-5C36OZ7N.js} +1 -1
  144. package/chunks/{local-7BTAGV4J.js → local-BE624O3A.js} +1 -1
  145. package/chunks/{local-execution-environment-S3OR4KSC.js → local-execution-environment-OPGM7Y6L.js} +1 -1
  146. package/chunks/{loggingContentGenerator-AXJ5E5RS.js → loggingContentGenerator-2MHAI6JR.js} +1 -1
  147. package/chunks/{loop-wakeup-AJTLMLRX.js → loop-wakeup-BDLATBXH.js} +1 -1
  148. package/chunks/{manage-memory-JHTUVMDJ.js → manage-memory-BBCEIIWB.js} +1 -1
  149. package/chunks/{managed-execution-engine-U6GNJ4U4.js → managed-execution-engine-SRFALTCX.js} +1 -1
  150. package/chunks/{managed-local-serve-P4ZXVRBU.js → managed-local-serve-ICNAS3E6.js} +1 -1
  151. package/chunks/{managed-npm-update-UDUILNR5.js → managed-npm-update-CTL6LH5Z.js} +1 -1
  152. package/chunks/{managed-runtime-attestation-worker-P34ZBNRG.js → managed-runtime-attestation-worker-ZRDWKXCI.js} +1 -1
  153. package/chunks/{managed-runtime-bootstrap-CLMYNPH5.js → managed-runtime-bootstrap-6NTGZXQL.js} +1 -1
  154. package/chunks/{managed-runtime-session-worker-7H7AZJBV.js → managed-runtime-session-worker-RKQBBFR6.js} +1 -1
  155. package/chunks/{managed-runtime-ssh-worker-5KEMC7FD.js → managed-runtime-ssh-worker-FCGV6FSW.js} +1 -1
  156. package/chunks/{managed-session-authority-CFUZ45HT.js → managed-session-authority-C7IW6TJX.js} +1 -1
  157. package/chunks/{mcp-YMG4RVMC.js → mcp-VC4CJPE5.js} +1 -1
  158. package/chunks/{memory-7STURUXK.js → memory-S6OJA3ZD.js} +1 -1
  159. package/chunks/mn-JMS6SWTO.js +8 -0
  160. package/chunks/{model-call-collection-WBWTO3EG.js → model-call-collection-MJZWRQSU.js} +1 -1
  161. package/chunks/{model-configuration-6KCZZSZD.js → model-configuration-SKU6L3QI.js} +1 -1
  162. package/chunks/{modelConfigUtils-Z2EKFSPN.js → modelConfigUtils-TJCB6NXT.js} +1 -1
  163. package/chunks/{monitor-U5E33JO6.js → monitor-M3PNLCYP.js} +1 -1
  164. package/chunks/{nonInteractiveCli-BVCL5I5R.js → nonInteractiveCli-MR7JLAWU.js} +1 -1
  165. package/chunks/{nonInteractiveToolExecutor-B4EUOMYF.js → nonInteractiveToolExecutor-YKA6JMTY.js} +1 -1
  166. package/chunks/{notebook-edit-MXKD5J2C.js → notebook-edit-ENTFB5D7.js} +1 -1
  167. package/chunks/{omni-I5YECZBW.js → omni-6YBX4R6K.js} +1 -1
  168. package/chunks/{openaiContentGenerator-Q5SINFJJ.js → openaiContentGenerator-XRXX33FY.js} +1 -1
  169. package/chunks/{openaiResponsesContentGenerator-R3XCZLZY.js → openaiResponsesContentGenerator-L6ONEHMR.js} +1 -1
  170. package/chunks/{pidfile-UOGUNUTK.js → pidfile-XR4JF2Z6.js} +1 -1
  171. package/chunks/{processUtils-QGQGZHBA.js → processUtils-GQYNJRBJ.js} +1 -1
  172. package/chunks/{prompt-terminal-ledger-L57JMVSR.js → prompt-terminal-ledger-7BM7YDLG.js} +1 -1
  173. package/chunks/{qwenContentGenerator-UKZ237LC.js → qwenContentGenerator-QSA32XEL.js} +1 -1
  174. package/chunks/{reactive-degrade-3OM3HWVA.js → reactive-degrade-TFNBAAPZ.js} +1 -1
  175. package/chunks/{read-file-63ZLWMOW.js → read-file-VD7OFO2E.js} +1 -1
  176. package/chunks/{resumeHistoryUtils-R5YQS4YQ.js → resumeHistoryUtils-2B4KPI7G.js} +1 -1
  177. package/chunks/{review-AT6OWVDO.js → review-C365WGCW.js} +1 -1
  178. package/chunks/{ripGrep-7KBZGTPV.js → ripGrep-D7WPMBXR.js} +1 -1
  179. package/chunks/{run-qwen-serve-CLBG7W6F.js → run-qwen-serve-NZWQHWQA.js} +1 -1
  180. package/chunks/{runtime-R3QIGB7U.js → runtime-J6SPBSCS.js} +1 -1
  181. package/chunks/{sandboxConfig-PM3ZRQYV.js → sandboxConfig-QS2XBPZG.js} +1 -1
  182. package/chunks/{scheduled-tasks-PUMNN5XV.js → scheduled-tasks-YNNIOOPM.js} +1 -1
  183. package/chunks/{scheduler-KTPM226B.js → scheduler-KCMSPHON.js} +1 -1
  184. package/chunks/{search-memory-7I5MGDNV.js → search-memory-EUBJ7IAV.js} +1 -1
  185. package/chunks/{send-message-J526AEBI.js → send-message-CWWZUPSK.js} +1 -1
  186. package/chunks/{serve-KLTMPK4W.js → serve-4CB4BWJ5.js} +1 -1
  187. package/chunks/{server-VLRNY6KG.js → server-JNANUIGC.js} +3 -3
  188. package/chunks/{session-2EB57NXY.js → session-3LQLXPUA.js} +1 -1
  189. package/chunks/{session-attachments-root-I7TESMWL.js → session-attachments-root-BWIVWFHJ.js} +1 -1
  190. package/chunks/{session-execution-engine-selector-5FAMSPSO.js → session-execution-engine-selector-5OLRX57L.js} +1 -1
  191. package/chunks/{session-pr-refresh-JCPVQPNJ.js → session-pr-refresh-RLF3EXS3.js} +1 -1
  192. package/chunks/{sessionService-YRW2IFPR.js → sessionService-U7ACD2HP.js} +1 -1
  193. package/chunks/{settings-KO2Q47JP.js → settings-FTGWYTUH.js} +1 -1
  194. package/chunks/{shell-OLZVNTQZ.js → shell-E4RENYQC.js} +1 -1
  195. package/chunks/{skill-XW2AQS7M.js → skill-OLNPHRWB.js} +1 -1
  196. package/chunks/{skill-settings-TKAVQ4XP.js → skill-settings-R2BV2GEK.js} +1 -1
  197. package/chunks/{spawnChannel-MBGCTK2J.js → spawnChannel-LOPAR5T2.js} +1 -1
  198. package/chunks/{standalone-update-A3YLLIAN.js → standalone-update-IGDX2RGN.js} +1 -1
  199. package/chunks/{start-opentui-ui-G5ROAR4V.js → start-opentui-ui-33QLBNRC.js} +1 -1
  200. package/chunks/{startInteractiveUI-PZQR4U53.js → startInteractiveUI-RQKHD7MM.js} +1 -1
  201. package/chunks/{team-create-S5ZY2UMF.js → team-create-HAVKHNU5.js} +1 -1
  202. package/chunks/{team-plan-approval-KX6RXEST.js → team-plan-approval-7MCQX67C.js} +1 -1
  203. package/chunks/{terminal-image-renderer-SCJREXE6.js → terminal-image-renderer-XT5JVEO6.js} +1 -1
  204. package/chunks/{theme-manager-DZSM4EBR.js → theme-manager-DR5EYGLT.js} +1 -1
  205. package/chunks/{tool-call-UK56SWCT.js → tool-call-LZHZ5RVH.js} +1 -1
  206. package/chunks/{tool-result-media-JLLSLGFL.js → tool-result-media-XCXCF4YC.js} +1 -1
  207. package/chunks/{tool-search-OWPFLVV5.js → tool-search-K6S3ON7M.js} +1 -1
  208. package/chunks/{total-session-admission-NQU4ACKH.js → total-session-admission-LGSS2VWS.js} +1 -1
  209. package/chunks/{trustedFolders-N7GXFYSF.js → trustedFolders-IIR2UZRL.js} +1 -1
  210. package/chunks/{update-relaunch-5SPXXHM2.js → update-relaunch-WVIFX5CN.js} +1 -1
  211. package/chunks/{updateCheck-VXUIX2XG.js → updateCheck-CMEWLLZJ.js} +1 -1
  212. package/chunks/{upload-config-OWLL4SRQ.js → upload-config-TCCFCNCD.js} +1 -1
  213. package/chunks/{useAutoAcceptIndicator-OUYRR56F.js → useAutoAcceptIndicator-5RTTH3OW.js} +1 -1
  214. package/chunks/{validateNonInterActiveAuth-PSVJO5HK.js → validateNonInterActiveAuth-AO336KDX.js} +1 -1
  215. package/chunks/{version-C26S7UAW.js → version-JYWKKMNP.js} +1 -1
  216. package/chunks/{web-fetch-AYOYV7R4.js → web-fetch-HWTAWXFM.js} +1 -1
  217. package/chunks/{web-search-DAREKD3Z.js → web-search-HAI5LW3G.js} +1 -1
  218. package/chunks/{workflow-WBGPKVO6.js → workflow-BZ2YFGF6.js} +1 -1
  219. package/chunks/{workflow-ancestor-trust-GEEB53TB.js → workflow-ancestor-trust-26TFXFPO.js} +1 -1
  220. package/chunks/{workspace-agents-IMAQME4W.js → workspace-agents-DLI4JQJZ.js} +1 -1
  221. package/chunks/{workspace-providers-status-VALHVEU2.js → workspace-providers-status-64C7DJZU.js} +1 -1
  222. package/chunks/{workspace-recovery-worker-AIAVRDGU.js → workspace-recovery-worker-IFRT3KKP.js} +1 -1
  223. package/chunks/{workspace-registration-store-FXEGZG3L.js → workspace-registration-store-MYKJM2SK.js} +1 -1
  224. package/chunks/{workspace-registry-GYFFHWCD.js → workspace-registry-GZJRONAY.js} +1 -1
  225. package/chunks/{workspace-runtime-coordinator-VZ462TLU.js → workspace-runtime-coordinator-44KW6HSN.js} +1 -1
  226. package/chunks/{workspace-service-5DIZM4IZ.js → workspace-service-YHTSZYYD.js} +1 -1
  227. package/chunks/{workspace-skills-status-DOOBVL5N.js → workspace-skills-status-NEB62X24.js} +1 -1
  228. package/chunks/{workspace-trust-reconciler-LOICVUVW.js → workspace-trust-reconciler-HZLOOZWM.js} +1 -1
  229. package/chunks/{write-file-EJNMAHQD.js → write-file-HD5LHXGL.js} +1 -1
  230. package/chunks/{zoom-image-S3OARMYP.js → zoom-image-W4BMRC5T.js} +1 -1
  231. package/cli.js +2 -2
  232. package/execution-worker.js +1 -1
  233. package/export-transcript-document.js +1 -1
  234. package/gerege.mjs +53 -15
  235. package/locales/mn.js +2702 -3774
  236. package/package.json +3 -3
  237. package/chunks/mn-YH2OTBWJ.js +0 -8
@@ -1,6 +1,6 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import{classifyTopLevelConversationSource}from"./chunk-7M5JT3ID.js";import{A1_MIN_VERSION,a1VersionAtLeast,parseA1Version}from"./chunk-U3ZLJQMS.js";import{isAoneCanonicalHost,parseRemoteUrl}from"./chunk-CTMNGGOU.js";import{createSessionOrganizationService}from"./chunk-BRPJ5EHA.js";import{HIDDEN_CATALOG_SOURCE_TYPES,isHiddenCatalogSource}from"./chunk-DHYCGKLG.js";import{safeLogValue}from"./chunk-SVGTUGV2.js";import{normalizeSessionIdForLookup,parseCallerSuppliedSessionId}from"./chunk-LGFF5PJA.js";import{SessionArchivedError,SessionArchivingError,SessionConflictError,SessionNotArchivedError,SessionNotFoundError}from"./chunk-VTZZXEWA.js";import{readWorktreeSession,readWorktreeSessionStrict}from"./chunk-OMDTFGTX.js";import{GROUP_COLOR_OPTIONS,SESSION_PR_LIST_LIMIT,SESSION_PR_URL_MAX_LENGTH,SessionIdCaseConflictError,SessionOrganizationError,SessionService,SessionTranscriptChangedError,SessionWriterUnavailableError,canonicalSessionPrUrl,readSessionPrs,toSessionPrInfo}from"./chunk-Z5XENA4A.js";import{cronTaskSessionDeletionId,getCronFilePath,updateCronTasks}from"./chunk-T6W33SET.js";import{GitWorktreeService,gitEnv,readWorktreeSessionMarker,readWorktreeSessionMarkerStrict,worktreeHasWork}from"./chunk-ILECDNJX.js";import{findGitRoot}from"./chunk-EBMCWXGZ.js";import{addDaemonRequestAttribute}from"./chunk-FQRF6B65.js";import{LOG_LINE_UNSAFE_RE,writeStderrLine}from"./chunk-M4ECEHLX.js";import{Storage}from"./chunk-EPODBRBP.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();init_esbuild_shims();import path from"node:path";var PersistedSessionListCache=class{constructor(ttlMs,maxRetainedSummaries){this.ttlMs=ttlMs;this.maxRetainedSummaries=maxRetainedSummaries}static{__name(this,"PersistedSessionListCache")}slots=new Map;retainedSummaries=0;lookup(scope,loader,options={}){options.signal?.throwIfAborted();const key=this.key(scope);let slot=this.slots.get(key);if(!slot){slot={generation:0};this.slots.set(key,slot)}const now=Date.now();if(slot.value){const cacheAgeMs=Math.max(0,now-slot.value.completedAt);if(cacheAgeMs<this.ttlMs){const snapshot=slot.value.snapshot;return{status:"cache_hit",promise:Promise.resolve().then(()=>{options.signal?.throwIfAborted();return snapshot}),cacheAgeMs}}this.removeValue(slot)}if(slot.inFlight!==void 0&&slot.inFlight.generation===slot.generation&&!slot.inFlight.controller.signal.aborted){return{status:"single_flight",promise:this.attachWaiter(key,slot,slot.inFlight,options.signal)}}const generation=slot.generation;const controller=new AbortController;const load={generation,controller,promise:void 0,waiterCount:0,settled:false};const managed=Promise.resolve().then(()=>{controller.signal.throwIfAborted();return loader(controller.signal)}).then(snapshot=>{load.settled=true;const current=this.slots.get(key);if(current===slot&&current.inFlight===load){current.inFlight=void 0;if(current.generation===generation&&!controller.signal.aborted&&snapshot.sessions.length<=this.maxRetainedSummaries){this.installValue(key,current,snapshot)}else if(current.value===void 0){this.slots.delete(key)}}return snapshot},error=>{load.settled=true;const current=this.slots.get(key);if(current===slot&&current.inFlight===load){current.inFlight=void 0;if(current.value===void 0)this.slots.delete(key)}throw error});load.promise=managed;slot.inFlight=load;return{status:"scan",promise:this.attachWaiter(key,slot,load,options.signal)}}invalidate(scope){const key=this.key(scope);const slot=this.slots.get(key);if(!slot)return;slot.generation+=1;this.removeValue(slot);if(slot.inFlight===void 0)this.slots.delete(key)}clear(){for(const slot of this.slots.values()){if(slot.value)clearTimeout(slot.value.expiryTimer)}this.slots.clear();this.retainedSummaries=0}installValue(key,slot,snapshot){const completedAt=Date.now();this.evictFor(snapshot.sessions.length);const remainingTtlMs=Math.max(0,this.ttlMs-(Date.now()-completedAt));const expiryTimer=setTimeout(()=>{const current=this.slots.get(key);if(current!==slot||current.value?.expiryTimer!==expiryTimer){return}this.removeValue(current);if(current.inFlight===void 0)this.slots.delete(key)},remainingTtlMs);if(typeof expiryTimer.unref==="function")expiryTimer.unref();const value={snapshot,completedAt,expiryTimer};slot.value=value;this.retainedSummaries+=snapshot.sessions.length}evictFor(incomingSummaries){while(this.retainedSummaries+incomingSummaries>this.maxRetainedSummaries){let oldest;for(const[key,slot]of this.slots){if(slot.value&&(oldest===void 0||slot.value.completedAt<oldest.completedAt)){oldest={key,slot,completedAt:slot.value.completedAt}}}if(!oldest)return;this.removeValue(oldest.slot);if(oldest.slot.inFlight===void 0)this.slots.delete(oldest.key)}}removeValue(slot){const value=slot.value;if(!value)return;clearTimeout(value.expiryTimer);this.retainedSummaries-=value.snapshot.sessions.length;slot.value=void 0}attachWaiter(key,slot,load,signal){load.waiterCount+=1;return new Promise((resolve,reject)=>{let settled=false;const settle=__name(finish=>{if(settled)return;settled=true;signal?.removeEventListener("abort",onAbort);load.waiterCount-=1;if(load.waiterCount===0&&!load.settled){load.controller.abort(new DOMException("No active session list waiters","AbortError"));const current=this.slots.get(key);if(current===slot&&current.inFlight===load){current.inFlight=void 0;if(current.value===void 0)this.slots.delete(key)}}finish()},"settle");const onAbort=__name(()=>{if(load.settled)return;settle(()=>reject(signal?.reason))},"onAbort");signal?.addEventListener("abort",onAbort,{once:true});if(signal?.aborted)onAbort();void load.promise.then(snapshot=>settle(()=>resolve(snapshot)),error=>settle(()=>reject(error)))})}key(scope){return JSON.stringify([path.resolve(scope.runtimeBaseDir),scope.workspaceCwd,scope.archiveState])}};init_esbuild_shims();function laterActivityTimestamp(live,persisted){const liveTime=live===void 0?Number.NaN:Date.parse(live);const persistedTime=persisted===void 0?Number.NaN:Date.parse(persisted);const liveValid=Number.isFinite(liveTime);const persistedValid=Number.isFinite(persistedTime);if(liveValid&&persistedValid){return liveTime>=persistedTime?live:persisted}if(liveValid)return live;if(persistedValid)return persisted;return live??persisted}__name(laterActivityTimestamp,"laterActivityTimestamp");var DEFAULT_SESSION_PAGE_SIZE=20;var MAX_SESSION_PAGE_SIZE=100;var MAX_ORGANIZED_SESSIONS=5e4;var MAX_EMITTED_CURSOR_SESSION_IDS=64;var PERSISTED_SESSION_LIST_CACHE_TTL_MS=2e3;var persistedSessionListCache=new PersistedSessionListCache(PERSISTED_SESSION_LIST_CACHE_TTL_MS,MAX_ORGANIZED_SESSIONS);function invalidateWorkspaceSessionListCache(options){for(const archiveState of options.archiveStates){persistedSessionListCache.invalidate({runtimeBaseDir:options.runtimeBaseDir,workspaceCwd:options.workspaceCwd,archiveState})}}__name(invalidateWorkspaceSessionListCache,"invalidateWorkspaceSessionListCache");var InvalidCursorError=class extends Error{static{__name(this,"InvalidCursorError")}constructor(cursor,kind="numeric"){super(`Invalid cursor: "${cursor}" is not a valid ${kind} cursor`);this.name="InvalidCursorError"}};function parseSessionCursor(cursor){if(cursor==="")return void 0;const trimmed=cursor.trim();const parsed=Number(trimmed);if(trimmed===""||!Number.isFinite(parsed)||parsed<0||parsed>Number.MAX_SAFE_INTEGER){throw new InvalidCursorError(cursor)}return parsed}__name(parseSessionCursor,"parseSessionCursor");function parseEmittedSessionIds(value){if(value===void 0)return[];if(!Array.isArray(value)||value.some(id=>typeof id!=="string"||id.length===0)){return void 0}return value}__name(parseEmittedSessionIds,"parseEmittedSessionIds");function parseOrganizedCursor(cursor,expected){if(cursor==="")return void 0;try{const decoded=Buffer.from(cursor,"base64url").toString("utf8");const parsed=JSON.parse(decoded);const last=parsed.last;if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||typeof last!=="object"||last===null||Array.isArray(last)||typeof last.isPinned!=="boolean"||typeof last.activityTime!=="number"||!Number.isFinite(last.activityTime)||typeof last.sessionId!=="string"||last.sessionId.length===0||parsed.catalogKind!==void 0&&parsed.catalogKind!=="organized"||parsed.paginateMerged!==void 0&&parsed.paginateMerged!==expected.paginateMerged||parsed.group!==expected.group||parsed.archiveState!==expected.archiveState||parsed.sourceType!==expected.sourceType||parsed.sourceId!==expected.sourceId||parsed.conversationKind!==expected.conversationKind){throw new Error("invalid organized cursor")}const emitted=parseEmittedSessionIds(parsed.emitted);if(emitted===void 0){throw new Error("invalid organized cursor")}return{last,emitted}}catch{throw new InvalidCursorError(cursor,"organized")}}__name(parseOrganizedCursor,"parseOrganizedCursor");function encodeOrganizedCursor(last,group,archiveState,paginateMerged,sourceType,sourceId,conversationKind,emitted=[]){return Buffer.from(JSON.stringify({catalogKind:"organized",paginateMerged,group,archiveState,sourceType,sourceId,conversationKind,last,...emitted.length>0?{emitted}:{}}),"utf8").toString("base64url")}__name(encodeOrganizedCursor,"encodeOrganizedCursor");function parseLiveSessionCursor(cursor){if(cursor==="")return void 0;try{const parsed=JSON.parse(Buffer.from(cursor,"base64url").toString("utf8"));if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||typeof parsed.activityTime!=="number"||!Number.isFinite(parsed.activityTime)||typeof parsed.sessionId!=="string"||parsed.sessionId.length===0){throw new Error("invalid live cursor")}return parsed}catch{throw new InvalidCursorError(cursor,"live")}}__name(parseLiveSessionCursor,"parseLiveSessionCursor");function encodeLiveSessionCursor(last){return Buffer.from(JSON.stringify(last),"utf8").toString("base64url")}__name(encodeLiveSessionCursor,"encodeLiveSessionCursor");function matchesSessionMetadataSource(session,filter){if(filter.conversationKind==="standalone-top-level"&&classifyTopLevelConversationSource(session)?.kind!=="standalone"){return false}const sourceTypeMatches=filter.sourceType===void 0||session.sourceType===filter.sourceType||filter.sourceType==="default"&&(session.sourceType===void 0||session.sourceType==="qwen-live");return sourceTypeMatches&&(filter.sourceId===void 0||session.sourceId===filter.sourceId)}__name(matchesSessionMetadataSource,"matchesSessionMetadataSource");function parseMetadataSessionCursor(cursor,expected){if(cursor==="")return void 0;try{const parsed=JSON.parse(Buffer.from(cursor,"base64url").toString("utf8"));const last=parsed.last;if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||typeof last!=="object"||last===null||Array.isArray(last)||typeof last.activityTime!=="number"||!Number.isFinite(last.activityTime)||typeof last.sessionId!=="string"||last.sessionId.length===0||parsed.catalogKind!==void 0&&parsed.catalogKind!=="metadata"||parsed.paginateMerged!==void 0&&parsed.paginateMerged!==expected.paginateMerged||parsed.parentSessionId!==expected.parentSessionId||parsed.sourceType!==expected.sourceType||parsed.sourceId!==expected.sourceId||parsed.conversationKind!==expected.conversationKind||parsed.archiveState!==expected.archiveState){throw new Error("invalid metadata cursor")}const emitted=parseEmittedSessionIds(parsed.emitted);if(emitted===void 0){throw new Error("invalid metadata cursor")}return{last:{activityTime:last.activityTime,sessionId:last.sessionId},emitted}}catch{throw new InvalidCursorError(cursor,expected.parentSessionId!==void 0?"parent":"metadata")}}__name(parseMetadataSessionCursor,"parseMetadataSessionCursor");function encodeMetadataSessionCursor(last,filter,archiveState,paginateMerged,emitted=[]){return Buffer.from(JSON.stringify({catalogKind:"metadata",paginateMerged,...filter,archiveState,last,...emitted.length>0?{emitted}:{}}),"utf8").toString("base64url")}__name(encodeMetadataSessionCursor,"encodeMetadataSessionCursor");async function enrichWorktreeSidecars(bySessionId,sessionService,archiveState="active",signal){for(const[sessionId,summary]of bySessionId){signal?.throwIfAborted();if(summary.worktree)continue;let sidecar;try{const sidecarPath=sessionService.getWorktreeSessionPathForArchiveState(sessionId,archiveState);sidecar=signal?await readWorktreeSession(sidecarPath,{signal}):await readWorktreeSession(sidecarPath)}catch{signal?.throwIfAborted();sidecar=null}if(sidecar&&await readWorktreeSessionMarker(sidecar.worktreePath)===sessionId){bySessionId.set(sessionId,{...summary,worktree:{slug:sidecar.slug,path:sidecar.worktreePath,branch:sidecar.worktreeBranch}})}}}__name(enrichWorktreeSidecars,"enrichWorktreeSidecars");async function enrichPrSidecars(bySessionId,sessionService,archiveState,signal){for(const[sessionId,summary]of bySessionId){signal?.throwIfAborted();let sidecar;try{const sidecarPath=sessionService.getPrSessionPathForArchiveState(sessionId,archiveState);sidecar=signal?await readSessionPrs(sidecarPath,{signal}):await readSessionPrs(sidecarPath)}catch{signal?.throwIfAborted();sidecar=null}if(sidecar){bySessionId.set(sessionId,{...summary,prs:sidecarToPrInfos(sidecar)})}}}__name(enrichPrSidecars,"enrichPrSidecars");function toSummary(item){return{sessionId:item.sessionId,workspaceCwd:item.cwd,createdAt:item.startTime,updatedAt:new Date(item.mtime).toISOString(),displayName:item.customTitle||item.prompt,...item.customTitle&&item.titleSource?{titleSource:item.titleSource}:{},...item.parentSessionId?{parentSessionId:item.parentSessionId}:{},...item.sourceType?{sourceType:item.sourceType}:{},...item.sourceId!==void 0?{sourceId:item.sourceId}:{},clientCount:0,hasActivePrompt:false,isArchived:item.isArchived===true}}__name(toSummary,"toSummary");function mergeLiveSessionSummary(existing,live){const merged={...existing,...live,createdAt:existing.createdAt,displayName:live.displayName??existing.displayName,parentSessionId:existing.parentSessionId??live.parentSessionId,sourceType:existing.sourceType??live.sourceType,sourceId:existing.sourceType!==void 0?existing.sourceId:live.sourceId,updatedAt:laterActivityTimestamp(live.updatedAt,existing.updatedAt),clientCount:live.clientCount,hasActivePrompt:live.hasActivePrompt,backgroundTurn:live.backgroundTurn,hasRunningBackgroundTasks:live.hasRunningBackgroundTasks,isArchived:false};if(existing.prs||live.prs){merged.prs=mergeSummaryPrs(existing.prs,live.prs)}return merged}__name(mergeLiveSessionSummary,"mergeLiveSessionSummary");function sidecarToPrInfos(sidecar){return sidecar.map(toSessionPrInfo)}__name(sidecarToPrInfos,"sidecarToPrInfos");function mergeSummaryPrs(persistedPrs,livePrs){const live=livePrs??[];const persisted=persistedPrs??[];const liveByNumber=new Map(live.map(l=>[l.number,l]));const persistedNumbers=new Set(persisted.map(p=>p.number));const consumedLive=new Set;const ordered=[];for(const p of persisted){const liveEntry=liveByNumber.get(p.number);if(!liveEntry){ordered.push(p);continue}const samePr=canonicalSessionPrUrl(p.url)===canonicalSessionPrUrl(liveEntry.url);const matchedTwinExists=persisted.some(q=>q.number===p.number&&canonicalSessionPrUrl(q.url)===canonicalSessionPrUrl(liveEntry.url));if(!samePr&&matchedTwinExists)continue;if(consumedLive.has(p.number))continue;consumedLive.add(p.number);ordered.push(samePr?{...liveEntry,...p.state?{state:p.state}:{},...p.issues?{issues:p.issues}:{}}:p)}for(const liveEntry of live){if(!persistedNumbers.has(liveEntry.number)&&persisted.length<SESSION_PR_LIST_LIMIT){ordered.push(liveEntry)}}return ordered.slice(-SESSION_PR_LIST_LIMIT)}__name(mergeSummaryPrs,"mergeSummaryPrs");async function liveOnlySummary(live,sessionService,signal){const summary={...live,createdAt:live.createdAt,clientCount:live.clientCount,hasActivePrompt:live.hasActivePrompt,backgroundTurn:live.backgroundTurn,hasRunningBackgroundTasks:live.hasRunningBackgroundTasks,isArchived:false};let sidecar;try{const sidecarPath=sessionService.getPrSessionPathForArchiveState(live.sessionId,"active");sidecar=signal?await readSessionPrs(sidecarPath,{signal}):await readSessionPrs(sidecarPath)}catch{signal?.throwIfAborted();sidecar=null}if(sidecar){summary.prs=mergeSummaryPrs(sidecarToPrInfos(sidecar),live.prs)}return summary}__name(liveOnlySummary,"liveOnlySummary");function clonePersistedSummary(session){return{...session,...session.worktree?{worktree:{...session.worktree}}:{}}}__name(clonePersistedSummary,"clonePersistedSummary");async function loadAllPersistedSummaries(sessionService,archiveState,signal){const scanStartedAt=performance.now();signal.throwIfAborted();const sessions=[];let truncated=false;let scanPages=0;let cursor;do{scanPages+=1;const page=await sessionService.listSessions({cursor,size:1e4,archiveState,signal,excludeSourceTypes:[...HIDDEN_CATALOG_SOURCE_TYPES]});signal.throwIfAborted();const remaining=MAX_ORGANIZED_SESSIONS-sessions.length;sessions.push(...page.items.slice(0,remaining).map(toSummary));cursor=page.nextCursor;if(page.items.length===0){break}if(page.items.length>remaining||sessions.length>=MAX_ORGANIZED_SESSIONS&&cursor!==void 0){writeStderrLine(`qwen serve: organized session list truncated at ${MAX_ORGANIZED_SESSIONS} sessions`);truncated=true;break}}while(cursor!==void 0);const bySessionId=new Map(sessions.map(session=>[session.sessionId,session]));await enrichWorktreeSidecars(bySessionId,sessionService,archiveState,signal);await enrichPrSidecars(bySessionId,sessionService,archiveState,signal);signal.throwIfAborted();return{sessions:[...bySessionId.values()],truncated,scanPages,scanDurationMs:Math.max(0,performance.now()-scanStartedAt)}}__name(loadAllPersistedSummaries,"loadAllPersistedSummaries");async function listAllPersistedSummaries(sessionService,workspaceCwd,archiveState,runtimeBaseDir,queryKind,signal){const lookup=persistedSessionListCache.lookup({runtimeBaseDir,workspaceCwd,archiveState},loadSignal=>loadAllPersistedSummaries(sessionService,archiveState,loadSignal),{signal});addDaemonRequestAttribute("qwen-code.daemon.session_list.cache_status",lookup.status);addDaemonRequestAttribute("qwen-code.daemon.session_list.archive_state",archiveState);addDaemonRequestAttribute("qwen-code.daemon.session_list.query_kind",queryKind);if(lookup.cacheAgeMs!==void 0){addDaemonRequestAttribute("qwen-code.daemon.session_list.cache_age_ms",lookup.cacheAgeMs)}const snapshot=await lookup.promise;signal?.throwIfAborted();addDaemonRequestAttribute("qwen-code.daemon.session_list.persisted_sessions",snapshot.sessions.length);addDaemonRequestAttribute("qwen-code.daemon.session_list.scan_pages",snapshot.scanPages);addDaemonRequestAttribute("qwen-code.daemon.session_list.truncated",snapshot.truncated);if(lookup.status!=="cache_hit"){addDaemonRequestAttribute("qwen-code.daemon.session_list.scan_duration_ms",snapshot.scanDurationMs)}return snapshot}__name(listAllPersistedSummaries,"listAllPersistedSummaries");function getSummaryActivityTime(session){const time=Date.parse(session.updatedAt??session.createdAt);return Number.isFinite(time)?time:0}__name(getSummaryActivityTime,"getSummaryActivityTime");function getLiveSessionCursorKey(session){return{activityTime:getSummaryActivityTime(session),sessionId:session.sessionId}}__name(getLiveSessionCursorKey,"getLiveSessionCursorKey");function compareLiveSessionCursorKeys(a,b){const byTime=b.activityTime-a.activityTime;if(byTime!==0)return byTime;return a.sessionId.localeCompare(b.sessionId)}__name(compareLiveSessionCursorKeys,"compareLiveSessionCursorKeys");function compareOrganizedSessions(activityTimeById,a,b){return compareOrganizedCursorKeys(getOrganizedCursorKey(activityTimeById,a),getOrganizedCursorKey(activityTimeById,b))}__name(compareOrganizedSessions,"compareOrganizedSessions");function getOrganizedCursorKey(activityTimeById,session){return{isPinned:session.isPinned===true,activityTime:activityTimeById.get(session.sessionId)??0,sessionId:session.sessionId}}__name(getOrganizedCursorKey,"getOrganizedCursorKey");function compareOrganizedCursorKeys(a,b){const byPinned=Number(b.isPinned)-Number(a.isPinned);if(byPinned!==0)return byPinned;const byTime=b.activityTime-a.activityTime;if(byTime!==0)return byTime;return a.sessionId.localeCompare(b.sessionId)}__name(compareOrganizedCursorKeys,"compareOrganizedCursorKeys");function nextEmittedSessionIds(options){const candidates=new Set(options.carried);for(const row of options.page){if(options.liveSessionIds.has(row.sessionId)){candidates.add(row.sessionId)}}const kept=[];for(const sessionId of candidates){const row=options.listedById.get(sessionId);if(!row){kept.push({sessionId,persistedTime:Number.NEGATIVE_INFINITY});continue}const persistedTime=options.persistedTimeById.get(sessionId);if(persistedTime===void 0){kept.push({sessionId,persistedTime:Number.NEGATIVE_INFINITY});continue}if(options.reenters(row,persistedTime)){kept.push({sessionId,persistedTime})}}if(kept.length>MAX_EMITTED_CURSOR_SESSION_IDS){kept.sort((a,b)=>a.persistedTime-b.persistedTime);kept.length=MAX_EMITTED_CURSOR_SESSION_IDS}return kept.map(entry=>entry.sessionId)}__name(nextEmittedSessionIds,"nextEmittedSessionIds");function applyOrganization(session,organization){return{...session,groupId:organization?.groupId??null,color:organization?.color??null,isPinned:organization?.isPinned===true,...organization?.pinnedAt!==void 0?{pinnedAt:organization.pinnedAt}:{}}}__name(applyOrganization,"applyOrganization");async function listOrganizedWorkspaceSessionsForResponse(bridge,workspaceCwd,options,pageSize,readOptions){const archiveState=options.archiveState??"active";const sessionService=new SessionService(workspaceCwd);const organizationService=createSessionOrganizationService(workspaceCwd);readOptions.signal?.throwIfAborted();const snapshot=await organizationService.readSnapshot();readOptions.signal?.throwIfAborted();const knownGroupIds=new Set(snapshot.groups.map(group2=>group2.id));const group=options.group??"all";if(group!=="all"&&group!=="pinned"&&group!=="ungrouped"&&!knownGroupIds.has(group)){throw new SessionOrganizationError(`Group not found: ${group}`,"group_not_found","group")}const cursor=options.cursor!==void 0?parseOrganizedCursor(options.cursor,{paginateMerged:readOptions.paginateMerged===true,group,archiveState,sourceType:options.sourceType,sourceId:options.sourceId,conversationKind:options.conversationKind}):void 0;const cursorKey=cursor?.last;const emittedBeforePage=new Set(cursor?.emitted??[]);const isFirstPage=cursorKey===void 0;let liveMergeFailed=false;const bySessionId=new Map;const persisted=await listAllPersistedSummaries(sessionService,workspaceCwd,archiveState,readOptions.runtimeBaseDir,"organized",readOptions.signal);readOptions.signal?.throwIfAborted();for(const session of persisted.sessions){bySessionId.set(session.sessionId,applyOrganization(clonePersistedSummary(session),snapshot.sessions.get(session.sessionId)))}const persistedTimeById=new Map(persisted.sessions.map(session=>[session.sessionId,getSummaryActivityTime(session)]));const liveSessionIds=new Set;if(readOptions.mergeLive!==false&&archiveState!=="archived"){try{const liveSessions=bridge.listWorkspaceSessions(workspaceCwd);for(const live of liveSessions){liveSessionIds.add(live.sessionId);const existing=bySessionId.get(live.sessionId);const organization=snapshot.sessions.get(live.sessionId);if(existing){bySessionId.set(live.sessionId,applyOrganization(mergeLiveSessionSummary(existing,live),organization))}else if((isFirstPage||readOptions.paginateMerged)&&(!persisted.truncated||!await(readOptions.signal?sessionService.sessionExists(live.sessionId,{signal:readOptions.signal}):sessionService.sessionExists(live.sessionId)))){bySessionId.set(live.sessionId,applyOrganization(await liveOnlySummary(live,sessionService,readOptions.signal),organization))}}}catch(error){readOptions.signal?.throwIfAborted();liveMergeFailed=true;writeStderrLine(`qwen serve: organized session list live merge failed; using persisted sessions only: ${error instanceof Error?error.message:String(error)}`)}}const filtered=[...bySessionId.values()].filter(session=>{if(isHiddenCatalogSource(session.sourceType))return false;if(!matchesSessionMetadataSource(session,options))return false;if(group==="all")return true;if(group==="pinned")return session.isPinned===true;if(group==="ungrouped")return session.groupId==null&&session.color==null;return session.color==null&&session.groupId===group});readOptions.signal?.throwIfAborted();const activityTimeById=new Map(filtered.map(session=>[session.sessionId,getSummaryActivityTime(session)]));filtered.sort((a,b)=>compareOrganizedSessions(activityTimeById,a,b));readOptions.signal?.throwIfAborted();const afterCursor=cursorKey===void 0?filtered:filtered.filter(session=>!emittedBeforePage.has(session.sessionId)&&compareOrganizedCursorKeys(cursorKey,getOrganizedCursorKey(activityTimeById,session))<0);const page=afterCursor.slice(0,pageSize);let nextCursor;if(page.length<afterCursor.length){const boundary=getOrganizedCursorKey(activityTimeById,page[page.length-1]);const emitted=nextEmittedSessionIds({carried:emittedBeforePage,page,liveSessionIds,listedById:new Map(filtered.map(session=>[session.sessionId,session])),persistedTimeById,reenters:__name((row,persistedTime)=>[true,false].some(isPinned=>compareOrganizedCursorKeys(boundary,{isPinned,activityTime:persistedTime,sessionId:row.sessionId})<0),"reenters")});nextCursor=encodeOrganizedCursor(boundary,group,archiveState,readOptions.paginateMerged===true,options.sourceType,options.sourceId,options.conversationKind,emitted)}return{sessions:page,...readOptions.includeGroups?{groups:{groups:snapshot.groups,colorOptions:[...GROUP_COLOR_OPTIONS]}}:{},...nextCursor!==void 0?{nextCursor}:{},...liveMergeFailed?{liveMergeFailed:true}:{},...persisted.truncated?{truncated:true}:{}}}__name(listOrganizedWorkspaceSessionsForResponse,"listOrganizedWorkspaceSessionsForResponse");async function listWorkspaceSessionsByMetadataForResponse(bridge,workspaceCwd,options,pageSize,filter,readOptions){const archiveState=options.archiveState??"active";const sessionService=new SessionService(workspaceCwd);const bySessionId=new Map;const persisted=await listAllPersistedSummaries(sessionService,workspaceCwd,archiveState,readOptions.runtimeBaseDir,"metadata",readOptions.signal);readOptions.signal?.throwIfAborted();const canonicalizeStandaloneIds=filter.conversationKind==="standalone-top-level";const conflictedStandaloneIds=new Set;const persistedTimeById=new Map;for(const session of persisted.sessions){let sessionId=session.sessionId;if(canonicalizeStandaloneIds){const parsed=parseCallerSuppliedSessionId(sessionId);if(parsed.kind!=="valid")continue;sessionId=parsed.sessionId;if(conflictedStandaloneIds.has(sessionId))continue;if(bySessionId.has(sessionId)){bySessionId.delete(sessionId);persistedTimeById.delete(sessionId);conflictedStandaloneIds.add(sessionId);continue}}bySessionId.set(sessionId,{...clonePersistedSummary(session),sessionId});persistedTimeById.set(sessionId,getSummaryActivityTime(session))}const liveSessionIds=new Set;let liveMergeFailed=false;if(readOptions.mergeLive!==false&&archiveState!=="archived"){try{for(const live of bridge.listWorkspaceSessions(workspaceCwd)){let sessionId=live.sessionId;if(canonicalizeStandaloneIds){const parsed=parseCallerSuppliedSessionId(sessionId);if(parsed.kind!=="valid"||conflictedStandaloneIds.has(parsed.sessionId)){continue}sessionId=parsed.sessionId}const canonicalLive=sessionId===live.sessionId?live:{...live,sessionId};liveSessionIds.add(sessionId);const existing=bySessionId.get(sessionId);if(existing){bySessionId.set(sessionId,mergeLiveSessionSummary(existing,canonicalLive))}else if(!persisted.truncated||!await(readOptions.signal?sessionService.sessionExists(sessionId,{signal:readOptions.signal}):sessionService.sessionExists(sessionId))){bySessionId.set(sessionId,await liveOnlySummary(canonicalLive,sessionService,readOptions.signal))}}}catch(error){readOptions.signal?.throwIfAborted();liveMergeFailed=true;writeStderrLine(`qwen serve: session metadata filter live merge failed; using persisted sessions only: ${error instanceof Error?error.message:String(error)}`)}}const matches=[...bySessionId.values()].filter(session=>!isHiddenCatalogSource(session.sourceType)&&(filter.parentSessionId===void 0||session.parentSessionId===filter.parentSessionId)&&matchesSessionMetadataSource(session,filter)).sort((a,b)=>compareLiveSessionCursorKeys(getLiveSessionCursorKey(a),getLiveSessionCursorKey(b)));readOptions.signal?.throwIfAborted();const cursor=options.cursor!==void 0&&options.cursor!==""?parseMetadataSessionCursor(options.cursor,{paginateMerged:readOptions.paginateMerged===true,...filter,archiveState}):void 0;const cursorKey=cursor?.last;const emittedBeforePage=new Set(cursor?.emitted??[]);const afterCursor=cursorKey===void 0?matches:matches.filter(session=>!emittedBeforePage.has(session.sessionId)&&compareLiveSessionCursorKeys(cursorKey,getLiveSessionCursorKey(session))<0);const page=afterCursor.slice(0,pageSize);let nextCursor;if(page.length<afterCursor.length){const boundary=getLiveSessionCursorKey(page[page.length-1]);const emitted=nextEmittedSessionIds({carried:emittedBeforePage,page,liveSessionIds,listedById:new Map(matches.map(session=>[session.sessionId,session])),persistedTimeById,reenters:__name((row,persistedTime)=>compareLiveSessionCursorKeys(boundary,{activityTime:persistedTime,sessionId:row.sessionId})<0,"reenters")});nextCursor=encodeMetadataSessionCursor(boundary,filter,archiveState,readOptions.paginateMerged===true,emitted)}return{sessions:page,...nextCursor!==void 0?{nextCursor}:{},...liveMergeFailed?{liveMergeFailed:true}:{},...persisted.truncated?{truncated:true}:{}}}__name(listWorkspaceSessionsByMetadataForResponse,"listWorkspaceSessionsByMetadataForResponse");async function listWorkspaceSessionsForResponse(bridge,workspaceCwd,options,readOptions={}){readOptions.signal?.throwIfAborted();const runtimeBaseDir=new Storage(workspaceCwd,readOptions.runtimeBaseDir).getRuntimeBaseDir();const result=await Storage.runWithResolvedRuntimeBaseDir(runtimeBaseDir,()=>listWorkspaceSessionsForResponseInRuntime(bridge,workspaceCwd,options,{...readOptions.mergeLive!==void 0?{mergeLive:readOptions.mergeLive}:{},...readOptions.paginateMerged!==void 0?{paginateMerged:readOptions.paginateMerged}:{},...readOptions.includeGroups!==void 0?{includeGroups:readOptions.includeGroups}:{},...readOptions.signal!==void 0?{signal:readOptions.signal}:{},runtimeBaseDir}));readOptions.signal?.throwIfAborted();return result}__name(listWorkspaceSessionsForResponse,"listWorkspaceSessionsForResponse");async function listWorkspaceSessionsForResponseInRuntime(bridge,workspaceCwd,options,readOptions){readOptions.signal?.throwIfAborted();const rawSize=options?.size;const requestedSize=typeof rawSize==="number"&&Number.isSafeInteger(rawSize)?rawSize:DEFAULT_SESSION_PAGE_SIZE;const pageSize=Math.min(Math.max(requestedSize,1),MAX_SESSION_PAGE_SIZE);if(options?.view==="organized"){return listOrganizedWorkspaceSessionsForResponse(bridge,workspaceCwd,options,pageSize,readOptions)}if(readOptions.paginateMerged||options?.parentSessionId!==void 0||options?.sourceType!==void 0||options?.conversationKind!==void 0){return listWorkspaceSessionsByMetadataForResponse(bridge,workspaceCwd,options??{},pageSize,{...options?.parentSessionId!==void 0?{parentSessionId:options.parentSessionId}:{},...options?.sourceType!==void 0?{sourceType:options.sourceType}:{},...options?.sourceId!==void 0?{sourceId:options.sourceId}:{},...options?.conversationKind!==void 0?{conversationKind:options.conversationKind}:{}},readOptions)}let numericCursor;if(options?.cursor!=null){numericCursor=parseSessionCursor(options.cursor)}const isFirstPage=numericCursor===void 0;const sessionService=new SessionService(workspaceCwd);const archiveState=options?.archiveState??"active";const persisted=await sessionService.listSessions({cursor:numericCursor,size:pageSize,archiveState,excludeSourceTypes:[...HIDDEN_CATALOG_SOURCE_TYPES],...readOptions.signal?{signal:readOptions.signal}:{}});readOptions.signal?.throwIfAborted();const bySessionId=new Map;for(const item of persisted.items){bySessionId.set(item.sessionId,toSummary(item))}await enrichWorktreeSidecars(bySessionId,sessionService,archiveState,readOptions.signal);await enrichPrSidecars(bySessionId,sessionService,archiveState,readOptions.signal);readOptions.signal?.throwIfAborted();if(archiveState==="archived"||readOptions.mergeLive===false){const sessions2=[...bySessionId.values()];const nextCursor2=persisted.nextCursor!=null?String(persisted.nextCursor):void 0;return{sessions:sessions2,nextCursor:nextCursor2}}const liveSessions=bridge.listWorkspaceSessions(workspaceCwd).filter(session=>!isHiddenCatalogSource(session.sourceType));for(const live of liveSessions){const existing=bySessionId.get(live.sessionId);if(existing){bySessionId.set(live.sessionId,mergeLiveSessionSummary(existing,live))}else if(isFirstPage&&(persisted.nextCursor==null||!await(readOptions.signal?sessionService.sessionExists(live.sessionId,{signal:readOptions.signal}):sessionService.sessionExists(live.sessionId)))){bySessionId.set(live.sessionId,await liveOnlySummary(live,sessionService,readOptions.signal))}}const sessions=[...bySessionId.values()].sort((a,b)=>{const aTime=Date.parse(a.updatedAt??a.createdAt);const bTime=Date.parse(b.updatedAt??b.createdAt);return bTime-aTime});readOptions.signal?.throwIfAborted();const nextCursor=persisted.nextCursor!=null?String(persisted.nextCursor):void 0;return{sessions,nextCursor}}__name(listWorkspaceSessionsForResponseInRuntime,"listWorkspaceSessionsForResponseInRuntime");async function listLiveWorkspaceSessionsForResponse(bridge,workspaceCwd,options,readOptions={}){const runtimeBaseDir=new Storage(workspaceCwd,readOptions.runtimeBaseDir).getRuntimeBaseDir();return Storage.runWithResolvedRuntimeBaseDir(runtimeBaseDir,async()=>{const rawSize=options?.size;const requestedSize=typeof rawSize==="number"&&Number.isSafeInteger(rawSize)?rawSize:DEFAULT_SESSION_PAGE_SIZE;const pageSize=Math.min(Math.max(requestedSize,1),MAX_SESSION_PAGE_SIZE);const cursorKey=options?.cursor!==void 0?parseLiveSessionCursor(options.cursor):void 0;const sessions=bridge.listWorkspaceSessions(workspaceCwd).filter(session=>!isHiddenCatalogSource(session.sourceType)).sort((a,b)=>compareLiveSessionCursorKeys(getLiveSessionCursorKey(a),getLiveSessionCursorKey(b)));const afterCursor=cursorKey===void 0?sessions:sessions.filter(session=>compareLiveSessionCursorKeys(cursorKey,getLiveSessionCursorKey(session))<0);const page=afterCursor.slice(0,pageSize);const sessionService=new SessionService(workspaceCwd);const enriched=await Promise.all(page.map(summary=>liveOnlySummary(summary,sessionService,readOptions.signal)));const nextCursor=page.length<afterCursor.length?encodeLiveSessionCursor(getLiveSessionCursorKey(page[page.length-1])):void 0;return{sessions:enriched,...nextCursor!==void 0?{nextCursor}:{}}})}__name(listLiveWorkspaceSessionsForResponse,"listLiveWorkspaceSessionsForResponse");async function searchWorkspaceSessionsForResponse(workspaceCwd,query,options={},readOptions={}){readOptions.signal?.throwIfAborted();const runtimeBaseDir=new Storage(workspaceCwd,readOptions.runtimeBaseDir).getRuntimeBaseDir();return Storage.runWithResolvedRuntimeBaseDir(runtimeBaseDir,async()=>{const sessionService=new SessionService(workspaceCwd);const hits=await sessionService.searchSessionContent(query,{...options.maxResults!==void 0?{maxResults:options.maxResults}:{},...readOptions.signal?{signal:readOptions.signal}:{}});const bySessionId=new Map;const organizationSnapshot=await createSessionOrganizationService(workspaceCwd).readSnapshot();readOptions.signal?.throwIfAborted();for(const hit of hits){readOptions.signal?.throwIfAborted();const item=await sessionService.getSessionListItem(hit.sessionId);if(item&&!isHiddenCatalogSource(item.sourceType))bySessionId.set(hit.sessionId,applyOrganization(toSummary(item),organizationSnapshot.sessions.get(hit.sessionId)))}await enrichWorktreeSidecars(bySessionId,sessionService,"active",readOptions.signal);await enrichPrSidecars(bySessionId,sessionService,"active",readOptions.signal);readOptions.signal?.throwIfAborted();const results=[];for(const hit of hits){const session=bySessionId.get(hit.sessionId);if(session)results.push({session,snippet:hit.snippet})}return{results}})}__name(searchWorkspaceSessionsForResponse,"searchWorkspaceSessionsForResponse");async function getWorkspaceSessionInfoForResponse(bridge,workspaceCwd,options={}){const counts=await new SessionService(workspaceCwd).getSessionInfoCounts({excludeSourceTypes:[...HIDDEN_CATALOG_SOURCE_TYPES]});return{active:counts.active,archived:counts.archived,total:counts.total,...options.includeLive===false?{}:{live:bridge.listWorkspaceSessions(workspaceCwd).filter(session=>!isHiddenCatalogSource(session.sourceType)).length},expensive:true,cost:"disk_scan",...counts.truncated?{truncated:true}:{}}}__name(getWorkspaceSessionInfoForResponse,"getWorkspaceSessionInfoForResponse");function parseSessionPageSizeQuery(raw){if(typeof raw!=="string")return void 0;const trimmed=raw.trim();if(!/^[+-]?\d+$/.test(trimmed))return void 0;const parsed=Number.parseInt(trimmed,10);if(!Number.isFinite(parsed))return void 0;if(Number.isSafeInteger(parsed))return parsed;return trimmed.startsWith("-")?1:MAX_SESSION_PAGE_SIZE}__name(parseSessionPageSizeQuery,"parseSessionPageSizeQuery");init_esbuild_shims();import fs2 from"node:fs";init_esbuild_shims();import{access}from"node:fs/promises";function isBoundTask(task){return typeof task.sessionId==="string"&&task.sessionId.length>0}__name(isBoundTask,"isBoundTask");async function disableTasksForSessions(projectRoot,sessionIds,options={}){if(sessionIds.length===0)return;const targets=new Set(sessionIds);await updateCronTasks(projectRoot,tasks=>{let changed=false;const next=tasks.map(task=>{if(isBoundTask(task)&&targets.has(task.sessionId)&&task.enabled!==false){changed=true;return{...task,enabled:false,disabledByArchive:true}}return task});return changed?next:tasks},options)}__name(disableTasksForSessions,"disableTasksForSessions");async function enableTasksForSessions(projectRoot,sessionIds,now=Date.now(),options={}){if(sessionIds.length===0)return;const targets=new Set(sessionIds);await updateCronTasks(projectRoot,tasks=>{let changed=false;const next=tasks.map(task=>{if(isBoundTask(task)&&targets.has(task.sessionId)&&task.enabled===false&&task.disabledByArchive===true){changed=true;const resumed={...task,enabled:true};delete resumed.disabledByArchive;const minute=now-now%6e4;if(resumed.recurring){resumed.lastFiredAt=minute}else{resumed.createdAt=now;resumed.lastFiredAt=minute}return resumed}return task});return changed?next:tasks},options)}__name(enableTasksForSessions,"enableTasksForSessions");async function removeTasksForSessions(projectRoot,sessionIds,options={}){if(sessionIds.length===0)return;try{await access(getCronFilePath(projectRoot))}catch(error){if(error.code==="ENOENT")return;throw error}const targets=new Set(sessionIds.map(cronTaskSessionDeletionId));const removedIds=[];await updateCronTasks(projectRoot,tasks=>{const next=tasks.filter(task=>{if(!isBoundTask(task)||!targets.has(cronTaskSessionDeletionId(task.sessionId)))return true;removedIds.push(task.id);return false});return next.length===tasks.length?tasks:next},{...options,deletionIds:__name(()=>[...removedIds,...targets],"deletionIds")})}__name(removeTasksForSessions,"removeTasksForSessions");init_esbuild_shims();import fs from"node:fs";import*as fsp from"node:fs/promises";import path2 from"node:path";init_esbuild_shims();var worktreeOwnershipOpTails=new Map;async function acquireWorktreeOwnershipOp(worktreeKey){const previous=worktreeOwnershipOpTails.get(worktreeKey);let releaseGate;const gate=new Promise(resolve=>{releaseGate=resolve});const tail=(previous??Promise.resolve()).then(()=>gate);worktreeOwnershipOpTails.set(worktreeKey,tail);if(previous){await previous}let released=false;return()=>{if(released)return;released=true;releaseGate();if(worktreeOwnershipOpTails.get(worktreeKey)===tail){worktreeOwnershipOpTails.delete(worktreeKey)}}}__name(acquireWorktreeOwnershipOp,"acquireWorktreeOwnershipOp");function canonicalPath(candidate){try{return fs.realpathSync(candidate)}catch{return candidate}}__name(canonicalPath,"canonicalPath");function logWarning(message){writeStderrLine(`qwen serve: ${message}`)}__name(logWarning,"logWarning");function logWorktreeCleanupPreserve(sessionId,reason){logWarning(`worktree cleanup preserved checkout action=delete session=${safeLogValue(sessionId)} reason=${safeLogValue(reason)}`)}__name(logWorktreeCleanupPreserve,"logWorktreeCleanupPreserve");async function preclassifyWorktreeCleanup(service,sessionId,runtimeWorkspaceCwd){let sidecarPath=service.getWorktreeSessionPath(sessionId);let sidecar=await readWorktreeSessionStrict(sidecarPath);if(sidecar.state==="missing"){const archivedPath=service.getWorktreeSessionPathForArchiveState(sessionId,"archived");if(archivedPath!==sidecarPath){sidecarPath=archivedPath;sidecar=await readWorktreeSessionStrict(sidecarPath)}}if(sidecar.state==="missing")return void 0;if(sidecar.state==="invalid"){logWorktreeCleanupPreserve(sessionId,`unreadable sidecar (${sidecar.reason})`);return void 0}const session=sidecar.session;if(session.workspaceCwd===void 0)return void 0;if(session.supersededBy!==void 0)return void 0;if(!path2.isAbsolute(session.workspaceCwd)||!path2.isAbsolute(session.originalCwd)){logWorktreeCleanupPreserve(sessionId,"sidecar base is not an absolute path");return void 0}if(runtimeWorkspaceCwd!==void 0){if(canonicalPath(session.workspaceCwd)!==canonicalPath(runtimeWorkspaceCwd)){logWorktreeCleanupPreserve(sessionId,"sidecar belongs to another workspace");return void 0}const workspaceRoots=[canonicalPath(runtimeWorkspaceCwd)];try{const repoTop=await new GitWorktreeService(runtimeWorkspaceCwd).getRepoTopLevel();if(repoTop&&canonicalPath(repoTop)!==workspaceRoots[0]){workspaceRoots.push(canonicalPath(repoTop))}}catch{}if(!workspaceRoots.includes(canonicalPath(session.originalCwd))){logWorktreeCleanupPreserve(sessionId,"sidecar original cwd is outside the accepted roots");return void 0}}return{sessionId,sidecar:session,sidecarPath,lockKey:canonicalPath(session.worktreePath)}}__name(preclassifyWorktreeCleanup,"preclassifyWorktreeCleanup");function acquireWorktreeCleanupLock(plan){return acquireWorktreeOwnershipOp(plan.lockKey)}__name(acquireWorktreeCleanupLock,"acquireWorktreeCleanupLock");async function worktreeAllowedRoots(workspaceCwd,originalCwd){const roots=new Set;for(const base of[workspaceCwd,originalCwd]){if(!path2.isAbsolute(base))continue;roots.add(path2.join(base,".qwen","worktrees"));try{const repoTop=await new GitWorktreeService(base).getRepoTopLevel();if(repoTop){roots.add(path2.join(repoTop,".qwen","worktrees"))}}catch{}}return[...roots]}__name(worktreeAllowedRoots,"worktreeAllowedRoots");async function verifyWorktreeCleanupOwnership(plan){const{sessionId,sidecar}=plan;const locked=await readWorktreeSessionStrict(plan.sidecarPath);if(locked.state!=="valid"){return{ok:false,reason:locked.state==="missing"?"sidecar disappeared before delete":`unreadable sidecar (${locked.reason})`}}const current=locked.session;if(current.workspaceCwd===void 0||current.supersededBy!==void 0||current.slug!==sidecar.slug||current.worktreePath!==sidecar.worktreePath||current.originalCwd!==sidecar.originalCwd||current.workspaceCwd!==sidecar.workspaceCwd){return{ok:false,reason:"sidecar changed before delete"}}const marker=await readWorktreeSessionMarkerStrict(plan.lockKey);if(marker.state!=="valid"||marker.sessionId!==sessionId){return{ok:false,reason:marker.state==="valid"?"marker names another session":`marker ${marker.state}`}}const allowedRoots=await worktreeAllowedRoots(current.workspaceCwd,current.originalCwd);const contained=allowedRoots.some(root=>{try{const realRoot=fs.realpathSync(root);return plan.lockKey===realRoot||plan.lockKey.startsWith(realRoot+path2.sep)}catch{return false}});if(!contained){return{ok:false,reason:"checkout outside workspace worktree roots"}}const chatsDir=path2.dirname(plan.sidecarPath);const ownFile=path2.basename(plan.sidecarPath);let entries;try{entries=await fsp.readdir(chatsDir)}catch(error){return{ok:false,reason:`sidecar scan failed: ${error instanceof Error?error.message:String(error)}`}}for(const entry of entries){if(!entry.endsWith(".worktree.json")||entry===ownFile)continue;const other=await readWorktreeSessionStrict(path2.join(chatsDir,entry));if(other.state==="missing")continue;if(other.state==="invalid"){return{ok:false,reason:`unreadable sibling sidecar ${entry}`}}if(canonicalPath(other.session.worktreePath)===plan.lockKey){if(other.session.supersededBy===sessionId)continue;return{ok:false,reason:`checkout shared with ${entry}`}}}const removalTarget=canonicalPath(new GitWorktreeService(current.originalCwd).getUserWorktreePath(current.slug));if(removalTarget!==plan.lockKey){return{ok:false,reason:"slug does not resolve to the verified checkout"}}plan.sidecar=current;return{ok:true}}__name(verifyWorktreeCleanupOwnership,"verifyWorktreeCleanupOwnership");async function checkoutStillPopulated(worktreePath){try{return(await fsp.readdir(worktreePath)).length>0}catch{return false}}__name(checkoutStillPopulated,"checkoutStillPopulated");async function executeWorktreeCleanup(plan){const{sessionId,sidecar}=plan;const marker=await readWorktreeSessionMarkerStrict(plan.lockKey);if(marker.state!=="valid"||marker.sessionId!==sessionId){logWorktreeCleanupPreserve(sessionId,"marker changed after delete");return}if(await worktreeHasWork(plan.lockKey)){logWorktreeCleanupPreserve(sessionId,"checkout has uncommitted work");return}const result=await new GitWorktreeService(sidecar.originalCwd).removeUserWorktree(sidecar.slug,{deleteBranch:true});if(!result.success){const errorText=result.error??"unknown error";if(await checkoutStillPopulated(plan.lockKey)){logWorktreeCleanupPreserve(sessionId,`checkout removal failed: ${errorText}`)}else{logWarning(`worktree cleanup removal failed, checkout may be partially deleted action=delete session=${safeLogValue(sessionId)} reason=${safeLogValue(errorText)}`)}return}if(result.branchPreserved){logWarning(`worktree cleanup removed checkout but kept branch action=delete session=${safeLogValue(sessionId)} slug=${safeLogValue(sidecar.slug)} branch=${safeLogValue(sidecar.worktreeBranch)} reason=unmerged commits`)}}__name(executeWorktreeCleanup,"executeWorktreeCleanup");var DaemonDrainingError=class extends Error{static{__name(this,"DaemonDrainingError")}name="DaemonDrainingError";code="daemon_draining";constructor(){super("The daemon is draining and no longer accepts session maintenance.")}};var SessionArchiveCoordinator=class{static{__name(this,"SessionArchiveCoordinator")}exclusive=new Set;shared=new Map;sharedDrains=new Map;maintenanceSealed=false;activeMaintenance=0;maintenanceDrain;assertNotTransitioning(sessionId){if(this.exclusive.has(normalizeSessionIdForLookup(sessionId))){throw new SessionArchivingError(sessionId)}}async runExclusiveMany(sessionIds,fn){if(this.maintenanceSealed){throw new DaemonDrainingError}const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];for(const sessionId of uniqueSessionIds){this.assertNotTransitioning(sessionId);if((this.shared.get(sessionId)??0)>0){throw new SessionArchivingError(sessionId,"shared")}}for(const sessionId of uniqueSessionIds){this.exclusive.add(sessionId)}this.activeMaintenance++;try{return await fn()}finally{for(const sessionId of uniqueSessionIds){this.exclusive.delete(sessionId)}this.activeMaintenance--;if(this.activeMaintenance===0){this.maintenanceDrain?.resolve();this.maintenanceDrain=void 0}}}async runExclusiveAfterShared(rawSessionId,fn){if(this.maintenanceSealed){throw new DaemonDrainingError}const sessionId=normalizeSessionIdForLookup(rawSessionId);this.assertNotTransitioning(sessionId);this.exclusive.add(sessionId);this.activeMaintenance++;try{const sharedCount=this.shared.get(sessionId)??0;if(sharedCount>0){let drain=this.sharedDrains.get(sessionId);if(!drain){let resolve;const promise=new Promise(done=>{resolve=done});drain={promise,resolve};this.sharedDrains.set(sessionId,drain)}await drain.promise}return await fn()}finally{this.sharedDrains.delete(sessionId);this.exclusive.delete(sessionId);this.activeMaintenance--;if(this.activeMaintenance===0){this.maintenanceDrain?.resolve();this.maintenanceDrain=void 0}}}sealMaintenanceAndWait(){this.maintenanceSealed=true;if(this.activeMaintenance===0){return Promise.resolve()}if(!this.maintenanceDrain){let resolve;const promise=new Promise(done=>{resolve=done});this.maintenanceDrain={promise,resolve}}return this.maintenanceDrain.promise}async runSharedMany(sessionIds,fn){if(this.maintenanceSealed){throw new DaemonDrainingError}const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];for(const sessionId of uniqueSessionIds){this.assertNotTransitioning(sessionId)}for(const sessionId of uniqueSessionIds){this.shared.set(sessionId,(this.shared.get(sessionId)??0)+1)}this.activeMaintenance++;try{return await fn()}finally{for(const sessionId of uniqueSessionIds){const count=(this.shared.get(sessionId)??1)-1;if(count<=0){this.shared.delete(sessionId);this.sharedDrains.get(sessionId)?.resolve();this.sharedDrains.delete(sessionId)}else{this.shared.set(sessionId,count)}}this.activeMaintenance--;if(this.activeMaintenance===0){this.maintenanceDrain?.resolve();this.maintenanceDrain=void 0}}}};async function runWithDaemonWriterLease(params){const{action,sessionId,service,mutate,mutationAppliedAfterError,afterMutationApplied}=params;let lease;try{const leaseOptions={processKind:"daemon",reclaimPolicy:"never",takeoverPolicy:"certified"};try{lease=await service.acquireSessionWriterLease(sessionId,leaseOptions)}catch(error){if(!(error instanceof SessionWriterUnavailableError)&&!(error instanceof SessionTranscriptChangedError)){throw error}lease=await service.acquireSealedManagedMaintenanceLease(sessionId)??await service.acquireSessionMaintenanceLease(sessionId,leaseOptions)}}catch(error){return{mutationApplied:false,error}}let value;let mutationApplied=false;let mutationError;try{const mutation=await mutate(()=>lease.assertOwnedAndUnchanged(),()=>lease.assertCleanupOwned());value=mutation.value;mutationApplied=mutation.mutationApplied}catch(error){mutationError=error;try{mutationApplied=await mutationAppliedAfterError()}catch{mutationApplied=false}}let maintenanceError;if(mutationApplied){try{await afterMutationApplied()}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=${action} workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}}let releaseError;try{await lease.release()}catch(error){releaseError=error}if(releaseError!==void 0){logMaintenanceLeaseReleaseFailure({action,workspace:service.getProjectRoot(),sessionId,error:releaseError,mutationApplied});if(mutationError!==void 0){logSessionArchiveWarning(`session maintenance mutation also failed action=${action} workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(mutationError))}`)}return{mutationApplied,error:releaseError,maintenanceError}}if(mutationError!==void 0){return{mutationApplied,error:mutationError,maintenanceError}}return{value,mutationApplied,maintenanceError}}__name(runWithDaemonWriterLease,"runWithDaemonWriterLease");function logMaintenanceLeaseReleaseFailure(params){const errorKind=typeof params.error==="object"&&params.error!==null&&typeof params.error.errorKind==="string"?params.error.errorKind:"unknown";logSessionArchiveWarning(`session maintenance lease release failed action=${params.action} workspace=${safeLogValue(params.workspace)} session=${safeLogValue(params.sessionId)} errorKind=${safeLogValue(errorKind)} mutationApplied=${params.mutationApplied}`)}__name(logMaintenanceLeaseReleaseFailure,"logMaintenanceLeaseReleaseFailure");async function classifySessionLocation(service,sessionId){return service.getMaintainableSessionLocation(sessionId)}__name(classifySessionLocation,"classifySessionLocation");function sessionLocationError(sessionId){const error=new SessionConflictError(sessionId);error.message=`Session "${sessionId}" exists in both active and archived directories. Retry with resolveConflicts: true to keep one copy.`;return error}__name(sessionLocationError,"sessionLocationError");function updateScheduledTaskForMaintenance(service,sessionId,action,assertCanMutate){if(action==="archive"){return disableTasksForSessions(service.getProjectRoot(),[sessionId],{assertCanCommit:assertCanMutate})}if(action==="unarchive"){return enableTasksForSessions(service.getProjectRoot(),[sessionId],Date.now(),{assertCanCommit:assertCanMutate})}return removeTasksForSessions(service.getProjectRoot(),[sessionId],{assertCanCommit:assertCanMutate})}__name(updateScheduledTaskForMaintenance,"updateScheduledTaskForMaintenance");async function deletePersistedSessionWithLease(service,sessionId,assertCanMutate){const initialLocation=await classifySessionLocation(service,sessionId);if(initialLocation===void 0){let maintenanceError;try{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"delete",assertCanMutate)}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=delete workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}return{kind:"notFound",mutationApplied:false,maintenanceError}}const mutation=await runWithDaemonWriterLease({action:"delete",sessionId,service,mutate:__name(async(assertOwnedAndUnchanged,assertCleanupOwned)=>{const lockedLocation=await classifySessionLocation(service,sessionId);if(lockedLocation===void 0){return{value:"notFound",mutationApplied:false}}const removed=await service.removeSession(sessionId,{assertStorageUnchanged:assertOwnedAndUnchanged,assertCanMutate,assertCleanupOwned});return{value:removed?"removed":"notFound",mutationApplied:removed}},"mutate"),mutationAppliedAfterError:__name(async()=>await classifySessionLocation(service,sessionId)===void 0,"mutationAppliedAfterError"),afterMutationApplied:__name(async()=>{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"delete",assertCanMutate)},"afterMutationApplied")});if(mutation.error!==void 0){return{kind:"error",error:mutation.error,mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}return{kind:mutation.value??"notFound",mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}__name(deletePersistedSessionWithLease,"deletePersistedSessionWithLease");async function deleteDaemonSessions(params){const{sessionIds,service,bridge,coordinator,coordinatorLockHeld=false,assertCanMutate,runtimeWorkspaceCwd,onError}=params;const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];if(!coordinatorLockHeld){for(const sessionId of uniqueSessionIds){coordinator.assertNotTransitioning(sessionId)}}const runWithWorktreeCleanup=__name(async(sessionId,mutateSession)=>{const activeSidecarPath=service.getWorktreeSessionPath(sessionId);const archivedSidecarPath=service.getWorktreeSessionPathForArchiveState(sessionId,"archived");if(!fs2.existsSync(activeSidecarPath)&&(archivedSidecarPath===activeSidecarPath||!fs2.existsSync(archivedSidecarPath))){return coordinator.runExclusiveMany([sessionId],mutateSession)}const cleanupPlan=await preclassifyWorktreeCleanup(service,sessionId,runtimeWorkspaceCwd);if(!cleanupPlan){return coordinator.runExclusiveMany([sessionId],mutateSession)}const releaseCleanupLock=await acquireWorktreeCleanupLock(cleanupPlan);try{const ownership=await verifyWorktreeCleanupOwnership(cleanupPlan);if(!ownership.ok){logWorktreeCleanupPreserve(sessionId,ownership.reason)}const result=await coordinator.runExclusiveMany([sessionId],mutateSession);if(ownership.ok&&result.kind==="removed"){try{assertCanMutate?.();await executeWorktreeCleanup(cleanupPlan)}catch(error){logWorktreeCleanupPreserve(sessionId,`cleanup execution failed: ${errorMessage(error)}`)}}return result}finally{releaseCleanupLock()}},"runWithWorktreeCleanup");const results=await Promise.all(uniqueSessionIds.map(async sessionId=>{try{const mutateSession=__name(async()=>{assertCanMutate?.();const removePersistedSession=__name(async()=>{const result=await deletePersistedSessionWithLease(service,sessionId,assertCanMutate);if(result.kind==="error"){onError?.({phase:"remove",sessionId,error:errorMessage(result.error)});return result}try{if(assertCanMutate){await bridge.deleteSessionAttachments(sessionId,{assertCanCommit:assertCanMutate})}else{await bridge.deleteSessionAttachments(sessionId)}return result}catch(error){onError?.({phase:"delete",sessionId,error:errorMessage(error)});return{kind:"error",error,mutationApplied:result.mutationApplied,maintenanceError:result.maintenanceError}}},"removePersistedSession");try{await bridge.closeSession(sessionId)}catch(error){if(isSessionNotFoundError(error)&&error.code!=="session_closing"){return await removePersistedSession()}onError?.({phase:"close",sessionId,error:errorMessage(error)});return{kind:"error",error,mutationApplied:false}}return await removePersistedSession()},"mutateSession");return await(coordinatorLockHeld?mutateSession():runWithWorktreeCleanup(sessionId,mutateSession))}catch(error){if(error instanceof DaemonDrainingError){throw error}onError?.({phase:"delete",sessionId,error:errorMessage(error)});return{kind:"error",error,mutationApplied:false}}}));const removed=[];const notFound=[];const errors=[];for(let i=0;i<results.length;i++){const sessionId=uniqueSessionIds[i];const result=results[i];if(result.kind==="removed"){removed.push(sessionId)}else if(result.kind==="notFound"){notFound.push(sessionId)}else{errors.push({sessionId,error:errorMessage(result.error)})}if(result.maintenanceError!==void 0){errors.push({sessionId,error:"Scheduled task lifecycle update failed."})}}return{removed,notFound,errors}}__name(deleteDaemonSessions,"deleteDaemonSessions");async function deleteDaemonSessionIfOrphan(params){const{sessionId,service,bridge,coordinator}=params;coordinator.assertNotTransitioning(sessionId);const result=await coordinator.runExclusiveMany([sessionId],async()=>{let killed=false;try{killed=await bridge.killSession(sessionId,{requireZeroAttaches:true})}catch(error){if(!isSessionNotFoundError(error))throw error;killed=true}if(!killed){try{bridge.getSessionSummary(sessionId);return void 0}catch(error){if(!isSessionNotFoundError(error))throw error}}const removal=await deletePersistedSessionWithLease(service,sessionId);if(removal.kind!=="error"){await bridge.deleteSessionAttachments(sessionId)}return removal});if(result===void 0){return false}if(result.kind==="error"){throw result.error}bridge.markSessionCatalogChanged();return true}__name(deleteDaemonSessionIfOrphan,"deleteDaemonSessionIfOrphan");async function assertSessionLoadable(workspaceCwd,sessionId,runtimeBaseDir,options={}){const service=new SessionService(workspaceCwd,{runtimeBaseDir});const location=await service.getSessionLocation(sessionId);if(location==="archived"){throw new SessionArchivedError(sessionId)}if(location==="conflict"){if(options.allowActiveConflict){try{await service.findSessionIdIgnoringCase(sessionId)}catch(error){if(error instanceof SessionIdCaseConflictError&&error.reason==="case_conflict"&&error.candidateSessionId===sessionId){return"active"}if(!(error instanceof SessionIdCaseConflictError))throw error}}throw new SessionConflictError(sessionId)}return location}__name(assertSessionLoadable,"assertSessionLoadable");async function resolveSessionIdForRestore(service,sessionId){try{return await service.findSessionIdIgnoringCase(sessionId)}catch(error){if(error instanceof SessionIdCaseConflictError){if(error.candidateSessionId===sessionId)return sessionId;throw new SessionConflictError(sessionId)}throw error}}__name(resolveSessionIdForRestore,"resolveSessionIdForRestore");async function assertSessionRestorable(workspaceCwd,sessionId,requestedSessionId,runtimeBaseDir){const location=await new SessionService(workspaceCwd,{runtimeBaseDir}).getSessionLocation(sessionId);if(location==="archived"){throw new SessionArchivedError(sessionId)}if(location==="conflict"){if(sessionId!==requestedSessionId){throw new SessionConflictError(requestedSessionId)}return"active"}return location}__name(assertSessionRestorable,"assertSessionRestorable");async function assertSessionArchived(workspaceCwd,sessionId,runtimeBaseDir){const location=await new SessionService(workspaceCwd,{runtimeBaseDir}).getSessionLocation(sessionId);if(location==="active"){throw new SessionNotArchivedError(sessionId)}if(location==="conflict"){throw new SessionConflictError(sessionId)}if(location===void 0){throw new SessionNotFoundError(sessionId)}}__name(assertSessionArchived,"assertSessionArchived");function isSessionNotFoundError(err){return err instanceof SessionNotFoundError||err instanceof Error&&err.name==="SessionNotFoundError"}__name(isSessionNotFoundError,"isSessionNotFoundError");function logSessionArchiveResult(action,result){const changedLabel=action==="archive"?"archived":"unarchived";const alreadyLabel=action==="archive"?"alreadyArchived":"alreadyActive";const details=[`requested=${result.requested.length} requestedIds=${formatSessionIds(result.requested)}`,`${changedLabel}=${result.changed.length} ${changedLabel}Ids=${formatSessionIds(result.changed)}`,`${alreadyLabel}=${result.already.length} ${alreadyLabel}Ids=${formatSessionIds(result.already)}`,`notFound=${result.notFound.length} notFoundIds=${formatSessionIds(result.notFound)}`,`errors=${result.errors.length} errorIds=${formatSessionErrors(result.errors)}`].join(" ");writeStderrLine(`qwen serve: sessions ${action} result ${details}`)}__name(logSessionArchiveResult,"logSessionArchiveResult");function formatSessionIds(sessionIds){return`[${sessionIds.map(sessionId=>safeLogValue(sessionId)).join(",")}]`}__name(formatSessionIds,"formatSessionIds");function formatSessionErrors(errors){return`[${errors.map(({sessionId,error})=>`${safeLogValue(sessionId)}:${safeLogValue(errorMessage(error))}`).join(",")}]`}__name(formatSessionErrors,"formatSessionErrors");function errorMessage(error){return error instanceof Error?error.message:String(error)}__name(errorMessage,"errorMessage");function logSessionArchiveWarning(message){writeStderrLine(`qwen serve: ${sanitizeLogLine(message)}`)}__name(logSessionArchiveWarning,"logSessionArchiveWarning");function sanitizeLogLine(message){return message.replace(LOG_LINE_UNSAFE_RE," ").slice(0,4096)}__name(sanitizeLogLine,"sanitizeLogLine");async function archiveDaemonSessions(params){const{sessionIds,service,bridge,coordinator,coordinatorLockHeld=false,resolveConflicts=false,requireIdle=false,assertCanMutate}=params;const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];if(!coordinatorLockHeld){for(const sessionId of uniqueSessionIds){coordinator.assertNotTransitioning(sessionId)}}const results=await Promise.all(uniqueSessionIds.map(async sessionId=>{try{const mutateSession=__name(async()=>{assertCanMutate?.();try{await bridge.closeSession(sessionId,void 0,{requireAgentClose:true,requireIdle})}catch(error){if(!isSessionNotFoundError(error)||error.code==="session_closing"){return{kind:"error",error,mutationApplied:false}}}const initialLocation=await classifySessionLocation(service,sessionId);if(initialLocation===void 0){return{kind:"notFound",mutationApplied:false}}if(initialLocation==="conflict"&&!resolveConflicts){return{kind:"error",error:sessionLocationError(sessionId),mutationApplied:false}}const mutation=await runWithDaemonWriterLease({action:"archive",sessionId,service,mutate:__name(async(assertOwnedAndUnchanged,assertCleanupOwned)=>{const lockedLocation=await classifySessionLocation(service,sessionId);if(lockedLocation===void 0){return{value:"notFound",mutationApplied:false}}if(lockedLocation==="conflict"&&!resolveConflicts){throw sessionLocationError(sessionId)}const result=await service.archiveSessions([sessionId],{resolveConflicts,assertStorageUnchanged:assertOwnedAndUnchanged,assertCanMutate,assertCleanupOwned});if(result.errors[0])throw result.errors[0].error;if(result.archived.length>0){return{value:result.resolvedConflicts.length?"resolvedConflict":"archived",mutationApplied:true}}return{value:result.alreadyArchived.length>0?"alreadyArchived":"notFound",mutationApplied:false}},"mutate"),mutationAppliedAfterError:__name(async()=>await classifySessionLocation(service,sessionId)==="archived","mutationAppliedAfterError"),afterMutationApplied:__name(async()=>{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"archive",assertCanMutate)},"afterMutationApplied")});if(mutation.error!==void 0){return{kind:"error",error:mutation.error,mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}let maintenanceError=mutation.maintenanceError;if(mutation.value==="alreadyArchived"){try{await updateScheduledTaskForMaintenance(service,sessionId,"archive",assertCanMutate)}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=archive workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}}return{kind:mutation.value??"notFound",mutationApplied:mutation.mutationApplied,maintenanceError}},"mutateSession");return await(coordinatorLockHeld?mutateSession():coordinator.runExclusiveMany([sessionId],mutateSession))}catch(error){if(error instanceof DaemonDrainingError){throw error}return{kind:"error",error,mutationApplied:false,maintenanceError:void 0}}}));const archived=[];const alreadyArchived=[];const resolvedConflicts=[];const notFound=[];const errors=[];for(let i=0;i<results.length;i++){const sessionId=uniqueSessionIds[i];const result=results[i];if(result.kind==="archived")archived.push(sessionId);else if(result.kind==="resolvedConflict"){archived.push(sessionId);resolvedConflicts.push(sessionId)}else if(result.kind==="alreadyArchived"){alreadyArchived.push(sessionId)}else if(result.kind==="notFound")notFound.push(sessionId);else errors.push({sessionId,error:result.error});if("maintenanceError"in result&&result.maintenanceError!==void 0){errors.push({sessionId,error:result.maintenanceError})}}logSessionArchiveResult("archive",{requested:uniqueSessionIds,changed:archived,already:alreadyArchived,notFound,errors});return{archived,alreadyArchived,resolvedConflicts,notFound,errors}}__name(archiveDaemonSessions,"archiveDaemonSessions");async function unarchiveDaemonSessions(params){const{sessionIds,service,coordinator,coordinatorLockHeld=false,resolveConflicts=false,assertCanMutate}=params;const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];if(!coordinatorLockHeld){for(const sessionId of uniqueSessionIds){coordinator.assertNotTransitioning(sessionId)}}const results=await Promise.all(uniqueSessionIds.map(async sessionId=>{try{const mutateSession=__name(async()=>{assertCanMutate?.();const initialLocation=await classifySessionLocation(service,sessionId);if(initialLocation===void 0){return{kind:"notFound",mutationApplied:false}}if(initialLocation==="conflict"&&!resolveConflicts){return{kind:"error",error:sessionLocationError(sessionId),mutationApplied:false}}const mutation=await runWithDaemonWriterLease({action:"unarchive",sessionId,service,mutate:__name(async(assertOwnedAndUnchanged,assertCleanupOwned)=>{const lockedLocation=await classifySessionLocation(service,sessionId);if(lockedLocation===void 0){return{value:"notFound",mutationApplied:false}}if(lockedLocation==="conflict"&&!resolveConflicts){throw sessionLocationError(sessionId)}const result=await service.unarchiveSessions([sessionId],{resolveConflicts,assertStorageUnchanged:assertOwnedAndUnchanged,assertCanMutate,assertCleanupOwned});if(result.errors[0])throw result.errors[0].error;if(result.unarchived.length>0){return{value:result.resolvedConflicts.length?"resolvedConflict":"unarchived",mutationApplied:true}}return{value:result.alreadyActive.length>0?"alreadyActive":"notFound",mutationApplied:false}},"mutate"),mutationAppliedAfterError:__name(async()=>await classifySessionLocation(service,sessionId)==="active","mutationAppliedAfterError"),afterMutationApplied:__name(async()=>{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"unarchive",assertCanMutate)},"afterMutationApplied")});if(mutation.error!==void 0){return{kind:"error",error:mutation.error,mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}let maintenanceError=mutation.maintenanceError;if(mutation.value==="alreadyActive"){try{await updateScheduledTaskForMaintenance(service,sessionId,"unarchive",assertCanMutate)}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=unarchive workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}}return{kind:mutation.value??"notFound",mutationApplied:mutation.mutationApplied,maintenanceError}},"mutateSession");return await(coordinatorLockHeld?mutateSession():coordinator.runExclusiveMany([sessionId],mutateSession))}catch(error){if(error instanceof DaemonDrainingError){throw error}return{kind:"error",error,mutationApplied:false,maintenanceError:void 0}}}));const unarchived=[];const alreadyActive=[];const resolvedConflicts=[];const notFound=[];const errors=[];for(let i=0;i<results.length;i++){const sessionId=uniqueSessionIds[i];const result=results[i];if(result.kind==="unarchived")unarchived.push(sessionId);else if(result.kind==="resolvedConflict"){unarchived.push(sessionId);resolvedConflicts.push(sessionId)}else if(result.kind==="alreadyActive")alreadyActive.push(sessionId);else if(result.kind==="notFound")notFound.push(sessionId);else errors.push({sessionId,error:result.error});if(result.maintenanceError!==void 0){errors.push({sessionId,error:result.maintenanceError})}}logSessionArchiveResult("unarchive",{requested:uniqueSessionIds,changed:unarchived,already:alreadyActive,notFound,errors});return{unarchived,alreadyActive,resolvedConflicts,notFound,errors}}__name(unarchiveDaemonSessions,"unarchiveDaemonSessions");init_esbuild_shims();import{execFile}from"node:child_process";import{promisify}from"node:util";var execFileAsync=promisify(execFile);var a1AvailabilityVerified=false;var defaultA1Exec=__name(async(args,options)=>{const{stdout}=await execFileAsync("a1",[...args],{...options,encoding:"utf8",windowsHide:true});return{stdout}},"defaultA1Exec");var a1Exec=defaultA1Exec;var A1_TIMEOUT_MS=2e4;var A1_MAX_BUFFER=16*1024*1024;var GIT_ORIGIN_TIMEOUT_MS=5e3;var A1_VERSION_TIMEOUT_MS=1e4;var A1_ERROR_MESSAGE_MAX=512;var AONE_DETAIL_URL_HOST="code.alibaba-inc.com";var AONE_MAX_MR_VIEW_CALLS_PER_RUN=25;var AoneCliUnavailableError=class extends Error{static{__name(this,"AoneCliUnavailableError")}};var AoneCommandError=class extends Error{static{__name(this,"AoneCommandError")}};function mapAoneMrState(raw){switch(raw?.toLowerCase()){case"merged":return"merged";case"closed":return"closed";default:return"open"}}__name(mapAoneMrState,"mapAoneMrState");async function resolveAoneWorkspaceRepo(workspaceCwd,env){const gitRoot=findGitRoot(workspaceCwd);if(!gitRoot)return void 0;let origin;try{({stdout:origin}=await execFileAsync("git",["remote","get-url","origin"],{cwd:gitRoot,timeout:GIT_ORIGIN_TIMEOUT_MS,encoding:"utf8",windowsHide:true,env:gitEnv(env)}))}catch{return void 0}const identity=parseRemoteUrl(origin.trim());if(!identity||!isAoneCanonicalHost(identity.host))return void 0;return{gitRoot,repoPath:identity.groupPath}}__name(resolveAoneWorkspaceRepo,"resolveAoneWorkspaceRepo");function isAoneDetailUrlForRepo(repoPath,number,url){return canonicalSessionPrUrl(url)===canonicalSessionPrUrl(`https://${AONE_DETAIL_URL_HOST}/${repoPath}/codereview/${number}`)}__name(isAoneDetailUrlForRepo,"isAoneDetailUrlForRepo");function isA1ErrorObject(value){return typeof value==="object"&&value!==null&&value["schemaVersion"]==="a1.error/v1"}__name(isA1ErrorObject,"isA1ErrorObject");function a1ErrorMessage(error){if(error?.killed===true){return`a1 timed out after ${A1_TIMEOUT_MS/1e3}s`}const stderr=error?.stderr;const raw=typeof stderr==="string"&&stderr.trim()?stderr:error instanceof Error?error.message:String(error);return raw.replace(/\s+/g," ").trim().slice(0,A1_ERROR_MESSAGE_MAX)}__name(a1ErrorMessage,"a1ErrorMessage");function assertA1Version(stdout){const triple=parseA1Version(stdout);const floor=parseA1Version(A1_MIN_VERSION);if(triple&&floor&&!a1VersionAtLeast(triple,floor)){throw new AoneCliUnavailableError(`a1 ${A1_MIN_VERSION}+ is required (found ${stdout.trim().split("\n")[0]}); upgrade from https://code.alibaba-inc.com/aone/a1`)}}__name(assertA1Version,"assertA1Version");async function runA1Json(args){let stdout;try{({stdout}=await a1Exec([...args,"--format","json"],{timeout:A1_TIMEOUT_MS,maxBuffer:A1_MAX_BUFFER}))}catch(error){if(error.code==="ENOENT"){throw new AoneCliUnavailableError("a1 CLI not installed; install it and run `a1 auth login`")}const errorStdout=error?.stdout;if(typeof errorStdout==="string"&&errorStdout.trim()){try{const parsed2=JSON.parse(errorStdout);if(isA1ErrorObject(parsed2)){throw new AoneCommandError(parsed2.message||"a1 command failed")}}catch(parseError){if(parseError instanceof AoneCommandError)throw parseError}}throw new AoneCommandError(a1ErrorMessage(error))}let parsed;try{parsed=JSON.parse(stdout)}catch{throw new AoneCommandError("a1 returned non-JSON output")}if(isA1ErrorObject(parsed)){throw new AoneCommandError(parsed.message||"a1 command failed")}return parsed}__name(runA1Json,"runA1Json");async function checkA1Available(){if(a1AvailabilityVerified)return;let stdout;try{({stdout}=await a1Exec(["--version"],{timeout:A1_VERSION_TIMEOUT_MS}))}catch(error){if(error.code==="ENOENT"){throw new AoneCliUnavailableError("a1 CLI not installed; install it and run `a1 auth login`")}return}assertA1Version(stdout);a1AvailabilityVerified=true}__name(checkA1Available,"checkA1Available");function hasControlCharacter(value){return Array.from(value).some(character=>{const code=character.charCodeAt(0);return code<=31||code===127})}__name(hasControlCharacter,"hasControlCharacter");function parseAoneMrView(raw,id){const mr=raw!==null&&typeof raw==="object"?raw["mergeRequest"]:void 0;if(mr===null||typeof mr!=="object"){throw new AoneCommandError("unexpected a1 mr view output")}const v=mr;const url=typeof v["detailUrl"]==="string"?v["detailUrl"]:"";if(!/^https?:\/\//i.test(url)){throw new AoneCommandError("a1 mr view returned no detailUrl")}if(url.length>SESSION_PR_URL_MAX_LENGTH){throw new AoneCommandError("a1 mr view returned an oversized detailUrl")}if(hasControlCharacter(url)){throw new AoneCommandError("a1 mr view returned a malformed detailUrl")}return{number:id,url,state:mapAoneMrState(typeof v["state"]==="string"?v["state"]:void 0)}}__name(parseAoneMrView,"parseAoneMrView");async function viewAoneMergeRequest(repoPath,id){await checkA1Available();const parsed=await runA1Json(["repo","mr","view",String(id),"--repo",repoPath]);return parseAoneMrView(parsed,id)}__name(viewAoneMergeRequest,"viewAoneMergeRequest");var defaultAoneMrBackend={view:viewAoneMergeRequest};export{laterActivityTimestamp,invalidateWorkspaceSessionListCache,InvalidCursorError,listWorkspaceSessionsForResponse,listLiveWorkspaceSessionsForResponse,searchWorkspaceSessionsForResponse,getWorkspaceSessionInfoForResponse,parseSessionPageSizeQuery,acquireWorktreeOwnershipOp,DaemonDrainingError,SessionArchiveCoordinator,deleteDaemonSessions,deleteDaemonSessionIfOrphan,assertSessionLoadable,resolveSessionIdForRestore,assertSessionRestorable,assertSessionArchived,logSessionArchiveWarning,archiveDaemonSessions,unarchiveDaemonSessions,AONE_MAX_MR_VIEW_CALLS_PER_RUN,resolveAoneWorkspaceRepo,isAoneDetailUrlForRepo,defaultAoneMrBackend};
3
+ import{classifyTopLevelConversationSource}from"./chunk-7M5JT3ID.js";import{A1_MIN_VERSION,a1VersionAtLeast,parseA1Version}from"./chunk-U3ZLJQMS.js";import{isAoneCanonicalHost,parseRemoteUrl}from"./chunk-CTMNGGOU.js";import{createSessionOrganizationService}from"./chunk-5EXL4TKQ.js";import{HIDDEN_CATALOG_SOURCE_TYPES,isHiddenCatalogSource}from"./chunk-DHYCGKLG.js";import{safeLogValue}from"./chunk-SVGTUGV2.js";import{normalizeSessionIdForLookup,parseCallerSuppliedSessionId}from"./chunk-LGFF5PJA.js";import{SessionArchivedError,SessionArchivingError,SessionConflictError,SessionNotArchivedError,SessionNotFoundError}from"./chunk-VTZZXEWA.js";import{readWorktreeSession,readWorktreeSessionStrict}from"./chunk-OMDTFGTX.js";import{GROUP_COLOR_OPTIONS,SESSION_PR_LIST_LIMIT,SESSION_PR_URL_MAX_LENGTH,SessionIdCaseConflictError,SessionOrganizationError,SessionService,SessionTranscriptChangedError,SessionWriterUnavailableError,canonicalSessionPrUrl,readSessionPrs,toSessionPrInfo}from"./chunk-2JGTWRZJ.js";import{cronTaskSessionDeletionId,getCronFilePath,updateCronTasks}from"./chunk-T6W33SET.js";import{GitWorktreeService,gitEnv,readWorktreeSessionMarker,readWorktreeSessionMarkerStrict,worktreeHasWork}from"./chunk-ILECDNJX.js";import{findGitRoot}from"./chunk-EBMCWXGZ.js";import{addDaemonRequestAttribute}from"./chunk-FQRF6B65.js";import{LOG_LINE_UNSAFE_RE,writeStderrLine}from"./chunk-M4ECEHLX.js";import{Storage}from"./chunk-EPODBRBP.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();init_esbuild_shims();import path from"node:path";var PersistedSessionListCache=class{constructor(ttlMs,maxRetainedSummaries){this.ttlMs=ttlMs;this.maxRetainedSummaries=maxRetainedSummaries}static{__name(this,"PersistedSessionListCache")}slots=new Map;retainedSummaries=0;lookup(scope,loader,options={}){options.signal?.throwIfAborted();const key=this.key(scope);let slot=this.slots.get(key);if(!slot){slot={generation:0};this.slots.set(key,slot)}const now=Date.now();if(slot.value){const cacheAgeMs=Math.max(0,now-slot.value.completedAt);if(cacheAgeMs<this.ttlMs){const snapshot=slot.value.snapshot;return{status:"cache_hit",promise:Promise.resolve().then(()=>{options.signal?.throwIfAborted();return snapshot}),cacheAgeMs}}this.removeValue(slot)}if(slot.inFlight!==void 0&&slot.inFlight.generation===slot.generation&&!slot.inFlight.controller.signal.aborted){return{status:"single_flight",promise:this.attachWaiter(key,slot,slot.inFlight,options.signal)}}const generation=slot.generation;const controller=new AbortController;const load={generation,controller,promise:void 0,waiterCount:0,settled:false};const managed=Promise.resolve().then(()=>{controller.signal.throwIfAborted();return loader(controller.signal)}).then(snapshot=>{load.settled=true;const current=this.slots.get(key);if(current===slot&&current.inFlight===load){current.inFlight=void 0;if(current.generation===generation&&!controller.signal.aborted&&snapshot.sessions.length<=this.maxRetainedSummaries){this.installValue(key,current,snapshot)}else if(current.value===void 0){this.slots.delete(key)}}return snapshot},error=>{load.settled=true;const current=this.slots.get(key);if(current===slot&&current.inFlight===load){current.inFlight=void 0;if(current.value===void 0)this.slots.delete(key)}throw error});load.promise=managed;slot.inFlight=load;return{status:"scan",promise:this.attachWaiter(key,slot,load,options.signal)}}invalidate(scope){const key=this.key(scope);const slot=this.slots.get(key);if(!slot)return;slot.generation+=1;this.removeValue(slot);if(slot.inFlight===void 0)this.slots.delete(key)}clear(){for(const slot of this.slots.values()){if(slot.value)clearTimeout(slot.value.expiryTimer)}this.slots.clear();this.retainedSummaries=0}installValue(key,slot,snapshot){const completedAt=Date.now();this.evictFor(snapshot.sessions.length);const remainingTtlMs=Math.max(0,this.ttlMs-(Date.now()-completedAt));const expiryTimer=setTimeout(()=>{const current=this.slots.get(key);if(current!==slot||current.value?.expiryTimer!==expiryTimer){return}this.removeValue(current);if(current.inFlight===void 0)this.slots.delete(key)},remainingTtlMs);if(typeof expiryTimer.unref==="function")expiryTimer.unref();const value={snapshot,completedAt,expiryTimer};slot.value=value;this.retainedSummaries+=snapshot.sessions.length}evictFor(incomingSummaries){while(this.retainedSummaries+incomingSummaries>this.maxRetainedSummaries){let oldest;for(const[key,slot]of this.slots){if(slot.value&&(oldest===void 0||slot.value.completedAt<oldest.completedAt)){oldest={key,slot,completedAt:slot.value.completedAt}}}if(!oldest)return;this.removeValue(oldest.slot);if(oldest.slot.inFlight===void 0)this.slots.delete(oldest.key)}}removeValue(slot){const value=slot.value;if(!value)return;clearTimeout(value.expiryTimer);this.retainedSummaries-=value.snapshot.sessions.length;slot.value=void 0}attachWaiter(key,slot,load,signal){load.waiterCount+=1;return new Promise((resolve,reject)=>{let settled=false;const settle=__name(finish=>{if(settled)return;settled=true;signal?.removeEventListener("abort",onAbort);load.waiterCount-=1;if(load.waiterCount===0&&!load.settled){load.controller.abort(new DOMException("No active session list waiters","AbortError"));const current=this.slots.get(key);if(current===slot&&current.inFlight===load){current.inFlight=void 0;if(current.value===void 0)this.slots.delete(key)}}finish()},"settle");const onAbort=__name(()=>{if(load.settled)return;settle(()=>reject(signal?.reason))},"onAbort");signal?.addEventListener("abort",onAbort,{once:true});if(signal?.aborted)onAbort();void load.promise.then(snapshot=>settle(()=>resolve(snapshot)),error=>settle(()=>reject(error)))})}key(scope){return JSON.stringify([path.resolve(scope.runtimeBaseDir),scope.workspaceCwd,scope.archiveState])}};init_esbuild_shims();function laterActivityTimestamp(live,persisted){const liveTime=live===void 0?Number.NaN:Date.parse(live);const persistedTime=persisted===void 0?Number.NaN:Date.parse(persisted);const liveValid=Number.isFinite(liveTime);const persistedValid=Number.isFinite(persistedTime);if(liveValid&&persistedValid){return liveTime>=persistedTime?live:persisted}if(liveValid)return live;if(persistedValid)return persisted;return live??persisted}__name(laterActivityTimestamp,"laterActivityTimestamp");var DEFAULT_SESSION_PAGE_SIZE=20;var MAX_SESSION_PAGE_SIZE=100;var MAX_ORGANIZED_SESSIONS=5e4;var MAX_EMITTED_CURSOR_SESSION_IDS=64;var PERSISTED_SESSION_LIST_CACHE_TTL_MS=2e3;var persistedSessionListCache=new PersistedSessionListCache(PERSISTED_SESSION_LIST_CACHE_TTL_MS,MAX_ORGANIZED_SESSIONS);function invalidateWorkspaceSessionListCache(options){for(const archiveState of options.archiveStates){persistedSessionListCache.invalidate({runtimeBaseDir:options.runtimeBaseDir,workspaceCwd:options.workspaceCwd,archiveState})}}__name(invalidateWorkspaceSessionListCache,"invalidateWorkspaceSessionListCache");var InvalidCursorError=class extends Error{static{__name(this,"InvalidCursorError")}constructor(cursor,kind="numeric"){super(`Invalid cursor: "${cursor}" is not a valid ${kind} cursor`);this.name="InvalidCursorError"}};function parseSessionCursor(cursor){if(cursor==="")return void 0;const trimmed=cursor.trim();const parsed=Number(trimmed);if(trimmed===""||!Number.isFinite(parsed)||parsed<0||parsed>Number.MAX_SAFE_INTEGER){throw new InvalidCursorError(cursor)}return parsed}__name(parseSessionCursor,"parseSessionCursor");function parseEmittedSessionIds(value){if(value===void 0)return[];if(!Array.isArray(value)||value.some(id=>typeof id!=="string"||id.length===0)){return void 0}return value}__name(parseEmittedSessionIds,"parseEmittedSessionIds");function parseOrganizedCursor(cursor,expected){if(cursor==="")return void 0;try{const decoded=Buffer.from(cursor,"base64url").toString("utf8");const parsed=JSON.parse(decoded);const last=parsed.last;if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||typeof last!=="object"||last===null||Array.isArray(last)||typeof last.isPinned!=="boolean"||typeof last.activityTime!=="number"||!Number.isFinite(last.activityTime)||typeof last.sessionId!=="string"||last.sessionId.length===0||parsed.catalogKind!==void 0&&parsed.catalogKind!=="organized"||parsed.paginateMerged!==void 0&&parsed.paginateMerged!==expected.paginateMerged||parsed.group!==expected.group||parsed.archiveState!==expected.archiveState||parsed.sourceType!==expected.sourceType||parsed.sourceId!==expected.sourceId||parsed.conversationKind!==expected.conversationKind){throw new Error("invalid organized cursor")}const emitted=parseEmittedSessionIds(parsed.emitted);if(emitted===void 0){throw new Error("invalid organized cursor")}return{last,emitted}}catch{throw new InvalidCursorError(cursor,"organized")}}__name(parseOrganizedCursor,"parseOrganizedCursor");function encodeOrganizedCursor(last,group,archiveState,paginateMerged,sourceType,sourceId,conversationKind,emitted=[]){return Buffer.from(JSON.stringify({catalogKind:"organized",paginateMerged,group,archiveState,sourceType,sourceId,conversationKind,last,...emitted.length>0?{emitted}:{}}),"utf8").toString("base64url")}__name(encodeOrganizedCursor,"encodeOrganizedCursor");function parseLiveSessionCursor(cursor){if(cursor==="")return void 0;try{const parsed=JSON.parse(Buffer.from(cursor,"base64url").toString("utf8"));if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||typeof parsed.activityTime!=="number"||!Number.isFinite(parsed.activityTime)||typeof parsed.sessionId!=="string"||parsed.sessionId.length===0){throw new Error("invalid live cursor")}return parsed}catch{throw new InvalidCursorError(cursor,"live")}}__name(parseLiveSessionCursor,"parseLiveSessionCursor");function encodeLiveSessionCursor(last){return Buffer.from(JSON.stringify(last),"utf8").toString("base64url")}__name(encodeLiveSessionCursor,"encodeLiveSessionCursor");function matchesSessionMetadataSource(session,filter){if(filter.conversationKind==="standalone-top-level"&&classifyTopLevelConversationSource(session)?.kind!=="standalone"){return false}const sourceTypeMatches=filter.sourceType===void 0||session.sourceType===filter.sourceType||filter.sourceType==="default"&&(session.sourceType===void 0||session.sourceType==="qwen-live");return sourceTypeMatches&&(filter.sourceId===void 0||session.sourceId===filter.sourceId)}__name(matchesSessionMetadataSource,"matchesSessionMetadataSource");function parseMetadataSessionCursor(cursor,expected){if(cursor==="")return void 0;try{const parsed=JSON.parse(Buffer.from(cursor,"base64url").toString("utf8"));const last=parsed.last;if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)||typeof last!=="object"||last===null||Array.isArray(last)||typeof last.activityTime!=="number"||!Number.isFinite(last.activityTime)||typeof last.sessionId!=="string"||last.sessionId.length===0||parsed.catalogKind!==void 0&&parsed.catalogKind!=="metadata"||parsed.paginateMerged!==void 0&&parsed.paginateMerged!==expected.paginateMerged||parsed.parentSessionId!==expected.parentSessionId||parsed.sourceType!==expected.sourceType||parsed.sourceId!==expected.sourceId||parsed.conversationKind!==expected.conversationKind||parsed.archiveState!==expected.archiveState){throw new Error("invalid metadata cursor")}const emitted=parseEmittedSessionIds(parsed.emitted);if(emitted===void 0){throw new Error("invalid metadata cursor")}return{last:{activityTime:last.activityTime,sessionId:last.sessionId},emitted}}catch{throw new InvalidCursorError(cursor,expected.parentSessionId!==void 0?"parent":"metadata")}}__name(parseMetadataSessionCursor,"parseMetadataSessionCursor");function encodeMetadataSessionCursor(last,filter,archiveState,paginateMerged,emitted=[]){return Buffer.from(JSON.stringify({catalogKind:"metadata",paginateMerged,...filter,archiveState,last,...emitted.length>0?{emitted}:{}}),"utf8").toString("base64url")}__name(encodeMetadataSessionCursor,"encodeMetadataSessionCursor");async function enrichWorktreeSidecars(bySessionId,sessionService,archiveState="active",signal){for(const[sessionId,summary]of bySessionId){signal?.throwIfAborted();if(summary.worktree)continue;let sidecar;try{const sidecarPath=sessionService.getWorktreeSessionPathForArchiveState(sessionId,archiveState);sidecar=signal?await readWorktreeSession(sidecarPath,{signal}):await readWorktreeSession(sidecarPath)}catch{signal?.throwIfAborted();sidecar=null}if(sidecar&&await readWorktreeSessionMarker(sidecar.worktreePath)===sessionId){bySessionId.set(sessionId,{...summary,worktree:{slug:sidecar.slug,path:sidecar.worktreePath,branch:sidecar.worktreeBranch}})}}}__name(enrichWorktreeSidecars,"enrichWorktreeSidecars");async function enrichPrSidecars(bySessionId,sessionService,archiveState,signal){for(const[sessionId,summary]of bySessionId){signal?.throwIfAborted();let sidecar;try{const sidecarPath=sessionService.getPrSessionPathForArchiveState(sessionId,archiveState);sidecar=signal?await readSessionPrs(sidecarPath,{signal}):await readSessionPrs(sidecarPath)}catch{signal?.throwIfAborted();sidecar=null}if(sidecar){bySessionId.set(sessionId,{...summary,prs:sidecarToPrInfos(sidecar)})}}}__name(enrichPrSidecars,"enrichPrSidecars");function toSummary(item){return{sessionId:item.sessionId,workspaceCwd:item.cwd,createdAt:item.startTime,updatedAt:new Date(item.mtime).toISOString(),displayName:item.customTitle||item.prompt,...item.customTitle&&item.titleSource?{titleSource:item.titleSource}:{},...item.parentSessionId?{parentSessionId:item.parentSessionId}:{},...item.sourceType?{sourceType:item.sourceType}:{},...item.sourceId!==void 0?{sourceId:item.sourceId}:{},clientCount:0,hasActivePrompt:false,isArchived:item.isArchived===true}}__name(toSummary,"toSummary");function mergeLiveSessionSummary(existing,live){const merged={...existing,...live,createdAt:existing.createdAt,displayName:live.displayName??existing.displayName,parentSessionId:existing.parentSessionId??live.parentSessionId,sourceType:existing.sourceType??live.sourceType,sourceId:existing.sourceType!==void 0?existing.sourceId:live.sourceId,updatedAt:laterActivityTimestamp(live.updatedAt,existing.updatedAt),clientCount:live.clientCount,hasActivePrompt:live.hasActivePrompt,backgroundTurn:live.backgroundTurn,hasRunningBackgroundTasks:live.hasRunningBackgroundTasks,isArchived:false};if(existing.prs||live.prs){merged.prs=mergeSummaryPrs(existing.prs,live.prs)}return merged}__name(mergeLiveSessionSummary,"mergeLiveSessionSummary");function sidecarToPrInfos(sidecar){return sidecar.map(toSessionPrInfo)}__name(sidecarToPrInfos,"sidecarToPrInfos");function mergeSummaryPrs(persistedPrs,livePrs){const live=livePrs??[];const persisted=persistedPrs??[];const liveByNumber=new Map(live.map(l=>[l.number,l]));const persistedNumbers=new Set(persisted.map(p=>p.number));const consumedLive=new Set;const ordered=[];for(const p of persisted){const liveEntry=liveByNumber.get(p.number);if(!liveEntry){ordered.push(p);continue}const samePr=canonicalSessionPrUrl(p.url)===canonicalSessionPrUrl(liveEntry.url);const matchedTwinExists=persisted.some(q=>q.number===p.number&&canonicalSessionPrUrl(q.url)===canonicalSessionPrUrl(liveEntry.url));if(!samePr&&matchedTwinExists)continue;if(consumedLive.has(p.number))continue;consumedLive.add(p.number);ordered.push(samePr?{...liveEntry,...p.state?{state:p.state}:{},...p.issues?{issues:p.issues}:{}}:p)}for(const liveEntry of live){if(!persistedNumbers.has(liveEntry.number)&&persisted.length<SESSION_PR_LIST_LIMIT){ordered.push(liveEntry)}}return ordered.slice(-SESSION_PR_LIST_LIMIT)}__name(mergeSummaryPrs,"mergeSummaryPrs");async function liveOnlySummary(live,sessionService,signal){const summary={...live,createdAt:live.createdAt,clientCount:live.clientCount,hasActivePrompt:live.hasActivePrompt,backgroundTurn:live.backgroundTurn,hasRunningBackgroundTasks:live.hasRunningBackgroundTasks,isArchived:false};let sidecar;try{const sidecarPath=sessionService.getPrSessionPathForArchiveState(live.sessionId,"active");sidecar=signal?await readSessionPrs(sidecarPath,{signal}):await readSessionPrs(sidecarPath)}catch{signal?.throwIfAborted();sidecar=null}if(sidecar){summary.prs=mergeSummaryPrs(sidecarToPrInfos(sidecar),live.prs)}return summary}__name(liveOnlySummary,"liveOnlySummary");function clonePersistedSummary(session){return{...session,...session.worktree?{worktree:{...session.worktree}}:{}}}__name(clonePersistedSummary,"clonePersistedSummary");async function loadAllPersistedSummaries(sessionService,archiveState,signal){const scanStartedAt=performance.now();signal.throwIfAborted();const sessions=[];let truncated=false;let scanPages=0;let cursor;do{scanPages+=1;const page=await sessionService.listSessions({cursor,size:1e4,archiveState,signal,excludeSourceTypes:[...HIDDEN_CATALOG_SOURCE_TYPES]});signal.throwIfAborted();const remaining=MAX_ORGANIZED_SESSIONS-sessions.length;sessions.push(...page.items.slice(0,remaining).map(toSummary));cursor=page.nextCursor;if(page.items.length===0){break}if(page.items.length>remaining||sessions.length>=MAX_ORGANIZED_SESSIONS&&cursor!==void 0){writeStderrLine(`qwen serve: organized session list truncated at ${MAX_ORGANIZED_SESSIONS} sessions`);truncated=true;break}}while(cursor!==void 0);const bySessionId=new Map(sessions.map(session=>[session.sessionId,session]));await enrichWorktreeSidecars(bySessionId,sessionService,archiveState,signal);await enrichPrSidecars(bySessionId,sessionService,archiveState,signal);signal.throwIfAborted();return{sessions:[...bySessionId.values()],truncated,scanPages,scanDurationMs:Math.max(0,performance.now()-scanStartedAt)}}__name(loadAllPersistedSummaries,"loadAllPersistedSummaries");async function listAllPersistedSummaries(sessionService,workspaceCwd,archiveState,runtimeBaseDir,queryKind,signal){const lookup=persistedSessionListCache.lookup({runtimeBaseDir,workspaceCwd,archiveState},loadSignal=>loadAllPersistedSummaries(sessionService,archiveState,loadSignal),{signal});addDaemonRequestAttribute("qwen-code.daemon.session_list.cache_status",lookup.status);addDaemonRequestAttribute("qwen-code.daemon.session_list.archive_state",archiveState);addDaemonRequestAttribute("qwen-code.daemon.session_list.query_kind",queryKind);if(lookup.cacheAgeMs!==void 0){addDaemonRequestAttribute("qwen-code.daemon.session_list.cache_age_ms",lookup.cacheAgeMs)}const snapshot=await lookup.promise;signal?.throwIfAborted();addDaemonRequestAttribute("qwen-code.daemon.session_list.persisted_sessions",snapshot.sessions.length);addDaemonRequestAttribute("qwen-code.daemon.session_list.scan_pages",snapshot.scanPages);addDaemonRequestAttribute("qwen-code.daemon.session_list.truncated",snapshot.truncated);if(lookup.status!=="cache_hit"){addDaemonRequestAttribute("qwen-code.daemon.session_list.scan_duration_ms",snapshot.scanDurationMs)}return snapshot}__name(listAllPersistedSummaries,"listAllPersistedSummaries");function getSummaryActivityTime(session){const time=Date.parse(session.updatedAt??session.createdAt);return Number.isFinite(time)?time:0}__name(getSummaryActivityTime,"getSummaryActivityTime");function getLiveSessionCursorKey(session){return{activityTime:getSummaryActivityTime(session),sessionId:session.sessionId}}__name(getLiveSessionCursorKey,"getLiveSessionCursorKey");function compareLiveSessionCursorKeys(a,b){const byTime=b.activityTime-a.activityTime;if(byTime!==0)return byTime;return a.sessionId.localeCompare(b.sessionId)}__name(compareLiveSessionCursorKeys,"compareLiveSessionCursorKeys");function compareOrganizedSessions(activityTimeById,a,b){return compareOrganizedCursorKeys(getOrganizedCursorKey(activityTimeById,a),getOrganizedCursorKey(activityTimeById,b))}__name(compareOrganizedSessions,"compareOrganizedSessions");function getOrganizedCursorKey(activityTimeById,session){return{isPinned:session.isPinned===true,activityTime:activityTimeById.get(session.sessionId)??0,sessionId:session.sessionId}}__name(getOrganizedCursorKey,"getOrganizedCursorKey");function compareOrganizedCursorKeys(a,b){const byPinned=Number(b.isPinned)-Number(a.isPinned);if(byPinned!==0)return byPinned;const byTime=b.activityTime-a.activityTime;if(byTime!==0)return byTime;return a.sessionId.localeCompare(b.sessionId)}__name(compareOrganizedCursorKeys,"compareOrganizedCursorKeys");function nextEmittedSessionIds(options){const candidates=new Set(options.carried);for(const row of options.page){if(options.liveSessionIds.has(row.sessionId)){candidates.add(row.sessionId)}}const kept=[];for(const sessionId of candidates){const row=options.listedById.get(sessionId);if(!row){kept.push({sessionId,persistedTime:Number.NEGATIVE_INFINITY});continue}const persistedTime=options.persistedTimeById.get(sessionId);if(persistedTime===void 0){kept.push({sessionId,persistedTime:Number.NEGATIVE_INFINITY});continue}if(options.reenters(row,persistedTime)){kept.push({sessionId,persistedTime})}}if(kept.length>MAX_EMITTED_CURSOR_SESSION_IDS){kept.sort((a,b)=>a.persistedTime-b.persistedTime);kept.length=MAX_EMITTED_CURSOR_SESSION_IDS}return kept.map(entry=>entry.sessionId)}__name(nextEmittedSessionIds,"nextEmittedSessionIds");function applyOrganization(session,organization){return{...session,groupId:organization?.groupId??null,color:organization?.color??null,isPinned:organization?.isPinned===true,...organization?.pinnedAt!==void 0?{pinnedAt:organization.pinnedAt}:{}}}__name(applyOrganization,"applyOrganization");async function listOrganizedWorkspaceSessionsForResponse(bridge,workspaceCwd,options,pageSize,readOptions){const archiveState=options.archiveState??"active";const sessionService=new SessionService(workspaceCwd);const organizationService=createSessionOrganizationService(workspaceCwd);readOptions.signal?.throwIfAborted();const snapshot=await organizationService.readSnapshot();readOptions.signal?.throwIfAborted();const knownGroupIds=new Set(snapshot.groups.map(group2=>group2.id));const group=options.group??"all";if(group!=="all"&&group!=="pinned"&&group!=="ungrouped"&&!knownGroupIds.has(group)){throw new SessionOrganizationError(`Group not found: ${group}`,"group_not_found","group")}const cursor=options.cursor!==void 0?parseOrganizedCursor(options.cursor,{paginateMerged:readOptions.paginateMerged===true,group,archiveState,sourceType:options.sourceType,sourceId:options.sourceId,conversationKind:options.conversationKind}):void 0;const cursorKey=cursor?.last;const emittedBeforePage=new Set(cursor?.emitted??[]);const isFirstPage=cursorKey===void 0;let liveMergeFailed=false;const bySessionId=new Map;const persisted=await listAllPersistedSummaries(sessionService,workspaceCwd,archiveState,readOptions.runtimeBaseDir,"organized",readOptions.signal);readOptions.signal?.throwIfAborted();for(const session of persisted.sessions){bySessionId.set(session.sessionId,applyOrganization(clonePersistedSummary(session),snapshot.sessions.get(session.sessionId)))}const persistedTimeById=new Map(persisted.sessions.map(session=>[session.sessionId,getSummaryActivityTime(session)]));const liveSessionIds=new Set;if(readOptions.mergeLive!==false&&archiveState!=="archived"){try{const liveSessions=bridge.listWorkspaceSessions(workspaceCwd);for(const live of liveSessions){liveSessionIds.add(live.sessionId);const existing=bySessionId.get(live.sessionId);const organization=snapshot.sessions.get(live.sessionId);if(existing){bySessionId.set(live.sessionId,applyOrganization(mergeLiveSessionSummary(existing,live),organization))}else if((isFirstPage||readOptions.paginateMerged)&&(!persisted.truncated||!await(readOptions.signal?sessionService.sessionExists(live.sessionId,{signal:readOptions.signal}):sessionService.sessionExists(live.sessionId)))){bySessionId.set(live.sessionId,applyOrganization(await liveOnlySummary(live,sessionService,readOptions.signal),organization))}}}catch(error){readOptions.signal?.throwIfAborted();liveMergeFailed=true;writeStderrLine(`qwen serve: organized session list live merge failed; using persisted sessions only: ${error instanceof Error?error.message:String(error)}`)}}const filtered=[...bySessionId.values()].filter(session=>{if(isHiddenCatalogSource(session.sourceType))return false;if(!matchesSessionMetadataSource(session,options))return false;if(group==="all")return true;if(group==="pinned")return session.isPinned===true;if(group==="ungrouped")return session.groupId==null&&session.color==null;return session.color==null&&session.groupId===group});readOptions.signal?.throwIfAborted();const activityTimeById=new Map(filtered.map(session=>[session.sessionId,getSummaryActivityTime(session)]));filtered.sort((a,b)=>compareOrganizedSessions(activityTimeById,a,b));readOptions.signal?.throwIfAborted();const afterCursor=cursorKey===void 0?filtered:filtered.filter(session=>!emittedBeforePage.has(session.sessionId)&&compareOrganizedCursorKeys(cursorKey,getOrganizedCursorKey(activityTimeById,session))<0);const page=afterCursor.slice(0,pageSize);let nextCursor;if(page.length<afterCursor.length){const boundary=getOrganizedCursorKey(activityTimeById,page[page.length-1]);const emitted=nextEmittedSessionIds({carried:emittedBeforePage,page,liveSessionIds,listedById:new Map(filtered.map(session=>[session.sessionId,session])),persistedTimeById,reenters:__name((row,persistedTime)=>[true,false].some(isPinned=>compareOrganizedCursorKeys(boundary,{isPinned,activityTime:persistedTime,sessionId:row.sessionId})<0),"reenters")});nextCursor=encodeOrganizedCursor(boundary,group,archiveState,readOptions.paginateMerged===true,options.sourceType,options.sourceId,options.conversationKind,emitted)}return{sessions:page,...readOptions.includeGroups?{groups:{groups:snapshot.groups,colorOptions:[...GROUP_COLOR_OPTIONS]}}:{},...nextCursor!==void 0?{nextCursor}:{},...liveMergeFailed?{liveMergeFailed:true}:{},...persisted.truncated?{truncated:true}:{}}}__name(listOrganizedWorkspaceSessionsForResponse,"listOrganizedWorkspaceSessionsForResponse");async function listWorkspaceSessionsByMetadataForResponse(bridge,workspaceCwd,options,pageSize,filter,readOptions){const archiveState=options.archiveState??"active";const sessionService=new SessionService(workspaceCwd);const bySessionId=new Map;const persisted=await listAllPersistedSummaries(sessionService,workspaceCwd,archiveState,readOptions.runtimeBaseDir,"metadata",readOptions.signal);readOptions.signal?.throwIfAborted();const canonicalizeStandaloneIds=filter.conversationKind==="standalone-top-level";const conflictedStandaloneIds=new Set;const persistedTimeById=new Map;for(const session of persisted.sessions){let sessionId=session.sessionId;if(canonicalizeStandaloneIds){const parsed=parseCallerSuppliedSessionId(sessionId);if(parsed.kind!=="valid")continue;sessionId=parsed.sessionId;if(conflictedStandaloneIds.has(sessionId))continue;if(bySessionId.has(sessionId)){bySessionId.delete(sessionId);persistedTimeById.delete(sessionId);conflictedStandaloneIds.add(sessionId);continue}}bySessionId.set(sessionId,{...clonePersistedSummary(session),sessionId});persistedTimeById.set(sessionId,getSummaryActivityTime(session))}const liveSessionIds=new Set;let liveMergeFailed=false;if(readOptions.mergeLive!==false&&archiveState!=="archived"){try{for(const live of bridge.listWorkspaceSessions(workspaceCwd)){let sessionId=live.sessionId;if(canonicalizeStandaloneIds){const parsed=parseCallerSuppliedSessionId(sessionId);if(parsed.kind!=="valid"||conflictedStandaloneIds.has(parsed.sessionId)){continue}sessionId=parsed.sessionId}const canonicalLive=sessionId===live.sessionId?live:{...live,sessionId};liveSessionIds.add(sessionId);const existing=bySessionId.get(sessionId);if(existing){bySessionId.set(sessionId,mergeLiveSessionSummary(existing,canonicalLive))}else if(!persisted.truncated||!await(readOptions.signal?sessionService.sessionExists(sessionId,{signal:readOptions.signal}):sessionService.sessionExists(sessionId))){bySessionId.set(sessionId,await liveOnlySummary(canonicalLive,sessionService,readOptions.signal))}}}catch(error){readOptions.signal?.throwIfAborted();liveMergeFailed=true;writeStderrLine(`qwen serve: session metadata filter live merge failed; using persisted sessions only: ${error instanceof Error?error.message:String(error)}`)}}const matches=[...bySessionId.values()].filter(session=>!isHiddenCatalogSource(session.sourceType)&&(filter.parentSessionId===void 0||session.parentSessionId===filter.parentSessionId)&&matchesSessionMetadataSource(session,filter)).sort((a,b)=>compareLiveSessionCursorKeys(getLiveSessionCursorKey(a),getLiveSessionCursorKey(b)));readOptions.signal?.throwIfAborted();const cursor=options.cursor!==void 0&&options.cursor!==""?parseMetadataSessionCursor(options.cursor,{paginateMerged:readOptions.paginateMerged===true,...filter,archiveState}):void 0;const cursorKey=cursor?.last;const emittedBeforePage=new Set(cursor?.emitted??[]);const afterCursor=cursorKey===void 0?matches:matches.filter(session=>!emittedBeforePage.has(session.sessionId)&&compareLiveSessionCursorKeys(cursorKey,getLiveSessionCursorKey(session))<0);const page=afterCursor.slice(0,pageSize);let nextCursor;if(page.length<afterCursor.length){const boundary=getLiveSessionCursorKey(page[page.length-1]);const emitted=nextEmittedSessionIds({carried:emittedBeforePage,page,liveSessionIds,listedById:new Map(matches.map(session=>[session.sessionId,session])),persistedTimeById,reenters:__name((row,persistedTime)=>compareLiveSessionCursorKeys(boundary,{activityTime:persistedTime,sessionId:row.sessionId})<0,"reenters")});nextCursor=encodeMetadataSessionCursor(boundary,filter,archiveState,readOptions.paginateMerged===true,emitted)}return{sessions:page,...nextCursor!==void 0?{nextCursor}:{},...liveMergeFailed?{liveMergeFailed:true}:{},...persisted.truncated?{truncated:true}:{}}}__name(listWorkspaceSessionsByMetadataForResponse,"listWorkspaceSessionsByMetadataForResponse");async function listWorkspaceSessionsForResponse(bridge,workspaceCwd,options,readOptions={}){readOptions.signal?.throwIfAborted();const runtimeBaseDir=new Storage(workspaceCwd,readOptions.runtimeBaseDir).getRuntimeBaseDir();const result=await Storage.runWithResolvedRuntimeBaseDir(runtimeBaseDir,()=>listWorkspaceSessionsForResponseInRuntime(bridge,workspaceCwd,options,{...readOptions.mergeLive!==void 0?{mergeLive:readOptions.mergeLive}:{},...readOptions.paginateMerged!==void 0?{paginateMerged:readOptions.paginateMerged}:{},...readOptions.includeGroups!==void 0?{includeGroups:readOptions.includeGroups}:{},...readOptions.signal!==void 0?{signal:readOptions.signal}:{},runtimeBaseDir}));readOptions.signal?.throwIfAborted();return result}__name(listWorkspaceSessionsForResponse,"listWorkspaceSessionsForResponse");async function listWorkspaceSessionsForResponseInRuntime(bridge,workspaceCwd,options,readOptions){readOptions.signal?.throwIfAborted();const rawSize=options?.size;const requestedSize=typeof rawSize==="number"&&Number.isSafeInteger(rawSize)?rawSize:DEFAULT_SESSION_PAGE_SIZE;const pageSize=Math.min(Math.max(requestedSize,1),MAX_SESSION_PAGE_SIZE);if(options?.view==="organized"){return listOrganizedWorkspaceSessionsForResponse(bridge,workspaceCwd,options,pageSize,readOptions)}if(readOptions.paginateMerged||options?.parentSessionId!==void 0||options?.sourceType!==void 0||options?.conversationKind!==void 0){return listWorkspaceSessionsByMetadataForResponse(bridge,workspaceCwd,options??{},pageSize,{...options?.parentSessionId!==void 0?{parentSessionId:options.parentSessionId}:{},...options?.sourceType!==void 0?{sourceType:options.sourceType}:{},...options?.sourceId!==void 0?{sourceId:options.sourceId}:{},...options?.conversationKind!==void 0?{conversationKind:options.conversationKind}:{}},readOptions)}let numericCursor;if(options?.cursor!=null){numericCursor=parseSessionCursor(options.cursor)}const isFirstPage=numericCursor===void 0;const sessionService=new SessionService(workspaceCwd);const archiveState=options?.archiveState??"active";const persisted=await sessionService.listSessions({cursor:numericCursor,size:pageSize,archiveState,excludeSourceTypes:[...HIDDEN_CATALOG_SOURCE_TYPES],...readOptions.signal?{signal:readOptions.signal}:{}});readOptions.signal?.throwIfAborted();const bySessionId=new Map;for(const item of persisted.items){bySessionId.set(item.sessionId,toSummary(item))}await enrichWorktreeSidecars(bySessionId,sessionService,archiveState,readOptions.signal);await enrichPrSidecars(bySessionId,sessionService,archiveState,readOptions.signal);readOptions.signal?.throwIfAborted();if(archiveState==="archived"||readOptions.mergeLive===false){const sessions2=[...bySessionId.values()];const nextCursor2=persisted.nextCursor!=null?String(persisted.nextCursor):void 0;return{sessions:sessions2,nextCursor:nextCursor2}}const liveSessions=bridge.listWorkspaceSessions(workspaceCwd).filter(session=>!isHiddenCatalogSource(session.sourceType));for(const live of liveSessions){const existing=bySessionId.get(live.sessionId);if(existing){bySessionId.set(live.sessionId,mergeLiveSessionSummary(existing,live))}else if(isFirstPage&&(persisted.nextCursor==null||!await(readOptions.signal?sessionService.sessionExists(live.sessionId,{signal:readOptions.signal}):sessionService.sessionExists(live.sessionId)))){bySessionId.set(live.sessionId,await liveOnlySummary(live,sessionService,readOptions.signal))}}const sessions=[...bySessionId.values()].sort((a,b)=>{const aTime=Date.parse(a.updatedAt??a.createdAt);const bTime=Date.parse(b.updatedAt??b.createdAt);return bTime-aTime});readOptions.signal?.throwIfAborted();const nextCursor=persisted.nextCursor!=null?String(persisted.nextCursor):void 0;return{sessions,nextCursor}}__name(listWorkspaceSessionsForResponseInRuntime,"listWorkspaceSessionsForResponseInRuntime");async function listLiveWorkspaceSessionsForResponse(bridge,workspaceCwd,options,readOptions={}){const runtimeBaseDir=new Storage(workspaceCwd,readOptions.runtimeBaseDir).getRuntimeBaseDir();return Storage.runWithResolvedRuntimeBaseDir(runtimeBaseDir,async()=>{const rawSize=options?.size;const requestedSize=typeof rawSize==="number"&&Number.isSafeInteger(rawSize)?rawSize:DEFAULT_SESSION_PAGE_SIZE;const pageSize=Math.min(Math.max(requestedSize,1),MAX_SESSION_PAGE_SIZE);const cursorKey=options?.cursor!==void 0?parseLiveSessionCursor(options.cursor):void 0;const sessions=bridge.listWorkspaceSessions(workspaceCwd).filter(session=>!isHiddenCatalogSource(session.sourceType)).sort((a,b)=>compareLiveSessionCursorKeys(getLiveSessionCursorKey(a),getLiveSessionCursorKey(b)));const afterCursor=cursorKey===void 0?sessions:sessions.filter(session=>compareLiveSessionCursorKeys(cursorKey,getLiveSessionCursorKey(session))<0);const page=afterCursor.slice(0,pageSize);const sessionService=new SessionService(workspaceCwd);const enriched=await Promise.all(page.map(summary=>liveOnlySummary(summary,sessionService,readOptions.signal)));const nextCursor=page.length<afterCursor.length?encodeLiveSessionCursor(getLiveSessionCursorKey(page[page.length-1])):void 0;return{sessions:enriched,...nextCursor!==void 0?{nextCursor}:{}}})}__name(listLiveWorkspaceSessionsForResponse,"listLiveWorkspaceSessionsForResponse");async function searchWorkspaceSessionsForResponse(workspaceCwd,query,options={},readOptions={}){readOptions.signal?.throwIfAborted();const runtimeBaseDir=new Storage(workspaceCwd,readOptions.runtimeBaseDir).getRuntimeBaseDir();return Storage.runWithResolvedRuntimeBaseDir(runtimeBaseDir,async()=>{const sessionService=new SessionService(workspaceCwd);const hits=await sessionService.searchSessionContent(query,{...options.maxResults!==void 0?{maxResults:options.maxResults}:{},...readOptions.signal?{signal:readOptions.signal}:{}});const bySessionId=new Map;const organizationSnapshot=await createSessionOrganizationService(workspaceCwd).readSnapshot();readOptions.signal?.throwIfAborted();for(const hit of hits){readOptions.signal?.throwIfAborted();const item=await sessionService.getSessionListItem(hit.sessionId);if(item&&!isHiddenCatalogSource(item.sourceType))bySessionId.set(hit.sessionId,applyOrganization(toSummary(item),organizationSnapshot.sessions.get(hit.sessionId)))}await enrichWorktreeSidecars(bySessionId,sessionService,"active",readOptions.signal);await enrichPrSidecars(bySessionId,sessionService,"active",readOptions.signal);readOptions.signal?.throwIfAborted();const results=[];for(const hit of hits){const session=bySessionId.get(hit.sessionId);if(session)results.push({session,snippet:hit.snippet})}return{results}})}__name(searchWorkspaceSessionsForResponse,"searchWorkspaceSessionsForResponse");async function getWorkspaceSessionInfoForResponse(bridge,workspaceCwd,options={}){const counts=await new SessionService(workspaceCwd).getSessionInfoCounts({excludeSourceTypes:[...HIDDEN_CATALOG_SOURCE_TYPES]});return{active:counts.active,archived:counts.archived,total:counts.total,...options.includeLive===false?{}:{live:bridge.listWorkspaceSessions(workspaceCwd).filter(session=>!isHiddenCatalogSource(session.sourceType)).length},expensive:true,cost:"disk_scan",...counts.truncated?{truncated:true}:{}}}__name(getWorkspaceSessionInfoForResponse,"getWorkspaceSessionInfoForResponse");function parseSessionPageSizeQuery(raw){if(typeof raw!=="string")return void 0;const trimmed=raw.trim();if(!/^[+-]?\d+$/.test(trimmed))return void 0;const parsed=Number.parseInt(trimmed,10);if(!Number.isFinite(parsed))return void 0;if(Number.isSafeInteger(parsed))return parsed;return trimmed.startsWith("-")?1:MAX_SESSION_PAGE_SIZE}__name(parseSessionPageSizeQuery,"parseSessionPageSizeQuery");init_esbuild_shims();import fs2 from"node:fs";init_esbuild_shims();import{access}from"node:fs/promises";function isBoundTask(task){return typeof task.sessionId==="string"&&task.sessionId.length>0}__name(isBoundTask,"isBoundTask");async function disableTasksForSessions(projectRoot,sessionIds,options={}){if(sessionIds.length===0)return;const targets=new Set(sessionIds);await updateCronTasks(projectRoot,tasks=>{let changed=false;const next=tasks.map(task=>{if(isBoundTask(task)&&targets.has(task.sessionId)&&task.enabled!==false){changed=true;return{...task,enabled:false,disabledByArchive:true}}return task});return changed?next:tasks},options)}__name(disableTasksForSessions,"disableTasksForSessions");async function enableTasksForSessions(projectRoot,sessionIds,now=Date.now(),options={}){if(sessionIds.length===0)return;const targets=new Set(sessionIds);await updateCronTasks(projectRoot,tasks=>{let changed=false;const next=tasks.map(task=>{if(isBoundTask(task)&&targets.has(task.sessionId)&&task.enabled===false&&task.disabledByArchive===true){changed=true;const resumed={...task,enabled:true};delete resumed.disabledByArchive;const minute=now-now%6e4;if(resumed.recurring){resumed.lastFiredAt=minute}else{resumed.createdAt=now;resumed.lastFiredAt=minute}return resumed}return task});return changed?next:tasks},options)}__name(enableTasksForSessions,"enableTasksForSessions");async function removeTasksForSessions(projectRoot,sessionIds,options={}){if(sessionIds.length===0)return;try{await access(getCronFilePath(projectRoot))}catch(error){if(error.code==="ENOENT")return;throw error}const targets=new Set(sessionIds.map(cronTaskSessionDeletionId));const removedIds=[];await updateCronTasks(projectRoot,tasks=>{const next=tasks.filter(task=>{if(!isBoundTask(task)||!targets.has(cronTaskSessionDeletionId(task.sessionId)))return true;removedIds.push(task.id);return false});return next.length===tasks.length?tasks:next},{...options,deletionIds:__name(()=>[...removedIds,...targets],"deletionIds")})}__name(removeTasksForSessions,"removeTasksForSessions");init_esbuild_shims();import fs from"node:fs";import*as fsp from"node:fs/promises";import path2 from"node:path";init_esbuild_shims();var worktreeOwnershipOpTails=new Map;async function acquireWorktreeOwnershipOp(worktreeKey){const previous=worktreeOwnershipOpTails.get(worktreeKey);let releaseGate;const gate=new Promise(resolve=>{releaseGate=resolve});const tail=(previous??Promise.resolve()).then(()=>gate);worktreeOwnershipOpTails.set(worktreeKey,tail);if(previous){await previous}let released=false;return()=>{if(released)return;released=true;releaseGate();if(worktreeOwnershipOpTails.get(worktreeKey)===tail){worktreeOwnershipOpTails.delete(worktreeKey)}}}__name(acquireWorktreeOwnershipOp,"acquireWorktreeOwnershipOp");function canonicalPath(candidate){try{return fs.realpathSync(candidate)}catch{return candidate}}__name(canonicalPath,"canonicalPath");function logWarning(message){writeStderrLine(`qwen serve: ${message}`)}__name(logWarning,"logWarning");function logWorktreeCleanupPreserve(sessionId,reason){logWarning(`worktree cleanup preserved checkout action=delete session=${safeLogValue(sessionId)} reason=${safeLogValue(reason)}`)}__name(logWorktreeCleanupPreserve,"logWorktreeCleanupPreserve");async function preclassifyWorktreeCleanup(service,sessionId,runtimeWorkspaceCwd){let sidecarPath=service.getWorktreeSessionPath(sessionId);let sidecar=await readWorktreeSessionStrict(sidecarPath);if(sidecar.state==="missing"){const archivedPath=service.getWorktreeSessionPathForArchiveState(sessionId,"archived");if(archivedPath!==sidecarPath){sidecarPath=archivedPath;sidecar=await readWorktreeSessionStrict(sidecarPath)}}if(sidecar.state==="missing")return void 0;if(sidecar.state==="invalid"){logWorktreeCleanupPreserve(sessionId,`unreadable sidecar (${sidecar.reason})`);return void 0}const session=sidecar.session;if(session.workspaceCwd===void 0)return void 0;if(session.supersededBy!==void 0)return void 0;if(!path2.isAbsolute(session.workspaceCwd)||!path2.isAbsolute(session.originalCwd)){logWorktreeCleanupPreserve(sessionId,"sidecar base is not an absolute path");return void 0}if(runtimeWorkspaceCwd!==void 0){if(canonicalPath(session.workspaceCwd)!==canonicalPath(runtimeWorkspaceCwd)){logWorktreeCleanupPreserve(sessionId,"sidecar belongs to another workspace");return void 0}const workspaceRoots=[canonicalPath(runtimeWorkspaceCwd)];try{const repoTop=await new GitWorktreeService(runtimeWorkspaceCwd).getRepoTopLevel();if(repoTop&&canonicalPath(repoTop)!==workspaceRoots[0]){workspaceRoots.push(canonicalPath(repoTop))}}catch{}if(!workspaceRoots.includes(canonicalPath(session.originalCwd))){logWorktreeCleanupPreserve(sessionId,"sidecar original cwd is outside the accepted roots");return void 0}}return{sessionId,sidecar:session,sidecarPath,lockKey:canonicalPath(session.worktreePath)}}__name(preclassifyWorktreeCleanup,"preclassifyWorktreeCleanup");function acquireWorktreeCleanupLock(plan){return acquireWorktreeOwnershipOp(plan.lockKey)}__name(acquireWorktreeCleanupLock,"acquireWorktreeCleanupLock");async function worktreeAllowedRoots(workspaceCwd,originalCwd){const roots=new Set;for(const base of[workspaceCwd,originalCwd]){if(!path2.isAbsolute(base))continue;roots.add(path2.join(base,".qwen","worktrees"));try{const repoTop=await new GitWorktreeService(base).getRepoTopLevel();if(repoTop){roots.add(path2.join(repoTop,".qwen","worktrees"))}}catch{}}return[...roots]}__name(worktreeAllowedRoots,"worktreeAllowedRoots");async function verifyWorktreeCleanupOwnership(plan){const{sessionId,sidecar}=plan;const locked=await readWorktreeSessionStrict(plan.sidecarPath);if(locked.state!=="valid"){return{ok:false,reason:locked.state==="missing"?"sidecar disappeared before delete":`unreadable sidecar (${locked.reason})`}}const current=locked.session;if(current.workspaceCwd===void 0||current.supersededBy!==void 0||current.slug!==sidecar.slug||current.worktreePath!==sidecar.worktreePath||current.originalCwd!==sidecar.originalCwd||current.workspaceCwd!==sidecar.workspaceCwd){return{ok:false,reason:"sidecar changed before delete"}}const marker=await readWorktreeSessionMarkerStrict(plan.lockKey);if(marker.state!=="valid"||marker.sessionId!==sessionId){return{ok:false,reason:marker.state==="valid"?"marker names another session":`marker ${marker.state}`}}const allowedRoots=await worktreeAllowedRoots(current.workspaceCwd,current.originalCwd);const contained=allowedRoots.some(root=>{try{const realRoot=fs.realpathSync(root);return plan.lockKey===realRoot||plan.lockKey.startsWith(realRoot+path2.sep)}catch{return false}});if(!contained){return{ok:false,reason:"checkout outside workspace worktree roots"}}const chatsDir=path2.dirname(plan.sidecarPath);const ownFile=path2.basename(plan.sidecarPath);let entries;try{entries=await fsp.readdir(chatsDir)}catch(error){return{ok:false,reason:`sidecar scan failed: ${error instanceof Error?error.message:String(error)}`}}for(const entry of entries){if(!entry.endsWith(".worktree.json")||entry===ownFile)continue;const other=await readWorktreeSessionStrict(path2.join(chatsDir,entry));if(other.state==="missing")continue;if(other.state==="invalid"){return{ok:false,reason:`unreadable sibling sidecar ${entry}`}}if(canonicalPath(other.session.worktreePath)===plan.lockKey){if(other.session.supersededBy===sessionId)continue;return{ok:false,reason:`checkout shared with ${entry}`}}}const removalTarget=canonicalPath(new GitWorktreeService(current.originalCwd).getUserWorktreePath(current.slug));if(removalTarget!==plan.lockKey){return{ok:false,reason:"slug does not resolve to the verified checkout"}}plan.sidecar=current;return{ok:true}}__name(verifyWorktreeCleanupOwnership,"verifyWorktreeCleanupOwnership");async function checkoutStillPopulated(worktreePath){try{return(await fsp.readdir(worktreePath)).length>0}catch{return false}}__name(checkoutStillPopulated,"checkoutStillPopulated");async function executeWorktreeCleanup(plan){const{sessionId,sidecar}=plan;const marker=await readWorktreeSessionMarkerStrict(plan.lockKey);if(marker.state!=="valid"||marker.sessionId!==sessionId){logWorktreeCleanupPreserve(sessionId,"marker changed after delete");return}if(await worktreeHasWork(plan.lockKey)){logWorktreeCleanupPreserve(sessionId,"checkout has uncommitted work");return}const result=await new GitWorktreeService(sidecar.originalCwd).removeUserWorktree(sidecar.slug,{deleteBranch:true});if(!result.success){const errorText=result.error??"unknown error";if(await checkoutStillPopulated(plan.lockKey)){logWorktreeCleanupPreserve(sessionId,`checkout removal failed: ${errorText}`)}else{logWarning(`worktree cleanup removal failed, checkout may be partially deleted action=delete session=${safeLogValue(sessionId)} reason=${safeLogValue(errorText)}`)}return}if(result.branchPreserved){logWarning(`worktree cleanup removed checkout but kept branch action=delete session=${safeLogValue(sessionId)} slug=${safeLogValue(sidecar.slug)} branch=${safeLogValue(sidecar.worktreeBranch)} reason=unmerged commits`)}}__name(executeWorktreeCleanup,"executeWorktreeCleanup");var DaemonDrainingError=class extends Error{static{__name(this,"DaemonDrainingError")}name="DaemonDrainingError";code="daemon_draining";constructor(){super("The daemon is draining and no longer accepts session maintenance.")}};var SessionArchiveCoordinator=class{static{__name(this,"SessionArchiveCoordinator")}exclusive=new Set;shared=new Map;sharedDrains=new Map;maintenanceSealed=false;activeMaintenance=0;maintenanceDrain;assertNotTransitioning(sessionId){if(this.exclusive.has(normalizeSessionIdForLookup(sessionId))){throw new SessionArchivingError(sessionId)}}async runExclusiveMany(sessionIds,fn){if(this.maintenanceSealed){throw new DaemonDrainingError}const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];for(const sessionId of uniqueSessionIds){this.assertNotTransitioning(sessionId);if((this.shared.get(sessionId)??0)>0){throw new SessionArchivingError(sessionId,"shared")}}for(const sessionId of uniqueSessionIds){this.exclusive.add(sessionId)}this.activeMaintenance++;try{return await fn()}finally{for(const sessionId of uniqueSessionIds){this.exclusive.delete(sessionId)}this.activeMaintenance--;if(this.activeMaintenance===0){this.maintenanceDrain?.resolve();this.maintenanceDrain=void 0}}}async runExclusiveAfterShared(rawSessionId,fn){if(this.maintenanceSealed){throw new DaemonDrainingError}const sessionId=normalizeSessionIdForLookup(rawSessionId);this.assertNotTransitioning(sessionId);this.exclusive.add(sessionId);this.activeMaintenance++;try{const sharedCount=this.shared.get(sessionId)??0;if(sharedCount>0){let drain=this.sharedDrains.get(sessionId);if(!drain){let resolve;const promise=new Promise(done=>{resolve=done});drain={promise,resolve};this.sharedDrains.set(sessionId,drain)}await drain.promise}return await fn()}finally{this.sharedDrains.delete(sessionId);this.exclusive.delete(sessionId);this.activeMaintenance--;if(this.activeMaintenance===0){this.maintenanceDrain?.resolve();this.maintenanceDrain=void 0}}}sealMaintenanceAndWait(){this.maintenanceSealed=true;if(this.activeMaintenance===0){return Promise.resolve()}if(!this.maintenanceDrain){let resolve;const promise=new Promise(done=>{resolve=done});this.maintenanceDrain={promise,resolve}}return this.maintenanceDrain.promise}async runSharedMany(sessionIds,fn){if(this.maintenanceSealed){throw new DaemonDrainingError}const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];for(const sessionId of uniqueSessionIds){this.assertNotTransitioning(sessionId)}for(const sessionId of uniqueSessionIds){this.shared.set(sessionId,(this.shared.get(sessionId)??0)+1)}this.activeMaintenance++;try{return await fn()}finally{for(const sessionId of uniqueSessionIds){const count=(this.shared.get(sessionId)??1)-1;if(count<=0){this.shared.delete(sessionId);this.sharedDrains.get(sessionId)?.resolve();this.sharedDrains.delete(sessionId)}else{this.shared.set(sessionId,count)}}this.activeMaintenance--;if(this.activeMaintenance===0){this.maintenanceDrain?.resolve();this.maintenanceDrain=void 0}}}};async function runWithDaemonWriterLease(params){const{action,sessionId,service,mutate,mutationAppliedAfterError,afterMutationApplied}=params;let lease;try{const leaseOptions={processKind:"daemon",reclaimPolicy:"never",takeoverPolicy:"certified"};try{lease=await service.acquireSessionWriterLease(sessionId,leaseOptions)}catch(error){if(!(error instanceof SessionWriterUnavailableError)&&!(error instanceof SessionTranscriptChangedError)){throw error}lease=await service.acquireSealedManagedMaintenanceLease(sessionId)??await service.acquireSessionMaintenanceLease(sessionId,leaseOptions)}}catch(error){return{mutationApplied:false,error}}let value;let mutationApplied=false;let mutationError;try{const mutation=await mutate(()=>lease.assertOwnedAndUnchanged(),()=>lease.assertCleanupOwned());value=mutation.value;mutationApplied=mutation.mutationApplied}catch(error){mutationError=error;try{mutationApplied=await mutationAppliedAfterError()}catch{mutationApplied=false}}let maintenanceError;if(mutationApplied){try{await afterMutationApplied()}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=${action} workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}}let releaseError;try{await lease.release()}catch(error){releaseError=error}if(releaseError!==void 0){logMaintenanceLeaseReleaseFailure({action,workspace:service.getProjectRoot(),sessionId,error:releaseError,mutationApplied});if(mutationError!==void 0){logSessionArchiveWarning(`session maintenance mutation also failed action=${action} workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(mutationError))}`)}return{mutationApplied,error:releaseError,maintenanceError}}if(mutationError!==void 0){return{mutationApplied,error:mutationError,maintenanceError}}return{value,mutationApplied,maintenanceError}}__name(runWithDaemonWriterLease,"runWithDaemonWriterLease");function logMaintenanceLeaseReleaseFailure(params){const errorKind=typeof params.error==="object"&&params.error!==null&&typeof params.error.errorKind==="string"?params.error.errorKind:"unknown";logSessionArchiveWarning(`session maintenance lease release failed action=${params.action} workspace=${safeLogValue(params.workspace)} session=${safeLogValue(params.sessionId)} errorKind=${safeLogValue(errorKind)} mutationApplied=${params.mutationApplied}`)}__name(logMaintenanceLeaseReleaseFailure,"logMaintenanceLeaseReleaseFailure");async function classifySessionLocation(service,sessionId){return service.getMaintainableSessionLocation(sessionId)}__name(classifySessionLocation,"classifySessionLocation");function sessionLocationError(sessionId){const error=new SessionConflictError(sessionId);error.message=`Session "${sessionId}" exists in both active and archived directories. Retry with resolveConflicts: true to keep one copy.`;return error}__name(sessionLocationError,"sessionLocationError");function updateScheduledTaskForMaintenance(service,sessionId,action,assertCanMutate){if(action==="archive"){return disableTasksForSessions(service.getProjectRoot(),[sessionId],{assertCanCommit:assertCanMutate})}if(action==="unarchive"){return enableTasksForSessions(service.getProjectRoot(),[sessionId],Date.now(),{assertCanCommit:assertCanMutate})}return removeTasksForSessions(service.getProjectRoot(),[sessionId],{assertCanCommit:assertCanMutate})}__name(updateScheduledTaskForMaintenance,"updateScheduledTaskForMaintenance");async function deletePersistedSessionWithLease(service,sessionId,assertCanMutate){const initialLocation=await classifySessionLocation(service,sessionId);if(initialLocation===void 0){let maintenanceError;try{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"delete",assertCanMutate)}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=delete workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}return{kind:"notFound",mutationApplied:false,maintenanceError}}const mutation=await runWithDaemonWriterLease({action:"delete",sessionId,service,mutate:__name(async(assertOwnedAndUnchanged,assertCleanupOwned)=>{const lockedLocation=await classifySessionLocation(service,sessionId);if(lockedLocation===void 0){return{value:"notFound",mutationApplied:false}}const removed=await service.removeSession(sessionId,{assertStorageUnchanged:assertOwnedAndUnchanged,assertCanMutate,assertCleanupOwned});return{value:removed?"removed":"notFound",mutationApplied:removed}},"mutate"),mutationAppliedAfterError:__name(async()=>await classifySessionLocation(service,sessionId)===void 0,"mutationAppliedAfterError"),afterMutationApplied:__name(async()=>{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"delete",assertCanMutate)},"afterMutationApplied")});if(mutation.error!==void 0){return{kind:"error",error:mutation.error,mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}return{kind:mutation.value??"notFound",mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}__name(deletePersistedSessionWithLease,"deletePersistedSessionWithLease");async function deleteDaemonSessions(params){const{sessionIds,service,bridge,coordinator,coordinatorLockHeld=false,assertCanMutate,runtimeWorkspaceCwd,onError}=params;const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];if(!coordinatorLockHeld){for(const sessionId of uniqueSessionIds){coordinator.assertNotTransitioning(sessionId)}}const runWithWorktreeCleanup=__name(async(sessionId,mutateSession)=>{const activeSidecarPath=service.getWorktreeSessionPath(sessionId);const archivedSidecarPath=service.getWorktreeSessionPathForArchiveState(sessionId,"archived");if(!fs2.existsSync(activeSidecarPath)&&(archivedSidecarPath===activeSidecarPath||!fs2.existsSync(archivedSidecarPath))){return coordinator.runExclusiveMany([sessionId],mutateSession)}const cleanupPlan=await preclassifyWorktreeCleanup(service,sessionId,runtimeWorkspaceCwd);if(!cleanupPlan){return coordinator.runExclusiveMany([sessionId],mutateSession)}const releaseCleanupLock=await acquireWorktreeCleanupLock(cleanupPlan);try{const ownership=await verifyWorktreeCleanupOwnership(cleanupPlan);if(!ownership.ok){logWorktreeCleanupPreserve(sessionId,ownership.reason)}const result=await coordinator.runExclusiveMany([sessionId],mutateSession);if(ownership.ok&&result.kind==="removed"){try{assertCanMutate?.();await executeWorktreeCleanup(cleanupPlan)}catch(error){logWorktreeCleanupPreserve(sessionId,`cleanup execution failed: ${errorMessage(error)}`)}}return result}finally{releaseCleanupLock()}},"runWithWorktreeCleanup");const results=await Promise.all(uniqueSessionIds.map(async sessionId=>{try{const mutateSession=__name(async()=>{assertCanMutate?.();const removePersistedSession=__name(async()=>{const result=await deletePersistedSessionWithLease(service,sessionId,assertCanMutate);if(result.kind==="error"){onError?.({phase:"remove",sessionId,error:errorMessage(result.error)});return result}try{if(assertCanMutate){await bridge.deleteSessionAttachments(sessionId,{assertCanCommit:assertCanMutate})}else{await bridge.deleteSessionAttachments(sessionId)}return result}catch(error){onError?.({phase:"delete",sessionId,error:errorMessage(error)});return{kind:"error",error,mutationApplied:result.mutationApplied,maintenanceError:result.maintenanceError}}},"removePersistedSession");try{await bridge.closeSession(sessionId)}catch(error){if(isSessionNotFoundError(error)&&error.code!=="session_closing"){return await removePersistedSession()}onError?.({phase:"close",sessionId,error:errorMessage(error)});return{kind:"error",error,mutationApplied:false}}return await removePersistedSession()},"mutateSession");return await(coordinatorLockHeld?mutateSession():runWithWorktreeCleanup(sessionId,mutateSession))}catch(error){if(error instanceof DaemonDrainingError){throw error}onError?.({phase:"delete",sessionId,error:errorMessage(error)});return{kind:"error",error,mutationApplied:false}}}));const removed=[];const notFound=[];const errors=[];for(let i=0;i<results.length;i++){const sessionId=uniqueSessionIds[i];const result=results[i];if(result.kind==="removed"){removed.push(sessionId)}else if(result.kind==="notFound"){notFound.push(sessionId)}else{errors.push({sessionId,error:errorMessage(result.error)})}if(result.maintenanceError!==void 0){errors.push({sessionId,error:"Scheduled task lifecycle update failed."})}}return{removed,notFound,errors}}__name(deleteDaemonSessions,"deleteDaemonSessions");async function deleteDaemonSessionIfOrphan(params){const{sessionId,service,bridge,coordinator}=params;coordinator.assertNotTransitioning(sessionId);const result=await coordinator.runExclusiveMany([sessionId],async()=>{let killed=false;try{killed=await bridge.killSession(sessionId,{requireZeroAttaches:true})}catch(error){if(!isSessionNotFoundError(error))throw error;killed=true}if(!killed){try{bridge.getSessionSummary(sessionId);return void 0}catch(error){if(!isSessionNotFoundError(error))throw error}}const removal=await deletePersistedSessionWithLease(service,sessionId);if(removal.kind!=="error"){await bridge.deleteSessionAttachments(sessionId)}return removal});if(result===void 0){return false}if(result.kind==="error"){throw result.error}bridge.markSessionCatalogChanged();return true}__name(deleteDaemonSessionIfOrphan,"deleteDaemonSessionIfOrphan");async function assertSessionLoadable(workspaceCwd,sessionId,runtimeBaseDir,options={}){const service=new SessionService(workspaceCwd,{runtimeBaseDir});const location=await service.getSessionLocation(sessionId);if(location==="archived"){throw new SessionArchivedError(sessionId)}if(location==="conflict"){if(options.allowActiveConflict){try{await service.findSessionIdIgnoringCase(sessionId)}catch(error){if(error instanceof SessionIdCaseConflictError&&error.reason==="case_conflict"&&error.candidateSessionId===sessionId){return"active"}if(!(error instanceof SessionIdCaseConflictError))throw error}}throw new SessionConflictError(sessionId)}return location}__name(assertSessionLoadable,"assertSessionLoadable");async function resolveSessionIdForRestore(service,sessionId){try{return await service.findSessionIdIgnoringCase(sessionId)}catch(error){if(error instanceof SessionIdCaseConflictError){if(error.candidateSessionId===sessionId)return sessionId;throw new SessionConflictError(sessionId)}throw error}}__name(resolveSessionIdForRestore,"resolveSessionIdForRestore");async function assertSessionRestorable(workspaceCwd,sessionId,requestedSessionId,runtimeBaseDir){const location=await new SessionService(workspaceCwd,{runtimeBaseDir}).getSessionLocation(sessionId);if(location==="archived"){throw new SessionArchivedError(sessionId)}if(location==="conflict"){if(sessionId!==requestedSessionId){throw new SessionConflictError(requestedSessionId)}return"active"}return location}__name(assertSessionRestorable,"assertSessionRestorable");async function assertSessionArchived(workspaceCwd,sessionId,runtimeBaseDir){const location=await new SessionService(workspaceCwd,{runtimeBaseDir}).getSessionLocation(sessionId);if(location==="active"){throw new SessionNotArchivedError(sessionId)}if(location==="conflict"){throw new SessionConflictError(sessionId)}if(location===void 0){throw new SessionNotFoundError(sessionId)}}__name(assertSessionArchived,"assertSessionArchived");function isSessionNotFoundError(err){return err instanceof SessionNotFoundError||err instanceof Error&&err.name==="SessionNotFoundError"}__name(isSessionNotFoundError,"isSessionNotFoundError");function logSessionArchiveResult(action,result){const changedLabel=action==="archive"?"archived":"unarchived";const alreadyLabel=action==="archive"?"alreadyArchived":"alreadyActive";const details=[`requested=${result.requested.length} requestedIds=${formatSessionIds(result.requested)}`,`${changedLabel}=${result.changed.length} ${changedLabel}Ids=${formatSessionIds(result.changed)}`,`${alreadyLabel}=${result.already.length} ${alreadyLabel}Ids=${formatSessionIds(result.already)}`,`notFound=${result.notFound.length} notFoundIds=${formatSessionIds(result.notFound)}`,`errors=${result.errors.length} errorIds=${formatSessionErrors(result.errors)}`].join(" ");writeStderrLine(`qwen serve: sessions ${action} result ${details}`)}__name(logSessionArchiveResult,"logSessionArchiveResult");function formatSessionIds(sessionIds){return`[${sessionIds.map(sessionId=>safeLogValue(sessionId)).join(",")}]`}__name(formatSessionIds,"formatSessionIds");function formatSessionErrors(errors){return`[${errors.map(({sessionId,error})=>`${safeLogValue(sessionId)}:${safeLogValue(errorMessage(error))}`).join(",")}]`}__name(formatSessionErrors,"formatSessionErrors");function errorMessage(error){return error instanceof Error?error.message:String(error)}__name(errorMessage,"errorMessage");function logSessionArchiveWarning(message){writeStderrLine(`qwen serve: ${sanitizeLogLine(message)}`)}__name(logSessionArchiveWarning,"logSessionArchiveWarning");function sanitizeLogLine(message){return message.replace(LOG_LINE_UNSAFE_RE," ").slice(0,4096)}__name(sanitizeLogLine,"sanitizeLogLine");async function archiveDaemonSessions(params){const{sessionIds,service,bridge,coordinator,coordinatorLockHeld=false,resolveConflicts=false,requireIdle=false,assertCanMutate}=params;const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];if(!coordinatorLockHeld){for(const sessionId of uniqueSessionIds){coordinator.assertNotTransitioning(sessionId)}}const results=await Promise.all(uniqueSessionIds.map(async sessionId=>{try{const mutateSession=__name(async()=>{assertCanMutate?.();try{await bridge.closeSession(sessionId,void 0,{requireAgentClose:true,requireIdle})}catch(error){if(!isSessionNotFoundError(error)||error.code==="session_closing"){return{kind:"error",error,mutationApplied:false}}}const initialLocation=await classifySessionLocation(service,sessionId);if(initialLocation===void 0){return{kind:"notFound",mutationApplied:false}}if(initialLocation==="conflict"&&!resolveConflicts){return{kind:"error",error:sessionLocationError(sessionId),mutationApplied:false}}const mutation=await runWithDaemonWriterLease({action:"archive",sessionId,service,mutate:__name(async(assertOwnedAndUnchanged,assertCleanupOwned)=>{const lockedLocation=await classifySessionLocation(service,sessionId);if(lockedLocation===void 0){return{value:"notFound",mutationApplied:false}}if(lockedLocation==="conflict"&&!resolveConflicts){throw sessionLocationError(sessionId)}const result=await service.archiveSessions([sessionId],{resolveConflicts,assertStorageUnchanged:assertOwnedAndUnchanged,assertCanMutate,assertCleanupOwned});if(result.errors[0])throw result.errors[0].error;if(result.archived.length>0){return{value:result.resolvedConflicts.length?"resolvedConflict":"archived",mutationApplied:true}}return{value:result.alreadyArchived.length>0?"alreadyArchived":"notFound",mutationApplied:false}},"mutate"),mutationAppliedAfterError:__name(async()=>await classifySessionLocation(service,sessionId)==="archived","mutationAppliedAfterError"),afterMutationApplied:__name(async()=>{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"archive",assertCanMutate)},"afterMutationApplied")});if(mutation.error!==void 0){return{kind:"error",error:mutation.error,mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}let maintenanceError=mutation.maintenanceError;if(mutation.value==="alreadyArchived"){try{await updateScheduledTaskForMaintenance(service,sessionId,"archive",assertCanMutate)}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=archive workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}}return{kind:mutation.value??"notFound",mutationApplied:mutation.mutationApplied,maintenanceError}},"mutateSession");return await(coordinatorLockHeld?mutateSession():coordinator.runExclusiveMany([sessionId],mutateSession))}catch(error){if(error instanceof DaemonDrainingError){throw error}return{kind:"error",error,mutationApplied:false,maintenanceError:void 0}}}));const archived=[];const alreadyArchived=[];const resolvedConflicts=[];const notFound=[];const errors=[];for(let i=0;i<results.length;i++){const sessionId=uniqueSessionIds[i];const result=results[i];if(result.kind==="archived")archived.push(sessionId);else if(result.kind==="resolvedConflict"){archived.push(sessionId);resolvedConflicts.push(sessionId)}else if(result.kind==="alreadyArchived"){alreadyArchived.push(sessionId)}else if(result.kind==="notFound")notFound.push(sessionId);else errors.push({sessionId,error:result.error});if("maintenanceError"in result&&result.maintenanceError!==void 0){errors.push({sessionId,error:result.maintenanceError})}}logSessionArchiveResult("archive",{requested:uniqueSessionIds,changed:archived,already:alreadyArchived,notFound,errors});return{archived,alreadyArchived,resolvedConflicts,notFound,errors}}__name(archiveDaemonSessions,"archiveDaemonSessions");async function unarchiveDaemonSessions(params){const{sessionIds,service,coordinator,coordinatorLockHeld=false,resolveConflicts=false,assertCanMutate}=params;const uniqueSessionIds=[...new Set(sessionIds.map(normalizeSessionIdForLookup))];if(!coordinatorLockHeld){for(const sessionId of uniqueSessionIds){coordinator.assertNotTransitioning(sessionId)}}const results=await Promise.all(uniqueSessionIds.map(async sessionId=>{try{const mutateSession=__name(async()=>{assertCanMutate?.();const initialLocation=await classifySessionLocation(service,sessionId);if(initialLocation===void 0){return{kind:"notFound",mutationApplied:false}}if(initialLocation==="conflict"&&!resolveConflicts){return{kind:"error",error:sessionLocationError(sessionId),mutationApplied:false}}const mutation=await runWithDaemonWriterLease({action:"unarchive",sessionId,service,mutate:__name(async(assertOwnedAndUnchanged,assertCleanupOwned)=>{const lockedLocation=await classifySessionLocation(service,sessionId);if(lockedLocation===void 0){return{value:"notFound",mutationApplied:false}}if(lockedLocation==="conflict"&&!resolveConflicts){throw sessionLocationError(sessionId)}const result=await service.unarchiveSessions([sessionId],{resolveConflicts,assertStorageUnchanged:assertOwnedAndUnchanged,assertCanMutate,assertCleanupOwned});if(result.errors[0])throw result.errors[0].error;if(result.unarchived.length>0){return{value:result.resolvedConflicts.length?"resolvedConflict":"unarchived",mutationApplied:true}}return{value:result.alreadyActive.length>0?"alreadyActive":"notFound",mutationApplied:false}},"mutate"),mutationAppliedAfterError:__name(async()=>await classifySessionLocation(service,sessionId)==="active","mutationAppliedAfterError"),afterMutationApplied:__name(async()=>{assertCanMutate?.();await updateScheduledTaskForMaintenance(service,sessionId,"unarchive",assertCanMutate)},"afterMutationApplied")});if(mutation.error!==void 0){return{kind:"error",error:mutation.error,mutationApplied:mutation.mutationApplied,maintenanceError:mutation.maintenanceError}}let maintenanceError=mutation.maintenanceError;if(mutation.value==="alreadyActive"){try{await updateScheduledTaskForMaintenance(service,sessionId,"unarchive",assertCanMutate)}catch(error){maintenanceError=error;logSessionArchiveWarning(`scheduled task lifecycle update failed action=unarchive workspace=${safeLogValue(service.getProjectRoot())} session=${safeLogValue(sessionId)} error=${safeLogValue(errorMessage(error))}`)}}return{kind:mutation.value??"notFound",mutationApplied:mutation.mutationApplied,maintenanceError}},"mutateSession");return await(coordinatorLockHeld?mutateSession():coordinator.runExclusiveMany([sessionId],mutateSession))}catch(error){if(error instanceof DaemonDrainingError){throw error}return{kind:"error",error,mutationApplied:false,maintenanceError:void 0}}}));const unarchived=[];const alreadyActive=[];const resolvedConflicts=[];const notFound=[];const errors=[];for(let i=0;i<results.length;i++){const sessionId=uniqueSessionIds[i];const result=results[i];if(result.kind==="unarchived")unarchived.push(sessionId);else if(result.kind==="resolvedConflict"){unarchived.push(sessionId);resolvedConflicts.push(sessionId)}else if(result.kind==="alreadyActive")alreadyActive.push(sessionId);else if(result.kind==="notFound")notFound.push(sessionId);else errors.push({sessionId,error:result.error});if(result.maintenanceError!==void 0){errors.push({sessionId,error:result.maintenanceError})}}logSessionArchiveResult("unarchive",{requested:uniqueSessionIds,changed:unarchived,already:alreadyActive,notFound,errors});return{unarchived,alreadyActive,resolvedConflicts,notFound,errors}}__name(unarchiveDaemonSessions,"unarchiveDaemonSessions");init_esbuild_shims();import{execFile}from"node:child_process";import{promisify}from"node:util";var execFileAsync=promisify(execFile);var a1AvailabilityVerified=false;var defaultA1Exec=__name(async(args,options)=>{const{stdout}=await execFileAsync("a1",[...args],{...options,encoding:"utf8",windowsHide:true});return{stdout}},"defaultA1Exec");var a1Exec=defaultA1Exec;var A1_TIMEOUT_MS=2e4;var A1_MAX_BUFFER=16*1024*1024;var GIT_ORIGIN_TIMEOUT_MS=5e3;var A1_VERSION_TIMEOUT_MS=1e4;var A1_ERROR_MESSAGE_MAX=512;var AONE_DETAIL_URL_HOST="code.alibaba-inc.com";var AONE_MAX_MR_VIEW_CALLS_PER_RUN=25;var AoneCliUnavailableError=class extends Error{static{__name(this,"AoneCliUnavailableError")}};var AoneCommandError=class extends Error{static{__name(this,"AoneCommandError")}};function mapAoneMrState(raw){switch(raw?.toLowerCase()){case"merged":return"merged";case"closed":return"closed";default:return"open"}}__name(mapAoneMrState,"mapAoneMrState");async function resolveAoneWorkspaceRepo(workspaceCwd,env){const gitRoot=findGitRoot(workspaceCwd);if(!gitRoot)return void 0;let origin;try{({stdout:origin}=await execFileAsync("git",["remote","get-url","origin"],{cwd:gitRoot,timeout:GIT_ORIGIN_TIMEOUT_MS,encoding:"utf8",windowsHide:true,env:gitEnv(env)}))}catch{return void 0}const identity=parseRemoteUrl(origin.trim());if(!identity||!isAoneCanonicalHost(identity.host))return void 0;return{gitRoot,repoPath:identity.groupPath}}__name(resolveAoneWorkspaceRepo,"resolveAoneWorkspaceRepo");function isAoneDetailUrlForRepo(repoPath,number,url){return canonicalSessionPrUrl(url)===canonicalSessionPrUrl(`https://${AONE_DETAIL_URL_HOST}/${repoPath}/codereview/${number}`)}__name(isAoneDetailUrlForRepo,"isAoneDetailUrlForRepo");function isA1ErrorObject(value){return typeof value==="object"&&value!==null&&value["schemaVersion"]==="a1.error/v1"}__name(isA1ErrorObject,"isA1ErrorObject");function a1ErrorMessage(error){if(error?.killed===true){return`a1 timed out after ${A1_TIMEOUT_MS/1e3}s`}const stderr=error?.stderr;const raw=typeof stderr==="string"&&stderr.trim()?stderr:error instanceof Error?error.message:String(error);return raw.replace(/\s+/g," ").trim().slice(0,A1_ERROR_MESSAGE_MAX)}__name(a1ErrorMessage,"a1ErrorMessage");function assertA1Version(stdout){const triple=parseA1Version(stdout);const floor=parseA1Version(A1_MIN_VERSION);if(triple&&floor&&!a1VersionAtLeast(triple,floor)){throw new AoneCliUnavailableError(`a1 ${A1_MIN_VERSION}+ is required (found ${stdout.trim().split("\n")[0]}); upgrade from https://code.alibaba-inc.com/aone/a1`)}}__name(assertA1Version,"assertA1Version");async function runA1Json(args){let stdout;try{({stdout}=await a1Exec([...args,"--format","json"],{timeout:A1_TIMEOUT_MS,maxBuffer:A1_MAX_BUFFER}))}catch(error){if(error.code==="ENOENT"){throw new AoneCliUnavailableError("a1 CLI not installed; install it and run `a1 auth login`")}const errorStdout=error?.stdout;if(typeof errorStdout==="string"&&errorStdout.trim()){try{const parsed2=JSON.parse(errorStdout);if(isA1ErrorObject(parsed2)){throw new AoneCommandError(parsed2.message||"a1 command failed")}}catch(parseError){if(parseError instanceof AoneCommandError)throw parseError}}throw new AoneCommandError(a1ErrorMessage(error))}let parsed;try{parsed=JSON.parse(stdout)}catch{throw new AoneCommandError("a1 returned non-JSON output")}if(isA1ErrorObject(parsed)){throw new AoneCommandError(parsed.message||"a1 command failed")}return parsed}__name(runA1Json,"runA1Json");async function checkA1Available(){if(a1AvailabilityVerified)return;let stdout;try{({stdout}=await a1Exec(["--version"],{timeout:A1_VERSION_TIMEOUT_MS}))}catch(error){if(error.code==="ENOENT"){throw new AoneCliUnavailableError("a1 CLI not installed; install it and run `a1 auth login`")}return}assertA1Version(stdout);a1AvailabilityVerified=true}__name(checkA1Available,"checkA1Available");function hasControlCharacter(value){return Array.from(value).some(character=>{const code=character.charCodeAt(0);return code<=31||code===127})}__name(hasControlCharacter,"hasControlCharacter");function parseAoneMrView(raw,id){const mr=raw!==null&&typeof raw==="object"?raw["mergeRequest"]:void 0;if(mr===null||typeof mr!=="object"){throw new AoneCommandError("unexpected a1 mr view output")}const v=mr;const url=typeof v["detailUrl"]==="string"?v["detailUrl"]:"";if(!/^https?:\/\//i.test(url)){throw new AoneCommandError("a1 mr view returned no detailUrl")}if(url.length>SESSION_PR_URL_MAX_LENGTH){throw new AoneCommandError("a1 mr view returned an oversized detailUrl")}if(hasControlCharacter(url)){throw new AoneCommandError("a1 mr view returned a malformed detailUrl")}return{number:id,url,state:mapAoneMrState(typeof v["state"]==="string"?v["state"]:void 0)}}__name(parseAoneMrView,"parseAoneMrView");async function viewAoneMergeRequest(repoPath,id){await checkA1Available();const parsed=await runA1Json(["repo","mr","view",String(id),"--repo",repoPath]);return parseAoneMrView(parsed,id)}__name(viewAoneMergeRequest,"viewAoneMergeRequest");var defaultAoneMrBackend={view:viewAoneMergeRequest};export{laterActivityTimestamp,invalidateWorkspaceSessionListCache,InvalidCursorError,listWorkspaceSessionsForResponse,listLiveWorkspaceSessionsForResponse,searchWorkspaceSessionsForResponse,getWorkspaceSessionInfoForResponse,parseSessionPageSizeQuery,acquireWorktreeOwnershipOp,DaemonDrainingError,SessionArchiveCoordinator,deleteDaemonSessions,deleteDaemonSessionIfOrphan,assertSessionLoadable,resolveSessionIdForRestore,assertSessionRestorable,assertSessionArchived,logSessionArchiveWarning,archiveDaemonSessions,unarchiveDaemonSessions,AONE_MAX_MR_VIEW_CALLS_PER_RUN,resolveAoneWorkspaceRepo,isAoneDetailUrlForRepo,defaultAoneMrBackend};
4
4
  /**
5
5
  * @license
6
6
  * Copyright 2026 Qwen Team
@@ -1,6 +1,6 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import{createWorkspaceRuntimeSessionService}from"./chunk-SQQORHMS.js";import{parseCallerSuppliedSessionId}from"./chunk-LGFF5PJA.js";import{isInternalWorkspaceRuntime}from"./chunk-M5KJJE2X.js";import{canonicalizeWorkspace}from"./chunk-L5UULTGF.js";import{isWithinRoot}from"./chunk-IDXJIDME.js";import{WORKTREE_SESSION_FILE,gitEnv}from"./chunk-ILECDNJX.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();import*as fs from"node:fs";import*as fsPromises from"node:fs/promises";import path from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";var execFileAsync=promisify(execFile);function isGitProbeInfrastructureError(error){const failure=error;return failure.killed===true||typeof failure.code==="string"&&["ENOENT","EACCES","EAGAIN","ENOMEM","ETIMEDOUT"].includes(failure.code)}__name(isGitProbeInfrastructureError,"isGitProbeInfrastructureError");async function isGitInfrastructureFault(error,cwd){if(!isGitProbeInfrastructureError(error))return false;const code=error.code;if(code!=="ENOENT"&&code!=="EACCES")return true;try{await fsPromises.access(cwd,fs.constants.X_OK);return true}catch{return false}}__name(isGitInfrastructureFault,"isGitInfrastructureFault");function resolveWorkspaceEntryFromParam(registry,req,res,paramName="workspace"){const selector=req.params[paramName]??"";const entry=resolveWorkspaceEntryBySelector(registry,selector);if(entry)return entry;if(!isPortableAbsolutePath(selector)){res.status(400).json({error:`\`:${paramName}\` must decode to a workspace id or absolute path`,code:"workspace_mismatch"});return null}sendWorkspaceMismatch(res,registry);return null}__name(resolveWorkspaceEntryFromParam,"resolveWorkspaceEntryFromParam");function resolveWorkspaceEntryBySelector(registry,selector){const byId=registry.getEntryByWorkspaceId(selector);if(byId)return byId;if(!isPortableAbsolutePath(selector))return void 0;const exact=registry.getEntryByWorkspaceCwd(selector);if(exact)return exact;if(path.isAbsolute(selector)&&!isUncPath(selector)){try{const canonicalSelector=canonicalizeWorkspace(selector);const canonicalMatch=registry.getEntryByWorkspaceCwd(canonicalSelector);if(canonicalMatch)return canonicalMatch;for(const candidate of registry.listEntries()){if(canonicalizeWorkspace(candidate.workspaceCwd)===canonicalSelector){return candidate}}}catch{}}const normalizedSelector=normalizePortableAbsolutePath(selector);return registry.listEntries().find(candidate=>normalizePortableAbsolutePath(candidate.workspaceCwd)===normalizedSelector)}__name(resolveWorkspaceEntryBySelector,"resolveWorkspaceEntryBySelector");function isPortableAbsolutePath(value){return path.isAbsolute(value)||/^[A-Za-z]:[\\/]/.test(value)||/^\\\\[^\\]+\\[^\\]+/.test(value)}__name(isPortableAbsolutePath,"isPortableAbsolutePath");function isUncPath(value){return/^\\\\[^\\]+\\[^\\]+/.test(value)}__name(isUncPath,"isUncPath");function normalizePortableAbsolutePath(value){if(/^[A-Za-z]:[\\/]/.test(value)||/^\\\\[^\\]+\\[^\\]+/.test(value)){return path.win32.normalize(value).toLowerCase()}return path.resolve(value)}__name(normalizePortableAbsolutePath,"normalizePortableAbsolutePath");function resolveRegisteredWorkspaceRuntimeByPathSelector(registry,selector){const exact=registry.getByWorkspaceCwd(selector);if(exact)return exact;if(path.isAbsolute(selector)&&!isUncPath(selector)){try{const canonicalSelector=canonicalizeWorkspace(selector);const canonicalMatch=registry.getByWorkspaceCwd(canonicalSelector);if(canonicalMatch)return canonicalMatch;for(const runtime of registry.list()){if(canonicalizeWorkspace(runtime.workspaceCwd)===canonicalSelector){return runtime}}}catch{}}const normalizedSelector=normalizePortableAbsolutePath(selector);return registry.list().find(runtime=>normalizePortableAbsolutePath(runtime.workspaceCwd)===normalizedSelector)}__name(resolveRegisteredWorkspaceRuntimeByPathSelector,"resolveRegisteredWorkspaceRuntimeByPathSelector");function resolveManagedWorkspaceRuntimeByPathSelector(registry,selector){const exact=registry.getManagedByWorkspaceCwd(selector);if(exact&&!isInternalWorkspaceRuntime(exact))return exact;if(path.isAbsolute(selector)&&!isUncPath(selector)){try{const canonicalSelector=canonicalizeWorkspace(selector);const canonicalMatch=registry.getManagedByWorkspaceCwd(canonicalSelector);if(canonicalMatch&&!isInternalWorkspaceRuntime(canonicalMatch)){return canonicalMatch}for(const runtime of registry.listManaged()){if(isInternalWorkspaceRuntime(runtime))continue;if(canonicalizeWorkspace(runtime.workspaceCwd)===canonicalSelector){return runtime}}}catch{}}const normalizedSelector=normalizePortableAbsolutePath(selector);return registry.listManaged().find(runtime=>!isInternalWorkspaceRuntime(runtime)&&normalizePortableAbsolutePath(runtime.workspaceCwd)===normalizedSelector)}__name(resolveManagedWorkspaceRuntimeByPathSelector,"resolveManagedWorkspaceRuntimeByPathSelector");function resolveWorkspaceRuntimeFromParam(registry,req,res,paramName="workspace"){const entry=resolveWorkspaceEntryFromParam(registry,req,res,paramName);if(!entry)return null;const runtime=entry.state==="active"?entry.current?.runtime:void 0;if(!runtime){sendWorkspaceRuntimeUnavailable(res,entry);return null}return runtime}__name(resolveWorkspaceRuntimeFromParam,"resolveWorkspaceRuntimeFromParam");function resolveTrustedRuntime(registry,req,res,paramName="workspace"){const runtime=resolveWorkspaceRuntimeFromParam(registry,req,res,paramName);if(!runtime)return null;return requireTrustedWorkspaceRuntime(runtime,res)?runtime:null}__name(resolveTrustedRuntime,"resolveTrustedRuntime");function resolveWorkspaceRuntimeWithLiveCompatibilityFromParam(registry,req,res,paramName="workspace"){if(typeof registry.getManagedEntryByWorkspaceId!=="function"||typeof registry.getManagedEntryByWorkspaceCwd!=="function"){return resolveWorkspaceRuntimeFromParam(registry,req,res,paramName)}const selector=req.params[paramName]??"";let entry=registry.getManagedEntryByWorkspaceId(selector);if(!entry&&isPortableAbsolutePath(selector)){entry=registry.getManagedEntryByWorkspaceCwd(selector)}if(!entry?.internal){return resolveWorkspaceRuntimeFromParam(registry,req,res,paramName)}const runtime=entry.state==="active"?entry.current?.runtime:void 0;if(!runtime){sendConversationRuntimeUnavailable(res);return null}return runtime}__name(resolveWorkspaceRuntimeWithLiveCompatibilityFromParam,"resolveWorkspaceRuntimeWithLiveCompatibilityFromParam");function sendConversationRuntimeUnavailable(res){res.set("Retry-After","1");res.status(503).json({error:"The Conversations runtime is temporarily unavailable.",code:"conversation_runtime_unavailable",retryable:true})}__name(sendConversationRuntimeUnavailable,"sendConversationRuntimeUnavailable");function sendWorkspaceRuntimeUnavailable(res,entry){res.set("Retry-After","1");res.status(503).json({error:"Workspace runtime is not active.",code:"workspace_runtime_unavailable",...entry?{workspaceCwd:entry.workspaceCwd,workspaceId:entry.workspaceId}:{}})}__name(sendWorkspaceRuntimeUnavailable,"sendWorkspaceRuntimeUnavailable");var MAX_BATCH_WORKSPACES=20;var MAX_SELECTOR_CHARS=4096;var MAX_MEMBER_BYTES=512*1024;function failedBatchMember(workspace,entry,status,code,message){return{workspace,...entry?{workspaceId:entry.workspaceId,cwd:entry.workspaceCwd}:{},error:{code,message,status}}}__name(failedBatchMember,"failedBatchMember");function captureWorkspaceEntryCurrency(registry,entry){const generation=entry.current;return{generation,isCurrent:__name(()=>registry.getEntryByWorkspaceId(entry.workspaceId)===entry&&entry.state==="active"&&entry.current?.generationId===generation?.generationId&&generation!==void 0&&!generation.guard.closed,"isCurrent")}}__name(captureWorkspaceEntryCurrency,"captureWorkspaceEntryCurrency");function isGenerationClosedError(error){return Boolean(error&&typeof error==="object"&&"code"in error&&error.code==="workspace_generation_closed")}__name(isGenerationClosedError,"isGenerationClosedError");function sendGenerationClosedError(res,error){if(!isGenerationClosedError(error))return false;sendWorkspaceRuntimeUnavailable(res);return true}__name(sendGenerationClosedError,"sendGenerationClosedError");function resolveManagedWorkspaceRuntimeFromParam(registry,req,res,paramName="workspace"){const selector=req.params[paramName]??"";const byId=registry.getManagedByWorkspaceId(selector);if(byId&&!isInternalWorkspaceRuntime(byId))return byId;if(!isPortableAbsolutePath(selector)){res.status(400).json({error:`\`:${paramName}\` must decode to a workspace id or absolute path`,code:"workspace_mismatch"});return null}const runtime=resolveManagedWorkspaceRuntimeByPathSelector(registry,selector);if(!runtime){res.status(400).json({error:"Workspace mismatch: the requested workspace is not registered with this daemon.",code:"workspace_mismatch"});return null}return runtime}__name(resolveManagedWorkspaceRuntimeFromParam,"resolveManagedWorkspaceRuntimeFromParam");function requireTrustedWorkspaceRuntime(runtime,res){if(runtime.trusted)return true;sendUntrustedWorkspaceResponse(res);return false}__name(requireTrustedWorkspaceRuntime,"requireTrustedWorkspaceRuntime");function sendUntrustedWorkspaceResponse(res,extra){res.status(403).json({error:"Workspace is not trusted.",code:"untrusted_workspace",...extra})}__name(sendUntrustedWorkspaceResponse,"sendUntrustedWorkspaceResponse");function getWorkspaceRouteContext(req){return req.workspaceRouteContext}__name(getWorkspaceRouteContext,"getWorkspaceRouteContext");function setWorkspaceRouteContext(req,context){req.workspaceRouteContext=context}__name(setWorkspaceRouteContext,"setWorkspaceRouteContext");function sendWorkspaceMismatch(res,registry){res.status(400).json({error:"Workspace mismatch: the requested workspace is not registered with this daemon.",code:"workspace_mismatch",workspaceCount:registry.listEntries().length})}__name(sendWorkspaceMismatch,"sendWorkspaceMismatch");function resolveContainedCwd(req,workspaceCwd){const rawCwd=req.query["cwd"];if(typeof rawCwd!=="string"||rawCwd.length===0){return workspaceCwd}try{const resolved=fs.realpathSync(path.resolve(rawCwd));const root=fs.realpathSync(workspaceCwd);if(isWithinRoot(resolved,root)){return resolved}}catch{}return workspaceCwd}__name(resolveContainedCwd,"resolveContainedCwd");function resolveContainedCwdOrFail(req,workspaceCwd){const rawCwd=req.query["cwd"];if(rawCwd===void 0){return workspaceCwd}if(typeof rawCwd!=="string"||rawCwd.length===0){return null}try{const resolved=fs.realpathSync(path.resolve(rawCwd));const root=fs.realpathSync(workspaceCwd);if(isWithinRoot(resolved,root)){return resolved}}catch{}return null}__name(resolveContainedCwdOrFail,"resolveContainedCwdOrFail");async function resolveGitCommonDir(cwd){let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--git-common-dir"],{cwd,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(await isGitInfrastructureFault(error,cwd))throw error;return null}return fsPromises.realpath(path.resolve(cwd,stdout.trim())).catch(()=>null)}__name(resolveGitCommonDir,"resolveGitCommonDir");async function resolveAbsoluteGitDir(cwd){let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--absolute-git-dir"],{cwd,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(await isGitInfrastructureFault(error,cwd))throw error;return null}return fsPromises.realpath(stdout.trim()).catch(()=>null)}__name(resolveAbsoluteGitDir,"resolveAbsoluteGitDir");async function readBoundedRegularFile(filePath,maxBytes,options){const pathStat=await fsPromises.lstat(filePath);if(!pathStat.isFile()||!options?.allowHardLinks&&pathStat.nlink!==1||pathStat.size>maxBytes){return null}const handle=await fsPromises.open(filePath,fs.constants.O_RDONLY|(fs.constants.O_NOFOLLOW??0));try{const openedStat=await handle.stat();if(!openedStat.isFile()||!options?.allowHardLinks&&openedStat.nlink!==1||openedStat.dev!==pathStat.dev||openedStat.ino!==pathStat.ino||openedStat.size>maxBytes){return null}const buffer=Buffer.alloc(maxBytes+1);let bytesRead=0;while(bytesRead<buffer.length){const chunk=await handle.read(buffer,bytesRead,buffer.length-bytesRead,bytesRead);if(chunk.bytesRead===0)break;bytesRead+=chunk.bytesRead}if(bytesRead>maxBytes)return null;const finalStat=await fsPromises.lstat(filePath);if(!finalStat.isFile()||!options?.allowHardLinks&&finalStat.nlink!==1||finalStat.dev!==openedStat.dev||finalStat.ino!==openedStat.ino){return null}return buffer.subarray(0,bytesRead).toString("utf8")}finally{await handle.close()}}__name(readBoundedRegularFile,"readBoundedRegularFile");async function markerIsOwnedBy(markerPath,sessionId){try{return(await readBoundedRegularFile(markerPath,256))?.trim()===sessionId}catch{return false}}__name(markerIsOwnedBy,"markerIsOwnedBy");async function isLinkedWorktreeOrUnknown(cwd){let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--git-common-dir","--absolute-git-dir"],{cwd,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(await isGitInfrastructureFault(error,cwd))throw error;const stderr=error.stderr;return!(typeof stderr==="string"&&/not a git repository/i.test(stderr))}const[common,absolute]=stdout.trim().split("\n");if(!common||!absolute)return true;try{const[commonDir,gitDir]=await Promise.all([fsPromises.realpath(path.resolve(cwd,common)),fsPromises.realpath(absolute)]);return commonDir!==gitDir}catch{return true}}__name(isLinkedWorktreeOrUnknown,"isLinkedWorktreeOrUnknown");async function resolveSessionManagedGitCwd(req,runtime){const rawCwd=req.query["cwd"];if(rawCwd===void 0)return runtime.workspaceCwd;if(typeof rawCwd!=="string"||rawCwd.length===0)return null;let requested;let workspace;try{requested=await fsPromises.realpath(path.resolve(rawCwd));workspace=await fsPromises.realpath(runtime.workspaceCwd)}catch{return null}let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--show-toplevel"],{cwd:workspace,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(isGitProbeInfrastructureError(error))throw error;const stderr=error.stderr;if(typeof stderr==="string"&&/not a git repository/i.test(stderr)&&isWithinRoot(requested,workspace)&&!await isLinkedWorktreeOrUnknown(requested)){return requested}return null}const repoTop=await fsPromises.realpath(stdout.trim()).catch(()=>null);if(repoTop===null)return null;if(requested===workspace)return requested;const managedRoot=path.join(repoTop,".qwen","worktrees");if(isWithinRoot(requested,workspace)&&!isWithinRoot(requested,managedRoot)){if(!await isLinkedWorktreeOrUnknown(requested)){return requested}const[workspaceGitDir,requestedGitDir]=await Promise.all([resolveAbsoluteGitDir(workspace),resolveAbsoluteGitDir(requested)]);if(workspaceGitDir!==null&&requestedGitDir===workspaceGitDir){return requested}}if(!isWithinRoot(requested,managedRoot))return null;const[workspaceCommonDir,requestedCommonDir]=await Promise.all([resolveGitCommonDir(workspace),resolveGitCommonDir(requested)]);if(workspaceCommonDir===null||requestedCommonDir===null||requestedCommonDir!==workspaceCommonDir){return null}try{let rawSessionId=req.query["sessionId"];if(rawSessionId===void 0){const[slug]=path.relative(managedRoot,requested).split(path.sep);if(!slug)return null;rawSessionId=(await readBoundedRegularFile(path.join(managedRoot,slug,WORKTREE_SESSION_FILE),256))?.trim()}const parsedSessionId=parseCallerSuppliedSessionId(rawSessionId);if(parsedSessionId.kind!=="valid")return null;const sessionId=parsedSessionId.sessionId;let snapshot;try{snapshot=runtime.bridge.getSessionExecutionSnapshot(sessionId)}catch{return null}if(await fsPromises.realpath(snapshot.workspaceCwd)!==workspace||!snapshot.worktree){return null}const worktreeRoot=await fsPromises.realpath(snapshot.worktree.path);if(path.dirname(worktreeRoot)!==managedRoot||!isWithinRoot(requested,worktreeRoot)){return null}const sidecarPath=createWorkspaceRuntimeSessionService(runtime).getWorktreeSessionPath(sessionId);const sidecarRaw=await readBoundedRegularFile(sidecarPath,64*1024,{allowHardLinks:true});if(sidecarRaw===null)return null;let sidecar;try{sidecar=JSON.parse(sidecarRaw)}catch{return null}if(!sidecar||typeof sidecar!=="object"||Array.isArray(sidecar)||typeof sidecar["worktreePath"]!=="string"||await fsPromises.realpath(sidecar.worktreePath)!==worktreeRoot){return null}const markerPath=path.join(worktreeRoot,WORKTREE_SESSION_FILE);if(!await markerIsOwnedBy(markerPath,sessionId)){return null}const requestedGitDir=await resolveAbsoluteGitDir(requested);if(requestedGitDir===null)return null;const metadataRoot=await fsPromises.realpath(path.join(workspaceCommonDir,"worktrees"));if(path.dirname(requestedGitDir)!==metadataRoot)return null;const backpointer=await readBoundedRegularFile(path.join(requestedGitDir,"gitdir"),4096);if(backpointer===null)return null;const actualGitFile=await fsPromises.realpath(path.resolve(requestedGitDir,backpointer.trim()));const expectedGitFile=await fsPromises.realpath(path.join(worktreeRoot,".git"));if(actualGitFile!==expectedGitFile)return null;return requested}catch(error){const code=error.code;if(code==="ENOENT"||code==="EACCES"||code==="EPERM"||code==="ELOOP"||code==="ENOTDIR"){return null}throw error}}__name(resolveSessionManagedGitCwd,"resolveSessionManagedGitCwd");async function resolveSessionManagedGitCwdForRoute(req,res,runtime,route,sendBridgeError){let cwd;try{cwd=await resolveSessionManagedGitCwd(req,runtime);runtime.generationGuard?.assertOpen()}catch(error){sendBridgeError(res,error,{route});return void 0}if(cwd===null){res.status(400).json({error:"invalid_cwd",message:"The supplied cwd is invalid or outside the workspace"});return void 0}return cwd}__name(resolveSessionManagedGitCwdForRoute,"resolveSessionManagedGitCwdForRoute");export{resolveWorkspaceEntryFromParam,resolveWorkspaceEntryBySelector,isPortableAbsolutePath,resolveRegisteredWorkspaceRuntimeByPathSelector,resolveManagedWorkspaceRuntimeByPathSelector,resolveWorkspaceRuntimeFromParam,resolveTrustedRuntime,resolveWorkspaceRuntimeWithLiveCompatibilityFromParam,sendConversationRuntimeUnavailable,sendWorkspaceRuntimeUnavailable,MAX_BATCH_WORKSPACES,MAX_SELECTOR_CHARS,MAX_MEMBER_BYTES,failedBatchMember,captureWorkspaceEntryCurrency,isGenerationClosedError,sendGenerationClosedError,resolveManagedWorkspaceRuntimeFromParam,requireTrustedWorkspaceRuntime,sendUntrustedWorkspaceResponse,getWorkspaceRouteContext,setWorkspaceRouteContext,resolveContainedCwd,resolveContainedCwdOrFail,resolveSessionManagedGitCwdForRoute};
3
+ import{createWorkspaceRuntimeSessionService}from"./chunk-JWNKPINR.js";import{parseCallerSuppliedSessionId}from"./chunk-LGFF5PJA.js";import{isInternalWorkspaceRuntime}from"./chunk-M5KJJE2X.js";import{canonicalizeWorkspace}from"./chunk-L5UULTGF.js";import{isWithinRoot}from"./chunk-IDXJIDME.js";import{WORKTREE_SESSION_FILE,gitEnv}from"./chunk-ILECDNJX.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();import*as fs from"node:fs";import*as fsPromises from"node:fs/promises";import path from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";var execFileAsync=promisify(execFile);function isGitProbeInfrastructureError(error){const failure=error;return failure.killed===true||typeof failure.code==="string"&&["ENOENT","EACCES","EAGAIN","ENOMEM","ETIMEDOUT"].includes(failure.code)}__name(isGitProbeInfrastructureError,"isGitProbeInfrastructureError");async function isGitInfrastructureFault(error,cwd){if(!isGitProbeInfrastructureError(error))return false;const code=error.code;if(code!=="ENOENT"&&code!=="EACCES")return true;try{await fsPromises.access(cwd,fs.constants.X_OK);return true}catch{return false}}__name(isGitInfrastructureFault,"isGitInfrastructureFault");function resolveWorkspaceEntryFromParam(registry,req,res,paramName="workspace"){const selector=req.params[paramName]??"";const entry=resolveWorkspaceEntryBySelector(registry,selector);if(entry)return entry;if(!isPortableAbsolutePath(selector)){res.status(400).json({error:`\`:${paramName}\` must decode to a workspace id or absolute path`,code:"workspace_mismatch"});return null}sendWorkspaceMismatch(res,registry);return null}__name(resolveWorkspaceEntryFromParam,"resolveWorkspaceEntryFromParam");function resolveWorkspaceEntryBySelector(registry,selector){const byId=registry.getEntryByWorkspaceId(selector);if(byId)return byId;if(!isPortableAbsolutePath(selector))return void 0;const exact=registry.getEntryByWorkspaceCwd(selector);if(exact)return exact;if(path.isAbsolute(selector)&&!isUncPath(selector)){try{const canonicalSelector=canonicalizeWorkspace(selector);const canonicalMatch=registry.getEntryByWorkspaceCwd(canonicalSelector);if(canonicalMatch)return canonicalMatch;for(const candidate of registry.listEntries()){if(canonicalizeWorkspace(candidate.workspaceCwd)===canonicalSelector){return candidate}}}catch{}}const normalizedSelector=normalizePortableAbsolutePath(selector);return registry.listEntries().find(candidate=>normalizePortableAbsolutePath(candidate.workspaceCwd)===normalizedSelector)}__name(resolveWorkspaceEntryBySelector,"resolveWorkspaceEntryBySelector");function isPortableAbsolutePath(value){return path.isAbsolute(value)||/^[A-Za-z]:[\\/]/.test(value)||/^\\\\[^\\]+\\[^\\]+/.test(value)}__name(isPortableAbsolutePath,"isPortableAbsolutePath");function isUncPath(value){return/^\\\\[^\\]+\\[^\\]+/.test(value)}__name(isUncPath,"isUncPath");function normalizePortableAbsolutePath(value){if(/^[A-Za-z]:[\\/]/.test(value)||/^\\\\[^\\]+\\[^\\]+/.test(value)){return path.win32.normalize(value).toLowerCase()}return path.resolve(value)}__name(normalizePortableAbsolutePath,"normalizePortableAbsolutePath");function resolveRegisteredWorkspaceRuntimeByPathSelector(registry,selector){const exact=registry.getByWorkspaceCwd(selector);if(exact)return exact;if(path.isAbsolute(selector)&&!isUncPath(selector)){try{const canonicalSelector=canonicalizeWorkspace(selector);const canonicalMatch=registry.getByWorkspaceCwd(canonicalSelector);if(canonicalMatch)return canonicalMatch;for(const runtime of registry.list()){if(canonicalizeWorkspace(runtime.workspaceCwd)===canonicalSelector){return runtime}}}catch{}}const normalizedSelector=normalizePortableAbsolutePath(selector);return registry.list().find(runtime=>normalizePortableAbsolutePath(runtime.workspaceCwd)===normalizedSelector)}__name(resolveRegisteredWorkspaceRuntimeByPathSelector,"resolveRegisteredWorkspaceRuntimeByPathSelector");function resolveManagedWorkspaceRuntimeByPathSelector(registry,selector){const exact=registry.getManagedByWorkspaceCwd(selector);if(exact&&!isInternalWorkspaceRuntime(exact))return exact;if(path.isAbsolute(selector)&&!isUncPath(selector)){try{const canonicalSelector=canonicalizeWorkspace(selector);const canonicalMatch=registry.getManagedByWorkspaceCwd(canonicalSelector);if(canonicalMatch&&!isInternalWorkspaceRuntime(canonicalMatch)){return canonicalMatch}for(const runtime of registry.listManaged()){if(isInternalWorkspaceRuntime(runtime))continue;if(canonicalizeWorkspace(runtime.workspaceCwd)===canonicalSelector){return runtime}}}catch{}}const normalizedSelector=normalizePortableAbsolutePath(selector);return registry.listManaged().find(runtime=>!isInternalWorkspaceRuntime(runtime)&&normalizePortableAbsolutePath(runtime.workspaceCwd)===normalizedSelector)}__name(resolveManagedWorkspaceRuntimeByPathSelector,"resolveManagedWorkspaceRuntimeByPathSelector");function resolveWorkspaceRuntimeFromParam(registry,req,res,paramName="workspace"){const entry=resolveWorkspaceEntryFromParam(registry,req,res,paramName);if(!entry)return null;const runtime=entry.state==="active"?entry.current?.runtime:void 0;if(!runtime){sendWorkspaceRuntimeUnavailable(res,entry);return null}return runtime}__name(resolveWorkspaceRuntimeFromParam,"resolveWorkspaceRuntimeFromParam");function resolveTrustedRuntime(registry,req,res,paramName="workspace"){const runtime=resolveWorkspaceRuntimeFromParam(registry,req,res,paramName);if(!runtime)return null;return requireTrustedWorkspaceRuntime(runtime,res)?runtime:null}__name(resolveTrustedRuntime,"resolveTrustedRuntime");function resolveWorkspaceRuntimeWithLiveCompatibilityFromParam(registry,req,res,paramName="workspace"){if(typeof registry.getManagedEntryByWorkspaceId!=="function"||typeof registry.getManagedEntryByWorkspaceCwd!=="function"){return resolveWorkspaceRuntimeFromParam(registry,req,res,paramName)}const selector=req.params[paramName]??"";let entry=registry.getManagedEntryByWorkspaceId(selector);if(!entry&&isPortableAbsolutePath(selector)){entry=registry.getManagedEntryByWorkspaceCwd(selector)}if(!entry?.internal){return resolveWorkspaceRuntimeFromParam(registry,req,res,paramName)}const runtime=entry.state==="active"?entry.current?.runtime:void 0;if(!runtime){sendConversationRuntimeUnavailable(res);return null}return runtime}__name(resolveWorkspaceRuntimeWithLiveCompatibilityFromParam,"resolveWorkspaceRuntimeWithLiveCompatibilityFromParam");function sendConversationRuntimeUnavailable(res){res.set("Retry-After","1");res.status(503).json({error:"The Conversations runtime is temporarily unavailable.",code:"conversation_runtime_unavailable",retryable:true})}__name(sendConversationRuntimeUnavailable,"sendConversationRuntimeUnavailable");function sendWorkspaceRuntimeUnavailable(res,entry){res.set("Retry-After","1");res.status(503).json({error:"Workspace runtime is not active.",code:"workspace_runtime_unavailable",...entry?{workspaceCwd:entry.workspaceCwd,workspaceId:entry.workspaceId}:{}})}__name(sendWorkspaceRuntimeUnavailable,"sendWorkspaceRuntimeUnavailable");var MAX_BATCH_WORKSPACES=20;var MAX_SELECTOR_CHARS=4096;var MAX_MEMBER_BYTES=512*1024;function failedBatchMember(workspace,entry,status,code,message){return{workspace,...entry?{workspaceId:entry.workspaceId,cwd:entry.workspaceCwd}:{},error:{code,message,status}}}__name(failedBatchMember,"failedBatchMember");function captureWorkspaceEntryCurrency(registry,entry){const generation=entry.current;return{generation,isCurrent:__name(()=>registry.getEntryByWorkspaceId(entry.workspaceId)===entry&&entry.state==="active"&&entry.current?.generationId===generation?.generationId&&generation!==void 0&&!generation.guard.closed,"isCurrent")}}__name(captureWorkspaceEntryCurrency,"captureWorkspaceEntryCurrency");function isGenerationClosedError(error){return Boolean(error&&typeof error==="object"&&"code"in error&&error.code==="workspace_generation_closed")}__name(isGenerationClosedError,"isGenerationClosedError");function sendGenerationClosedError(res,error){if(!isGenerationClosedError(error))return false;sendWorkspaceRuntimeUnavailable(res);return true}__name(sendGenerationClosedError,"sendGenerationClosedError");function resolveManagedWorkspaceRuntimeFromParam(registry,req,res,paramName="workspace"){const selector=req.params[paramName]??"";const byId=registry.getManagedByWorkspaceId(selector);if(byId&&!isInternalWorkspaceRuntime(byId))return byId;if(!isPortableAbsolutePath(selector)){res.status(400).json({error:`\`:${paramName}\` must decode to a workspace id or absolute path`,code:"workspace_mismatch"});return null}const runtime=resolveManagedWorkspaceRuntimeByPathSelector(registry,selector);if(!runtime){res.status(400).json({error:"Workspace mismatch: the requested workspace is not registered with this daemon.",code:"workspace_mismatch"});return null}return runtime}__name(resolveManagedWorkspaceRuntimeFromParam,"resolveManagedWorkspaceRuntimeFromParam");function requireTrustedWorkspaceRuntime(runtime,res){if(runtime.trusted)return true;sendUntrustedWorkspaceResponse(res);return false}__name(requireTrustedWorkspaceRuntime,"requireTrustedWorkspaceRuntime");function sendUntrustedWorkspaceResponse(res,extra){res.status(403).json({error:"Workspace is not trusted.",code:"untrusted_workspace",...extra})}__name(sendUntrustedWorkspaceResponse,"sendUntrustedWorkspaceResponse");function getWorkspaceRouteContext(req){return req.workspaceRouteContext}__name(getWorkspaceRouteContext,"getWorkspaceRouteContext");function setWorkspaceRouteContext(req,context){req.workspaceRouteContext=context}__name(setWorkspaceRouteContext,"setWorkspaceRouteContext");function sendWorkspaceMismatch(res,registry){res.status(400).json({error:"Workspace mismatch: the requested workspace is not registered with this daemon.",code:"workspace_mismatch",workspaceCount:registry.listEntries().length})}__name(sendWorkspaceMismatch,"sendWorkspaceMismatch");function resolveContainedCwd(req,workspaceCwd){const rawCwd=req.query["cwd"];if(typeof rawCwd!=="string"||rawCwd.length===0){return workspaceCwd}try{const resolved=fs.realpathSync(path.resolve(rawCwd));const root=fs.realpathSync(workspaceCwd);if(isWithinRoot(resolved,root)){return resolved}}catch{}return workspaceCwd}__name(resolveContainedCwd,"resolveContainedCwd");function resolveContainedCwdOrFail(req,workspaceCwd){const rawCwd=req.query["cwd"];if(rawCwd===void 0){return workspaceCwd}if(typeof rawCwd!=="string"||rawCwd.length===0){return null}try{const resolved=fs.realpathSync(path.resolve(rawCwd));const root=fs.realpathSync(workspaceCwd);if(isWithinRoot(resolved,root)){return resolved}}catch{}return null}__name(resolveContainedCwdOrFail,"resolveContainedCwdOrFail");async function resolveGitCommonDir(cwd){let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--git-common-dir"],{cwd,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(await isGitInfrastructureFault(error,cwd))throw error;return null}return fsPromises.realpath(path.resolve(cwd,stdout.trim())).catch(()=>null)}__name(resolveGitCommonDir,"resolveGitCommonDir");async function resolveAbsoluteGitDir(cwd){let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--absolute-git-dir"],{cwd,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(await isGitInfrastructureFault(error,cwd))throw error;return null}return fsPromises.realpath(stdout.trim()).catch(()=>null)}__name(resolveAbsoluteGitDir,"resolveAbsoluteGitDir");async function readBoundedRegularFile(filePath,maxBytes,options){const pathStat=await fsPromises.lstat(filePath);if(!pathStat.isFile()||!options?.allowHardLinks&&pathStat.nlink!==1||pathStat.size>maxBytes){return null}const handle=await fsPromises.open(filePath,fs.constants.O_RDONLY|(fs.constants.O_NOFOLLOW??0));try{const openedStat=await handle.stat();if(!openedStat.isFile()||!options?.allowHardLinks&&openedStat.nlink!==1||openedStat.dev!==pathStat.dev||openedStat.ino!==pathStat.ino||openedStat.size>maxBytes){return null}const buffer=Buffer.alloc(maxBytes+1);let bytesRead=0;while(bytesRead<buffer.length){const chunk=await handle.read(buffer,bytesRead,buffer.length-bytesRead,bytesRead);if(chunk.bytesRead===0)break;bytesRead+=chunk.bytesRead}if(bytesRead>maxBytes)return null;const finalStat=await fsPromises.lstat(filePath);if(!finalStat.isFile()||!options?.allowHardLinks&&finalStat.nlink!==1||finalStat.dev!==openedStat.dev||finalStat.ino!==openedStat.ino){return null}return buffer.subarray(0,bytesRead).toString("utf8")}finally{await handle.close()}}__name(readBoundedRegularFile,"readBoundedRegularFile");async function markerIsOwnedBy(markerPath,sessionId){try{return(await readBoundedRegularFile(markerPath,256))?.trim()===sessionId}catch{return false}}__name(markerIsOwnedBy,"markerIsOwnedBy");async function isLinkedWorktreeOrUnknown(cwd){let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--git-common-dir","--absolute-git-dir"],{cwd,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(await isGitInfrastructureFault(error,cwd))throw error;const stderr=error.stderr;return!(typeof stderr==="string"&&/not a git repository/i.test(stderr))}const[common,absolute]=stdout.trim().split("\n");if(!common||!absolute)return true;try{const[commonDir,gitDir]=await Promise.all([fsPromises.realpath(path.resolve(cwd,common)),fsPromises.realpath(absolute)]);return commonDir!==gitDir}catch{return true}}__name(isLinkedWorktreeOrUnknown,"isLinkedWorktreeOrUnknown");async function resolveSessionManagedGitCwd(req,runtime){const rawCwd=req.query["cwd"];if(rawCwd===void 0)return runtime.workspaceCwd;if(typeof rawCwd!=="string"||rawCwd.length===0)return null;let requested;let workspace;try{requested=await fsPromises.realpath(path.resolve(rawCwd));workspace=await fsPromises.realpath(runtime.workspaceCwd)}catch{return null}let stdout;try{({stdout}=await execFileAsync("git",["rev-parse","--show-toplevel"],{cwd:workspace,encoding:"utf8",timeout:3e4,env:gitEnv()}))}catch(error){if(isGitProbeInfrastructureError(error))throw error;const stderr=error.stderr;if(typeof stderr==="string"&&/not a git repository/i.test(stderr)&&isWithinRoot(requested,workspace)&&!await isLinkedWorktreeOrUnknown(requested)){return requested}return null}const repoTop=await fsPromises.realpath(stdout.trim()).catch(()=>null);if(repoTop===null)return null;if(requested===workspace)return requested;const managedRoot=path.join(repoTop,".qwen","worktrees");if(isWithinRoot(requested,workspace)&&!isWithinRoot(requested,managedRoot)){if(!await isLinkedWorktreeOrUnknown(requested)){return requested}const[workspaceGitDir,requestedGitDir]=await Promise.all([resolveAbsoluteGitDir(workspace),resolveAbsoluteGitDir(requested)]);if(workspaceGitDir!==null&&requestedGitDir===workspaceGitDir){return requested}}if(!isWithinRoot(requested,managedRoot))return null;const[workspaceCommonDir,requestedCommonDir]=await Promise.all([resolveGitCommonDir(workspace),resolveGitCommonDir(requested)]);if(workspaceCommonDir===null||requestedCommonDir===null||requestedCommonDir!==workspaceCommonDir){return null}try{let rawSessionId=req.query["sessionId"];if(rawSessionId===void 0){const[slug]=path.relative(managedRoot,requested).split(path.sep);if(!slug)return null;rawSessionId=(await readBoundedRegularFile(path.join(managedRoot,slug,WORKTREE_SESSION_FILE),256))?.trim()}const parsedSessionId=parseCallerSuppliedSessionId(rawSessionId);if(parsedSessionId.kind!=="valid")return null;const sessionId=parsedSessionId.sessionId;let snapshot;try{snapshot=runtime.bridge.getSessionExecutionSnapshot(sessionId)}catch{return null}if(await fsPromises.realpath(snapshot.workspaceCwd)!==workspace||!snapshot.worktree){return null}const worktreeRoot=await fsPromises.realpath(snapshot.worktree.path);if(path.dirname(worktreeRoot)!==managedRoot||!isWithinRoot(requested,worktreeRoot)){return null}const sidecarPath=createWorkspaceRuntimeSessionService(runtime).getWorktreeSessionPath(sessionId);const sidecarRaw=await readBoundedRegularFile(sidecarPath,64*1024,{allowHardLinks:true});if(sidecarRaw===null)return null;let sidecar;try{sidecar=JSON.parse(sidecarRaw)}catch{return null}if(!sidecar||typeof sidecar!=="object"||Array.isArray(sidecar)||typeof sidecar["worktreePath"]!=="string"||await fsPromises.realpath(sidecar.worktreePath)!==worktreeRoot){return null}const markerPath=path.join(worktreeRoot,WORKTREE_SESSION_FILE);if(!await markerIsOwnedBy(markerPath,sessionId)){return null}const requestedGitDir=await resolveAbsoluteGitDir(requested);if(requestedGitDir===null)return null;const metadataRoot=await fsPromises.realpath(path.join(workspaceCommonDir,"worktrees"));if(path.dirname(requestedGitDir)!==metadataRoot)return null;const backpointer=await readBoundedRegularFile(path.join(requestedGitDir,"gitdir"),4096);if(backpointer===null)return null;const actualGitFile=await fsPromises.realpath(path.resolve(requestedGitDir,backpointer.trim()));const expectedGitFile=await fsPromises.realpath(path.join(worktreeRoot,".git"));if(actualGitFile!==expectedGitFile)return null;return requested}catch(error){const code=error.code;if(code==="ENOENT"||code==="EACCES"||code==="EPERM"||code==="ELOOP"||code==="ENOTDIR"){return null}throw error}}__name(resolveSessionManagedGitCwd,"resolveSessionManagedGitCwd");async function resolveSessionManagedGitCwdForRoute(req,res,runtime,route,sendBridgeError){let cwd;try{cwd=await resolveSessionManagedGitCwd(req,runtime);runtime.generationGuard?.assertOpen()}catch(error){sendBridgeError(res,error,{route});return void 0}if(cwd===null){res.status(400).json({error:"invalid_cwd",message:"The supplied cwd is invalid or outside the workspace"});return void 0}return cwd}__name(resolveSessionManagedGitCwdForRoute,"resolveSessionManagedGitCwdForRoute");export{resolveWorkspaceEntryFromParam,resolveWorkspaceEntryBySelector,isPortableAbsolutePath,resolveRegisteredWorkspaceRuntimeByPathSelector,resolveManagedWorkspaceRuntimeByPathSelector,resolveWorkspaceRuntimeFromParam,resolveTrustedRuntime,resolveWorkspaceRuntimeWithLiveCompatibilityFromParam,sendConversationRuntimeUnavailable,sendWorkspaceRuntimeUnavailable,MAX_BATCH_WORKSPACES,MAX_SELECTOR_CHARS,MAX_MEMBER_BYTES,failedBatchMember,captureWorkspaceEntryCurrency,isGenerationClosedError,sendGenerationClosedError,resolveManagedWorkspaceRuntimeFromParam,requireTrustedWorkspaceRuntime,sendUntrustedWorkspaceResponse,getWorkspaceRouteContext,setWorkspaceRouteContext,resolveContainedCwd,resolveContainedCwdOrFail,resolveSessionManagedGitCwdForRoute};
4
4
  /**
5
5
  * @license
6
6
  * Copyright 2026 Qwen Team
@@ -1,6 +1,6 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import{encodeTextFileContentAsync}from"./chunk-Z5XENA4A.js";import{executeSandbox}from"./chunk-LSASUDF2.js";import{assertShellSandboxCwd}from"./chunk-MOKVM4PT.js";import{sandboxAsset}from"./chunk-TL6MLBXR.js";import{getJsInterpreterCommand}from"./chunk-WGNF7FPC.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();init_esbuild_shims();import{statSync}from"node:fs";function getSandboxFileVersion(filePath){try{const stats=statSync(filePath,{bigint:true});if(!stats.isFile()){throw Object.assign(new Error("File tools require a regular file."),{code:stats.isDirectory()?"EISDIR":"EINVAL"})}return Object.freeze({dev:stats.dev.toString(),ino:stats.ino.toString(),size:stats.size.toString(),mtimeNs:stats.mtimeNs.toString(),ctimeNs:stats.ctimeNs.toString()})}catch(error){if(error.code==="ENOENT")return null;throw error}}__name(getSandboxFileVersion,"getSandboxFileVersion");init_esbuild_shims();init_esbuild_shims();var MAX_FILE_HEADER_BYTES=16*1024;function encodeSandboxWriteRequest(request){const header=Buffer.from(JSON.stringify({operation:request.operation,destination:request.destination,expected:request.expected,contentLength:request.content.length})+"\n");if(header.length>MAX_FILE_HEADER_BYTES)throw new Error("File worker header exceeds 16 KiB.");return Buffer.concat([header,request.content])}__name(encodeSandboxWriteRequest,"encodeSandboxWriteRequest");async function writeSandboxFile(policy,request,signal){signal.throwIfAborted();if(policy.filesystem==="read-only"){throw Object.assign(new Error("File writes are disabled by the read-only sandbox policy."),{code:"EROFS"})}const stdin=encodeSandboxWriteRequest(request);let reply="";let diagnostics="";const appendBounded=__name((current,chunk)=>(current+chunk).slice(-MAX_FILE_HEADER_BYTES),"appendBounded");const handle=await executeSandbox(policy,{executable:getJsInterpreterCommand(import.meta.url).command,args:[sandboxAsset("file-worker")],cwd:policy.workspace,env:{PATH:"/usr/bin:/bin",LANG:"C.UTF-8"},stdin},event=>{if(event.type!=="data"||typeof event.chunk!=="string")return;if(event.stream==="stdout")reply=appendBounded(reply,event.chunk);else if(event.stream==="stderr")diagnostics=appendBounded(diagnostics,event.chunk)},signal,false,{},{streamStdout:true});const result=await handle.result;if(result.sandboxStatus.state!=="confirmed"||result.error||result.aborted){const detail=[result.error?.message,diagnostics||result.output].filter(Boolean).join("\n");throw new Error(`Sandbox file write failed (${result.sandboxStatus.state}): ${detail}`)}let parsedReply;try{parsedReply=JSON.parse(reply.trim())}catch{if(result.sandboxStatus.exitCode===0)throw new Error("Invalid sandbox file worker reply.");throw new Error(`Sandbox file worker exited ${result.sandboxStatus.exitCode}: ${diagnostics||result.output||reply||"invalid reply"}`)}if(result.sandboxStatus.exitCode===0&&parsedReply["ok"]===true)return;if(parsedReply["ok"]===false&&typeof parsedReply["error"]==="string"){throw Object.assign(new Error(parsedReply["error"]),{...typeof parsedReply["code"]==="string"?{code:parsedReply["code"]}:{}})}throw new Error("Invalid sandbox file worker reply.")}__name(writeSandboxFile,"writeSandboxFile");function captureRuntimeFileVersion(config,filePath){if(!config.getShellExecutionSandbox?.())return void 0;return getSandboxFileVersion(filePath)}__name(captureRuntimeFileVersion,"captureRuntimeFileVersion");async function writeRuntimeFile(config,params,expected,signal){const policy=config.getShellExecutionSandbox?.();if(!policy){await config.getFileSystemService().writeTextFile(params);return}signal.throwIfAborted();if(expected===void 0)throw new Error("Missing sandbox file version.");assertShellSandboxCwd(policy,config.getTargetDir());const content=await encodeTextFileContentAsync(params.path,params.content,params._meta);await writeSandboxFile(policy,{operation:"write",destination:params.path,content,expected},signal)}__name(writeRuntimeFile,"writeRuntimeFile");export{captureRuntimeFileVersion,writeRuntimeFile};
3
+ import{encodeTextFileContentAsync}from"./chunk-2JGTWRZJ.js";import{executeSandbox}from"./chunk-LSASUDF2.js";import{assertShellSandboxCwd}from"./chunk-MOKVM4PT.js";import{sandboxAsset}from"./chunk-TL6MLBXR.js";import{getJsInterpreterCommand}from"./chunk-WGNF7FPC.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();init_esbuild_shims();import{statSync}from"node:fs";function getSandboxFileVersion(filePath){try{const stats=statSync(filePath,{bigint:true});if(!stats.isFile()){throw Object.assign(new Error("File tools require a regular file."),{code:stats.isDirectory()?"EISDIR":"EINVAL"})}return Object.freeze({dev:stats.dev.toString(),ino:stats.ino.toString(),size:stats.size.toString(),mtimeNs:stats.mtimeNs.toString(),ctimeNs:stats.ctimeNs.toString()})}catch(error){if(error.code==="ENOENT")return null;throw error}}__name(getSandboxFileVersion,"getSandboxFileVersion");init_esbuild_shims();init_esbuild_shims();var MAX_FILE_HEADER_BYTES=16*1024;function encodeSandboxWriteRequest(request){const header=Buffer.from(JSON.stringify({operation:request.operation,destination:request.destination,expected:request.expected,contentLength:request.content.length})+"\n");if(header.length>MAX_FILE_HEADER_BYTES)throw new Error("File worker header exceeds 16 KiB.");return Buffer.concat([header,request.content])}__name(encodeSandboxWriteRequest,"encodeSandboxWriteRequest");async function writeSandboxFile(policy,request,signal){signal.throwIfAborted();if(policy.filesystem==="read-only"){throw Object.assign(new Error("File writes are disabled by the read-only sandbox policy."),{code:"EROFS"})}const stdin=encodeSandboxWriteRequest(request);let reply="";let diagnostics="";const appendBounded=__name((current,chunk)=>(current+chunk).slice(-MAX_FILE_HEADER_BYTES),"appendBounded");const handle=await executeSandbox(policy,{executable:getJsInterpreterCommand(import.meta.url).command,args:[sandboxAsset("file-worker")],cwd:policy.workspace,env:{PATH:"/usr/bin:/bin",LANG:"C.UTF-8"},stdin},event=>{if(event.type!=="data"||typeof event.chunk!=="string")return;if(event.stream==="stdout")reply=appendBounded(reply,event.chunk);else if(event.stream==="stderr")diagnostics=appendBounded(diagnostics,event.chunk)},signal,false,{},{streamStdout:true});const result=await handle.result;if(result.sandboxStatus.state!=="confirmed"||result.error||result.aborted){const detail=[result.error?.message,diagnostics||result.output].filter(Boolean).join("\n");throw new Error(`Sandbox file write failed (${result.sandboxStatus.state}): ${detail}`)}let parsedReply;try{parsedReply=JSON.parse(reply.trim())}catch{if(result.sandboxStatus.exitCode===0)throw new Error("Invalid sandbox file worker reply.");throw new Error(`Sandbox file worker exited ${result.sandboxStatus.exitCode}: ${diagnostics||result.output||reply||"invalid reply"}`)}if(result.sandboxStatus.exitCode===0&&parsedReply["ok"]===true)return;if(parsedReply["ok"]===false&&typeof parsedReply["error"]==="string"){throw Object.assign(new Error(parsedReply["error"]),{...typeof parsedReply["code"]==="string"?{code:parsedReply["code"]}:{}})}throw new Error("Invalid sandbox file worker reply.")}__name(writeSandboxFile,"writeSandboxFile");function captureRuntimeFileVersion(config,filePath){if(!config.getShellExecutionSandbox?.())return void 0;return getSandboxFileVersion(filePath)}__name(captureRuntimeFileVersion,"captureRuntimeFileVersion");async function writeRuntimeFile(config,params,expected,signal){const policy=config.getShellExecutionSandbox?.();if(!policy){await config.getFileSystemService().writeTextFile(params);return}signal.throwIfAborted();if(expected===void 0)throw new Error("Missing sandbox file version.");assertShellSandboxCwd(policy,config.getTargetDir());const content=await encodeTextFileContentAsync(params.path,params.content,params._meta);await writeSandboxFile(policy,{operation:"write",destination:params.path,content,expected},signal)}__name(writeRuntimeFile,"writeRuntimeFile");export{captureRuntimeFileVersion,writeRuntimeFile};
4
4
  /**
5
5
  * @license
6
6
  * Copyright 2026 Qwen Team
@@ -1,6 +1,6 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import{GlobTool}from"./chunk-M7MGE5IU.js";import{GrepTool}from"./chunk-S7Z7SUH3.js";import{LSTool}from"./chunk-FK5M3433.js";import{NotebookEditTool}from"./chunk-MTW3A3KT.js";import{TaskStopTool}from"./chunk-GXWDEHFP.js";import{WriteFileTool}from"./chunk-WB34KMOT.js";import{EditTool}from"./chunk-FNB3DPQZ.js";import{ShellTool,isModifiableDeclarativeTool}from"./chunk-Z5XENA4A.js";import{stableJson}from"./chunk-FIXDX63I.js";import{ReadFileTool}from"./chunk-ZWPSBU7K.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();import{stat}from"node:fs/promises";function createExecutionTools(config){const tools=[new ReadFileTool(config),new WriteFileTool(config),new EditTool(config),new NotebookEditTool(config),new GlobTool(config),new GrepTool(config),new LSTool(config),new ShellTool(config),new TaskStopTool(config)];return new Map(tools.map(tool=>[tool.name,tool]))}__name(createExecutionTools,"createExecutionTools");var LocalExecutionEnvironment=class{constructor(config,options={}){this.config=config;this.toolNames=options.toolNames;this.run=options.run;this.tools=createExecutionTools(config);if(options.toolNames){for(const name of this.tools.keys()){if(!options.toolNames.has(name))this.tools.delete(name)}}}static{__name(this,"LocalExecutionEnvironment")}toolNames;tools;invocations=new Map;controllers=new Set;run;disposed=false;tool(name){if(this.disposed)throw new Error("Execution environment is disposed.");const tool=this.tools.get(name);if(!tool)throw new Error(`Unsupported execution tool: ${name}`);return tool}pending(id){if(this.disposed)throw new Error("Execution environment is disposed.");const pending=this.invocations.get(id);if(!pending)throw new Error(`Unknown execution invocation: ${id}`);if(pending.executing)throw new Error(`Invocation is executing: ${id}`);return pending}toolDefinition(name){const{name:toolName,description,parametersJsonSchema}=this.tool(name).schema;return{name:toolName,description,parametersJsonSchema}}async prepare(request,signal){signal.throwIfAborted();const tool=this.tool(request.toolName);if(this.invocations.has(request.id))throw new Error(`Duplicate invocation: ${request.id}`);if(this.invocations.size>=256)throw new Error("Too many pending execution invocations.");let params=structuredClone(request.params);if(request.modification){if(!isModifiableDeclarativeTool(tool))throw new Error("Tool does not support modification.");params=tool.getModifyContext(signal).createUpdatedParams(request.modification.oldContent,request.modification.newContent,params)}const invocation=tool.build(params);this.invocations.set(request.id,{toolName:request.toolName,invocation,executing:false,...request.callId===void 0?{}:{callId:request.callId}});return{params:invocation.params,description:invocation.getDescription(),locations:invocation.toolLocations()}}async permission(id,signal){signal.throwIfAborted();return this.pending(id).invocation.getDefaultPermission(signal)}async confirmation(id,signal){signal.throwIfAborted();const pending=this.pending(id);const details=await pending.invocation.getConfirmationDetails(signal);pending.confirmation=details;const{onConfirm:_onConfirm,...serializable}=details;return serializable}async confirm(id,outcome,payload,signal){signal.throwIfAborted();const pending=this.pending(id);await pending.confirmation?.onConfirm(outcome,payload);if(outcome==="cancel")this.invocations.delete(id)}async execute(id,signal,updateOutput){signal.throwIfAborted();const pending=this.pending(id);pending.executing=true;const controller=new AbortController;const abort=__name(()=>controller.abort(signal.reason),"abort");signal.addEventListener("abort",abort,{once:true});this.controllers.add(controller);try{if(this.run){const params=structuredClone(pending.invocation.params);const rebuilt=this.tool(pending.toolName).build(structuredClone(params)).params;if(stableJson(rebuilt)!==stableJson(params)){throw new Error("The approved parameters change when the tool builds them again; the call did not run.")}return await this.run({id,toolName:pending.toolName,params,...pending.callId===void 0?{}:{callId:pending.callId}},controller.signal,updateOutput)}return await pending.invocation.execute(controller.signal,updateOutput,{...this.config.getShellExecutionConfig(),streamBufferedOutput:true})}finally{signal.removeEventListener("abort",abort);this.controllers.delete(controller);this.invocations.delete(id)}}async modificationContent(toolName,params,signal){signal.throwIfAborted();const tool=this.tool(toolName);if(!isModifiableDeclarativeTool(tool))throw new Error("Tool does not support modification.");const context=tool.getModifyContext(signal);const current=await context.getCurrentContent(params);const proposed=await context.getProposedContent(params);return{current,proposed}}async release(id,signal){signal.throwIfAborted();if(!this.invocations.get(id)?.executing)this.invocations.delete(id)}async invalidateReadCache(paths){const cache=this.config.getFileReadCache();if(!paths){cache.clear();return}await Promise.all(paths.map(async filePath=>{const stats=await stat(filePath).catch(()=>void 0);if(!stats||!cache.markReadEvictedFromHistory(stats))cache.invalidateByPath(filePath)}))}async dispose(){this.disposed=true;for(const controller of this.controllers)controller.abort();this.config.getBackgroundShellRegistry().abortAll();this.invocations.clear();this.tools.clear()}};export{createExecutionTools,LocalExecutionEnvironment};
3
+ import{GlobTool}from"./chunk-M7MGE5IU.js";import{GrepTool}from"./chunk-S7Z7SUH3.js";import{LSTool}from"./chunk-FK5M3433.js";import{NotebookEditTool}from"./chunk-2LWJGXTW.js";import{TaskStopTool}from"./chunk-GXWDEHFP.js";import{WriteFileTool}from"./chunk-HTAUIJB4.js";import{EditTool}from"./chunk-7RNOS7R4.js";import{ShellTool,isModifiableDeclarativeTool}from"./chunk-2JGTWRZJ.js";import{stableJson}from"./chunk-FIXDX63I.js";import{ReadFileTool}from"./chunk-ZWPSBU7K.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();import{stat}from"node:fs/promises";function createExecutionTools(config){const tools=[new ReadFileTool(config),new WriteFileTool(config),new EditTool(config),new NotebookEditTool(config),new GlobTool(config),new GrepTool(config),new LSTool(config),new ShellTool(config),new TaskStopTool(config)];return new Map(tools.map(tool=>[tool.name,tool]))}__name(createExecutionTools,"createExecutionTools");var LocalExecutionEnvironment=class{constructor(config,options={}){this.config=config;this.toolNames=options.toolNames;this.run=options.run;this.tools=createExecutionTools(config);if(options.toolNames){for(const name of this.tools.keys()){if(!options.toolNames.has(name))this.tools.delete(name)}}}static{__name(this,"LocalExecutionEnvironment")}toolNames;tools;invocations=new Map;controllers=new Set;run;disposed=false;tool(name){if(this.disposed)throw new Error("Execution environment is disposed.");const tool=this.tools.get(name);if(!tool)throw new Error(`Unsupported execution tool: ${name}`);return tool}pending(id){if(this.disposed)throw new Error("Execution environment is disposed.");const pending=this.invocations.get(id);if(!pending)throw new Error(`Unknown execution invocation: ${id}`);if(pending.executing)throw new Error(`Invocation is executing: ${id}`);return pending}toolDefinition(name){const{name:toolName,description,parametersJsonSchema}=this.tool(name).schema;return{name:toolName,description,parametersJsonSchema}}async prepare(request,signal){signal.throwIfAborted();const tool=this.tool(request.toolName);if(this.invocations.has(request.id))throw new Error(`Duplicate invocation: ${request.id}`);if(this.invocations.size>=256)throw new Error("Too many pending execution invocations.");let params=structuredClone(request.params);if(request.modification){if(!isModifiableDeclarativeTool(tool))throw new Error("Tool does not support modification.");params=tool.getModifyContext(signal).createUpdatedParams(request.modification.oldContent,request.modification.newContent,params)}const invocation=tool.build(params);this.invocations.set(request.id,{toolName:request.toolName,invocation,executing:false,...request.callId===void 0?{}:{callId:request.callId}});return{params:invocation.params,description:invocation.getDescription(),locations:invocation.toolLocations()}}async permission(id,signal){signal.throwIfAborted();return this.pending(id).invocation.getDefaultPermission(signal)}async confirmation(id,signal){signal.throwIfAborted();const pending=this.pending(id);const details=await pending.invocation.getConfirmationDetails(signal);pending.confirmation=details;const{onConfirm:_onConfirm,...serializable}=details;return serializable}async confirm(id,outcome,payload,signal){signal.throwIfAborted();const pending=this.pending(id);await pending.confirmation?.onConfirm(outcome,payload);if(outcome==="cancel")this.invocations.delete(id)}async execute(id,signal,updateOutput){signal.throwIfAborted();const pending=this.pending(id);pending.executing=true;const controller=new AbortController;const abort=__name(()=>controller.abort(signal.reason),"abort");signal.addEventListener("abort",abort,{once:true});this.controllers.add(controller);try{if(this.run){const params=structuredClone(pending.invocation.params);const rebuilt=this.tool(pending.toolName).build(structuredClone(params)).params;if(stableJson(rebuilt)!==stableJson(params)){throw new Error("The approved parameters change when the tool builds them again; the call did not run.")}return await this.run({id,toolName:pending.toolName,params,...pending.callId===void 0?{}:{callId:pending.callId}},controller.signal,updateOutput)}return await pending.invocation.execute(controller.signal,updateOutput,{...this.config.getShellExecutionConfig(),streamBufferedOutput:true})}finally{signal.removeEventListener("abort",abort);this.controllers.delete(controller);this.invocations.delete(id)}}async modificationContent(toolName,params,signal){signal.throwIfAborted();const tool=this.tool(toolName);if(!isModifiableDeclarativeTool(tool))throw new Error("Tool does not support modification.");const context=tool.getModifyContext(signal);const current=await context.getCurrentContent(params);const proposed=await context.getProposedContent(params);return{current,proposed}}async release(id,signal){signal.throwIfAborted();if(!this.invocations.get(id)?.executing)this.invocations.delete(id)}async invalidateReadCache(paths){const cache=this.config.getFileReadCache();if(!paths){cache.clear();return}await Promise.all(paths.map(async filePath=>{const stats=await stat(filePath).catch(()=>void 0);if(!stats||!cache.markReadEvictedFromHistory(stats))cache.invalidateByPath(filePath)}))}async dispose(){this.disposed=true;for(const controller of this.controllers)controller.abort();this.config.getBackgroundShellRegistry().abortAll();this.invocations.clear();this.tools.clear()}};export{createExecutionTools,LocalExecutionEnvironment};
4
4
  /**
5
5
  * @license
6
6
  * Copyright 2026 Qwen Team
@@ -1,6 +1,6 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import{getGitVersion,getNpmVersion}from"./chunk-2LLPGSUK.js";import{buildEnvStatusFromEnv,snapshotProcessEnv}from"./chunk-DWPCE3QI.js";import{mapDomainErrorToErrorKind}from"./chunk-LUDNUVSA.js";import{canUseRipgrep}from"./chunk-QZV4PFQK.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();import{promises as fs}from"node:fs";var REQUIRED_NODE_MAJOR=22;function createDaemonStatusProvider(options={}){const readEnv=__name(()=>options.env??snapshotProcessEnv(),"readEnv");return{async getEnvStatus(boundWorkspace,acpChannelLive){return buildEnvStatusFromEnv(boundWorkspace,acpChannelLive,readEnv())},async getDaemonPreflightCells(boundWorkspace){return buildDaemonPreflightCells(boundWorkspace,readEnv())}}}__name(createDaemonStatusProvider,"createDaemonStatusProvider");async function buildDaemonPreflightCells(boundWorkspace,env){const nodeVersionCell=__name(()=>{try{const nodeVersion=process.versions.node;const major=Number.parseInt(nodeVersion.split(".")[0]??"0",10);if(Number.isFinite(major)&&major>=REQUIRED_NODE_MAJOR){return{kind:"node_version",status:"ok",locality:"daemon",detail:{version:nodeVersion,required:`>=${REQUIRED_NODE_MAJOR}`}}}return{kind:"node_version",status:"error",errorKind:"missing_binary",error:`Node ${nodeVersion} is below the required >=${REQUIRED_NODE_MAJOR}.`,hint:`Upgrade Node to v${REQUIRED_NODE_MAJOR} or newer.`,locality:"daemon",detail:{version:nodeVersion,required:`>=${REQUIRED_NODE_MAJOR}`}}}catch(err){return{kind:"node_version",status:"error",error:err instanceof Error?err.message:String(err),locality:"daemon"}}},"nodeVersionCell");const cliEntryCell=__name(()=>{const cliEntry=env["QWEN_CLI_ENTRY"]||process.argv[1]||"";if(cliEntry){return{kind:"cli_entry",status:"ok",locality:"daemon",detail:{path:cliEntry,source:env["QWEN_CLI_ENTRY"]?"QWEN_CLI_ENTRY":"process.argv[1]"}}}return{kind:"cli_entry",status:"error",errorKind:"missing_binary",error:"Cannot determine CLI entry path for spawning the ACP child.",hint:"Set QWEN_CLI_ENTRY to the absolute path of the qwen entry script.",locality:"daemon"}},"cliEntryCell");const workspaceDirCell=__name(async()=>{try{const stat=await fs.stat(boundWorkspace);if(stat.isDirectory()){return{kind:"workspace_dir",status:"ok",locality:"daemon",detail:{path:boundWorkspace}}}return{kind:"workspace_dir",status:"error",errorKind:"missing_file",error:`Bound workspace path is not a directory: ${boundWorkspace}`,locality:"daemon",detail:{path:boundWorkspace}}}catch(err){const errorKind=mapDomainErrorToErrorKind(err);return{kind:"workspace_dir",status:"error",error:err instanceof Error?err.message:String(err),...errorKind?{errorKind}:{},locality:"daemon",detail:{path:boundWorkspace}}}},"workspaceDirCell");const slots=[{kind:"node_version",run:nodeVersionCell},{kind:"cli_entry",run:cliEntryCell},{kind:"workspace_dir",run:workspaceDirCell},{kind:"ripgrep",run:__name(()=>safeCheck("ripgrep",async()=>{const ok=await canUseRipgrep(true);return ok?{status:"ok"}:{status:"warning",hint:"Install ripgrep for faster grep tool execution."}}),"run")},{kind:"git",run:__name(()=>safeCheck("git",async()=>{const v=await getGitVersion();return v&&v!=="unknown"?{status:"ok",detail:{version:v}}:{status:"warning",hint:"git not found on PATH."}}),"run")},{kind:"npm",run:__name(()=>safeCheck("npm",async()=>{const v=await getNpmVersion();return v&&v!=="unknown"?{status:"ok",detail:{version:v}}:{status:"warning",hint:"npm not found on PATH."}}),"run")}];const settled=await Promise.allSettled(slots.map(s=>Promise.resolve().then(s.run)));return settled.map((result,i)=>{if(result.status==="fulfilled")return result.value;const err=result.reason;const errorKind=mapDomainErrorToErrorKind(err);return{kind:slots[i].kind,status:"error",locality:"daemon",error:err instanceof Error?err.message:String(err),...errorKind?{errorKind}:{}}})}__name(buildDaemonPreflightCells,"buildDaemonPreflightCells");async function safeCheck(kind,body){try{const r=await body();return{kind,status:r.status,locality:"daemon",...r.detail?{detail:r.detail}:{},...r.hint?{hint:r.hint}:{}}}catch(err){const errorKind=mapDomainErrorToErrorKind(err);return{kind,status:"error",error:err instanceof Error?err.message:String(err),locality:"daemon",...errorKind?{errorKind}:{}}}}__name(safeCheck,"safeCheck");export{createDaemonStatusProvider};
3
+ import{getGitVersion,getNpmVersion}from"./chunk-W5Z4BWWA.js";import{buildEnvStatusFromEnv,snapshotProcessEnv}from"./chunk-DWPCE3QI.js";import{mapDomainErrorToErrorKind}from"./chunk-LUDNUVSA.js";import{canUseRipgrep}from"./chunk-QZV4PFQK.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();import{promises as fs}from"node:fs";var REQUIRED_NODE_MAJOR=22;function createDaemonStatusProvider(options={}){const readEnv=__name(()=>options.env??snapshotProcessEnv(),"readEnv");return{async getEnvStatus(boundWorkspace,acpChannelLive){return buildEnvStatusFromEnv(boundWorkspace,acpChannelLive,readEnv())},async getDaemonPreflightCells(boundWorkspace){return buildDaemonPreflightCells(boundWorkspace,readEnv())}}}__name(createDaemonStatusProvider,"createDaemonStatusProvider");async function buildDaemonPreflightCells(boundWorkspace,env){const nodeVersionCell=__name(()=>{try{const nodeVersion=process.versions.node;const major=Number.parseInt(nodeVersion.split(".")[0]??"0",10);if(Number.isFinite(major)&&major>=REQUIRED_NODE_MAJOR){return{kind:"node_version",status:"ok",locality:"daemon",detail:{version:nodeVersion,required:`>=${REQUIRED_NODE_MAJOR}`}}}return{kind:"node_version",status:"error",errorKind:"missing_binary",error:`Node ${nodeVersion} is below the required >=${REQUIRED_NODE_MAJOR}.`,hint:`Upgrade Node to v${REQUIRED_NODE_MAJOR} or newer.`,locality:"daemon",detail:{version:nodeVersion,required:`>=${REQUIRED_NODE_MAJOR}`}}}catch(err){return{kind:"node_version",status:"error",error:err instanceof Error?err.message:String(err),locality:"daemon"}}},"nodeVersionCell");const cliEntryCell=__name(()=>{const cliEntry=env["QWEN_CLI_ENTRY"]||process.argv[1]||"";if(cliEntry){return{kind:"cli_entry",status:"ok",locality:"daemon",detail:{path:cliEntry,source:env["QWEN_CLI_ENTRY"]?"QWEN_CLI_ENTRY":"process.argv[1]"}}}return{kind:"cli_entry",status:"error",errorKind:"missing_binary",error:"Cannot determine CLI entry path for spawning the ACP child.",hint:"Set QWEN_CLI_ENTRY to the absolute path of the qwen entry script.",locality:"daemon"}},"cliEntryCell");const workspaceDirCell=__name(async()=>{try{const stat=await fs.stat(boundWorkspace);if(stat.isDirectory()){return{kind:"workspace_dir",status:"ok",locality:"daemon",detail:{path:boundWorkspace}}}return{kind:"workspace_dir",status:"error",errorKind:"missing_file",error:`Bound workspace path is not a directory: ${boundWorkspace}`,locality:"daemon",detail:{path:boundWorkspace}}}catch(err){const errorKind=mapDomainErrorToErrorKind(err);return{kind:"workspace_dir",status:"error",error:err instanceof Error?err.message:String(err),...errorKind?{errorKind}:{},locality:"daemon",detail:{path:boundWorkspace}}}},"workspaceDirCell");const slots=[{kind:"node_version",run:nodeVersionCell},{kind:"cli_entry",run:cliEntryCell},{kind:"workspace_dir",run:workspaceDirCell},{kind:"ripgrep",run:__name(()=>safeCheck("ripgrep",async()=>{const ok=await canUseRipgrep(true);return ok?{status:"ok"}:{status:"warning",hint:"Install ripgrep for faster grep tool execution."}}),"run")},{kind:"git",run:__name(()=>safeCheck("git",async()=>{const v=await getGitVersion();return v&&v!=="unknown"?{status:"ok",detail:{version:v}}:{status:"warning",hint:"git not found on PATH."}}),"run")},{kind:"npm",run:__name(()=>safeCheck("npm",async()=>{const v=await getNpmVersion();return v&&v!=="unknown"?{status:"ok",detail:{version:v}}:{status:"warning",hint:"npm not found on PATH."}}),"run")}];const settled=await Promise.allSettled(slots.map(s=>Promise.resolve().then(s.run)));return settled.map((result,i)=>{if(result.status==="fulfilled")return result.value;const err=result.reason;const errorKind=mapDomainErrorToErrorKind(err);return{kind:slots[i].kind,status:"error",locality:"daemon",error:err instanceof Error?err.message:String(err),...errorKind?{errorKind}:{}}})}__name(buildDaemonPreflightCells,"buildDaemonPreflightCells");async function safeCheck(kind,body){try{const r=await body();return{kind,status:r.status,locality:"daemon",...r.detail?{detail:r.detail}:{},...r.hint?{hint:r.hint}:{}}}catch(err){const errorKind=mapDomainErrorToErrorKind(err);return{kind,status:"error",error:err instanceof Error?err.message:String(err),locality:"daemon",...errorKind?{errorKind}:{}}}}__name(safeCheck,"safeCheck");export{createDaemonStatusProvider};
4
4
  /**
5
5
  * @license
6
6
  * Copyright 2025 Qwen Team