@qwen-code/qwen-code 0.21.5 → 0.21.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 (250) hide show
  1. package/bundled/qc-helper/docs/configuration/model-providers.md +8 -8
  2. package/bundled/qc-helper/docs/configuration/settings.md +15 -15
  3. package/bundled/qc-helper/docs/features/channels/github.md +31 -19
  4. package/bundled/qc-helper/docs/features/code-review.md +5 -1
  5. package/bundled/qc-helper/docs/features/headless.md +31 -0
  6. package/bundled/qc-helper/docs/qwen-serve.md +75 -0
  7. package/bundled/review/SKILL.md +72 -60
  8. package/chunks/{MaxSizedBox-2MWU5JYB.js → MaxSizedBox-2HFKP4LI.js} +11 -10
  9. package/chunks/{StandaloneSessionPicker-B6MI5NTB.js → StandaloneSessionPicker-RBV72M5N.js} +26 -25
  10. package/chunks/{acp-startup-profiler-3RICG2YW.js → acp-startup-profiler-ORIQ2CCQ.js} +2 -2
  11. package/chunks/{acpAgent-MRPYN6FH.js → acpAgent-WO6JFCVQ.js} +1232 -139
  12. package/chunks/{agent-NAOXNW4I.js → agent-AHGLYNZ4.js} +11 -10
  13. package/chunks/{agent-headless-L4PPVFKW.js → agent-headless-NTXKKGRO.js} +11 -10
  14. package/chunks/{bridge-LHXGYNCO.js → bridge-RPAU64CA.js} +17 -15
  15. package/chunks/{channel-management-service-UHX56NBO.js → channel-management-service-IGEUOVRT.js} +3 -3
  16. package/chunks/{channel-settings-store-QB54TLYE.js → channel-settings-store-ON64MF7G.js} +18 -17
  17. package/chunks/{channel-worker-group-NDG4WOOZ.js → channel-worker-group-JWQK224X.js} +6 -5
  18. package/chunks/{channel-worker-manager-ZCW6UW34.js → channel-worker-manager-77E3OXRQ.js} +6 -5
  19. package/chunks/{channel-worker-supervisor-ATGFTZRN.js → channel-worker-supervisor-62YWUGP2.js} +4 -3
  20. package/chunks/{chunk-EXHQZBVJ.js → chunk-2POQWYM6.js} +2 -2
  21. package/chunks/{chunk-YMUZQ3MQ.js → chunk-3LZKY4V4.js} +3 -3
  22. package/chunks/{chunk-7MFQLOHZ.js → chunk-3PRJYMXC.js} +1 -1
  23. package/chunks/{chunk-SJMCYCUQ.js → chunk-3UOLYNTF.js} +5 -5
  24. package/chunks/{chunk-Q2V4AOQL.js → chunk-4JH77A2U.js} +1 -1
  25. package/chunks/{chunk-MISUEWB4.js → chunk-4S4OEQ6U.js} +10 -6
  26. package/chunks/{chunk-URJHXOSO.js → chunk-4WTAQEHV.js} +1 -1
  27. package/chunks/{chunk-ZLGPHA34.js → chunk-536SWZTA.js} +5 -5
  28. package/chunks/{chunk-WU5NBSLD.js → chunk-5MJGUQU5.js} +3 -3
  29. package/chunks/{chunk-3P4GP4S2.js → chunk-75QMRMO7.js} +4 -4
  30. package/chunks/{chunk-YLL3SC5S.js → chunk-A4VTILZT.js} +1032 -913
  31. package/chunks/{chunk-B3EBIZUY.js → chunk-ACZRB7AD.js} +8 -3
  32. package/chunks/chunk-BKHCW2BI.js +41 -0
  33. package/chunks/{chunk-XD2PNH3K.js → chunk-BOGOR4HB.js} +5 -5
  34. package/chunks/{chunk-QL4TN4HS.js → chunk-BRVWYMKV.js} +1 -1
  35. package/chunks/{chunk-TCOJPG2P.js → chunk-C4CBJQKY.js} +1 -1
  36. package/chunks/{chunk-4O6HLCOF.js → chunk-CA4UIDFU.js} +1 -1
  37. package/chunks/{chunk-SQTA6PAY.js → chunk-CJ5WLD5Y.js} +6 -2
  38. package/chunks/{chunk-7W5KOBYU.js → chunk-DIT4V3XH.js} +1 -1
  39. package/chunks/{chunk-OIGB253L.js → chunk-DVBEGGLG.js} +8 -8
  40. package/chunks/{chunk-DTAPI453.js → chunk-EMYZIABH.js} +1 -1
  41. package/chunks/{chunk-GBY3ODW7.js → chunk-EXCEQD22.js} +3 -3
  42. package/chunks/{chunk-VJPF6GF2.js → chunk-FZFP7RZI.js} +3 -3
  43. package/chunks/{chunk-3GOCVBYR.js → chunk-G5NNWEYE.js} +5 -5
  44. package/chunks/{chunk-IWYXZAGT.js → chunk-GESMMPAK.js} +33 -33
  45. package/chunks/{chunk-SVIEVA3L.js → chunk-GK2H5GRC.js} +29 -4
  46. package/chunks/{chunk-7M2RLFNX.js → chunk-GWRHVJY2.js} +11 -11
  47. package/chunks/{chunk-BK2UNYWD.js → chunk-HIBNSEJE.js} +12 -0
  48. package/chunks/{chunk-4LLUH3A7.js → chunk-HU5TUALO.js} +95 -8
  49. package/chunks/{chunk-J7I2BZHS.js → chunk-HY25ULVN.js} +23 -6
  50. package/chunks/{chunk-G2UXFO2B.js → chunk-IMOQO6YL.js} +1 -1
  51. package/chunks/{chunk-CAX76R46.js → chunk-JE44IPH6.js} +1 -1
  52. package/chunks/{chunk-IK3RYLAD.js → chunk-K2B3X3E7.js} +3 -3
  53. package/chunks/{chunk-OWAK7LMW.js → chunk-KGJGEEVR.js} +7 -0
  54. package/chunks/{chunk-K64OI7S7.js → chunk-KHUA3NQV.js} +2 -2
  55. package/chunks/{chunk-LEZFUYPM.js → chunk-LAAFLUQV.js} +4 -4
  56. package/chunks/{chunk-FHPKHXHT.js → chunk-MKVZE4ZJ.js} +5 -1
  57. package/chunks/{chunk-4NEBUDWS.js → chunk-N2GJU6KI.js} +9 -9
  58. package/chunks/{chunk-N3RERU5N.js → chunk-NGJOAKJY.js} +3 -3
  59. package/chunks/chunk-NKLP3DCK.js +22 -0
  60. package/chunks/{chunk-K6VEL5KP.js → chunk-NKSF7HYF.js} +1 -1
  61. package/chunks/{chunk-LMNM37OE.js → chunk-O7V7N4G7.js} +1 -1
  62. package/chunks/{chunk-3H5RFLTS.js → chunk-ODPXHGLL.js} +2 -2
  63. package/chunks/{chunk-KH2BIJ4H.js → chunk-OP2OHZ7K.js} +267 -11
  64. package/chunks/{chunk-VOA2UPZM.js → chunk-OWSW7EYP.js} +5 -5
  65. package/chunks/{chunk-B2RBYP7Z.js → chunk-OXX3FG2N.js} +2 -2
  66. package/chunks/{chunk-RM3F46UT.js → chunk-PPUOYL77.js} +71 -6
  67. package/chunks/{chunk-ZPGMDT4S.js → chunk-PX5DNLSA.js} +19 -92
  68. package/chunks/{chunk-FEUXV3DC.js → chunk-Q5RM32DR.js} +1 -1
  69. package/chunks/{chunk-AEWOKOJY.js → chunk-QZKYZCN3.js} +1 -1
  70. package/chunks/{chunk-UKZEXS6K.js → chunk-R574ATRM.js} +11 -0
  71. package/chunks/{chunk-OGAARVN7.js → chunk-R5RBXLNC.js} +3 -3
  72. package/chunks/{chunk-5HWAJ4BK.js → chunk-RFUHDCNF.js} +1 -1
  73. package/chunks/{chunk-LSYVASZS.js → chunk-RHTTKJTP.js} +1 -1
  74. package/chunks/{chunk-LYPXNRBX.js → chunk-RK2EE3T7.js} +1 -1
  75. package/chunks/{chunk-CIUUYB23.js → chunk-S7CV4KO6.js} +3 -3
  76. package/chunks/{chunk-4NNR24EP.js → chunk-SKNE3KQC.js} +3 -3
  77. package/chunks/{chunk-JDNWIXHJ.js → chunk-SLSWFHDF.js} +3 -3
  78. package/chunks/{chunk-UWSXFI6E.js → chunk-SQC6K5HI.js} +6 -2
  79. package/chunks/{chunk-P3SLTSNY.js → chunk-SQOMTWQT.js} +4 -4
  80. package/chunks/{chunk-D7QAZ5DF.js → chunk-SUKEUUAA.js} +1 -1
  81. package/chunks/{chunk-WTM5QONI.js → chunk-T4JSA7KU.js} +2 -2
  82. package/chunks/{chunk-I7JDGNG6.js → chunk-T5U6IM4C.js} +6 -2
  83. package/chunks/{chunk-2JBETW4S.js → chunk-TGGEZINK.js} +5 -5
  84. package/chunks/{chunk-C6ARWPCG.js → chunk-TOGZTG4X.js} +2 -2
  85. package/chunks/{chunk-A6SX5TAH.js → chunk-TSERKWCX.js} +6 -2
  86. package/chunks/{chunk-IWGMDSC3.js → chunk-U4AF3QLU.js} +355 -17
  87. package/chunks/{chunk-PDDYAXL2.js → chunk-UGTWD35F.js} +14 -1
  88. package/chunks/{chunk-BWLUCN35.js → chunk-ULPQQSDN.js} +2 -2
  89. package/chunks/{chunk-GEP54CHX.js → chunk-VGFPFM4U.js} +3 -3
  90. package/chunks/{chunk-NLQIEY6W.js → chunk-VNQCPBC2.js} +3 -3
  91. package/chunks/{chunk-K2ETEWG6.js → chunk-VSALQLT7.js} +1 -1
  92. package/chunks/{chunk-YO4JI7B4.js → chunk-W5DXUTXD.js} +12 -6
  93. package/chunks/{chunk-M744OFVE.js → chunk-W7U4ESW2.js} +1 -1
  94. package/chunks/{chunk-TJ56V3AR.js → chunk-WNU7TZTO.js} +4 -4
  95. package/chunks/{chunk-GTM6IHBB.js → chunk-WO2B5E5B.js} +1 -0
  96. package/chunks/chunk-WOJZWRAZ.js +123 -0
  97. package/chunks/{chunk-5XNO4AW7.js → chunk-XA4TMLFN.js} +11 -11
  98. package/chunks/{chunk-GP4IMBX5.js → chunk-XM2O73NC.js} +1696 -476
  99. package/chunks/{chunk-IZ2CMEYO.js → chunk-YMBOEAF4.js} +1 -1
  100. package/chunks/{chunk-QONSRAEV.js → chunk-YP5KH5Y7.js} +1 -1
  101. package/chunks/{chunk-ZLJQIGCH.js → chunk-YZQTA3ID.js} +28 -11
  102. package/chunks/{computer-use-XDOGP2KA.js → computer-use-5HXJ2P4X.js} +11 -10
  103. package/chunks/{config-utils-E3ZQTHGM.js → config-utils-VXD4SPVR.js} +2 -2
  104. package/chunks/{contextCommand-N3LQDCYJ.js → contextCommand-7BEHRX2H.js} +14 -13
  105. package/chunks/{core-runtime-STAFP45W.js → core-runtime-U4VJ5TIV.js} +11 -10
  106. package/chunks/create-sub-session-QZNQY332.js +772 -0
  107. package/chunks/{daemon-CCIX4BMG.js → daemon-YI5RY62O.js} +115 -3
  108. package/chunks/{daemon-status-provider-PPAH3ATF.js → daemon-status-provider-UJUGTDTL.js} +21 -19
  109. package/chunks/{daemon-trust-policy-X6XL3MB4.js → daemon-trust-policy-ZHDD5VYQ.js} +17 -16
  110. package/chunks/{daemon-trust-policy-monitor-M5LBL2HD.js → daemon-trust-policy-monitor-5SHYBDGA.js} +17 -16
  111. package/chunks/{deferred-core-runtime-O54YPTBU.js → deferred-core-runtime-QWAEBTR5.js} +11 -10
  112. package/chunks/discovery-XLHITE74.js +220 -0
  113. package/chunks/{dist-IKGVITP3.js → dist-KS4O2NKE.js} +99 -6
  114. package/chunks/{earlyInputCapture-CBIT2RGT.js → earlyInputCapture-5BMSGKOI.js} +11 -10
  115. package/chunks/{edit-KW2TOC6A.js → edit-IVQQVYYK.js} +11 -10
  116. package/chunks/{enter-worktree-YL34NEU5.js → enter-worktree-P3DF2N6O.js} +11 -10
  117. package/chunks/{enterPlanMode-JFJTDASQ.js → enterPlanMode-KKTDVLAD.js} +11 -10
  118. package/chunks/{environment-IATU5GXG.js → environment-W5TRDM3G.js} +14 -13
  119. package/chunks/{errors-SAVRDE7Q.js → errors-GJJB36IG.js} +14 -13
  120. package/chunks/{exit-worktree-5M43QPBB.js → exit-worktree-LV5RLOCU.js} +11 -10
  121. package/chunks/{exitPlanMode-W4EICZ4N.js → exitPlanMode-TUGOB2LL.js} +11 -10
  122. package/chunks/external-tool-guard-provider-5HTGOPGU.js +273 -0
  123. package/chunks/{fast-path-YQJPIKMP.js → fast-path-2FU23PAQ.js} +5 -5
  124. package/chunks/{gemini-FUF5SSPR.js → gemini-KDULDQPP.js} +70 -55
  125. package/chunks/{geminiContentGenerator-LLLZBOUG.js → geminiContentGenerator-LOCFHNVA.js} +1 -1
  126. package/chunks/{glob-LJFFMN4D.js → glob-Z4NQFKWS.js} +11 -10
  127. package/chunks/{grep-Q64EAM73.js → grep-Z67Z7EN6.js} +11 -10
  128. package/chunks/{handleAutoUpdate-QBMPRTSQ.js → handleAutoUpdate-DFUZE6I6.js} +16 -15
  129. package/chunks/{i18n-LDUW5DMN.js → i18n-R4FMZ7N2.js} +13 -12
  130. package/chunks/{image-gen-G7RLG3KR.js → image-gen-4CQJPQP5.js} +1 -1
  131. package/chunks/{initializer-74A7DMMD.js → initializer-DK672ZVE.js} +17 -16
  132. package/chunks/{installationInfo-OFDYLDFD.js → installationInfo-PO4Z3ES7.js} +12 -11
  133. package/chunks/{list-JA2EWRHJ.js → list-QXQF6C53.js} +20 -19
  134. package/chunks/{loadedSettingsAdapter-2GNJOQ3L.js → loadedSettingsAdapter-4D7GUGW6.js} +17 -16
  135. package/chunks/{loggingContentGenerator-B6B5EGB3.js → loggingContentGenerator-2P3MNACM.js} +4 -3
  136. package/chunks/{managed-npm-update-4YZHLUER.js → managed-npm-update-LWVJQTWO.js} +24 -14
  137. package/chunks/{mcp-LLK5YJVH.js → mcp-GHETAR6V.js} +17 -16
  138. package/chunks/{monitor-NYJPAWVP.js → monitor-4T7W4M6Q.js} +11 -10
  139. package/chunks/{nonInteractiveCli-HZBBBDJD.js → nonInteractiveCli-P4UKCJFM.js} +47 -45
  140. package/chunks/{notebook-edit-LLM6UXFX.js → notebook-edit-OC2V7U5D.js} +11 -10
  141. package/chunks/{openaiContentGenerator-2AEXDN55.js → openaiContentGenerator-RAJUFWQY.js} +5 -4
  142. package/chunks/{pidfile-3JUWX7G2.js → pidfile-HVPYVRLS.js} +11 -10
  143. package/chunks/{processUtils-JLLRVZHT.js → processUtils-VIQ4JHVX.js} +2 -2
  144. package/chunks/{qwenContentGenerator-2FESCF27.js → qwenContentGenerator-2QLCUFNZ.js} +12 -11
  145. package/chunks/{qwenOAuth2-2KKPYA5J.js → qwenOAuth2-J2X3EN43.js} +1 -1
  146. package/chunks/{read-file-5GVXLY74.js → read-file-ZNAN2B26.js} +3 -2
  147. package/chunks/{record-artifact-L3BAHQFN.js → record-artifact-E6AWQU2Z.js} +1 -1
  148. package/chunks/{resumeHistoryUtils-Z4OFBXPM.js → resumeHistoryUtils-RCY7AL5Y.js} +15 -14
  149. package/chunks/{ripGrep-TKOJTIAB.js → ripGrep-C3KMLZM5.js} +11 -10
  150. package/chunks/{run-qwen-serve-K5W6MM6M.js → run-qwen-serve-3JN75CIQ.js} +518 -75
  151. package/chunks/{runtime-IADXMRCY.js → runtime-VUA4WQYD.js} +20 -19
  152. package/chunks/{scheduler-T7AV37LD.js → scheduler-Z4IBXCOY.js} +11 -10
  153. package/chunks/{serve-ROEGMS3I.js → serve-67T3P7XI.js} +18 -16
  154. package/chunks/{server-NGXMRODI.js → server-46ZO2CLV.js} +7556 -397
  155. package/chunks/{session-RCDLDJA4.js → session-B4IFAFC4.js} +50 -48
  156. package/chunks/{settings-E6H3AURD.js → settings-AI2BTBOZ.js} +16 -15
  157. package/chunks/{shell-RHGGJ6BE.js → shell-BKII3B6E.js} +11 -10
  158. package/chunks/{skill-GQ7PBS25.js → skill-6CFOWVGA.js} +4 -3
  159. package/chunks/{skill-settings-E2F7OCBL.js → skill-settings-6BFQWMW4.js} +16 -15
  160. package/chunks/{spawnChannel-Q2IQBHME.js → spawnChannel-FJXW35U7.js} +14 -12
  161. package/chunks/{standalone-update-NYYZEHLD.js → standalone-update-WVINHRNS.js} +14 -13
  162. package/chunks/{startInteractiveUI-IX6I3Y2Z.js → startInteractiveUI-YE57CJ57.js} +140 -138
  163. package/chunks/{stdioHelpers-HGIYTWAY.js → stdioHelpers-7A2EE64Z.js} +5 -3
  164. package/chunks/{task-create-2X4UP4F3.js → task-create-Q727MXHJ.js} +2 -2
  165. package/chunks/{task-list-WOLJPZ64.js → task-list-G6KPQ5JT.js} +1 -1
  166. package/chunks/{task-update-VDUSN36E.js → task-update-YB7PXO4R.js} +2 -2
  167. package/chunks/{team-create-UTRVUEDA.js → team-create-GNC7NFY6.js} +11 -10
  168. package/chunks/{team-delete-D2VMSDOT.js → team-delete-GDO7H2T4.js} +1 -1
  169. package/chunks/{team-plan-approval-YZNB4U5U.js → team-plan-approval-ECALJLIO.js} +11 -10
  170. package/chunks/{terminal-image-renderer-QRSCS2BE.js → terminal-image-renderer-II74TFVW.js} +11 -10
  171. package/chunks/{theme-manager-EKZBY34I.js → theme-manager-2MGEDD22.js} +11 -10
  172. package/chunks/{tool-search-N2R7LVMC.js → tool-search-S6LRRACA.js} +3 -2
  173. package/chunks/{total-session-admission-HBIYARPO.js → total-session-admission-7WVAWQPU.js} +17 -15
  174. package/chunks/{trustedFolders-ZQLYRCSY.js → trustedFolders-NFS4KHO4.js} +13 -12
  175. package/chunks/{update-relaunch-PJWXMPCR.js → update-relaunch-Q5HLZ6UW.js} +6 -6
  176. package/chunks/{updateCheck-ZXRCGY66.js → updateCheck-UOVZSTP7.js} +15 -14
  177. package/chunks/{useAutoAcceptIndicator-ZYQW5SGJ.js → useAutoAcceptIndicator-PC6MOJCO.js} +19 -18
  178. package/chunks/{validateNonInterActiveAuth-M7J7OTRH.js → validateNonInterActiveAuth-YMQP3ZM7.js} +44 -42
  179. package/chunks/{version-2AOHMPK3.js → version-T4AQFZJH.js} +1 -1
  180. package/chunks/{web-fetch-DS34CJ3R.js → web-fetch-JQCJHEEX.js} +3 -2
  181. package/chunks/{web-search-ITFPD7V4.js → web-search-QGZ2KY4G.js} +4 -3
  182. package/chunks/{workflow-LZQ4PGNS.js → workflow-YIT27YWZ.js} +12 -11
  183. package/chunks/{workspace-providers-status-ZPTLKOBM.js → workspace-providers-status-FIDZQ2PL.js} +20 -19
  184. package/chunks/{workspace-registration-store-OTFKSGG7.js → workspace-registration-store-RCSPE4DU.js} +1 -1
  185. package/chunks/{workspace-registry-YZ3OXPHP.js → workspace-registry-5PEUCY6E.js} +17 -15
  186. package/chunks/{workspace-service-OCZXOOSQ.js → workspace-service-LANDVPL7.js} +21 -20
  187. package/chunks/{workspace-skills-status-K2ALGUCD.js → workspace-skills-status-2IQVJNIN.js} +18 -17
  188. package/chunks/{workspace-trust-reconciler-KMRZISJP.js → workspace-trust-reconciler-CZPZZCZC.js} +26 -24
  189. package/chunks/{write-file-AWBI4GJS.js → write-file-G5VNGCOG.js} +11 -10
  190. package/chunks/{zoom-image-NHKN6F77.js → zoom-image-6RBLD7X6.js} +3 -2
  191. package/cli-entry.js +14 -0
  192. package/cli.js +19 -15
  193. package/package.json +3 -3
  194. package/web-shell/assets/{arc-Dpg66jw7.js → arc-B-Vtkp1W.js} +1 -1
  195. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BJ4FIBxN.js → architectureDiagram-3BPJPVTR-qmTXIj64.js} +1 -1
  196. package/web-shell/assets/{blockDiagram-GPEHLZMM-VXmYdtYT.js → blockDiagram-GPEHLZMM-ZlnXEtdP.js} +1 -1
  197. package/web-shell/assets/{c4Diagram-AAUBKEIU-BNLDb8FE.js → c4Diagram-AAUBKEIU-Wyoirf6Z.js} +1 -1
  198. package/web-shell/assets/channel-DXaHnfjS.js +1 -0
  199. package/web-shell/assets/{chunk-2J33WTMH-DR5yHxr0.js → chunk-2J33WTMH-WQwbq9d8.js} +1 -1
  200. package/web-shell/assets/{chunk-4BX2VUAB-Czkq8UZU.js → chunk-4BX2VUAB-DQKnAXC4.js} +1 -1
  201. package/web-shell/assets/{chunk-55IACEB6-DugUgM6s.js → chunk-55IACEB6-DIdgXNcO.js} +1 -1
  202. package/web-shell/assets/{chunk-727SXJPM-Dw6quA1K.js → chunk-727SXJPM-CUwGOLEd.js} +1 -1
  203. package/web-shell/assets/{chunk-AQP2D5EJ-BoVYOTTz.js → chunk-AQP2D5EJ-CCBGZFZ4.js} +1 -1
  204. package/web-shell/assets/{chunk-FMBD7UC4--Amcse-j.js → chunk-FMBD7UC4-DMGXProk.js} +1 -1
  205. package/web-shell/assets/{chunk-ND2GUHAM-ajaEYAC8.js → chunk-ND2GUHAM-yejcFqsh.js} +1 -1
  206. package/web-shell/assets/{chunk-QZHKN3VN-CUNDZ7im.js → chunk-QZHKN3VN-DxCyqTf7.js} +1 -1
  207. package/web-shell/assets/classDiagram-4FO5ZUOK-BigU82A0.js +1 -0
  208. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BigU82A0.js +1 -0
  209. package/web-shell/assets/{cose-bilkent-S5V4N54A-BnfkD-m1.js → cose-bilkent-S5V4N54A-DOrF3cg_.js} +1 -1
  210. package/web-shell/assets/{dagre-BM42HDAG-BuUdFk7Z.js → dagre-BM42HDAG-Be6CdYQ_.js} +1 -1
  211. package/web-shell/assets/{diagram-2AECGRRQ-B2ZXxoab.js → diagram-2AECGRRQ-B_Rjsft2.js} +1 -1
  212. package/web-shell/assets/{diagram-5GNKFQAL-BsgOICzM.js → diagram-5GNKFQAL-BvQbKSm1.js} +1 -1
  213. package/web-shell/assets/{diagram-KO2AKTUF-DTTjG6U-.js → diagram-KO2AKTUF-BsdmMdpS.js} +1 -1
  214. package/web-shell/assets/{diagram-LMA3HP47-temLf1x7.js → diagram-LMA3HP47-CrQlBaNr.js} +1 -1
  215. package/web-shell/assets/{diagram-OG6HWLK6-CRFjScs2.js → diagram-OG6HWLK6-aB1MD_DL.js} +1 -1
  216. package/web-shell/assets/{erDiagram-TEJ5UH35-D4oaY-rQ.js → erDiagram-TEJ5UH35-F-eUUn9n.js} +1 -1
  217. package/web-shell/assets/{flowDiagram-I6XJVG4X-BqG8B49b.js → flowDiagram-I6XJVG4X-DY_d8lUK.js} +1 -1
  218. package/web-shell/assets/{ganttDiagram-6RSMTGT7-DffQBdd5.js → ganttDiagram-6RSMTGT7-Dqu7KBPg.js} +1 -1
  219. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CMDPfseF.js → gitGraphDiagram-PVQCEYII-2IkU_VEj.js} +1 -1
  220. package/web-shell/assets/{index-qTQR_smP.js → index-BuSbqggh.js} +1 -1
  221. package/web-shell/assets/index-DrfC2e9s.js +1768 -0
  222. package/web-shell/assets/index-QQlUCJGg.css +5 -0
  223. package/web-shell/assets/{infoDiagram-5YYISTIA-Cn3T83MA.js → infoDiagram-5YYISTIA-C4orwzPw.js} +1 -1
  224. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-ijFs7e25.js → ishikawaDiagram-YF4QCWOH-fXUEfef_.js} +1 -1
  225. package/web-shell/assets/{journeyDiagram-JHISSGLW-CINTv8VB.js → journeyDiagram-JHISSGLW-Bs0I1_J5.js} +1 -1
  226. package/web-shell/assets/{kanban-definition-UN3LZRKU-CMGRZCxx.js → kanban-definition-UN3LZRKU-BPRj1dw_.js} +1 -1
  227. package/web-shell/assets/{linear-Co-2_37d.js → linear-DFS6ZDpW.js} +1 -1
  228. package/web-shell/assets/{mermaid.core-DijbyaN5.js → mermaid.core-CZxjWMaO.js} +5 -5
  229. package/web-shell/assets/{mindmap-definition-RKZ34NQL-k_sDYDPZ.js → mindmap-definition-RKZ34NQL-Dsr3PmNs.js} +1 -1
  230. package/web-shell/assets/{pieDiagram-4H26LBE5-CG-oz8V3.js → pieDiagram-4H26LBE5-D5Ngpz5Y.js} +1 -1
  231. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Baq7HIG2.js → quadrantDiagram-W4KKPZXB-WJK9I25z.js} +1 -1
  232. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CDM3ZvBt.js → requirementDiagram-4Y6WPE33-CmrYcwOH.js} +1 -1
  233. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C2dJbWKN.js → sankeyDiagram-5OEKKPKP-7SjCc4Mv.js} +1 -1
  234. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Cf1_h59p.js → sequenceDiagram-3UESZ5HK-Dl9E0IRM.js} +1 -1
  235. package/web-shell/assets/{stateDiagram-AJRCARHV-CI5clUEc.js → stateDiagram-AJRCARHV-CRRio7yV.js} +1 -1
  236. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-1atT7XaU.js +1 -0
  237. package/web-shell/assets/{timeline-definition-PNZ67QCA-B2O8cAZX.js → timeline-definition-PNZ67QCA-DVyXjjfq.js} +1 -1
  238. package/web-shell/assets/{vennDiagram-CIIHVFJN-BLsJ_h9s.js → vennDiagram-CIIHVFJN-Nb2Lckzq.js} +1 -1
  239. package/web-shell/assets/{wardley-L42UT6IY-BlPU4FTA.js → wardley-L42UT6IY-DuL_otIP.js} +1 -1
  240. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D_U-RdU4.js → wardleyDiagram-YWT4CUSO-DVI9Q4Aa.js} +1 -1
  241. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BynXGSTl.js → xychartDiagram-2RQKCTM6-BNjAm7KD.js} +1 -1
  242. package/web-shell/index.html +2 -2
  243. package/bundled/review/DESIGN.md +0 -724
  244. package/chunks/create-sub-session-2B3JENWD.js +0 -400
  245. package/web-shell/assets/channel-Bd9wOnaA.js +0 -1
  246. package/web-shell/assets/classDiagram-4FO5ZUOK-XhCT8FE3.js +0 -1
  247. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-XhCT8FE3.js +0 -1
  248. package/web-shell/assets/index-2F4RsNzd.js +0 -1756
  249. package/web-shell/assets/index-CaucmEO_.css +0 -5
  250. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BDc8asKD.js +0 -1
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-OCPBI7J5.js";
18
18
  import {
19
19
  defaultSpawnChannelFactory
20
- } from "./chunk-UWSXFI6E.js";
20
+ } from "./chunk-SQC6K5HI.js";
21
21
  import {
22
22
  BridgeChannelClosedError,
23
23
  BridgeTimeoutError,
@@ -26,11 +26,12 @@ import {
26
26
  STATUS_SCHEMA_VERSION,
27
27
  createIdleWorkspaceExtensionsStatus,
28
28
  createIdleWorkspaceHooksStatus
29
- } from "./chunk-PDDYAXL2.js";
29
+ } from "./chunk-UGTWD35F.js";
30
30
  import {
31
31
  CHANNEL_STARTUP_PROFILE_META_KEY,
32
32
  CHANNEL_STARTUP_PROFILE_VERSION,
33
33
  DAEMON_CHANNEL_DELIVERY_META_KEY,
34
+ DAEMON_MODEL_PROMPT_META_KEY,
34
35
  LOAD_REPLAY_BULK_MODE,
35
36
  LOAD_REPLAY_HIDE_INHERITED_META_KEY,
36
37
  LOAD_REPLAY_META_KEY,
@@ -42,8 +43,9 @@ import {
42
43
  REQUESTED_SESSION_ID_META_KEY,
43
44
  TODO_STOP_GUARD_CONTINUATION_CLAIM_METHOD,
44
45
  TODO_STOP_GUARD_QUEUE_RELEASE_METHOD,
45
- WORKTREE_MCP_DEFER_META_KEY
46
- } from "./chunk-UKZEXS6K.js";
46
+ WORKTREE_MCP_DEFER_META_KEY,
47
+ isValidTrustedModelPrompt
48
+ } from "./chunk-R574ATRM.js";
47
49
  import {
48
50
  BranchWhilePromptActiveError,
49
51
  CancelSentinelCollisionError,
@@ -71,9 +73,17 @@ import {
71
73
  } from "./chunk-6PLDPT2C.js";
72
74
  import {
73
75
  CHANNEL_DELIVERY_ERROR_CODES,
76
+ LIVE_TASK_TOOL_NAMES,
77
+ MAX_LIVE_SCREEN_CONTEXT_TEXT_CHARS,
78
+ MAX_LIVE_SPEAK_TO_USER_MESSAGE_CHARS,
74
79
  MAX_SUB_SESSION_NAME_CHARS,
75
80
  MAX_SUB_SESSION_PROMPT_CHARS
76
- } from "./chunk-BK2UNYWD.js";
81
+ } from "./chunk-HIBNSEJE.js";
82
+ import {
83
+ EXTERNAL_TOOL_GUARD_READY_META_KEY,
84
+ EXTERNAL_TOOL_GUARD_REQUIRED_VALUE,
85
+ isValidExternalToolGuardDenialReason
86
+ } from "./chunk-BKHCW2BI.js";
77
87
  import {
78
88
  ClientSideConnection,
79
89
  PROTOCOL_VERSION,
@@ -90,7 +100,7 @@ import {
90
100
  metadataBudgetBytes,
91
101
  normalizeSnapshotPayload,
92
102
  stableSessionArtifactId
93
- } from "./chunk-YLL3SC5S.js";
103
+ } from "./chunk-A4VTILZT.js";
94
104
  import {
95
105
  DAEMON_TRACEPARENT_META_KEY,
96
106
  DAEMON_TRACESTATE_META_KEY
@@ -99,7 +109,7 @@ import {
99
109
  INVOCATION_CONTEXT_META_KEY,
100
110
  PRIVATE_ACP_CAPABILITY_ENV,
101
111
  PRIVATE_PARENT_CAPABILITY_META_KEY
102
- } from "./chunk-ZPGMDT4S.js";
112
+ } from "./chunk-PX5DNLSA.js";
103
113
  import {
104
114
  init_esbuild_shims
105
115
  } from "./chunk-5O2XNYP6.js";
@@ -1582,6 +1592,25 @@ function isRecord2(value) {
1582
1592
  return typeof value === "object" && value !== null && !Array.isArray(value);
1583
1593
  }
1584
1594
  __name(isRecord2, "isRecord");
1595
+ function normalizeExternalToolGuardResult(value) {
1596
+ if (!isRecord2(value)) {
1597
+ throw new Error("External tool guard handler returned an invalid result.");
1598
+ }
1599
+ const keys = Object.keys(value);
1600
+ if (value["allowed"] === true && keys.length === 1 && keys[0] === "allowed") {
1601
+ return { allowed: true };
1602
+ }
1603
+ if (value["allowed"] !== false || keys.some((key) => key !== "allowed" && key !== "reason")) {
1604
+ throw new Error("External tool guard handler returned an invalid result.");
1605
+ }
1606
+ if (!Object.hasOwn(value, "reason")) return { allowed: false };
1607
+ const reason = value["reason"];
1608
+ if (!isValidExternalToolGuardDenialReason(reason)) {
1609
+ throw new Error("External tool guard handler returned an invalid result.");
1610
+ }
1611
+ return { allowed: false, reason };
1612
+ }
1613
+ __name(normalizeExternalToolGuardResult, "normalizeExternalToolGuardResult");
1585
1614
  function isBoundedChannelDeliveryString(value) {
1586
1615
  return typeof value === "string" && value.trim().length > 0 && value.length <= MAX_CHANNEL_DELIVERY_FIELD_CHARS;
1587
1616
  }
@@ -1811,7 +1840,7 @@ function sliceLineRange(content, startLine, endLine) {
1811
1840
  }
1812
1841
  __name(sliceLineRange, "sliceLineRange");
1813
1842
  var BridgeClient = class {
1814
- constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender, ownsSession = () => true, onTokenUsage, onCreateSubSession, onGenerationEvent, onWorkspaceGenerationEvent, onChannelDelivery, hasSessionSpawnInFlight = () => false) {
1843
+ constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender, ownsSession = () => true, onTokenUsage, onCreateSubSession, onGenerationEvent, onWorkspaceGenerationEvent, onChannelDelivery, hasSessionSpawnInFlight = () => false, getLiveScreenContextCaptureHandler = () => void 0, getLiveTaskToolRequestHandler = () => void 0, getLiveSpeakToUserHandler = () => void 0, externalToolGuard) {
1815
1844
  this.resolveEntry = resolveEntry;
1816
1845
  this.resolvePendingRestoreEvents = resolvePendingRestoreEvents;
1817
1846
  this.mediator = mediator;
@@ -1828,6 +1857,10 @@ var BridgeClient = class {
1828
1857
  this.onWorkspaceGenerationEvent = onWorkspaceGenerationEvent;
1829
1858
  this.onChannelDelivery = onChannelDelivery;
1830
1859
  this.hasSessionSpawnInFlight = hasSessionSpawnInFlight;
1860
+ this.getLiveScreenContextCaptureHandler = getLiveScreenContextCaptureHandler;
1861
+ this.getLiveTaskToolRequestHandler = getLiveTaskToolRequestHandler;
1862
+ this.getLiveSpeakToUserHandler = getLiveSpeakToUserHandler;
1863
+ this.externalToolGuard = externalToolGuard;
1831
1864
  }
1832
1865
  static {
1833
1866
  __name(this, "BridgeClient");
@@ -2105,9 +2138,21 @@ var BridgeClient = class {
2105
2138
  if (method === SERVE_CONTROL_EXT_METHODS.createSubSession) {
2106
2139
  return this.handleCreateSubSession(params);
2107
2140
  }
2141
+ if (method === SERVE_CONTROL_EXT_METHODS.liveCaptureScreenContext) {
2142
+ return this.handleLiveScreenContextCapture(params);
2143
+ }
2144
+ if (method === SERVE_CONTROL_EXT_METHODS.liveTaskTool) {
2145
+ return this.handleLiveTaskTool(params);
2146
+ }
2147
+ if (method === SERVE_CONTROL_EXT_METHODS.liveSpeakToUser) {
2148
+ return this.handleLiveSpeakToUser(params);
2149
+ }
2108
2150
  if (method === SERVE_CONTROL_EXT_METHODS.channelDelivery) {
2109
2151
  return this.handleChannelDelivery(params);
2110
2152
  }
2153
+ if (method === SERVE_CONTROL_EXT_METHODS.externalToolGuardPrepare) {
2154
+ return this.handleExternalToolGuardPrepare(params);
2155
+ }
2111
2156
  if (method === TODO_STOP_GUARD_CONTINUATION_CLAIM_METHOD) {
2112
2157
  return this.handleTodoStopGuardContinuationClaim(params);
2113
2158
  }
@@ -2149,6 +2194,52 @@ var BridgeClient = class {
2149
2194
  }
2150
2195
  return { messages, hasQueuedPrompt };
2151
2196
  }
2197
+ async handleExternalToolGuardPrepare(params) {
2198
+ if (!this.externalToolGuard) {
2199
+ throw RequestError.methodNotFound(
2200
+ SERVE_CONTROL_EXT_METHODS.externalToolGuardPrepare
2201
+ );
2202
+ }
2203
+ const sessionId = params["sessionId"];
2204
+ const promptId = params["promptId"];
2205
+ const toolCallId = params["toolCallId"];
2206
+ const toolName = params["toolName"];
2207
+ const args = params["arguments"];
2208
+ if (typeof sessionId !== "string" || sessionId.length === 0 || typeof promptId !== "string" || promptId.length === 0 || typeof toolCallId !== "string" || toolCallId.length === 0 || typeof toolName !== "string" || toolName.length === 0 || !isRecord2(args)) {
2209
+ throw RequestError.invalidParams(
2210
+ void 0,
2211
+ "Invalid external tool guard request"
2212
+ );
2213
+ }
2214
+ if (!this.ownsSession(sessionId)) {
2215
+ throw RequestError.invalidParams(
2216
+ void 0,
2217
+ "External tool guard session is not owned by this connection"
2218
+ );
2219
+ }
2220
+ const entry = this.resolveEntry(sessionId);
2221
+ if (!entry || !entry.promptActive || entry.activePromptId !== promptId) {
2222
+ throw RequestError.invalidParams(
2223
+ void 0,
2224
+ "External tool guard prompt is not the active prompt"
2225
+ );
2226
+ }
2227
+ const decision = await this.externalToolGuard({
2228
+ sessionId: entry.sessionId,
2229
+ promptId: entry.activePromptId,
2230
+ toolCallId,
2231
+ toolName,
2232
+ arguments: args
2233
+ });
2234
+ const currentEntry = this.resolveEntry(sessionId);
2235
+ if (!this.ownsSession(sessionId) || currentEntry !== entry || !currentEntry.promptActive || currentEntry.activePromptId !== promptId) {
2236
+ throw RequestError.invalidParams(
2237
+ void 0,
2238
+ "External tool guard prompt is no longer active"
2239
+ );
2240
+ }
2241
+ return normalizeExternalToolGuardResult(decision);
2242
+ }
2152
2243
  handleTodoStopGuardContinuationClaim(params) {
2153
2244
  const sessionId = typeof params["sessionId"] === "string" && params["sessionId"].length > 0 ? params["sessionId"] : void 0;
2154
2245
  if (!sessionId) return { claimed: false, hasQueuedPrompt: false };
@@ -2410,6 +2501,71 @@ var BridgeClient = class {
2410
2501
  ...result.parentSessionPersisted !== void 0 ? { parentSessionPersisted: result.parentSessionPersisted } : {}
2411
2502
  };
2412
2503
  }
2504
+ async handleLiveScreenContextCapture(params) {
2505
+ const handler = this.getLiveScreenContextCaptureHandler();
2506
+ if (!handler) {
2507
+ throw RequestError.methodNotFound(
2508
+ SERVE_CONTROL_EXT_METHODS.liveCaptureScreenContext
2509
+ );
2510
+ }
2511
+ const callerSessionId = params["callerSessionId"];
2512
+ if (typeof callerSessionId !== "string" || callerSessionId.length === 0 || !this.ownsSession(callerSessionId)) {
2513
+ throw RequestError.invalidParams(
2514
+ void 0,
2515
+ "`callerSessionId` is required and must name a session owned by this connection"
2516
+ );
2517
+ }
2518
+ const result = await handler({ callerSessionId });
2519
+ if (result.appName.length === 0 || result.appName.length > 512 || result.windowTitle !== void 0 && result.windowTitle.length > 2048 || result.accessibilityText.length > MAX_LIVE_SCREEN_CONTEXT_TEXT_CHARS || result.screenshotPath.length === 0 || result.screenshotPath.length > 4096) {
2520
+ throw RequestError.internalError(void 0, "Invalid Appshot result.");
2521
+ }
2522
+ return {
2523
+ appName: result.appName,
2524
+ ...result.windowTitle ? { windowTitle: result.windowTitle } : {},
2525
+ accessibilityText: result.accessibilityText,
2526
+ screenshotPath: result.screenshotPath
2527
+ };
2528
+ }
2529
+ async handleLiveTaskTool(params) {
2530
+ const handler = this.getLiveTaskToolRequestHandler();
2531
+ if (!handler) {
2532
+ throw RequestError.methodNotFound(SERVE_CONTROL_EXT_METHODS.liveTaskTool);
2533
+ }
2534
+ const callerSessionId = params["callerSessionId"];
2535
+ const name = params["name"];
2536
+ const args = params["arguments"];
2537
+ if (typeof callerSessionId !== "string" || callerSessionId.length === 0 || !this.ownsSession(callerSessionId) || typeof name !== "string" || !LIVE_TASK_TOOL_NAMES.includes(
2538
+ name
2539
+ ) || typeof args !== "object" || args === null || Array.isArray(args)) {
2540
+ throw RequestError.invalidParams(
2541
+ void 0,
2542
+ "Invalid Live task-tool request."
2543
+ );
2544
+ }
2545
+ return handler({
2546
+ callerSessionId,
2547
+ name,
2548
+ arguments: args
2549
+ });
2550
+ }
2551
+ async handleLiveSpeakToUser(params) {
2552
+ const handler = this.getLiveSpeakToUserHandler();
2553
+ if (!handler) {
2554
+ throw RequestError.methodNotFound(
2555
+ SERVE_CONTROL_EXT_METHODS.liveSpeakToUser
2556
+ );
2557
+ }
2558
+ const callerSessionId = params["callerSessionId"];
2559
+ const message = params["message"];
2560
+ if (typeof callerSessionId !== "string" || callerSessionId.length === 0 || !this.ownsSession(callerSessionId) || typeof message !== "string" || message.trim().length === 0 || message.length > MAX_LIVE_SPEAK_TO_USER_MESSAGE_CHARS) {
2561
+ throw RequestError.invalidParams(
2562
+ void 0,
2563
+ "Invalid Live speak-to-user request."
2564
+ );
2565
+ }
2566
+ await handler({ callerSessionId, message });
2567
+ return { accepted: true };
2568
+ }
2413
2569
  /**
2414
2570
  * Handle child->bridge ACP `extNotification` calls. Recognized methods are
2415
2571
  * `qwen/notify/session/model-update`,
@@ -2419,11 +2575,26 @@ var BridgeClient = class {
2419
2575
  * `qwen/notify/session/prompt-suggestion` (followup assist),
2420
2576
  * `qwen/notify/session/artifact-event` (hook artifacts),
2421
2577
  * `qwen/notify/session/terminal-sequence`, and
2578
+ * `_qwencode/end_turn` (background-notification turns), and
2422
2579
  * `qwen/notify/session/mcp-budget-event` — each translated into a
2423
2580
  * session-scoped SSE frame. Unknown methods are dropped silently for
2424
2581
  * forward-compat.
2425
2582
  */
2426
2583
  async extNotification(method, params) {
2584
+ if (method === "_qwencode/end_turn") {
2585
+ const sessionId2 = params["sessionId"];
2586
+ const reason = params["reason"];
2587
+ if (typeof sessionId2 !== "string" || sessionId2.length === 0 || typeof reason !== "string" || reason.length === 0 || reason.length > 128 || params["source"] !== "background_notification") {
2588
+ return;
2589
+ }
2590
+ const entry = this.resolveEntry(sessionId2);
2591
+ if (!entry || !this.ownsSession(sessionId2)) return;
2592
+ entry.events.publish({
2593
+ type: "background_notification_turn_complete",
2594
+ data: { sessionId: sessionId2, reason }
2595
+ });
2596
+ return;
2597
+ }
2427
2598
  if (method === "qwen/notify/session/generation/event") {
2428
2599
  const sessionId2 = params["sessionId"];
2429
2600
  const requestId = params["requestId"];
@@ -5919,6 +6090,9 @@ var DEFAULT_MAX_PENDING_PER_SESSION = 64;
5919
6090
  var DEFAULT_SESSION_REAP_INTERVAL_MS = 6e4;
5920
6091
  var DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * 6e4;
5921
6092
  function createAcpSessionBridge(opts) {
6093
+ let liveScreenContextCaptureHandler;
6094
+ let liveTaskToolRequestHandler;
6095
+ let liveSpeakToUserHandler;
5922
6096
  const defaultSessionScope = opts.sessionScope ?? "single";
5923
6097
  let maxSessions;
5924
6098
  if (opts.maxSessions === void 0) {
@@ -6485,7 +6659,11 @@ function createAcpSessionBridge(opts) {
6485
6659
  }).catch(() => void 0);
6486
6660
  },
6487
6661
  opts.onChannelDelivery,
6488
- () => channelInfo?.sessionIds === sessionIds && channelInfo.sessionSpawnsInFlight > 0
6662
+ () => channelInfo?.sessionIds === sessionIds && channelInfo.sessionSpawnsInFlight > 0,
6663
+ () => liveScreenContextCaptureHandler,
6664
+ () => liveTaskToolRequestHandler,
6665
+ () => liveSpeakToUserHandler,
6666
+ opts.externalToolGuard
6489
6667
  );
6490
6668
  connection = new ClientSideConnection(() => client, channel.stream);
6491
6669
  } catch (error) {
@@ -6623,6 +6801,14 @@ function createAcpSessionBridge(opts) {
6623
6801
  initTimeoutMs,
6624
6802
  "initialize"
6625
6803
  );
6804
+ if (opts.externalToolGuard) {
6805
+ const guardAck = response._meta?.[EXTERNAL_TOOL_GUARD_READY_META_KEY];
6806
+ if (guardAck !== EXTERNAL_TOOL_GUARD_REQUIRED_VALUE) {
6807
+ throw new Error(
6808
+ `ACP child did not acknowledge the required external tool guard (received: ${JSON.stringify(guardAck)}).`
6809
+ );
6810
+ }
6811
+ }
6626
6812
  try {
6627
6813
  const attributes = getChannelStartupProfileAttributes(
6628
6814
  response,
@@ -7667,9 +7853,15 @@ function createAcpSessionBridge(opts) {
7667
7853
  };
7668
7854
  }
7669
7855
  if (action === "load") {
7856
+ const liveJournal = snapshot.liveJournal.map((event) => {
7857
+ if (!entry.activePromptId || event.type !== "history_truncated" || !event.data || typeof event.data !== "object" || event.data.scope !== "live_journal") {
7858
+ return event;
7859
+ }
7860
+ return { ...event, promptId: entry.activePromptId };
7861
+ });
7670
7862
  return {
7671
7863
  compactedReplay: snapshot.compactedTurns,
7672
- liveJournal: snapshot.liveJournal,
7864
+ liveJournal,
7673
7865
  lastEventId: snapshot.lastEventId,
7674
7866
  eventEpoch,
7675
7867
  ...replayStatus,
@@ -7840,6 +8032,7 @@ function createAcpSessionBridge(opts) {
7840
8032
  return {
7841
8033
  sessionId: existing.sessionId,
7842
8034
  workspaceCwd: existing.workspaceCwd,
8035
+ ...existing.effectiveCwd !== existing.workspaceCwd ? { currentCwd: existing.effectiveCwd } : {},
7843
8036
  attached: true,
7844
8037
  clientId,
7845
8038
  createdAt: existing.createdAt,
@@ -8037,6 +8230,7 @@ function createAcpSessionBridge(opts) {
8037
8230
  return {
8038
8231
  sessionId: racedEntry.sessionId,
8039
8232
  workspaceCwd: racedEntry.workspaceCwd,
8233
+ ...racedEntry.effectiveCwd !== racedEntry.workspaceCwd ? { currentCwd: racedEntry.effectiveCwd } : {},
8040
8234
  attached: true,
8041
8235
  clientId: clientId2,
8042
8236
  createdAt: racedEntry.createdAt,
@@ -8272,6 +8466,15 @@ function createAcpSessionBridge(opts) {
8272
8466
  __name(closeSessionImpl, "closeSessionImpl");
8273
8467
  startSessionReaper();
8274
8468
  const bridgeApi = {
8469
+ setLiveScreenContextCaptureHandler(handler) {
8470
+ liveScreenContextCaptureHandler = handler;
8471
+ },
8472
+ setLiveTaskToolRequestHandler(handler) {
8473
+ liveTaskToolRequestHandler = handler;
8474
+ },
8475
+ setLiveSpeakToUserHandler(handler) {
8476
+ liveSpeakToUserHandler = handler;
8477
+ },
8275
8478
  getDaemonStatusSnapshot() {
8276
8479
  return {
8277
8480
  limits: {
@@ -8395,6 +8598,7 @@ function createAcpSessionBridge(opts) {
8395
8598
  return {
8396
8599
  sessionId: existing.sessionId,
8397
8600
  workspaceCwd: existing.workspaceCwd,
8601
+ ...existing.effectiveCwd !== existing.workspaceCwd ? { currentCwd: existing.effectiveCwd } : {},
8398
8602
  attached: true,
8399
8603
  clientId,
8400
8604
  createdAt: existing.createdAt,
@@ -8498,6 +8702,12 @@ function createAcpSessionBridge(opts) {
8498
8702
  entry,
8499
8703
  context?.clientId
8500
8704
  );
8705
+ const modelPrompt = context?.modelPrompt;
8706
+ if (modelPrompt !== void 0 && !isValidTrustedModelPrompt(modelPrompt)) {
8707
+ throw new TypeError(
8708
+ "Bridge modelPrompt must be a non-empty bounded string."
8709
+ );
8710
+ }
8501
8711
  if (signal?.aborted) {
8502
8712
  throw new DOMException("Prompt aborted", "AbortError");
8503
8713
  }
@@ -8544,6 +8754,14 @@ function createAcpSessionBridge(opts) {
8544
8754
  state: isQueued ? "queued" : "running"
8545
8755
  };
8546
8756
  entry.pendingPromptList.push(pendingEntry);
8757
+ try {
8758
+ context?.onPromptAdmitted?.();
8759
+ } catch (error) {
8760
+ opts.onDiagnosticLine?.(
8761
+ `qwen serve: prompt admission observer failed for session=${sessionId}: ${error instanceof Error ? error.message : String(error)}`,
8762
+ "warn"
8763
+ );
8764
+ }
8547
8765
  const deadlineMs = context?.deadlineMs;
8548
8766
  const hasDeadline = typeof deadlineMs === "number" && Number.isFinite(deadlineMs) && deadlineMs > 0;
8549
8767
  let deadlineReject;
@@ -8672,6 +8890,7 @@ function createAcpSessionBridge(opts) {
8672
8890
  delete meta[PRIVATE_PARENT_CAPABILITY_META_KEY];
8673
8891
  delete meta[DAEMON_CONTINUE_META_KEY];
8674
8892
  delete meta[DAEMON_CHANNEL_DELIVERY_META_KEY];
8893
+ delete meta[DAEMON_MODEL_PROMPT_META_KEY];
8675
8894
  if (isRetry) {
8676
8895
  meta[DAEMON_RETRY_META_KEY] = true;
8677
8896
  }
@@ -8681,6 +8900,9 @@ function createAcpSessionBridge(opts) {
8681
8900
  if (context?.channelDelivery) {
8682
8901
  meta[DAEMON_CHANNEL_DELIVERY_META_KEY] = context.channelDelivery;
8683
8902
  }
8903
+ if (modelPrompt !== void 0) {
8904
+ meta[DAEMON_MODEL_PROMPT_META_KEY] = modelPrompt;
8905
+ }
8684
8906
  meta[INVOCATION_CONTEXT_META_KEY] = invocationContext;
8685
8907
  if (Object.keys(meta).length > 0) {
8686
8908
  copy._meta = meta;
@@ -9209,7 +9431,8 @@ function createAcpSessionBridge(opts) {
9209
9431
  {
9210
9432
  sessionId,
9211
9433
  path: req.path,
9212
- ...req.allowedRoots ? { allowedRoots: req.allowedRoots } : {}
9434
+ ...req.allowedRoots ? { allowedRoots: req.allowedRoots } : {},
9435
+ ...req.managedRelocation ? { managedRelocation: req.managedRelocation } : {}
9213
9436
  }
9214
9437
  );
9215
9438
  const extResult = raw;
@@ -9947,6 +10170,20 @@ function createAcpSessionBridge(opts) {
9947
10170
  refreshed: result.refreshed ?? false
9948
10171
  };
9949
10172
  },
10173
+ async setSessionLiveConversationActive(sessionId, active) {
10174
+ await requestSessionStatus(
10175
+ sessionId,
10176
+ SERVE_CONTROL_EXT_METHODS.sessionLiveConversation,
10177
+ { active }
10178
+ );
10179
+ },
10180
+ async appendSessionLiveTranscript(sessionId, entries, model) {
10181
+ await requestSessionStatus(
10182
+ sessionId,
10183
+ SERVE_CONTROL_EXT_METHODS.sessionLiveTranscript,
10184
+ { entries, model }
10185
+ );
10186
+ },
9950
10187
  async setSessionApprovalMode(sessionId, mode, opts2, context) {
9951
10188
  const entry = byId.get(sessionId);
9952
10189
  if (!entry) throw new SessionNotFoundError(sessionId);
@@ -10154,6 +10391,24 @@ function createAcpSessionBridge(opts) {
10154
10391
  entry.midTurnMessageQueue.splice(index, 1);
10155
10392
  return { removed: true };
10156
10393
  },
10394
+ async enqueueBackgroundNotification(sessionId, notification) {
10395
+ const entry = byId.get(sessionId);
10396
+ if (!entry) throw new SessionNotFoundError(sessionId);
10397
+ const info = channelInfoForEntry(entry);
10398
+ if (!info || info.isDying) throw new SessionNotFoundError(sessionId);
10399
+ const response = await Promise.race([
10400
+ withTimeout(
10401
+ entry.connection.extMethod(
10402
+ SERVE_CONTROL_EXT_METHODS.sessionBackgroundNotification,
10403
+ { sessionId, ...notification }
10404
+ ),
10405
+ initTimeoutMs,
10406
+ SERVE_CONTROL_EXT_METHODS.sessionBackgroundNotification
10407
+ ),
10408
+ getTransportClosedReject(entry)
10409
+ ]);
10410
+ return { sessionId, accepted: response["accepted"] === true };
10411
+ },
10157
10412
  async generateSessionBtw(sessionId, question, signal, _context) {
10158
10413
  const entry = byId.get(sessionId);
10159
10414
  if (!entry) throw new SessionNotFoundError(sessionId);
@@ -11036,6 +11291,7 @@ export {
11036
11291
  SessionArtifactAuthorizationError,
11037
11292
  SESSION_SOURCE_META_KEY,
11038
11293
  parseSessionSource,
11294
+ isA2uiToolMeta,
11039
11295
  extractErrorMessage,
11040
11296
  extractErrorCode,
11041
11297
  classifyTurnErrorKind,
@@ -2,20 +2,20 @@
2
2
  "use strict";
3
3
  import {
4
4
  getExtensionManager
5
- } from "./chunk-3GOCVBYR.js";
5
+ } from "./chunk-G5NNWEYE.js";
6
6
  import {
7
7
  parseChannelConfig
8
- } from "./chunk-LEZFUYPM.js";
8
+ } from "./chunk-LAAFLUQV.js";
9
9
  import {
10
10
  getPlugin,
11
11
  registerPlugin
12
- } from "./chunk-DTAPI453.js";
12
+ } from "./chunk-EMYZIABH.js";
13
13
  import {
14
14
  sanitizeLogText
15
15
  } from "./chunk-DIEFUBV6.js";
16
16
  import {
17
17
  loadSettings
18
- } from "./chunk-RM3F46UT.js";
18
+ } from "./chunk-PPUOYL77.js";
19
19
  import {
20
20
  hashDaemonWorkspace
21
21
  } from "./chunk-MGSSJT27.js";
@@ -25,7 +25,7 @@ import {
25
25
  import {
26
26
  writeStderrLine,
27
27
  writeStdoutLine
28
- } from "./chunk-OWAK7LMW.js";
28
+ } from "./chunk-KGJGEEVR.js";
29
29
  import {
30
30
  init_esbuild_shims
31
31
  } from "./chunk-5O2XNYP6.js";
@@ -5,10 +5,10 @@ import {
5
5
  } from "./chunk-DP3IHZGG.js";
6
6
  import {
7
7
  t
8
- } from "./chunk-K64OI7S7.js";
8
+ } from "./chunk-KHUA3NQV.js";
9
9
  import {
10
10
  getNpmCliPath
11
- } from "./chunk-CAX76R46.js";
11
+ } from "./chunk-JE44IPH6.js";
12
12
  import {
13
13
  getPackageJson
14
14
  } from "./chunk-VJNBRRZG.js";
@@ -21,12 +21,12 @@ import {
21
21
  getLanguageNameFromLocale,
22
22
  getLanguageSettingsOptions,
23
23
  t
24
- } from "./chunk-K64OI7S7.js";
24
+ } from "./chunk-KHUA3NQV.js";
25
25
  import {
26
26
  getHomeEnvFallbackVars,
27
27
  loadEnvironment,
28
28
  preResolveHomeEnvOverrides
29
- } from "./chunk-LYPXNRBX.js";
29
+ } from "./chunk-RK2EE3T7.js";
30
30
  import {
31
31
  ENV_CORRUPTED_PATH,
32
32
  ENV_WAS_RECOVERED
@@ -34,7 +34,7 @@ import {
34
34
  import {
35
35
  isWorkspaceTrusted,
36
36
  updateSettingsFilePreservingFormat
37
- } from "./chunk-B3EBIZUY.js";
37
+ } from "./chunk-ACZRB7AD.js";
38
38
  import {
39
39
  require_strip_json_comments
40
40
  } from "./chunk-ALGGS7UH.js";
@@ -46,10 +46,10 @@ import {
46
46
  DEFAULT_TOOL_RESULTS_TOTAL_CHARS_THRESHOLD,
47
47
  DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
48
48
  DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD
49
- } from "./chunk-YLL3SC5S.js";
49
+ } from "./chunk-A4VTILZT.js";
50
50
  import {
51
51
  stripRuntimeSnapshotPrefix
52
- } from "./chunk-7W5KOBYU.js";
52
+ } from "./chunk-DIT4V3XH.js";
53
53
  import {
54
54
  DEFAULT_QWEN_CUSTOM_IGNORE_FILE_NAMES
55
55
  } from "./chunk-432XCUHF.js";
@@ -1650,7 +1650,7 @@ var SETTINGS_SCHEMA = {
1650
1650
  category: "Context",
1651
1651
  requiresRestart: false,
1652
1652
  default: DEFAULT_TOOL_RESULTS_TOTAL_CHARS_THRESHOLD,
1653
- description: "Total compactable tool result output characters allowed in history before clearing oldest results. Use -1 to disable. This is a soft threshold: protected recent tool results may keep the total above it.",
1653
+ description: "Total compactable tool result output characters allowed in history before clearing oldest results. When exceeded, oldest results are cleared down to half this threshold (best effort) to preserve the provider prompt cache on later turns. Use -1 to disable. This is a soft threshold: protected recent tool results may keep the total above it.",
1654
1654
  showInDialog: false
1655
1655
  }
1656
1656
  }
@@ -3098,6 +3098,71 @@ var SETTINGS_SCHEMA = {
3098
3098
  description: "Settings to enable experimental features.",
3099
3099
  showInDialog: false,
3100
3100
  properties: {
3101
+ liveVoice: {
3102
+ type: "object",
3103
+ label: "Live Voice",
3104
+ category: "Experimental",
3105
+ requiresRestart: false,
3106
+ default: {},
3107
+ description: "Experimental realtime voice conversations through Qwen Live Host on macOS WebShell.",
3108
+ showInDialog: false,
3109
+ properties: {
3110
+ enabled: {
3111
+ type: "boolean",
3112
+ label: "Live Voice",
3113
+ category: "Experimental",
3114
+ requiresRestart: false,
3115
+ default: false,
3116
+ description: "Enable experimental realtime voice conversations on macOS WebShell.",
3117
+ showInDialog: false
3118
+ },
3119
+ apiKey: {
3120
+ type: "string",
3121
+ label: "DashScope Realtime API Key",
3122
+ category: "Experimental",
3123
+ requiresRestart: false,
3124
+ default: "",
3125
+ description: "Dedicated DashScope API key for qwen3.5-omni-plus-realtime.",
3126
+ showInDialog: false
3127
+ },
3128
+ model: {
3129
+ type: "string",
3130
+ label: "Live Voice Model",
3131
+ category: "Experimental",
3132
+ requiresRestart: false,
3133
+ default: "qwen3.5-omni-plus-realtime",
3134
+ description: "Upstream Realtime model used for Live Voice.",
3135
+ showInDialog: false
3136
+ },
3137
+ endpoint: {
3138
+ type: "string",
3139
+ label: "Live Voice Endpoint",
3140
+ category: "Experimental",
3141
+ requiresRestart: false,
3142
+ default: "wss://dashscope.aliyuncs.com/api-ws/v1/realtime",
3143
+ description: "Advanced override for the DashScope Realtime WebSocket endpoint.",
3144
+ showInDialog: false
3145
+ },
3146
+ voice: {
3147
+ type: "string",
3148
+ label: "Live Voice Output Voice",
3149
+ category: "Experimental",
3150
+ requiresRestart: false,
3151
+ default: "Tina",
3152
+ description: "Voice used for Realtime model audio output.",
3153
+ showInDialog: false
3154
+ },
3155
+ shortcut: {
3156
+ type: "string",
3157
+ label: "Live Voice Global Shortcut",
3158
+ category: "Experimental",
3159
+ requiresRestart: false,
3160
+ default: "Command+E",
3161
+ description: "Electron accelerator registered globally by Qwen Live Host.",
3162
+ showInDialog: false
3163
+ }
3164
+ }
3165
+ },
3101
3166
  sessionWorkflow: {
3102
3167
  type: "boolean",
3103
3168
  label: "Session Workflow Plan & Review",