@qwen-code/qwen-code 0.22.2 → 0.22.3

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 (324) hide show
  1. package/bundled/computer-use/SKILL.md +3 -3
  2. package/bundled/qc-helper/docs/configuration/settings.md +37 -36
  3. package/bundled/qc-helper/docs/features/channels/dws.md +2 -0
  4. package/bundled/qc-helper/docs/features/channels/overview.md +34 -3
  5. package/bundled/qc-helper/docs/features/code-review.md +3 -3
  6. package/bundled/qc-helper/docs/features/computer-use.md +2 -2
  7. package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
  8. package/bundled/qc-helper/docs/qwen-serve.md +1 -1
  9. package/bundled/review/SKILL.md +81 -31
  10. package/bundled/review/references/persistence.md +7 -3
  11. package/bundled/review/references/posting.md +10 -4
  12. package/chunks/{MaxSizedBox-X5FZSNAJ.js → MaxSizedBox-X42SXBJH.js} +33 -35
  13. package/chunks/{StandaloneSessionPicker-AVLI6VJP.js → StandaloneSessionPicker-2FJAOLGG.js} +51 -53
  14. package/chunks/{acpAgent-MXEAN54C.js → acpAgent-2ZMIJAFV.js} +268 -186
  15. package/chunks/{agent-PJIPDWHB.js → agent-X5WX3L2I.js} +24 -26
  16. package/chunks/{agent-headless-B4JVD7UK.js → agent-headless-IZM25LJA.js} +24 -26
  17. package/chunks/{anthropicContentGenerator-HGMBACVE.js → anthropicContentGenerator-YVTB6QX7.js} +43 -47
  18. package/chunks/{artifact-tool-5YT4QF7Y.js → artifact-tool-XSMPHZBT.js} +9 -1
  19. package/chunks/{bridge-FKZTVIS3.js → bridge-ME6QXZNA.js} +37 -39
  20. package/chunks/{channel-management-service-X4AZ6IXX.js → channel-management-service-HQ6KDS7C.js} +6 -6
  21. package/chunks/{channel-settings-store-4UFCLBBG.js → channel-settings-store-PEOI7XCG.js} +47 -44
  22. package/chunks/{channel-worker-group-27HMGD5S.js → channel-worker-group-6NA6BBZV.js} +5 -5
  23. package/chunks/{channel-worker-manager-QEGX646Z.js → channel-worker-manager-NEZ2J6RK.js} +5 -5
  24. package/chunks/{channel-worker-supervisor-UEW2WWCC.js → channel-worker-supervisor-FKU7DIHJ.js} +4 -4
  25. package/chunks/{chunk-P5GGM4KS.js → chunk-2HYKTO7V.js} +3 -3
  26. package/chunks/{chunk-XDFHY4R3.js → chunk-2LNNVAUV.js} +2 -2
  27. package/chunks/{chunk-ZFKOCECU.js → chunk-2OBKDPZZ.js} +2 -2
  28. package/chunks/{chunk-3DXFGHAJ.js → chunk-2OUD5T67.js} +1 -1
  29. package/chunks/{chunk-EOGELB3H.js → chunk-2SXSLSQE.js} +1 -1
  30. package/chunks/{chunk-4JWNNLPT.js → chunk-2YOHKHYR.js} +2 -2
  31. package/chunks/{chunk-JU4EEXC7.js → chunk-36GSQ3MM.js} +2 -2
  32. package/chunks/chunk-36LGBEM6.js +130 -0
  33. package/chunks/{chunk-H2WDGQ6D.js → chunk-3JXM2CVW.js} +1 -1
  34. package/chunks/{chunk-G34IR3D6.js → chunk-3SZC4VP4.js} +26 -109
  35. package/chunks/{chunk-HVEYF6VT.js → chunk-3WK3QDNV.js} +1 -1
  36. package/chunks/{chunk-5XBFCMWD.js → chunk-3XKLXHGK.js} +17 -9
  37. package/chunks/{chunk-SFPGAQUL.js → chunk-42IDLQWS.js} +24 -18
  38. package/chunks/{chunk-43GGFFLY.js → chunk-4K7KNVWH.js} +1 -1
  39. package/chunks/{chunk-F6FV3C5K.js → chunk-4NDLQAY2.js} +24 -272
  40. package/chunks/{chunk-VVW4ZNFY.js → chunk-4QHPPXK2.js} +15 -7
  41. package/chunks/{chunk-IJKTMLBE.js → chunk-4TT3IVGA.js} +1 -1
  42. package/chunks/{chunk-C6K43ZDE.js → chunk-4VPCTGH6.js} +5 -5
  43. package/chunks/chunk-4VQBQLIZ.js +293 -0
  44. package/chunks/{chunk-OIVXBW3W.js → chunk-62GQFYID.js} +1 -1
  45. package/chunks/{chunk-BRVWYMKV.js → chunk-6MBXY6WM.js} +1 -1
  46. package/chunks/{chunk-AGR5UROZ.js → chunk-6X7EU5TI.js} +17 -29
  47. package/chunks/{chunk-PFCQ62V4.js → chunk-6ZPDLGHN.js} +6 -6
  48. package/chunks/{chunk-RIEFGNTP.js → chunk-734C6JGI.js} +207 -43
  49. package/chunks/{chunk-FBSSIAAQ.js → chunk-73RM4POK.js} +7 -7
  50. package/chunks/{chunk-KGJGEEVR.js → chunk-7FA2II6K.js} +10 -1
  51. package/chunks/chunk-7J6OTNGO.js +424 -0
  52. package/chunks/{chunk-O2UN57NX.js → chunk-7LOELM2I.js} +19 -2
  53. package/chunks/{chunk-DIMEPKCW.js → chunk-7S226YTK.js} +1 -1
  54. package/chunks/{chunk-CPGJJJLU.js → chunk-7T52W4SW.js} +1 -1
  55. package/chunks/{chunk-5O72BNDD.js → chunk-7VMIMAVB.js} +7 -7
  56. package/chunks/{chunk-XRSOI3DL.js → chunk-A3LWD5MK.js} +1 -1
  57. package/chunks/{chunk-F7TNAPZ4.js → chunk-AIAOIFY4.js} +5 -5
  58. package/chunks/{chunk-4CDSK5AZ.js → chunk-AYFA7MZV.js} +2 -2
  59. package/chunks/{chunk-3JGZSIDA.js → chunk-B466ZSHZ.js} +1 -1
  60. package/chunks/{chunk-L6BZRIUL.js → chunk-B5PHIJGI.js} +182 -4
  61. package/chunks/{chunk-3I6UTTDX.js → chunk-BKWNKLZB.js} +19 -19
  62. package/chunks/{chunk-3FDFA4MZ.js → chunk-BOWFGCEU.js} +1 -1
  63. package/chunks/{chunk-3AFMQUTI.js → chunk-C2X7KY45.js} +1 -1
  64. package/chunks/{chunk-FY76G3G5.js → chunk-C3PEFRKD.js} +4 -4
  65. package/chunks/{chunk-FDY5RMGH.js → chunk-CFJY4DGX.js} +1 -1
  66. package/chunks/{chunk-CCBZDVUA.js → chunk-CIZCL2MW.js} +33 -20
  67. package/chunks/{chunk-LDP5OD6N.js → chunk-CLWO3B77.js} +2 -2
  68. package/chunks/chunk-DJBQCO2E.js +842 -0
  69. package/chunks/{chunk-4J657AJR.js → chunk-DJECZIJX.js} +40 -40
  70. package/chunks/{chunk-F5SZP77N.js → chunk-DJEZ55D4.js} +71 -65
  71. package/chunks/{chunk-BAJKAAOY.js → chunk-DJPASAUV.js} +3840 -1055
  72. package/chunks/{chunk-RUGNCYNO.js → chunk-DMLVSW7L.js} +532 -22
  73. package/chunks/{chunk-4FTKQNWJ.js → chunk-DYXFD5RO.js} +181 -2
  74. package/chunks/{chunk-PDMJ3KGS.js → chunk-EB6QRGHM.js} +1 -1
  75. package/chunks/{chunk-DZWPESIF.js → chunk-EFWRMA2I.js} +3 -3
  76. package/chunks/{chunk-4MQEPP3Y.js → chunk-EQSBPBZ3.js} +5 -119
  77. package/chunks/{chunk-Z7TGYN5F.js → chunk-FROAFEFB.js} +2 -2
  78. package/chunks/{chunk-MZS7GEC7.js → chunk-FTF2YIZ5.js} +1 -1
  79. package/chunks/{chunk-Z7VOMGDC.js → chunk-FTJMWDND.js} +0 -24
  80. package/chunks/{chunk-43UYNAWX.js → chunk-G6FECKTJ.js} +2 -2
  81. package/chunks/{chunk-SJ3ZUWFK.js → chunk-GBJBJ4HX.js} +4 -4
  82. package/chunks/{chunk-IOPCFOTF.js → chunk-GPGU4S2N.js} +2 -2
  83. package/chunks/{chunk-6LFJEACX.js → chunk-GVIVASYK.js} +7 -7
  84. package/chunks/{chunk-Z4X5MTRT.js → chunk-HCOBAG2L.js} +2 -4
  85. package/chunks/{chunk-A7YP63XN.js → chunk-HP5LR5HL.js} +5 -5
  86. package/chunks/{chunk-7JPW6IYH.js → chunk-HVC3PNVC.js} +1 -1
  87. package/chunks/{chunk-TRZTNIQ6.js → chunk-I6LYRJPB.js} +2 -2
  88. package/chunks/{chunk-E55H6BZ7.js → chunk-ICURCKIU.js} +1335 -119
  89. package/chunks/{chunk-4HV6HH33.js → chunk-ISKH4QX3.js} +9 -9
  90. package/chunks/{chunk-WKK5BQNP.js → chunk-JHYH6PYQ.js} +43 -420
  91. package/chunks/{chunk-6IUNAPLR.js → chunk-K5KXUXWC.js} +1 -1
  92. package/chunks/{chunk-JHS74YAB.js → chunk-KID24ZFN.js} +1 -1
  93. package/chunks/{chunk-EFUM7RVY.js → chunk-KJO2LBUK.js} +942 -16
  94. package/chunks/{chunk-B7CDU2SL.js → chunk-KYWTPLBJ.js} +17 -20
  95. package/chunks/{chunk-JSHHYW6T.js → chunk-LHBUKJG2.js} +3 -3
  96. package/chunks/{chunk-P2SU6ZTI.js → chunk-LUEHOUHM.js} +1 -1
  97. package/chunks/{chunk-66KDY3LV.js → chunk-M3QRM3DE.js} +1 -1
  98. package/chunks/{chunk-V4QXXQJ2.js → chunk-MF7HCQWZ.js} +2 -2
  99. package/chunks/{chunk-W5MJJ2V7.js → chunk-MK2GIB46.js} +1 -1
  100. package/chunks/{chunk-Y6LSMB6J.js → chunk-MO3FC2WT.js} +1 -1
  101. package/chunks/{chunk-L6YT5H34.js → chunk-MPNBVAEU.js} +4 -4
  102. package/chunks/{chunk-CSMI4FP5.js → chunk-MSBO7X2W.js} +1 -1
  103. package/chunks/{chunk-5PA6UEYA.js → chunk-MZCJWS5Y.js} +1 -1
  104. package/chunks/{chunk-BGXZBI5B.js → chunk-N4X7G4J2.js} +2 -1
  105. package/chunks/{chunk-6LFTG244.js → chunk-NMOD2FXQ.js} +15 -5
  106. package/chunks/{chunk-KUX5D6DK.js → chunk-NV55WWD6.js} +11330 -10971
  107. package/chunks/{chunk-Q26AYA62.js → chunk-OU5APVWO.js} +2 -2
  108. package/chunks/{chunk-2K6ORIHJ.js → chunk-P2G476QN.js} +11 -11
  109. package/chunks/{chunk-OIP7C4FE.js → chunk-PADPMMYM.js} +4 -4
  110. package/chunks/{chunk-SAH4BD2J.js → chunk-PQEISIKS.js} +67 -0
  111. package/chunks/{chunk-TGWAQ5RB.js → chunk-PZ66FRIC.js} +2071 -2124
  112. package/chunks/{chunk-7UYV53BC.js → chunk-Q2MSPKIJ.js} +1 -1
  113. package/chunks/{chunk-L2M46FP5.js → chunk-QYMAKPY5.js} +5 -5
  114. package/chunks/{chunk-JVPFTDBK.js → chunk-RFIDDFAL.js} +1 -1
  115. package/chunks/chunk-SEONHUS3.js +275 -0
  116. package/chunks/{chunk-ZGXYO7DY.js → chunk-SS4MRMKE.js} +122 -13
  117. package/chunks/{chunk-T32W2JHI.js → chunk-SS5SDCD3.js} +2 -2
  118. package/chunks/{chunk-3SGB2UHX.js → chunk-ST5MDGH3.js} +23 -11
  119. package/chunks/{chunk-MIIVI25Q.js → chunk-ST5V3ZOC.js} +2 -2
  120. package/chunks/{chunk-4K7NQDCG.js → chunk-T4EFG2P5.js} +18 -9
  121. package/chunks/{chunk-TWSKM647.js → chunk-T7KMERIX.js} +1 -1
  122. package/chunks/{chunk-77RG5SFQ.js → chunk-TEBDFQBZ.js} +1 -1
  123. package/chunks/{chunk-6CGL7E7G.js → chunk-TVC6HQ2U.js} +2 -2
  124. package/chunks/{chunk-BBWV7ONL.js → chunk-TZBSGJ6C.js} +6 -6
  125. package/chunks/{chunk-T3WXYEZ4.js → chunk-U54AYGEC.js} +38 -5
  126. package/chunks/{chunk-JCQD3INC.js → chunk-URE3QBBB.js} +1 -1
  127. package/chunks/{chunk-Y3QL45LS.js → chunk-V4264FEG.js} +8 -8
  128. package/chunks/{chunk-KEKZFOL6.js → chunk-V7EESTJV.js} +1 -1
  129. package/chunks/{chunk-R4PMVSR5.js → chunk-VBCPNIQD.js} +18 -20
  130. package/chunks/{chunk-RJC5EIKY.js → chunk-VGIFXISB.js} +3 -3
  131. package/chunks/{chunk-Z7FLBQPR.js → chunk-W3JH33JE.js} +7 -7
  132. package/chunks/{chunk-K2NQPH5D.js → chunk-WGY3AVGM.js} +3 -3
  133. package/chunks/{chunk-PKAYJDB3.js → chunk-WNPDGUJO.js} +21 -2
  134. package/chunks/{chunk-IZIVM7LZ.js → chunk-WXEA74YB.js} +1 -1
  135. package/chunks/{chunk-YRLW2MSX.js → chunk-XBVNNDPK.js} +11 -4
  136. package/chunks/{chunk-IK5BW3CS.js → chunk-XHF7WQ6B.js} +2 -2
  137. package/chunks/{chunk-2NYCN6F2.js → chunk-XSG6G3G6.js} +43 -26
  138. package/chunks/{chunk-HVQ3B7FF.js → chunk-Y5S7LBOZ.js} +43 -6
  139. package/chunks/{chunk-LXIBMVRN.js → chunk-YLSQLSH7.js} +13 -7
  140. package/chunks/{chunk-JSC3H3TD.js → chunk-ZEYFMJQA.js} +14 -6
  141. package/chunks/chunk-ZWJDJ6RU.js +2597 -0
  142. package/chunks/{chunk-QP4C6WCE.js → chunk-ZYMLPEZQ.js} +2 -2
  143. package/chunks/{chunk-BNMF3K5X.js → chunk-ZZMSC3RG.js} +52 -36
  144. package/chunks/{chunk-XDLEZ5HX.js → chunk-ZZUKP7HV.js} +1 -1
  145. package/chunks/{config-utils-BBOCOGZW.js → config-utils-R6M3TA34.js} +39 -39
  146. package/chunks/{contextCommand-EET67MQ2.js → contextCommand-ZCAP23J6.js} +36 -38
  147. package/chunks/{core-runtime-677KFX6Q.js → core-runtime-AXB6SK5D.js} +41 -43
  148. package/chunks/{create-sub-session-JKZAYZX7.js → create-sub-session-4QNE64MR.js} +34 -36
  149. package/chunks/{daemon-MJQUO7RA.js → daemon-3GNHB3M2.js} +495 -7
  150. package/chunks/{daemon-git-worktree-guard-6MVAAZZZ.js → daemon-git-worktree-guard-IVAJJWYK.js} +33 -35
  151. package/chunks/{daemon-status-provider-RFKZOK3S.js → daemon-status-provider-K3SJ5C2U.js} +42 -44
  152. package/chunks/{daemon-trust-policy-DRZPFB4Q.js → daemon-trust-policy-DOR3YG62.js} +41 -43
  153. package/chunks/{daemon-trust-policy-monitor-B5U6TQX5.js → daemon-trust-policy-monitor-KGGROSIV.js} +41 -43
  154. package/chunks/{deferred-core-runtime-BBVIOP24.js → deferred-core-runtime-WOYLUQQ7.js} +33 -35
  155. package/chunks/{dist-DJBNNPLN.js → dist-4WXLCBDR.js} +1 -1
  156. package/chunks/{dist-TJUDJTCB.js → dist-5VXFRTWU.js} +280 -48
  157. package/chunks/{dist-QODVOVWI.js → dist-6BPYWHVD.js} +31 -30
  158. package/chunks/{dist-ZBVOXSKF.js → dist-GFN5DCBX.js} +74 -65
  159. package/chunks/{dist-SATKXKUR.js → dist-HZNT6GQS.js} +1 -1
  160. package/chunks/{dist-ILDBUWDB.js → dist-LVZCXVPF.js} +1 -1
  161. package/chunks/{dist-7CKN54NL.js → dist-N6W6E753.js} +71 -64
  162. package/chunks/{dist-4Q7NTUNB.js → dist-NSV4NBPK.js} +31 -14
  163. package/chunks/{dist-UQUFZDIY.js → dist-SWQMYP2Q.js} +18 -16
  164. package/chunks/{earlyInputCapture-2JOMMNQ4.js → earlyInputCapture-OHBEVO4K.js} +33 -35
  165. package/chunks/{edit-BSV6YRVW.js → edit-LEQLAGPZ.js} +24 -26
  166. package/chunks/{enter-worktree-MQXFFPKM.js → enter-worktree-35QCAAFP.js} +3 -3
  167. package/chunks/{enterPlanMode-PKNF35FE.js → enterPlanMode-ONQN3WHE.js} +27 -29
  168. package/chunks/{environment-MOZMPUHR.js → environment-UANTR7A4.js} +37 -39
  169. package/chunks/{errors-DMPQVYJL.js → errors-WAK6KFBC.js} +36 -38
  170. package/chunks/{exit-worktree-L344UY7K.js → exit-worktree-XQD6D543.js} +3 -3
  171. package/chunks/{exitPlanMode-UE4FGCY4.js → exitPlanMode-UEYBG6P5.js} +24 -26
  172. package/chunks/{fast-path-773PV7PU.js → fast-path-WUL7UZ6H.js} +4 -4
  173. package/chunks/{fast-path-settings-XMFBYFUH.js → fast-path-settings-XH426LUU.js} +3 -3
  174. package/chunks/{glob-CZHOWUEA.js → glob-Y54QUWDY.js} +24 -26
  175. package/chunks/{goal-tools-YZQJXTGH.js → goal-tools-PTD3MBA7.js} +2 -1
  176. package/chunks/{handleAutoUpdate-SGXKTQM6.js → handleAutoUpdate-FP3NWNSG.js} +37 -39
  177. package/chunks/{i18n-B42HKHKH.js → i18n-INIU5X7A.js} +35 -37
  178. package/chunks/{image-gen-HAYOEQ4O.js → image-gen-J6FDGUZP.js} +4 -6
  179. package/chunks/{initializer-FB66WYR3.js → initializer-TYODV6GE.js} +41 -43
  180. package/chunks/{installationInfo-Y7AULNMX.js → installationInfo-AAPKYDSZ.js} +33 -35
  181. package/chunks/{list-2HWGSVRA.js → list-TUODDN6J.js} +44 -46
  182. package/chunks/{gemini-IP4FJAP5.js → llm-NSAVK5V3.js} +84 -82
  183. package/chunks/{geminiContentGenerator-PUNEBWJW.js → llm-content-generator-AY2QKXHE.js} +25 -25
  184. package/chunks/{loadedSettingsAdapter-7Y7IEI6T.js → loadedSettingsAdapter-KJCLZ3C4.js} +41 -43
  185. package/chunks/{loggingContentGenerator-2GGZNGLG.js → loggingContentGenerator-DSFQHXIF.js} +305 -27
  186. package/chunks/{managed-npm-update-5TEV2E3J.js → managed-npm-update-TSWENTK5.js} +33 -35
  187. package/chunks/{mcp-QGG5NMJJ.js → mcp-MWSAPFOL.js} +41 -43
  188. package/chunks/{monitor-FI7PY36Z.js → monitor-RW4GWJHB.js} +24 -26
  189. package/chunks/{nonInteractiveCli-4LO2TL72.js → nonInteractiveCli-JXKL343Q.js} +77 -78
  190. package/chunks/{notebook-edit-TPGMGBST.js → notebook-edit-CQNYS5OR.js} +24 -26
  191. package/chunks/{open-with-auth-4UI3KHUR.js → open-with-auth-YN3QZHVM.js} +1 -1
  192. package/chunks/{openaiContentGenerator-SUCYANUZ.js → openaiContentGenerator-J6QIF7EX.js} +13 -15
  193. package/chunks/{pidfile-JMF2CLMY.js → pidfile-QOIQZFT2.js} +33 -35
  194. package/chunks/process-registry-OAEG6WGC.js +662 -0
  195. package/chunks/{processUtils-IQZBYWSB.js → processUtils-GPHNANKZ.js} +2 -2
  196. package/chunks/{prompt-terminal-ledger-DCZO6S7C.js → prompt-terminal-ledger-FOMFTYOM.js} +34 -36
  197. package/chunks/{qwenContentGenerator-J4TXFGJT.js → qwenContentGenerator-WWDXPYQI.js} +28 -30
  198. package/chunks/{qwenOAuth2-RF33DNZW.js → qwenOAuth2-OF5WRBQT.js} +4 -6
  199. package/chunks/{read-file-QE2B5FTX.js → read-file-FQUQHC6N.js} +5 -5
  200. package/chunks/{record-artifact-RZGZBENU.js → record-artifact-VW23GS4F.js} +2 -2
  201. package/chunks/{report-findings-Q3SYKKW5.js → report-findings-AO5VYFLR.js} +7 -3
  202. package/chunks/{resumeHistoryUtils-CZ4JRDVW.js → resumeHistoryUtils-NSGF3UCB.js} +37 -39
  203. package/chunks/{ripGrep-R6B6HWPX.js → ripGrep-4CAT6SKV.js} +7 -7
  204. package/chunks/{run-qwen-serve-TPHZMSXJ.js → run-qwen-serve-5X6IDZER.js} +271 -86
  205. package/chunks/{runtime-TTIGSBM4.js → runtime-HK27GMPF.js} +46 -48
  206. package/chunks/{scheduled-tasks-QB4ZVUQS.js → scheduled-tasks-MN2ZZ5P6.js} +39 -41
  207. package/chunks/{scheduler-YRUG22M7.js → scheduler-WD4MHMO5.js} +35 -37
  208. package/chunks/{sdk-exporters-http-KCJ4ZFG7.js → sdk-exporters-http-TTU2CHBU.js} +1 -1
  209. package/chunks/{sdk-impl-HLSEDAEP.js → sdk-impl-UUMVYMAL.js} +10 -4
  210. package/chunks/{send-message-Y5I6NYAM.js → send-message-AJ4OCUBV.js} +18 -2
  211. package/chunks/{serve-MXXCDAQN.js → serve-2XCHPPGG.js} +41 -43
  212. package/chunks/{server-DFUSSSHI.js → server-GO2N5DH7.js} +4148 -3348
  213. package/chunks/{session-3TEHNENZ.js → session-IFNHTUBT.js} +81 -82
  214. package/chunks/session-pr-refresh-I3UBWMVP.js +364 -0
  215. package/chunks/{settings-VOZYKLTT.js → settings-L6N54CU6.js} +40 -42
  216. package/chunks/{shell-6RTKZVMI.js → shell-4Y5LLW6N.js} +24 -26
  217. package/chunks/{skill-FEOKFX26.js → skill-YOWTRAKQ.js} +58 -14
  218. package/chunks/{skill-settings-VA4XVYVL.js → skill-settings-ZL4JY5UE.js} +41 -43
  219. package/chunks/{spawnChannel-F6WVP723.js → spawnChannel-ZST6XJVJ.js} +35 -37
  220. package/chunks/{standalone-update-RGILUQVK.js → standalone-update-THVU3OKY.js} +36 -38
  221. package/chunks/{startInteractiveUI-WHJPFOGH.js → startInteractiveUI-XDFSHBZD.js} +401 -334
  222. package/chunks/{stdioHelpers-7A2EE64Z.js → stdioHelpers-AY6XCDY2.js} +3 -1
  223. package/chunks/{task-create-TMSV7RD5.js → task-create-QN4LYRSE.js} +3 -3
  224. package/chunks/{task-list-W55RBFRX.js → task-list-JPLGK45U.js} +2 -2
  225. package/chunks/{task-update-N536I4GQ.js → task-update-IWEOJFV2.js} +3 -3
  226. package/chunks/{team-create-QYSWCYCL.js → team-create-OOPXCDBA.js} +24 -26
  227. package/chunks/{team-delete-FJRFX33M.js → team-delete-RZVVSGCY.js} +2 -2
  228. package/chunks/{team-plan-approval-P7DAD644.js → team-plan-approval-DSX5EWAT.js} +24 -26
  229. package/chunks/{terminal-image-renderer-SMQE46UJ.js → terminal-image-renderer-KS25G33E.js} +33 -35
  230. package/chunks/{theme-manager-RFO5WWFF.js → theme-manager-YMZNG45F.js} +33 -35
  231. package/chunks/{tool-search-F2EMIAPV.js → tool-search-J5Q6U7DN.js} +9 -9
  232. package/chunks/{total-session-admission-HTVTP4BS.js → total-session-admission-PVN64JVV.js} +37 -39
  233. package/chunks/{trustedFolders-7OCNMUQE.js → trustedFolders-FATSC4YI.js} +35 -37
  234. package/chunks/{types-WYCFCEHR.js → types-HKLPXZB3.js} +1 -3
  235. package/chunks/{update-relaunch-4GF3OXMB.js → update-relaunch-SIKHLHVR.js} +6 -6
  236. package/chunks/{updateCheck-7QBDXZRT.js → updateCheck-D3YG2WCD.js} +36 -38
  237. package/chunks/{useAutoAcceptIndicator-UI4SNL2O.js → useAutoAcceptIndicator-ILINOSAS.js} +43 -45
  238. package/chunks/{validateNonInterActiveAuth-BPPA563H.js → validateNonInterActiveAuth-JUDQP6V4.js} +74 -75
  239. package/chunks/{version-ANP4TS6O.js → version-C63GDDWN.js} +1 -1
  240. package/chunks/{web-fetch-QJADSAH3.js → web-fetch-FOQZMNSC.js} +8 -10
  241. package/chunks/{web-search-7TTQKEKM.js → web-search-PUJTBFUC.js} +5 -7
  242. package/chunks/{web-shell-static-A6QMUNNV.js → web-shell-static-HNB4FDOE.js} +2 -2
  243. package/chunks/{workflow-5XN6XSOT.js → workflow-Y5IPINVH.js} +47 -58
  244. package/chunks/{workspace-providers-status-PDFZWL5Q.js → workspace-providers-status-IJ4VHFMB.js} +45 -47
  245. package/chunks/{workspace-registration-store-XKVW2YVH.js → workspace-registration-store-SMJWI2AI.js} +1 -1
  246. package/chunks/{workspace-registry-23R7XRB5.js → workspace-registry-BTGZIMPK.js} +37 -39
  247. package/chunks/{workspace-service-MUYO2QIC.js → workspace-service-SIN67ITC.js} +46 -51
  248. package/chunks/{workspace-skills-status-IKECTOOQ.js → workspace-skills-status-F3RKCUIX.js} +44 -46
  249. package/chunks/{workspace-trust-reconciler-KLGOB53D.js → workspace-trust-reconciler-PLIDLJZX.js} +45 -47
  250. package/chunks/{write-file-GGRBB5TZ.js → write-file-PAIGB33C.js} +26 -28
  251. package/chunks/{zoom-image-6ASG6J4C.js → zoom-image-LYQD7BQA.js} +5 -5
  252. package/cli.js +14 -14
  253. package/package.json +3 -3
  254. package/web-shell/assets/{abnfDiagram-VCTEODGH-uS-vtfs3.js → abnfDiagram-VCTEODGH-TRCMSA_6.js} +1 -1
  255. package/web-shell/assets/{arc-BSTnk5pu.js → arc-D9Uls5b3.js} +1 -1
  256. package/web-shell/assets/{architectureDiagram-5GKGNRK7-DCMyiqzy.js → architectureDiagram-5GKGNRK7-Bwb8jPXg.js} +1 -1
  257. package/web-shell/assets/{blockDiagram-NRAW4CY4-C7_gt0r1.js → blockDiagram-NRAW4CY4-DHj71TSX.js} +1 -1
  258. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BeQg2L8B.js → c4Diagram-UCG6FXSJ-uKBBdbyr.js} +1 -1
  259. package/web-shell/assets/channel-CXjVLaBa.js +1 -0
  260. package/web-shell/assets/{chunk-2Q5K7J3B-DnV9bKBe.js → chunk-2Q5K7J3B-BZd0Phrl.js} +1 -1
  261. package/web-shell/assets/{chunk-5VM5RSS4-rT1GAcT7.js → chunk-5VM5RSS4-7KNeNBqN.js} +1 -1
  262. package/web-shell/assets/{chunk-F27PBJKO-BcgSxqGA.js → chunk-F27PBJKO-BeboS7Fi.js} +1 -1
  263. package/web-shell/assets/{chunk-G27WJ6UU-Bw1ZhyZq.js → chunk-G27WJ6UU-RV3JONoj.js} +1 -1
  264. package/web-shell/assets/{chunk-JWPE2WC7-D4iDw-96.js → chunk-JWPE2WC7-Yw9FCFsP.js} +1 -1
  265. package/web-shell/assets/{chunk-LCL6LL3I-D3MB3GTZ.js → chunk-LCL6LL3I-GIMnydDe.js} +1 -1
  266. package/web-shell/assets/{chunk-POPQ4Y6H-Cep2ndrS.js → chunk-POPQ4Y6H-Cfrux7bL.js} +1 -1
  267. package/web-shell/assets/{chunk-SVP7TREG-BuahMHJc.js → chunk-SVP7TREG-BlvIN0CO.js} +1 -1
  268. package/web-shell/assets/{chunk-XXDRQBXY-BdujIvJY.js → chunk-XXDRQBXY-DMs7Rr4t.js} +1 -1
  269. package/web-shell/assets/classDiagram-DTDB5LWJ-DANEijO3.js +1 -0
  270. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DANEijO3.js +1 -0
  271. package/web-shell/assets/{cose-bilkent-JH36ORCC-CGLLUbF8.js → cose-bilkent-JH36ORCC-DNGqTNwI.js} +1 -1
  272. package/web-shell/assets/{cynefin-OW5HDTMX-D6kDsRSh.js → cynefin-OW5HDTMX-CojMpaoH.js} +1 -1
  273. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-CCy78qZx.js → cynefinDiagram-5FMLGOSQ-DF07YXGo.js} +1 -1
  274. package/web-shell/assets/{dagre-3AP2YEHR-D5gJuJsf.js → dagre-3AP2YEHR-17-4WtCH.js} +1 -1
  275. package/web-shell/assets/{diagram-S7CK7UJ4-ZwEZ5W__.js → diagram-S7CK7UJ4-G3Wuyz9m.js} +1 -1
  276. package/web-shell/assets/{diagram-UQ7AKVKN-B036APjv.js → diagram-UQ7AKVKN-nyWIKZ8P.js} +1 -1
  277. package/web-shell/assets/{diagram-VSXAHHWV-BfDJ57Fq.js → diagram-VSXAHHWV-tKHhmYSC.js} +1 -1
  278. package/web-shell/assets/{diagram-VX7I27RA-Wha0p5rT.js → diagram-VX7I27RA-CpDf1hYk.js} +1 -1
  279. package/web-shell/assets/{diagram-Z3DM3KII-L20bz2K1.js → diagram-Z3DM3KII-Cah2IFXG.js} +1 -1
  280. package/web-shell/assets/{ebnfDiagram-PWID7BFC-D1ZM0Cp7.js → ebnfDiagram-PWID7BFC-DNaCkgxy.js} +1 -1
  281. package/web-shell/assets/{erDiagram-SSCWMZ5O-CMtA19v8.js → erDiagram-SSCWMZ5O-CAdRgcf1.js} +1 -1
  282. package/web-shell/assets/{flowDiagram-A5DVABFB-D96m326S.js → flowDiagram-A5DVABFB-CMUJAShL.js} +1 -1
  283. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BuHiYG2o.js → ganttDiagram-EL5Y4UJY-o-_MUNey.js} +1 -1
  284. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Ck3NmkSw.js → gitGraphDiagram-WWUBYQGX-_aG-2Z7O.js} +1 -1
  285. package/web-shell/assets/{index-CBGz4Qjl.js → index-BK_NKxiJ.js} +1 -1
  286. package/web-shell/assets/index-Ci-z4zWY.js +1913 -0
  287. package/web-shell/assets/index-LDlXZRHA.css +36 -0
  288. package/web-shell/assets/{infoDiagram-RXCK75RN-B6DAOyXe.js → infoDiagram-RXCK75RN-qJPeZbGP.js} +1 -1
  289. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-Bpg-joFo.js → ishikawaDiagram-5VMMS53U-7Om4vNo1.js} +1 -1
  290. package/web-shell/assets/{journeyDiagram-EYS64GPL-BclrHzGa.js → journeyDiagram-EYS64GPL-BNtXqmBW.js} +1 -1
  291. package/web-shell/assets/{kanban-definition-3QL26DDD-5gJzNTYG.js → kanban-definition-3QL26DDD-COgFec8P.js} +1 -1
  292. package/web-shell/assets/{layout-CEz_1L8z.js → layout-B9n81PC9.js} +1 -1
  293. package/web-shell/assets/{linear-CBjTq9Hc.js → linear-Bb6nXZQq.js} +1 -1
  294. package/web-shell/assets/{mermaid.core-Dzhbxx_I.js → mermaid.core-Cgrm3JVT.js} +6 -6
  295. package/web-shell/assets/{mindmap-definition-FBJOCRG2-DQdVqlBF.js → mindmap-definition-FBJOCRG2-TKwLTjnG.js} +1 -1
  296. package/web-shell/assets/{pegDiagram-XKGWAZYB-D1JZlYXL.js → pegDiagram-XKGWAZYB-BJPuvlpi.js} +1 -1
  297. package/web-shell/assets/{pieDiagram-E7YTZNPT-BmkpYL0w.js → pieDiagram-E7YTZNPT-D01VkNsW.js} +1 -1
  298. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-DRvD6co5.js → quadrantDiagram-AXDQQJYC-C4hHsiv-.js} +1 -1
  299. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CEdjDuoo.js → railroadDiagram-O6MQD6OU-CuEO4xK2.js} +1 -1
  300. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BCHG-ie8.js → requirementDiagram-EFPCY7ZU-D5J_vIo5.js} +1 -1
  301. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-C9cZMnye.js → sankeyDiagram-P5KCCOFB-DQKY223V.js} +1 -1
  302. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DYHRV4zL.js → sequenceDiagram-WJ2MYXX4-D27YV_cm.js} +1 -1
  303. package/web-shell/assets/{sizeCapture-X5ZJPWSS-DlK21aye.js → sizeCapture-X5ZJPWSS-TJg8UcwV.js} +1 -1
  304. package/web-shell/assets/{stateDiagram-HBIQ2CUA-BrmZssvk.js → stateDiagram-HBIQ2CUA-CmnPzUIx.js} +1 -1
  305. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DNKPyrDc.js +1 -0
  306. package/web-shell/assets/{swimlanes-XN3QIQJK-D9xfcayR.js → swimlanes-XN3QIQJK-ByeP3_Nu.js} +1 -1
  307. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-ZL1HPC6w.js +8 -0
  308. package/web-shell/assets/{timeline-definition-24CTP7MA-D4gdDL_d.js → timeline-definition-24CTP7MA-BsFA5juR.js} +1 -1
  309. package/web-shell/assets/{vennDiagram-4TSXK5OY-DdhIExjI.js → vennDiagram-4TSXK5OY-DREP2ECo.js} +1 -1
  310. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9RS_Zof.js → wardleyDiagram-VM6X3IG4-iyd9lKi2.js} +1 -1
  311. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-orRgmxWk.js → xychartDiagram-S5SC5T6Z-CVr1_j9q.js} +1 -1
  312. package/web-shell/index.html +3 -3
  313. package/chunks/chunk-7DJCPZE3.js +0 -945
  314. package/chunks/chunk-J2OSJFP3.js +0 -202
  315. package/chunks/chunk-K2OJUPOE.js +0 -78
  316. package/chunks/chunk-P3QQPMQA.js +0 -19
  317. package/chunks/process-registry-PMJOA5CO.js +0 -172
  318. package/web-shell/assets/channel-CENAhErJ.js +0 -1
  319. package/web-shell/assets/classDiagram-DTDB5LWJ-CM6FArGH.js +0 -1
  320. package/web-shell/assets/classDiagram-v2-JRS7N3AN-CM6FArGH.js +0 -1
  321. package/web-shell/assets/index-8hXIpvo4.js +0 -1865
  322. package/web-shell/assets/index-DclEv91i.css +0 -5
  323. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-B2Q7XDaE.js +0 -1
  324. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-DpZPOSbX.js +0 -8
@@ -11,7 +11,7 @@ import {
11
11
  isSessionAttachmentReference,
12
12
  withAttachmentDegradationMarker,
13
13
  writeStderrLine
14
- } from "./chunk-ZGXYO7DY.js";
14
+ } from "./chunk-SS4MRMKE.js";
15
15
  import {
16
16
  DEFAULT_RING_SIZE,
17
17
  EVENT_SCHEMA_VERSION,
@@ -31,7 +31,7 @@ import {
31
31
  } from "./chunk-OCPBI7J5.js";
32
32
  import {
33
33
  defaultSpawnChannelFactory
34
- } from "./chunk-RUGNCYNO.js";
34
+ } from "./chunk-DMLVSW7L.js";
35
35
  import {
36
36
  BridgeChannelClosedError,
37
37
  BridgeTimeoutError,
@@ -41,7 +41,7 @@ import {
41
41
  SessionRestoreTimeoutError,
42
42
  createIdleWorkspaceExtensionsStatus,
43
43
  createIdleWorkspaceHooksStatus
44
- } from "./chunk-JHS74YAB.js";
44
+ } from "./chunk-KID24ZFN.js";
45
45
  import {
46
46
  ACTIVE_WORK_CLOSE_IF_UNHELD_PARAM,
47
47
  ACTIVE_WORK_CLOSE_TIMEOUT_MS,
@@ -120,9 +120,8 @@ import {
120
120
  isOfficeDocumentExtension,
121
121
  isRecordableDerivedChild,
122
122
  pathHasSkippedDirectoryComponent
123
- } from "./chunk-6IUNAPLR.js";
123
+ } from "./chunk-K5KXUXWC.js";
124
124
  import {
125
- SESSION_ARTIFACT_PERSISTENCE_VERSION,
126
125
  SESSION_PR_LIST_LIMIT,
127
126
  SESSION_PR_URL_MAX_LENGTH,
128
127
  SESSION_TRANSCRIPT_MAX_LIMIT,
@@ -130,24 +129,31 @@ import {
130
129
  TURN_RESULT_CODE_TEXT_TRUNCATED,
131
130
  TURN_RESULT_TEXT_MAX_CHARS,
132
131
  TrustGateError,
132
+ canonicalSessionPrUrl,
133
+ normalizeTurnResultError
134
+ } from "./chunk-PZ66FRIC.js";
135
+ import {
136
+ PUBLISHED_CONTENT_SHA256_METADATA_KEY,
137
+ SESSION_ARTIFACT_PERSISTENCE_VERSION,
133
138
  WORKSPACE_CONTENT_MTIME_MS_METADATA_KEY,
134
139
  WORKSPACE_CONTENT_SHA256_METADATA_KEY,
140
+ WORKSPACE_CONTENT_SIZE_BYTES_METADATA_KEY,
141
+ isAdoptableContentFingerprintKey,
135
142
  isPrototypeMetadataKey,
136
143
  isReservedWorkspaceMetadataKey,
137
144
  metadataBudgetBytes,
138
145
  normalizeSnapshotPayload,
139
- normalizeTurnResultError,
140
146
  stableSessionArtifactId
141
- } from "./chunk-TGWAQ5RB.js";
147
+ } from "./chunk-DJBQCO2E.js";
142
148
  import {
143
149
  DAEMON_TRACEPARENT_META_KEY,
144
150
  DAEMON_TRACESTATE_META_KEY
145
- } from "./chunk-HVEYF6VT.js";
151
+ } from "./chunk-3WK3QDNV.js";
146
152
  import {
147
153
  INVOCATION_CONTEXT_META_KEY,
148
154
  PRIVATE_ACP_CAPABILITY_ENV,
149
155
  PRIVATE_PARENT_CAPABILITY_META_KEY
150
- } from "./chunk-L2M46FP5.js";
156
+ } from "./chunk-QYMAKPY5.js";
151
157
  import {
152
158
  init_esbuild_shims
153
159
  } from "./chunk-5O2XNYP6.js";
@@ -1498,7 +1504,10 @@ var GenerationStreamQueue = class {
1498
1504
  // packages/acp-bridge/src/sessionArtifacts.ts
1499
1505
  init_esbuild_shims();
1500
1506
  import { createHash } from "node:crypto";
1501
- import { constants as fsConstants, promises as fs } from "node:fs";
1507
+ import {
1508
+ constants as fsConstants,
1509
+ promises as fs
1510
+ } from "node:fs";
1502
1511
  import path from "node:path";
1503
1512
  var SOURCE_RESERVATIONS = {
1504
1513
  tool: 100,
@@ -1581,6 +1590,7 @@ var SessionArtifactStore = class {
1581
1590
  async list() {
1582
1591
  return this.enqueue(async () => {
1583
1592
  await this.refreshWorkspaceStatuses();
1593
+ await this.forgetVanishedAutoRecordedArtifacts();
1584
1594
  return {
1585
1595
  v: 1,
1586
1596
  sessionId: this.sessionId,
@@ -1596,9 +1606,14 @@ var SessionArtifactStore = class {
1596
1606
  return this.enqueue(async () => {
1597
1607
  const artifact = this.artifacts.get(artifactId);
1598
1608
  if (!artifact) return void 0;
1599
- if (artifact.workspacePath && shouldRefreshWorkspaceStatus(artifact, Date.now())) {
1609
+ if (artifact.workspacePath && needsWorkspaceStatusRefresh(artifact, Date.now())) {
1600
1610
  await this.refreshWorkspaceStatus(artifact, { onError: "missing" });
1601
1611
  }
1612
+ if (isVanishedAutoRecordedWorkspaceArtifact(artifact)) {
1613
+ await this.forgetVanishedAutoRecordedArtifacts([artifact]);
1614
+ const kept = this.artifacts.get(artifactId);
1615
+ return kept ? toPublicArtifact(kept) : void 0;
1616
+ }
1602
1617
  return toPublicArtifact(artifact);
1603
1618
  });
1604
1619
  }
@@ -1693,7 +1708,7 @@ var SessionArtifactStore = class {
1693
1708
  const removeChange = {
1694
1709
  action: "removed",
1695
1710
  artifactId: existing.id,
1696
- artifact: toPublicArtifact(existing),
1711
+ artifact: toRemovedPublicArtifact(existing),
1697
1712
  reason: "explicit",
1698
1713
  durableTombstoneRequired: existing.durableTombstoneRequired || existing.persistedAt !== void 0,
1699
1714
  removedClientId: existing.clientId
@@ -1704,7 +1719,7 @@ var SessionArtifactStore = class {
1704
1719
  changes.push({
1705
1720
  action: "removed",
1706
1721
  artifactId: existing.id,
1707
- artifact: toPublicArtifact(existing),
1722
+ artifact: toRemovedPublicArtifact(existing),
1708
1723
  reason: "unpin_to_ephemeral",
1709
1724
  durableTombstoneRequired: true
1710
1725
  });
@@ -1836,10 +1851,11 @@ var SessionArtifactStore = class {
1836
1851
  return { v: 1, sessionId: this.sessionId, changes: [] };
1837
1852
  }
1838
1853
  this.denyCrossClientMutation("remove", artifactId, existing, options);
1854
+ const removedAt = (/* @__PURE__ */ new Date()).toISOString();
1839
1855
  const removeChange = {
1840
1856
  action: "removed",
1841
1857
  artifactId,
1842
- artifact: toPublicArtifact(existing),
1858
+ artifact: toRemovedPublicArtifact(existing, removedAt),
1843
1859
  reason: "explicit",
1844
1860
  durableTombstoneRequired: existing.durableTombstoneRequired || existing.retention !== "ephemeral" ? true : void 0,
1845
1861
  removedClientId: existing.clientId
@@ -2634,7 +2650,8 @@ var SessionArtifactStore = class {
2634
2650
  }
2635
2651
  const metadata = withWorkspaceContentHashMetadata(
2636
2652
  normalizeMetadata(input.metadata, {
2637
- budget: options.metadataBudget ?? "user"
2653
+ budget: options.metadataBudget ?? "user",
2654
+ trustedPublisher
2638
2655
  }),
2639
2656
  workspaceStatus
2640
2657
  );
@@ -2698,7 +2715,7 @@ var SessionArtifactStore = class {
2698
2715
  }
2699
2716
  async refreshWorkspaceStatuses() {
2700
2717
  const now = Date.now();
2701
- const staleWorkspaceArtifacts = Array.from(this.artifacts.values()).filter((artifact) => artifact.workspacePath).filter((artifact) => shouldRefreshWorkspaceStatus(artifact, now));
2718
+ const staleWorkspaceArtifacts = Array.from(this.artifacts.values()).filter((artifact) => artifact.workspacePath).filter((artifact) => needsWorkspaceStatusRefresh(artifact, now));
2702
2719
  await runInBatches(
2703
2720
  staleWorkspaceArtifacts,
2704
2721
  WORKSPACE_STATUS_REFRESH_BATCH_SIZE,
@@ -2739,27 +2756,55 @@ var SessionArtifactStore = class {
2739
2756
  if (!artifact.workspacePath) {
2740
2757
  return;
2741
2758
  }
2759
+ const previousStatus = artifact.status;
2760
+ const previousSizeBytes = artifact.sizeBytes;
2742
2761
  try {
2743
2762
  const status = await getWorkspaceStatus(
2744
2763
  artifact.workspacePath,
2745
2764
  this.getRealWorkspaceCwd(),
2746
2765
  {
2747
- sizeBytes: artifact.sizeBytes,
2766
+ sizeBytes: recordedWorkspaceSizeBytes(artifact),
2748
2767
  mtimeMs: artifact.metadata?.[WORKSPACE_CONTENT_MTIME_MS_METADATA_KEY],
2749
2768
  sha256: artifact.metadata?.[WORKSPACE_CONTENT_SHA256_METADATA_KEY]
2750
2769
  }
2751
2770
  );
2752
- const changed = isWorkspaceContentChanged(artifact, status);
2753
- artifact.status = changed ? "changed" : status.status;
2754
- if (!changed) {
2755
- artifact.sizeBytes = status.sizeBytes;
2756
- }
2771
+ const contentChanged = isWorkspaceContentChanged(artifact, status);
2772
+ artifact.status = contentChanged ? "changed" : status.status;
2773
+ artifact.missingFromStatError = void 0;
2757
2774
  if (status.escaped) {
2758
2775
  artifact.status = "missing";
2759
2776
  artifact.sizeBytes = void 0;
2760
2777
  artifact.hideWorkspacePath = true;
2778
+ } else if (status.status === "missing") {
2779
+ artifact.sizeBytes = void 0;
2780
+ } else if (status.sizeBytes !== void 0) {
2781
+ if (artifact.status === "changed" && artifact.metadata?.[WORKSPACE_CONTENT_SIZE_BYTES_METADATA_KEY] === void 0) {
2782
+ const baseline = recordedWorkspaceSizeBytes(artifact);
2783
+ if (baseline !== void 0) {
2784
+ artifact.metadata = {
2785
+ ...artifact.metadata,
2786
+ [WORKSPACE_CONTENT_SIZE_BYTES_METADATA_KEY]: baseline
2787
+ };
2788
+ }
2789
+ }
2790
+ artifact.sizeBytes = status.sizeBytes;
2791
+ }
2792
+ if (artifact.status === "available" && !status.escaped) {
2793
+ artifact.metadata = withWorkspaceContentHashMetadata(
2794
+ artifact.metadata,
2795
+ {
2796
+ status: "available",
2797
+ sha256: status.sha256,
2798
+ mtimeMs: status.mtimeMs,
2799
+ sizeBytes: status.sizeBytes
2800
+ }
2801
+ );
2761
2802
  }
2762
2803
  artifact.lastStatAt = options.now ?? Date.now();
2804
+ const observationChanged = !status.escaped && status.status !== "missing" && recordWorkspaceObservation(artifact, status);
2805
+ if (artifact.status !== previousStatus || artifact.sizeBytes !== previousSizeBytes || observationChanged) {
2806
+ artifact.updatedAt = new Date(artifact.lastStatAt).toISOString();
2807
+ }
2763
2808
  } catch (error) {
2764
2809
  writeStderrLine(
2765
2810
  `[artifacts] session=${this.sessionId} action=status_refresh_failed artifactId=${artifact.id} reason=${JSON.stringify(
@@ -2769,11 +2814,53 @@ var SessionArtifactStore = class {
2769
2814
  if (options.onError === "missing") {
2770
2815
  artifact.status = "missing";
2771
2816
  artifact.sizeBytes = void 0;
2817
+ artifact.missingFromStatError = true;
2772
2818
  artifact.lastStatAt = options.now ?? Date.now();
2819
+ if (previousStatus !== "missing" || previousSizeBytes !== void 0) {
2820
+ artifact.updatedAt = new Date(artifact.lastStatAt).toISOString();
2821
+ }
2773
2822
  }
2774
2823
  return;
2775
2824
  }
2776
2825
  }
2826
+ async forgetVanishedAutoRecordedArtifacts(candidates) {
2827
+ const vanished = (candidates ?? Array.from(this.artifacts.values())).filter(
2828
+ isVanishedAutoRecordedWorkspaceArtifact
2829
+ );
2830
+ if (vanished.length === 0) {
2831
+ return;
2832
+ }
2833
+ const removedAt = (/* @__PURE__ */ new Date()).toISOString();
2834
+ const changes = vanished.map(
2835
+ (existing) => ({
2836
+ action: "removed",
2837
+ artifactId: existing.id,
2838
+ artifact: toRemovedPublicArtifact(existing, removedAt),
2839
+ reason: "eviction",
2840
+ durableTombstoneRequired: existing.durableTombstoneRequired || existing.retention !== "ephemeral" ? true : void 0,
2841
+ removedClientId: existing.clientId
2842
+ })
2843
+ );
2844
+ const needsDurableTombstone = changes.some(
2845
+ (change) => change.durableTombstoneRequired === true
2846
+ );
2847
+ const before = this.cloneState();
2848
+ for (const artifact of vanished) {
2849
+ this.artifacts.delete(artifact.id);
2850
+ }
2851
+ try {
2852
+ await this.persistChanges(changes, needsDurableTombstone);
2853
+ } catch (error) {
2854
+ writeStderrLine(
2855
+ `[artifacts] session=${this.sessionId} action=vanish_forget_failed artifactIds=${JSON.stringify(
2856
+ vanished.map((artifact) => artifact.id)
2857
+ )} reason=${JSON.stringify(
2858
+ error instanceof Error ? error.message : String(error)
2859
+ )}`
2860
+ );
2861
+ this.restoreState(before);
2862
+ }
2863
+ }
2777
2864
  getRealWorkspaceCwd() {
2778
2865
  if (!this.realWorkspaceCwdPromise) {
2779
2866
  const promise = fs.realpath(this.workspaceCwd).catch((error) => {
@@ -2807,7 +2894,7 @@ var SessionArtifactStore = class {
2807
2894
  (artifact) => !createdInThisBatch.has(artifact.id)
2808
2895
  );
2809
2896
  const now = Date.now();
2810
- const staleWorkspaceCandidates = candidates.filter((artifact) => artifact.workspacePath).filter((artifact) => shouldRefreshWorkspaceStatus(artifact, now));
2897
+ const staleWorkspaceCandidates = candidates.filter((artifact) => artifact.workspacePath).filter((artifact) => needsWorkspaceStatusRefresh(artifact, now));
2811
2898
  await runInBatches(
2812
2899
  staleWorkspaceCandidates,
2813
2900
  WORKSPACE_STATUS_REFRESH_BATCH_SIZE,
@@ -2824,7 +2911,7 @@ var SessionArtifactStore = class {
2824
2911
  removed.push({
2825
2912
  action: "removed",
2826
2913
  artifactId: artifact.id,
2827
- artifact: toPublicArtifact(artifact),
2914
+ artifact: toRemovedPublicArtifact(artifact),
2828
2915
  durableTombstoneRequired: artifact.durableTombstoneRequired,
2829
2916
  reason: "eviction"
2830
2917
  });
@@ -2947,7 +3034,10 @@ function mergeArtifact(existing, incoming) {
2947
3034
  trustedPublisher: existing.trustedPublisher || incoming.trustedPublisher,
2948
3035
  clientRetained: existing.clientRetained || incoming.clientRetained,
2949
3036
  lastStatAt: publishedUpdate || existing.storage === "published" ? void 0 : incoming.lastStatAt ?? existing.lastStatAt,
2950
- updatedAt: existing.updatedAt
3037
+ updatedAt: existing.updatedAt,
3038
+ lastObservedSha256: void 0,
3039
+ lastObservedSizeBytes: void 0,
3040
+ lastObservedMtimeMs: void 0
2951
3041
  };
2952
3042
  if (publishedUpdate) {
2953
3043
  next.title = incoming.title;
@@ -3046,7 +3136,7 @@ function mergeMetadata(existing, incoming) {
3046
3136
  const merged = { ...existing.metadata ?? {} };
3047
3137
  let changed = false;
3048
3138
  for (const [key, value] of Object.entries(incoming.metadata)) {
3049
- if ((key === WORKSPACE_CONTENT_SHA256_METADATA_KEY || key === WORKSPACE_CONTENT_MTIME_MS_METADATA_KEY) && merged[key] !== value) {
3139
+ if (isAdoptableContentFingerprintKey(key) && merged[key] !== value) {
3050
3140
  merged[key] = value;
3051
3141
  changed = true;
3052
3142
  } else if (!Object.hasOwn(merged, key)) {
@@ -3082,14 +3172,26 @@ function countByRetentionSource(artifacts) {
3082
3172
  return counts;
3083
3173
  }
3084
3174
  __name(countByRetentionSource, "countByRetentionSource");
3175
+ function isVanishedAutoRecordedWorkspaceArtifact(artifact) {
3176
+ return artifact.toolName === "write_file" && artifact.workspacePath !== void 0 && artifact.status === "missing" && artifact.missingFromStatError !== true && artifact.hideWorkspacePath !== true;
3177
+ }
3178
+ __name(isVanishedAutoRecordedWorkspaceArtifact, "isVanishedAutoRecordedWorkspaceArtifact");
3085
3179
  function shouldRefreshWorkspaceStatus(artifact, now) {
3086
3180
  return artifact.lastStatAt === void 0 || now - artifact.lastStatAt >= WORKSPACE_STATUS_REFRESH_TTL_MS;
3087
3181
  }
3088
3182
  __name(shouldRefreshWorkspaceStatus, "shouldRefreshWorkspaceStatus");
3183
+ function needsWorkspaceStatusRefresh(artifact, now) {
3184
+ return shouldRefreshWorkspaceStatus(artifact, now) || shouldRecheckWriteFilePresence(artifact);
3185
+ }
3186
+ __name(needsWorkspaceStatusRefresh, "needsWorkspaceStatusRefresh");
3187
+ function shouldRecheckWriteFilePresence(artifact) {
3188
+ return artifact.toolName === "write_file" && (artifact.status === "available" || artifact.status === "missing" && artifact.missingFromStatError !== true && artifact.hideWorkspacePath !== true);
3189
+ }
3190
+ __name(shouldRecheckWriteFilePresence, "shouldRecheckWriteFilePresence");
3089
3191
  function selectEvictionCandidate(candidates, sourceCounts) {
3090
3192
  return oldest(
3091
3193
  candidates,
3092
- (artifact) => artifact.status === "missing" && !artifact.clientRetained
3194
+ (artifact) => artifact.status === "missing" && artifact.missingFromStatError !== true && !artifact.clientRetained
3093
3195
  ) ?? oldest(
3094
3196
  candidates,
3095
3197
  (artifact) => !artifact.clientRetained && sourceCounts[artifact.retentionSource] > SOURCE_RESERVATIONS[artifact.retentionSource]
@@ -3176,6 +3278,10 @@ function toPublicArtifact(artifact) {
3176
3278
  };
3177
3279
  }
3178
3280
  __name(toPublicArtifact, "toPublicArtifact");
3281
+ function toRemovedPublicArtifact(artifact, removedAt = (/* @__PURE__ */ new Date()).toISOString()) {
3282
+ return { ...toPublicArtifact(artifact), updatedAt: removedAt };
3283
+ }
3284
+ __name(toRemovedPublicArtifact, "toRemovedPublicArtifact");
3179
3285
  function persistedArtifactToInput(artifact) {
3180
3286
  return {
3181
3287
  title: artifact.title,
@@ -3202,7 +3308,7 @@ function workspaceExpectedFromArtifact(artifact) {
3202
3308
  return void 0;
3203
3309
  }
3204
3310
  return {
3205
- sizeBytes: artifact.sizeBytes,
3311
+ sizeBytes: recordedWorkspaceSizeBytes(artifact),
3206
3312
  mtimeMs: artifact.metadata?.[WORKSPACE_CONTENT_MTIME_MS_METADATA_KEY],
3207
3313
  sha256: artifact.metadata?.[WORKSPACE_CONTENT_SHA256_METADATA_KEY]
3208
3314
  };
@@ -3649,8 +3755,13 @@ function normalizeMetadata(metadata, options = {}) {
3649
3755
  if (isPrototypeMetadataKey(key)) {
3650
3756
  continue;
3651
3757
  }
3652
- if (options.budget !== "persisted" && isReservedWorkspaceMetadataKey(key)) {
3653
- continue;
3758
+ if (options.budget !== "persisted") {
3759
+ if (isReservedWorkspaceMetadataKey(key)) {
3760
+ continue;
3761
+ }
3762
+ if (key === PUBLISHED_CONTENT_SHA256_METADATA_KEY && options.trustedPublisher !== true) {
3763
+ continue;
3764
+ }
3654
3765
  }
3655
3766
  if (!key) {
3656
3767
  throw new SessionArtifactValidationError(
@@ -3768,16 +3879,16 @@ async function getWorkspaceStatus(workspacePath, realWorkspaceCwd, expected, opt
3768
3879
  if (!relative || isOutsidePath(relative)) {
3769
3880
  return { status: "missing", escaped: true };
3770
3881
  }
3771
- const preOpenStat = await fs.lstat(realPath);
3882
+ const preOpenStat = await fs.lstat(realPath, { bigint: true });
3772
3883
  const handle = await fs.open(
3773
3884
  realPath,
3774
3885
  fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW
3775
3886
  );
3776
3887
  try {
3777
- const stat = await handle.stat();
3778
- if (!isSameFile(preOpenStat, stat)) {
3888
+ if (!isSameFile(preOpenStat, await handle.stat({ bigint: true }))) {
3779
3889
  return { status: "missing", escaped: true };
3780
3890
  }
3891
+ const stat = await handle.stat();
3781
3892
  if (!stat.isFile()) {
3782
3893
  throw new Error("path is not a regular file");
3783
3894
  }
@@ -3818,7 +3929,8 @@ async function getWorkspaceStatus(workspacePath, realWorkspaceCwd, expected, opt
3818
3929
  return {
3819
3930
  status: "changed",
3820
3931
  sizeBytes: stat.size,
3821
- mtimeMs: stat.mtimeMs
3932
+ mtimeMs: stat.mtimeMs,
3933
+ sha256
3822
3934
  };
3823
3935
  }
3824
3936
  return {
@@ -3857,23 +3969,51 @@ async function hashFile(handle) {
3857
3969
  }
3858
3970
  __name(hashFile, "hashFile");
3859
3971
  function withWorkspaceContentHashMetadata(metadata, workspaceStatus) {
3860
- if (workspaceStatus?.status !== "available" || !workspaceStatus.sha256) {
3972
+ if (workspaceStatus?.status !== "available" || workspaceStatus.sha256 === void 0 && workspaceStatus.sizeBytes === void 0) {
3861
3973
  return metadata;
3862
3974
  }
3863
3975
  const next = {
3864
3976
  ...metadata ?? {},
3865
- [WORKSPACE_CONTENT_SHA256_METADATA_KEY]: workspaceStatus.sha256,
3866
- ...workspaceStatus.mtimeMs !== void 0 ? { [WORKSPACE_CONTENT_MTIME_MS_METADATA_KEY]: workspaceStatus.mtimeMs } : {}
3977
+ ...workspaceStatus.sha256 ? { [WORKSPACE_CONTENT_SHA256_METADATA_KEY]: workspaceStatus.sha256 } : {},
3978
+ ...workspaceStatus.mtimeMs !== void 0 ? { [WORKSPACE_CONTENT_MTIME_MS_METADATA_KEY]: workspaceStatus.mtimeMs } : {},
3979
+ ...workspaceStatus.sizeBytes !== void 0 ? {
3980
+ [WORKSPACE_CONTENT_SIZE_BYTES_METADATA_KEY]: workspaceStatus.sizeBytes
3981
+ } : {}
3867
3982
  };
3868
3983
  return next;
3869
3984
  }
3870
3985
  __name(withWorkspaceContentHashMetadata, "withWorkspaceContentHashMetadata");
3986
+ function recordedWorkspaceSizeBytes(artifact) {
3987
+ const recorded = artifact.metadata?.[WORKSPACE_CONTENT_SIZE_BYTES_METADATA_KEY];
3988
+ if (typeof recorded === "number" && Number.isFinite(recorded)) {
3989
+ return recorded;
3990
+ }
3991
+ return artifact.sizeBytes;
3992
+ }
3993
+ __name(recordedWorkspaceSizeBytes, "recordedWorkspaceSizeBytes");
3994
+ function recordWorkspaceObservation(artifact, status) {
3995
+ const hadObservation = artifact.lastObservedSha256 !== void 0 || artifact.lastObservedSizeBytes !== void 0 || artifact.lastObservedMtimeMs !== void 0;
3996
+ let changed = false;
3997
+ if (hadObservation) {
3998
+ if (status.sha256 !== void 0 && artifact.lastObservedSha256 !== void 0) {
3999
+ changed = status.sha256 !== artifact.lastObservedSha256;
4000
+ } else {
4001
+ changed = status.sizeBytes !== artifact.lastObservedSizeBytes || status.mtimeMs !== artifact.lastObservedMtimeMs;
4002
+ }
4003
+ }
4004
+ artifact.lastObservedSha256 = status.sha256;
4005
+ artifact.lastObservedSizeBytes = status.sizeBytes;
4006
+ artifact.lastObservedMtimeMs = status.mtimeMs;
4007
+ return changed;
4008
+ }
4009
+ __name(recordWorkspaceObservation, "recordWorkspaceObservation");
3871
4010
  function isWorkspaceContentChanged(artifact, status) {
3872
4011
  if (status.status !== "available") {
3873
4012
  return false;
3874
4013
  }
3875
4014
  const expectedSha256 = artifact.metadata?.[WORKSPACE_CONTENT_SHA256_METADATA_KEY];
3876
- if (artifact.sizeBytes !== void 0 && status.sizeBytes !== void 0 && status.sizeBytes !== artifact.sizeBytes) {
4015
+ const expectedSize = recordedWorkspaceSizeBytes(artifact);
4016
+ if (expectedSize !== void 0 && status.sizeBytes !== void 0 && status.sizeBytes !== expectedSize) {
3877
4017
  return true;
3878
4018
  }
3879
4019
  return typeof expectedSha256 === "string" && status.sha256 !== void 0 && status.sha256 !== expectedSha256;
@@ -10065,10 +10205,10 @@ function createAcpSessionBridge(opts) {
10065
10205
  if (pr === null || typeof pr !== "object" || typeof pr.number !== "number" || !Number.isInteger(pr.number) || pr.number <= 0 || typeof pr.url !== "string" || pr.url.length > SESSION_PR_URL_MAX_LENGTH || !/^https?:\/\//i.test(pr.url) || // The url is interpolated into the stderr audit line — control
10066
10206
  // characters would let a client forge log lines (the displayName
10067
10207
  // branch rejects them for the same reason).
10068
- hasControlCharacter2(pr.url)) {
10208
+ hasControlCharacter2(pr.url) || pr.state !== void 0 && pr.state !== "open" && pr.state !== "merged" && pr.state !== "closed") {
10069
10209
  throw new InvalidSessionMetadataError(
10070
10210
  "pr",
10071
- `must be an object with a positive integer \`number\` and an http(s) \`url\` of at most ${SESSION_PR_URL_MAX_LENGTH} characters, without control characters`
10211
+ `must be an object with a positive integer \`number\` and an http(s) \`url\` of at most ${SESSION_PR_URL_MAX_LENGTH} characters, without control characters, and an optional \`state\` of \`open\`, \`merged\`, or \`closed\``
10072
10212
  );
10073
10213
  }
10074
10214
  }
@@ -10124,11 +10264,22 @@ function createAcpSessionBridge(opts) {
10124
10264
  const bound = metadata.pr;
10125
10265
  const existing = entry.prs ?? [];
10126
10266
  const latest = existing[existing.length - 1];
10127
- if (latest?.number === bound.number && latest.url === bound.url) {
10267
+ if (latest?.number === bound.number && latest.url === bound.url && // A re-bind carrying a new state is a change: the live entry,
10268
+ // the metadata event, and the catalog revision must all see it.
10269
+ (bound.state === void 0 || bound.state === latest.state)) {
10128
10270
  } else {
10271
+ const known = existing.find(
10272
+ (p) => p.number === bound.number && canonicalSessionPrUrl(p.url) === canonicalSessionPrUrl(bound.url)
10273
+ );
10129
10274
  entry.prs = [
10130
10275
  ...existing.filter((p) => p.number !== bound.number),
10131
- { number: bound.number, url: bound.url }
10276
+ {
10277
+ number: bound.number,
10278
+ url: bound.url,
10279
+ ...bound.state ?? known?.state ? {
10280
+ state: bound.state ?? known?.state
10281
+ } : {}
10282
+ }
10132
10283
  ].slice(-SESSION_PR_LIST_LIMIT);
10133
10284
  markSessionCatalogChanged();
10134
10285
  writeStderrLine(
@@ -10158,7 +10309,20 @@ function createAcpSessionBridge(opts) {
10158
10309
  seedSessionPrs(sessionId, prs) {
10159
10310
  const entry = byId.get(sessionId);
10160
10311
  if (!entry || entry.prs && entry.prs.length > 0) return;
10161
- entry.prs = prs.map(({ number, url }) => ({ number, url })).slice(-SESSION_PR_LIST_LIMIT);
10312
+ entry.prs = prs.map(({ number, url, state }) => ({
10313
+ number,
10314
+ url,
10315
+ ...state ? { state } : {}
10316
+ })).slice(-SESSION_PR_LIST_LIMIT);
10317
+ },
10318
+ setSessionPrs(sessionId, prs) {
10319
+ const entry = byId.get(sessionId);
10320
+ if (!entry) return;
10321
+ entry.prs = prs.map(({ number, url, state }) => ({
10322
+ number,
10323
+ url,
10324
+ ...state ? { state } : {}
10325
+ })).slice(-SESSION_PR_LIST_LIMIT);
10162
10326
  },
10163
10327
  async getSessionArtifacts(sessionId, context) {
10164
10328
  const entry = byId.get(sessionId);
@@ -2,30 +2,30 @@
2
2
  "use strict";
3
3
  import {
4
4
  getExtensionManager
5
- } from "./chunk-PFCQ62V4.js";
5
+ } from "./chunk-6ZPDLGHN.js";
6
6
  import {
7
7
  parseChannelConfig
8
- } from "./chunk-HVQ3B7FF.js";
8
+ } from "./chunk-Y5S7LBOZ.js";
9
9
  import {
10
10
  getPlugin,
11
11
  registerPlugin
12
- } from "./chunk-5XBFCMWD.js";
12
+ } from "./chunk-3XKLXHGK.js";
13
13
  import {
14
14
  sanitizeLogText
15
- } from "./chunk-E55H6BZ7.js";
15
+ } from "./chunk-ICURCKIU.js";
16
16
  import {
17
17
  loadSettings
18
- } from "./chunk-F7TNAPZ4.js";
18
+ } from "./chunk-AIAOIFY4.js";
19
19
  import {
20
20
  hashDaemonWorkspace
21
- } from "./chunk-HVEYF6VT.js";
21
+ } from "./chunk-3WK3QDNV.js";
22
22
  import {
23
23
  Storage
24
24
  } from "./chunk-UHQFIS7N.js";
25
25
  import {
26
26
  writeStderrLine,
27
27
  writeStdoutLine
28
- } from "./chunk-KGJGEEVR.js";
28
+ } from "./chunk-7FA2II6K.js";
29
29
  import {
30
30
  init_esbuild_shims
31
31
  } from "./chunk-5O2XNYP6.js";
@@ -32,13 +32,22 @@ var writeStderrLineSafe = /* @__PURE__ */ __name((message) => {
32
32
  var clearScreen = /* @__PURE__ */ __name(() => {
33
33
  console.clear();
34
34
  }, "clearScreen");
35
+ var ignoreBrokenPipe = /* @__PURE__ */ __name(() => {
36
+ process.stdout.on("error", (err) => {
37
+ if (err.code === "EPIPE") process.stdout.destroy();
38
+ });
39
+ process.stderr.on("error", (err) => {
40
+ if (err.code === "EPIPE") process.stderr.destroy();
41
+ });
42
+ }, "ignoreBrokenPipe");
35
43
 
36
44
  export {
37
45
  writeStdoutLine,
38
46
  writeStderrLine,
39
47
  writeStdoutLineSafe,
40
48
  writeStderrLineSafe,
41
- clearScreen
49
+ clearScreen,
50
+ ignoreBrokenPipe
42
51
  };
43
52
  /**
44
53
  * @license