@qwen-code/qwen-code 0.22.2-preview.1 → 0.22.3-nightly.20260829.e5cb60ad48

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 (443) hide show
  1. package/bundled/computer-use/SKILL.md +3 -3
  2. package/bundled/goal-draft/SKILL.md +109 -0
  3. package/bundled/qc-helper/docs/configuration/settings.md +37 -36
  4. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  5. package/bundled/qc-helper/docs/features/channels/dws.md +2 -0
  6. package/bundled/qc-helper/docs/features/channels/overview.md +34 -3
  7. package/bundled/qc-helper/docs/features/code-review.md +3 -3
  8. package/bundled/qc-helper/docs/features/commands.md +2 -1
  9. package/bundled/qc-helper/docs/features/computer-use.md +2 -2
  10. package/bundled/qc-helper/docs/features/goals.md +58 -0
  11. package/bundled/qc-helper/docs/features/headless.md +13 -11
  12. package/bundled/qc-helper/docs/features/status-line.md +3 -3
  13. package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
  14. package/bundled/qc-helper/docs/qwen-serve.md +1 -1
  15. package/bundled/review/SKILL.md +81 -31
  16. package/bundled/review/references/persistence.md +7 -3
  17. package/bundled/review/references/posting.md +10 -4
  18. package/chunks/MaxSizedBox-JK4LFKJ3.js +111 -0
  19. package/chunks/{StandaloneSessionPicker-5D2L22SF.js → StandaloneSessionPicker-UA2MQCCS.js} +83 -84
  20. package/chunks/{acpAgent-4DCKLA32.js → acpAgent-ZKIVHQKW.js} +1159 -360
  21. package/chunks/{agent-B4AFZL6H.js → agent-Z3Q5C3RX.js} +46 -47
  22. package/chunks/agent-headless-BIVZ3KYZ.js +86 -0
  23. package/chunks/{anthropicContentGenerator-U76GTVB6.js → anthropicContentGenerator-YVTB6QX7.js} +46 -50
  24. package/chunks/{artifact-tool-XDJCZZCF.js → artifact-tool-XSMPHZBT.js} +11 -3
  25. package/chunks/{askUserQuestion-ZXXERLEV.js → askUserQuestion-66I3U2QX.js} +31 -7
  26. package/chunks/bridge-KDQTHAR7.js +120 -0
  27. package/chunks/{channel-management-service-HXXS3HOZ.js → channel-management-service-HQ6KDS7C.js} +6 -6
  28. package/chunks/channel-settings-store-X4WWBVYW.js +121 -0
  29. package/chunks/{channel-worker-group-EVDC2P4K.js → channel-worker-group-6NA6BBZV.js} +8 -7
  30. package/chunks/{channel-worker-manager-IJJZHGEI.js → channel-worker-manager-NEZ2J6RK.js} +10 -8
  31. package/chunks/{channel-worker-supervisor-YSKB5GVB.js → channel-worker-supervisor-FKU7DIHJ.js} +6 -5
  32. package/chunks/{chunk-7QGEJI7M.js → chunk-23RFD54N.js} +1 -1
  33. package/chunks/{chunk-7DPKPBOQ.js → chunk-2AEHQRY2.js} +2 -2
  34. package/chunks/{chunk-LJP2BBMK.js → chunk-2SXSLSQE.js} +4 -4
  35. package/chunks/chunk-2TNL5KPM.js +49 -0
  36. package/chunks/chunk-36LGBEM6.js +130 -0
  37. package/chunks/{chunk-QR4AHMGQ.js → chunk-3CAI35FS.js} +13 -13
  38. package/chunks/{chunk-ZWKGZB2K.js → chunk-3JXM2CVW.js} +3 -3
  39. package/chunks/{chunk-CZFQ62RM.js → chunk-3WJLDA3X.js} +4 -4
  40. package/chunks/{chunk-ILPXSKGQ.js → chunk-3WK3QDNV.js} +2 -2
  41. package/chunks/{chunk-IKN3IUJP.js → chunk-3XKLXHGK.js} +17 -9
  42. package/chunks/{chunk-ZLTEQYNC.js → chunk-42IDLQWS.js} +26 -20
  43. package/chunks/{chunk-7UJTY5V3.js → chunk-44LKG3IY.js} +1 -1
  44. package/chunks/chunk-4CMJKUND.js +95 -0
  45. package/chunks/{chunk-77TOMRBG.js → chunk-4K7KNVWH.js} +3 -3
  46. package/chunks/{chunk-SQPOJ4ZI.js → chunk-4NDLQAY2.js} +27 -270
  47. package/chunks/{chunk-V3GINY6K.js → chunk-4QHPPXK2.js} +16 -8
  48. package/chunks/chunk-4VQBQLIZ.js +293 -0
  49. package/chunks/{chunk-FJAITR4L.js → chunk-5CALJAH7.js} +2 -2
  50. package/chunks/{chunk-TDQBVEPK.js → chunk-5SBVOOA2.js} +10 -8
  51. package/chunks/{chunk-R7G7GKOX.js → chunk-5ZJL3AIV.js} +3 -3
  52. package/chunks/{chunk-UCSV2IZW.js → chunk-62GQFYID.js} +3 -3
  53. package/chunks/{chunk-SLEWBQWM.js → chunk-6DIGWMGT.js} +2 -2
  54. package/chunks/{chunk-BRVWYMKV.js → chunk-6MBXY6WM.js} +1 -1
  55. package/chunks/{chunk-PVBT5QPD.js → chunk-6PJOTWAN.js} +1 -1
  56. package/chunks/{chunk-5CMWFBML.js → chunk-6XOIV7MI.js} +1 -1
  57. package/chunks/{chunk-ELY4QVIB.js → chunk-7EQQR46F.js} +1 -1
  58. package/chunks/{chunk-KGJGEEVR.js → chunk-7FA2II6K.js} +10 -1
  59. package/chunks/chunk-7GUOXWPY.js +2597 -0
  60. package/chunks/chunk-7J6OTNGO.js +424 -0
  61. package/chunks/{chunk-DIMEPKCW.js → chunk-7S226YTK.js} +1 -1
  62. package/chunks/{chunk-2MHGD7EE.js → chunk-A3LWD5MK.js} +1 -1
  63. package/chunks/{chunk-E4I5MVBR.js → chunk-ABS25QER.js} +1 -1
  64. package/chunks/{chunk-F7M6ZFGU.js → chunk-AMLXTTJJ.js} +8 -8
  65. package/chunks/{chunk-AA7VBRBG.js → chunk-ARF6IJHM.js} +8 -8
  66. package/chunks/{chunk-NEZZHGEI.js → chunk-AYFA7MZV.js} +6 -6
  67. package/chunks/{chunk-XMSMTU6H.js → chunk-B42A5ZHA.js} +4 -4
  68. package/chunks/{chunk-FVDQ5E67.js → chunk-B466ZSHZ.js} +3 -3
  69. package/chunks/{chunk-6US7BF3G.js → chunk-B5PHIJGI.js} +183 -5
  70. package/chunks/{chunk-4TPAG3O7.js → chunk-BFPESSTR.js} +1 -1
  71. package/chunks/{chunk-5URK47RN.js → chunk-BFYGL2XL.js} +11629 -10405
  72. package/chunks/{chunk-66GIFJ63.js → chunk-BIJEBAAQ.js} +1 -1
  73. package/chunks/{chunk-WBT3STGU.js → chunk-BKWNKLZB.js} +20 -20
  74. package/chunks/{chunk-T45CL2NT.js → chunk-BOWFGCEU.js} +3 -3
  75. package/chunks/{chunk-GTUZ3R6I.js → chunk-BP5PTNCU.js} +357 -117
  76. package/chunks/{chunk-IPQA4SR5.js → chunk-BWORX6FA.js} +1 -1
  77. package/chunks/{chunk-BKDAF7ES.js → chunk-BXDAPVQU.js} +2 -2
  78. package/chunks/{chunk-ZEADBZLO.js → chunk-C2X7KY45.js} +3 -3
  79. package/chunks/{chunk-7OBH4AM2.js → chunk-CAJTKR6W.js} +5 -5
  80. package/chunks/{chunk-2FN2HNTI.js → chunk-CFJY4DGX.js} +2 -2
  81. package/chunks/{chunk-W2WRNJKX.js → chunk-CLWO3B77.js} +6 -6
  82. package/chunks/{chunk-U45D46O5.js → chunk-CMHFCLBU.js} +1 -1
  83. package/chunks/{chunk-LRKMQPMD.js → chunk-CQH5KTKC.js} +1 -1
  84. package/chunks/{chunk-TR7G7XFQ.js → chunk-CVUBULIX.js} +5 -5
  85. package/chunks/{chunk-MCKJTBZN.js → chunk-CWQZUDB7.js} +2 -2
  86. package/chunks/{chunk-JECO75XD.js → chunk-D5LUXLUH.js} +2 -2
  87. package/chunks/chunk-DJBQCO2E.js +842 -0
  88. package/chunks/{chunk-BQBUZDDH.js → chunk-DJECZIJX.js} +42 -42
  89. package/chunks/{chunk-VYWCFWI5.js → chunk-DMLVSW7L.js} +542 -654
  90. package/chunks/{chunk-EB4VDXNI.js → chunk-DYXFD5RO.js} +182 -3
  91. package/chunks/{chunk-ZKAZP2ZG.js → chunk-EB6QRGHM.js} +3 -3
  92. package/chunks/{chunk-XIRDDFRS.js → chunk-ECE3UYVO.js} +5266 -6055
  93. package/chunks/{chunk-3UZCLCXR.js → chunk-EKSCLBBF.js} +3 -3
  94. package/chunks/{chunk-624NHDGB.js → chunk-ERFDKH32.js} +11 -0
  95. package/chunks/{chunk-3JKUX4PB.js → chunk-F5RB4S23.js} +9 -9
  96. package/chunks/{chunk-VBF4KZRQ.js → chunk-FIKYKQOO.js} +1 -1
  97. package/chunks/{chunk-DID6IRGC.js → chunk-FKET6VOO.js} +56 -39
  98. package/chunks/{chunk-4K44OMLI.js → chunk-FROAFEFB.js} +3 -3
  99. package/chunks/{chunk-MZS7GEC7.js → chunk-FTF2YIZ5.js} +1 -1
  100. package/chunks/{chunk-Z7VOMGDC.js → chunk-FTJMWDND.js} +0 -24
  101. package/chunks/{chunk-ZJG323IA.js → chunk-G6FECKTJ.js} +7 -5
  102. package/chunks/{chunk-H3HZ4AWW.js → chunk-GIHXH2KO.js} +1 -1
  103. package/chunks/{chunk-ZGWDHSUM.js → chunk-H4LCV44K.js} +4 -4
  104. package/chunks/{chunk-OLS3MAXQ.js → chunk-H5WQZTAW.js} +15 -9
  105. package/chunks/chunk-H72BQNM3.js +645 -0
  106. package/chunks/{chunk-Z4X5MTRT.js → chunk-HCOBAG2L.js} +2 -4
  107. package/chunks/{chunk-ATLGYSYH.js → chunk-HHQJANFM.js} +4 -4
  108. package/chunks/{chunk-7JPW6IYH.js → chunk-HVC3PNVC.js} +1 -1
  109. package/chunks/{chunk-OI2DR6QB.js → chunk-I6LYRJPB.js} +3 -3
  110. package/chunks/{chunk-E55H6BZ7.js → chunk-ICURCKIU.js} +1335 -119
  111. package/chunks/{chunk-2YDYDDE2.js → chunk-IJMEPQ5N.js} +3 -3
  112. package/chunks/{chunk-PAJGKZAA.js → chunk-ISKH4QX3.js} +14 -12
  113. package/chunks/{chunk-VOEMVOM4.js → chunk-IZDKYNKN.js} +2 -2
  114. package/chunks/{chunk-FCSWZAS3.js → chunk-J7SS77YW.js} +5 -5
  115. package/chunks/{chunk-AYVIGUUK.js → chunk-JB4JIVTJ.js} +1 -1
  116. package/chunks/chunk-JCMS65DJ.js +1584 -0
  117. package/chunks/{chunk-BHTJAO36.js → chunk-JHDPOPQG.js} +7 -7
  118. package/chunks/{chunk-FN5C6C7G.js → chunk-JHYH6PYQ.js} +192 -478
  119. package/chunks/{chunk-T6OODF2U.js → chunk-JWALNCLT.js} +1 -1
  120. package/chunks/{chunk-KQYW2GB5.js → chunk-JWDMKJG5.js} +6 -6
  121. package/chunks/{chunk-SKNVVYIJ.js → chunk-K5KXUXWC.js} +3 -3
  122. package/chunks/{chunk-TFV4RXPU.js → chunk-K6CTN5TU.js} +1 -1
  123. package/chunks/{chunk-X3XGCJ32.js → chunk-KEIMKAM4.js} +28 -111
  124. package/chunks/{chunk-XUX6O2ZT.js → chunk-KID24ZFN.js} +4 -1
  125. package/chunks/{chunk-I6DY753S.js → chunk-KJO2LBUK.js} +944 -18
  126. package/chunks/{chunk-5T4LWWNX.js → chunk-KYWTPLBJ.js} +18 -21
  127. package/chunks/chunk-LGO7DEXL.js +1186 -0
  128. package/chunks/{chunk-TOF4UZHH.js → chunk-LUEHOUHM.js} +3 -3
  129. package/chunks/{chunk-GNMJNDZE.js → chunk-M6FOJXW3.js} +1 -1
  130. package/chunks/{chunk-JLU3FPQR.js → chunk-MAQ2W4IF.js} +5 -5
  131. package/chunks/{chunk-K3LPAED5.js → chunk-MQM5PJML.js} +24 -4
  132. package/chunks/{chunk-AKQA3WCH.js → chunk-MVDPFLWM.js} +723 -3399
  133. package/chunks/{chunk-5PA6UEYA.js → chunk-MZCJWS5Y.js} +1 -1
  134. package/chunks/{chunk-BGXZBI5B.js → chunk-N4X7G4J2.js} +2 -1
  135. package/chunks/{chunk-WXDZZFH3.js → chunk-NEBSNUMX.js} +6 -6
  136. package/chunks/{chunk-J3CBIEDS.js → chunk-NENQE7VH.js} +32 -15
  137. package/chunks/{chunk-TMGAS5TO.js → chunk-NHDNYMBU.js} +26 -4
  138. package/chunks/{chunk-27ONXAFY.js → chunk-NIFYWDYN.js} +1 -1
  139. package/chunks/{chunk-IJVDHPKD.js → chunk-NU7RKEZR.js} +2 -2
  140. package/chunks/{chunk-CDUN63IN.js → chunk-OJEMXKA4.js} +3 -3
  141. package/chunks/{chunk-RRKNX553.js → chunk-PDQGMSZK.js} +1 -1
  142. package/chunks/{chunk-R3T33BG5.js → chunk-PI6HYGBE.js} +3 -3
  143. package/chunks/{chunk-5SM2AK65.js → chunk-PO6YCWIQ.js} +5 -5
  144. package/chunks/{chunk-GTUKW3I6.js → chunk-PPKZ7JOE.js} +1 -1
  145. package/chunks/{chunk-SAH4BD2J.js → chunk-PQEISIKS.js} +67 -0
  146. package/chunks/{chunk-ALTQLFEG.js → chunk-PQZBDDNG.js} +5 -194
  147. package/chunks/{chunk-WEGXPP5E.js → chunk-QFCDF5PL.js} +1 -1
  148. package/chunks/{chunk-DEYPMJPD.js → chunk-QJNDUTOL.js} +45 -239
  149. package/chunks/{chunk-OF2DPXUS.js → chunk-QYMAKPY5.js} +119 -24
  150. package/chunks/{chunk-JVPFTDBK.js → chunk-RFIDDFAL.js} +1 -1
  151. package/chunks/chunk-RKFGE7JH.js +93 -0
  152. package/chunks/{chunk-CPPYZHBN.js → chunk-RU7BK6B3.js} +1 -1
  153. package/chunks/{chunk-KPF2K55D.js → chunk-RZKOA4JE.js} +39 -8
  154. package/chunks/{chunk-AWFZDYSD.js → chunk-SEDFP3ZI.js} +1 -1
  155. package/chunks/chunk-SEONHUS3.js +275 -0
  156. package/chunks/chunk-SS4MRMKE.js +3525 -0
  157. package/chunks/{chunk-BPMVPWBT.js → chunk-SS5SDCD3.js} +6 -6
  158. package/chunks/{chunk-J5352S3S.js → chunk-ST5V3ZOC.js} +3 -3
  159. package/chunks/{chunk-7CWEZQ6T.js → chunk-STUJ7IMZ.js} +0 -77
  160. package/chunks/{chunk-4K7NQDCG.js → chunk-T4EFG2P5.js} +18 -9
  161. package/chunks/{chunk-TWSKM647.js → chunk-T7KMERIX.js} +1 -1
  162. package/chunks/{chunk-HPECDZ6X.js → chunk-TGJ2PKCW.js} +4341 -1408
  163. package/chunks/{chunk-EC5BONC3.js → chunk-TPI7O7HR.js} +1 -1
  164. package/chunks/{chunk-T2CRBIDJ.js → chunk-TTX2JUE6.js} +1 -1
  165. package/chunks/{chunk-AP7WZONS.js → chunk-TU6WVK67.js} +19 -9
  166. package/chunks/chunk-U54AYGEC.js +337 -0
  167. package/chunks/{chunk-3WBMPR3S.js → chunk-UAOTD2BN.js} +1 -1
  168. package/chunks/{chunk-2NNTE2ED.js → chunk-UHQFIS7N.js} +15 -0
  169. package/chunks/{chunk-SUE2ZMUH.js → chunk-UI4DXRZW.js} +49 -31
  170. package/chunks/{chunk-76WGY6LW.js → chunk-URE3QBBB.js} +3 -3
  171. package/chunks/{chunk-KOJ6MHD5.js → chunk-UTLCH2FK.js} +1 -1
  172. package/chunks/chunk-UVY67MSH.js +205 -0
  173. package/chunks/{chunk-FJWICLG7.js → chunk-V4264FEG.js} +9 -9
  174. package/chunks/{chunk-XR7OIAQF.js → chunk-V5J4J5TP.js} +2 -2
  175. package/chunks/{chunk-Z6L3C4VF.js → chunk-VBCPNIQD.js} +39 -39
  176. package/chunks/{chunk-HABT2Z7R.js → chunk-VKCJPNGU.js} +4 -4
  177. package/chunks/{chunk-UCQOSV6A.js → chunk-VKIGT4OG.js} +3 -3
  178. package/chunks/{chunk-JSY43GMI.js → chunk-VNMZLAVG.js} +185 -174
  179. package/chunks/{chunk-X2UOOG5V.js → chunk-VQUGEVGR.js} +1 -1
  180. package/chunks/{chunk-XJS54K4A.js → chunk-VTHREBQM.js} +2 -2
  181. package/chunks/{chunk-PTQF7WRA.js → chunk-W3CY4QIO.js} +6 -6
  182. package/chunks/{chunk-LWLEPXKK.js → chunk-W4XG7IZ4.js} +19 -2
  183. package/chunks/{chunk-IOGKXPL3.js → chunk-W7HH77GN.js} +6 -6
  184. package/chunks/{chunk-FPH6TXD3.js → chunk-WAOIHTJS.js} +1 -1
  185. package/chunks/{chunk-3D6PDLNJ.js → chunk-WD3WSEW3.js} +49 -32
  186. package/chunks/chunk-WLEYH7CD.js +332 -0
  187. package/chunks/{chunk-JLGFGPZJ.js → chunk-WNPDGUJO.js} +22 -3
  188. package/chunks/{chunk-O3BUXIPM.js → chunk-WXEA74YB.js} +3 -3
  189. package/chunks/{chunk-YRLW2MSX.js → chunk-XBVNNDPK.js} +11 -4
  190. package/chunks/{chunk-VL4YX3FH.js → chunk-XF63PKEN.js} +1 -1
  191. package/chunks/{chunk-3FSBMAYD.js → chunk-XQFT3QUF.js} +1 -1
  192. package/chunks/{chunk-5JCZ3UKB.js → chunk-Y5S7LBOZ.js} +44 -7
  193. package/chunks/{chunk-WZ3QKPMQ.js → chunk-YN44TEOZ.js} +19 -31
  194. package/chunks/{chunk-2SERYG4T.js → chunk-YTDVNSUQ.js} +1 -1
  195. package/chunks/{chunk-UWICO5KN.js → chunk-Z44FUM77.js} +3 -3
  196. package/chunks/{chunk-OT4YKUUV.js → chunk-ZU4UDIWX.js} +2 -2
  197. package/chunks/{chunk-L436XFLJ.js → chunk-ZZUKP7HV.js} +1 -1
  198. package/chunks/config-utils-NOCNFTQP.js +114 -0
  199. package/chunks/contextCommand-DH2NOQBI.js +107 -0
  200. package/chunks/{core-runtime-CEJRHCRF.js → core-runtime-OLW4OXMV.js} +61 -62
  201. package/chunks/{create-sub-session-RVHSWVAP.js → create-sub-session-23ITIELI.js} +3 -3
  202. package/chunks/{create-sub-session-DFZVIG56.js → create-sub-session-ZCGPQTIE.js} +166 -86
  203. package/chunks/{cron-create-IJGVR5R2.js → cron-create-KJ4IY6PP.js} +57 -10
  204. package/chunks/{cron-delete-4N5BI6GL.js → cron-delete-MBLQCAYY.js} +4 -4
  205. package/chunks/{cron-list-2CATIPUX.js → cron-list-DWH2PQ47.js} +4 -4
  206. package/chunks/{daemon-NAYK4XXU.js → daemon-3GNHB3M2.js} +523 -8
  207. package/chunks/{daemon-git-worktree-guard-L6ZUFKF7.js → daemon-git-worktree-guard-SHIU7MPJ.js} +58 -59
  208. package/chunks/daemon-status-provider-WECDBDF7.js +118 -0
  209. package/chunks/daemon-trust-policy-MX4OYXF3.js +113 -0
  210. package/chunks/{daemon-trust-policy-monitor-2G3EKQEU.js → daemon-trust-policy-monitor-73WXIKNL.js} +66 -67
  211. package/chunks/deferred-core-runtime-BKS7O3D6.js +115 -0
  212. package/chunks/{display-image-6KHQNEAE.js → display-image-BE7I6ZB6.js} +5 -5
  213. package/chunks/{dist-DJBNNPLN.js → dist-4WXLCBDR.js} +1 -1
  214. package/chunks/{dist-TJUDJTCB.js → dist-5VXFRTWU.js} +280 -48
  215. package/chunks/{dist-6H6RZ5H6.js → dist-6BPYWHVD.js} +89 -65
  216. package/chunks/{dist-ZBVOXSKF.js → dist-GFN5DCBX.js} +74 -65
  217. package/chunks/{dist-SATKXKUR.js → dist-HZNT6GQS.js} +1 -1
  218. package/chunks/{dist-FVJZSIO4.js → dist-LVZCXVPF.js} +72 -20
  219. package/chunks/{dist-7CKN54NL.js → dist-N6W6E753.js} +71 -64
  220. package/chunks/{dist-4Q7NTUNB.js → dist-NSV4NBPK.js} +31 -14
  221. package/chunks/{dist-UQUFZDIY.js → dist-SWQMYP2Q.js} +18 -16
  222. package/chunks/earlyInputCapture-5NNZSVL7.js +108 -0
  223. package/chunks/{edit-ZERGX3RV.js → edit-IGHPT4I2.js} +47 -48
  224. package/chunks/{en-6MDBWMTG.js → en-YLXBXM4Z.js} +2 -1
  225. package/chunks/{enter-worktree-UOZ6ZTP7.js → enter-worktree-35QCAAFP.js} +7 -7
  226. package/chunks/{enterPlanMode-W2RP3P5B.js → enterPlanMode-LVTPJSAA.js} +51 -52
  227. package/chunks/environment-HC2PPYDO.js +130 -0
  228. package/chunks/errors-VCWSG25A.js +114 -0
  229. package/chunks/{exit-worktree-G2QATUCV.js → exit-worktree-XQD6D543.js} +7 -7
  230. package/chunks/exitPlanMode-RHI2K2O7.js +84 -0
  231. package/chunks/{fast-path-4MWBCEUF.js → fast-path-IQNCJOPE.js} +7 -7
  232. package/chunks/{fast-path-settings-XMFBYFUH.js → fast-path-settings-XH426LUU.js} +3 -3
  233. package/chunks/{glob-DKTNG32L.js → glob-EANAXPNR.js} +46 -47
  234. package/chunks/{goal-tools-CNVXMSZD.js → goal-tools-PTD3MBA7.js} +10 -8
  235. package/chunks/{grep-3NLSS32D.js → grep-3REG7TO6.js} +9 -7
  236. package/chunks/handleAutoUpdate-PVVFLDQ4.js +110 -0
  237. package/chunks/i18n-VOKX5QIF.js +125 -0
  238. package/chunks/{image-gen-63NN2H5N.js → image-gen-J6FDGUZP.js} +8 -10
  239. package/chunks/initializer-SZVVTGZL.js +114 -0
  240. package/chunks/installationInfo-R22453J5.js +108 -0
  241. package/chunks/{keychain-token-storage-3MGFRYGM.js → keychain-token-storage-37XPR34V.js} +2 -2
  242. package/chunks/list-LK5M5W2N.js +117 -0
  243. package/chunks/{list-agents-EXRSHIDJ.js → list-agents-DI3YFTDT.js} +2 -2
  244. package/chunks/{gemini-X5GQHQYF.js → llm-6RQJUVIS.js} +120 -115
  245. package/chunks/{geminiContentGenerator-UDSWXZXL.js → llm-content-generator-Q7JJDSJR.js} +29 -29
  246. package/chunks/loadedSettingsAdapter-KF2ZPSPG.js +111 -0
  247. package/chunks/{loggingContentGenerator-73C7TKDK.js → loggingContentGenerator-SBCIJG2J.js} +330 -37
  248. package/chunks/{loop-wakeup-XBPB2BRO.js → loop-wakeup-XJFONSQ7.js} +5 -5
  249. package/chunks/{ls-WFONAND2.js → ls-3VAT2J7A.js} +4 -4
  250. package/chunks/{lsp-DUKPDUXN.js → lsp-5W7IRUBH.js} +2 -2
  251. package/chunks/{managed-npm-update-H2KOLQZU.js → managed-npm-update-UG324XFY.js} +59 -60
  252. package/chunks/mcp-PUSCFGS5.js +111 -0
  253. package/chunks/{monitor-TGCMNJJH.js → monitor-RJW5AP64.js} +46 -47
  254. package/chunks/nonInteractiveCli-OIXN4WSR.js +187 -0
  255. package/chunks/{notebook-edit-YEUNZYDX.js → notebook-edit-5MWEIMS2.js} +47 -48
  256. package/chunks/{open-with-auth-4UI3KHUR.js → open-with-auth-YN3QZHVM.js} +1 -1
  257. package/chunks/{openaiContentGenerator-J7LD4VSL.js → openaiContentGenerator-AGTNYSCJ.js} +26 -28
  258. package/chunks/pidfile-LTA6NT3P.js +112 -0
  259. package/chunks/process-registry-OAEG6WGC.js +662 -0
  260. package/chunks/{processUtils-ZHFC7CSL.js → processUtils-GY3Q66CJ.js} +2 -2
  261. package/chunks/prompt-terminal-ledger-3QS6TCMF.js +106 -0
  262. package/chunks/{qwenContentGenerator-YEWWK3JQ.js → qwenContentGenerator-NU6PCDA7.js} +51 -52
  263. package/chunks/{qwenOAuth2-JIYAWXTW.js → qwenOAuth2-OF5WRBQT.js} +7 -9
  264. package/chunks/{read-file-ZQI3WPVK.js → read-file-DTQL5V62.js} +13 -13
  265. package/chunks/{read-mcp-resource-7A7NFSFL.js → read-mcp-resource-XD257PGJ.js} +2 -2
  266. package/chunks/{record-artifact-CPJ4IJSD.js → record-artifact-VW23GS4F.js} +4 -4
  267. package/chunks/{report-findings-VFM5DENC.js → report-findings-AO5VYFLR.js} +9 -5
  268. package/chunks/{request-shutdown-6IW46GD7.js → request-shutdown-BCLA3JV2.js} +7 -7
  269. package/chunks/resumeHistoryUtils-PZ4BER55.js +119 -0
  270. package/chunks/ripGrep-A2FGBZGY.js +39 -0
  271. package/chunks/{run-qwen-serve-WHWU7NZ6.js → run-qwen-serve-AESOSKFC.js} +371 -357
  272. package/chunks/{runtime-E7BSPWQP.js → runtime-YQHSEKG4.js} +71 -72
  273. package/chunks/scheduled-tasks-XG6KK6NY.js +128 -0
  274. package/chunks/{scheduler-TJPATFOM.js → scheduler-I4WKXWRZ.js} +60 -61
  275. package/chunks/{sdk-exporters-http-XXSKBD2C.js → sdk-exporters-http-TTU2CHBU.js} +2 -2
  276. package/chunks/{sdk-impl-VPNBLV7I.js → sdk-impl-UUMVYMAL.js} +11 -5
  277. package/chunks/{send-message-OXZK6USO.js → send-message-AJ4OCUBV.js} +25 -9
  278. package/chunks/serve-MQDTVC7X.js +119 -0
  279. package/chunks/{server-AXCN7QBJ.js → server-L5ETIKEW.js} +6083 -4965
  280. package/chunks/{session-HO4US3AG.js → session-LKKXRUJM.js} +116 -114
  281. package/chunks/session-pr-refresh-5OWA6MC2.js +365 -0
  282. package/chunks/{settings-B2PFJJN4.js → settings-S6KG7JST.js} +65 -66
  283. package/chunks/shell-JEQE5AHC.js +94 -0
  284. package/chunks/{skill-NL3VH562.js → skill-QEGMZXKI.js} +68 -24
  285. package/chunks/skill-settings-EVY7QF4H.js +119 -0
  286. package/chunks/spawnChannel-AQP72WPN.js +113 -0
  287. package/chunks/standalone-update-JUJA4BKV.js +119 -0
  288. package/chunks/{startInteractiveUI-G2XKSCQ7.js → startInteractiveUI-5ZMSJZ3J.js} +3081 -2477
  289. package/chunks/{stdioHelpers-7A2EE64Z.js → stdioHelpers-AY6XCDY2.js} +3 -1
  290. package/chunks/{syntheticOutput-5AJ444QT.js → syntheticOutput-ML43GEFN.js} +3 -3
  291. package/chunks/{task-create-TY7P6UHG.js → task-create-QN4LYRSE.js} +11 -11
  292. package/chunks/{task-list-BELMPA75.js → task-list-JPLGK45U.js} +5 -5
  293. package/chunks/{task-stop-U3S3KZG2.js → task-stop-CXEH5L2D.js} +2 -2
  294. package/chunks/{task-update-O4IGDPCK.js → task-update-IWEOJFV2.js} +11 -11
  295. package/chunks/{team-create-IYBUOORE.js → team-create-ZEGP7KVD.js} +46 -47
  296. package/chunks/{team-delete-YWFXX77L.js → team-delete-RZVVSGCY.js} +5 -5
  297. package/chunks/{team-plan-approval-YKU57LBM.js → team-plan-approval-SXWT2WZN.js} +46 -47
  298. package/chunks/terminal-image-renderer-42B6N55E.js +115 -0
  299. package/chunks/theme-manager-DDYUBC25.js +103 -0
  300. package/chunks/{todoWrite-435EO2CS.js → todoWrite-WDJNQEMW.js} +43 -25
  301. package/chunks/{tool-search-4Q3KASIQ.js → tool-search-GDDBA4X4.js} +22 -22
  302. package/chunks/total-session-admission-6MYP4GBA.js +115 -0
  303. package/chunks/trustedFolders-LPEIY3GE.js +123 -0
  304. package/chunks/{types-WYCFCEHR.js → types-HKLPXZB3.js} +1 -3
  305. package/chunks/{update-relaunch-4DC2KKFS.js → update-relaunch-BOIIZNT3.js} +6 -6
  306. package/chunks/updateCheck-KSVHYJYE.js +119 -0
  307. package/chunks/useAutoAcceptIndicator-43D2A4ZN.js +121 -0
  308. package/chunks/{validateNonInterActiveAuth-YAE4YPO3.js → validateNonInterActiveAuth-WSD4SOIM.js} +108 -106
  309. package/chunks/{version-QFP7OGWX.js → version-B4CM7RNG.js} +1 -1
  310. package/chunks/{web-fetch-6T23IK6Q.js → web-fetch-MOHILUZL.js} +16 -18
  311. package/chunks/{web-search-WBWTCZK2.js → web-search-G4HIMY2V.js} +9 -11
  312. package/chunks/{web-shell-static-A6QMUNNV.js → web-shell-static-HNB4FDOE.js} +2 -2
  313. package/chunks/{workflow-FMAA3D4R.js → workflow-H3PCYU5F.js} +130 -95
  314. package/chunks/workspace-providers-status-AAX7VWMT.js +115 -0
  315. package/chunks/{workspace-registration-store-CMMX7EPX.js → workspace-registration-store-YTHZ6SL4.js} +1 -1
  316. package/chunks/workspace-registry-URHGBL4U.js +124 -0
  317. package/chunks/workspace-service-XJMSLRCU.js +127 -0
  318. package/chunks/workspace-skills-status-JGEDANNT.js +114 -0
  319. package/chunks/{workspace-trust-reconciler-PJDQUTJL.js → workspace-trust-reconciler-ZHI5TDYB.js} +74 -73
  320. package/chunks/write-file-5O4S63L6.js +89 -0
  321. package/chunks/{zh-TW-MV4FWFB6.js → zh-TW-RPTMRTHG.js} +2 -1
  322. package/chunks/{zh-X3WGU6SI.js → zh-UNY63FR3.js} +2 -1
  323. package/chunks/{zoom-image-WVYVFRXF.js → zoom-image-N2IBUVXE.js} +13 -13
  324. package/cli.js +130 -93
  325. package/locales/en.js +2 -0
  326. package/locales/zh-TW.js +2 -0
  327. package/locales/zh.js +2 -0
  328. package/package.json +3 -3
  329. package/web-shell/assets/{abnfDiagram-VCTEODGH-d-8xa8uz.js → abnfDiagram-VCTEODGH-OJQpqC9m.js} +1 -1
  330. package/web-shell/assets/{arc-BhB7CrGK.js → arc-BxH0YR17.js} +1 -1
  331. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BDCd_IcJ.js → architectureDiagram-5GKGNRK7-CxyWiGfF.js} +1 -1
  332. package/web-shell/assets/{blockDiagram-NRAW4CY4-C-AHu6mi.js → blockDiagram-NRAW4CY4-DukXbJQ7.js} +1 -1
  333. package/web-shell/assets/{c4Diagram-UCG6FXSJ-CFjQt0vl.js → c4Diagram-UCG6FXSJ-DvS1T6pK.js} +1 -1
  334. package/web-shell/assets/channel-Dbbg7P-u.js +1 -0
  335. package/web-shell/assets/{chunk-2Q5K7J3B-DRjwqaDq.js → chunk-2Q5K7J3B-qvqfJ7VZ.js} +1 -1
  336. package/web-shell/assets/{chunk-5VM5RSS4-eHM9noJE.js → chunk-5VM5RSS4-BJ3kJYte.js} +1 -1
  337. package/web-shell/assets/{chunk-F27PBJKO-CcSWUYn1.js → chunk-F27PBJKO-BYPVESil.js} +1 -1
  338. package/web-shell/assets/{chunk-G27WJ6UU-DNr-RF5S.js → chunk-G27WJ6UU-B4UYFElk.js} +1 -1
  339. package/web-shell/assets/{chunk-JWPE2WC7-rVJHoNF8.js → chunk-JWPE2WC7-8zGKVNUU.js} +1 -1
  340. package/web-shell/assets/{chunk-LCL6LL3I-B2aX0Gzy.js → chunk-LCL6LL3I-CbaHONpI.js} +1 -1
  341. package/web-shell/assets/{chunk-POPQ4Y6H-DVp07n32.js → chunk-POPQ4Y6H-f8kAjzlF.js} +1 -1
  342. package/web-shell/assets/{chunk-SVP7TREG-C6QB_KUr.js → chunk-SVP7TREG-Dm8ahq7K.js} +1 -1
  343. package/web-shell/assets/{chunk-XXDRQBXY-CLVxDNCy.js → chunk-XXDRQBXY-yrcLzv8z.js} +1 -1
  344. package/web-shell/assets/classDiagram-DTDB5LWJ-cDYs8iT0.js +1 -0
  345. package/web-shell/assets/classDiagram-v2-JRS7N3AN-cDYs8iT0.js +1 -0
  346. package/web-shell/assets/{cose-bilkent-JH36ORCC-B_aKX3A3.js → cose-bilkent-JH36ORCC-DN1C22IH.js} +1 -1
  347. package/web-shell/assets/{cynefin-OW5HDTMX-BBw2pPUa.js → cynefin-OW5HDTMX-B2oF7XD_.js} +1 -1
  348. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-WWPiBTwk.js → cynefinDiagram-5FMLGOSQ-DGgIKpiM.js} +1 -1
  349. package/web-shell/assets/{dagre-3AP2YEHR-CPtIdka-.js → dagre-3AP2YEHR-BHKawzoP.js} +1 -1
  350. package/web-shell/assets/{diagram-S7CK7UJ4-Dj5og1Xi.js → diagram-S7CK7UJ4-6UgKqreR.js} +1 -1
  351. package/web-shell/assets/{diagram-UQ7AKVKN-CC_x70YC.js → diagram-UQ7AKVKN-BXJbPJ6F.js} +1 -1
  352. package/web-shell/assets/{diagram-VSXAHHWV-rXMfsO4n.js → diagram-VSXAHHWV-DVnYFPkS.js} +1 -1
  353. package/web-shell/assets/{diagram-VX7I27RA-DEmLYQbh.js → diagram-VX7I27RA-CjBoC0Rq.js} +1 -1
  354. package/web-shell/assets/{diagram-Z3DM3KII-B0ys6Vxx.js → diagram-Z3DM3KII-KZdUceQT.js} +1 -1
  355. package/web-shell/assets/{ebnfDiagram-PWID7BFC-Bq6y6lKH.js → ebnfDiagram-PWID7BFC-5UekGScM.js} +1 -1
  356. package/web-shell/assets/{erDiagram-SSCWMZ5O-l69JeBZ4.js → erDiagram-SSCWMZ5O-TRWexoj1.js} +1 -1
  357. package/web-shell/assets/{flowDiagram-A5DVABFB-Cm-EzGY4.js → flowDiagram-A5DVABFB-Di5bhBVo.js} +1 -1
  358. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BRS9ZOp7.js → ganttDiagram-EL5Y4UJY-DpJUJ8Dp.js} +1 -1
  359. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DAMRKgLk.js → gitGraphDiagram-WWUBYQGX-b08xIx2C.js} +1 -1
  360. package/web-shell/assets/index-BvDpDHTN.css +36 -0
  361. package/web-shell/assets/index-Cg60lhnI.js +1913 -0
  362. package/web-shell/assets/{index-Bncx8E8M.js → index-n6dFH09O.js} +1 -1
  363. package/web-shell/assets/{infoDiagram-RXCK75RN-DasffaZp.js → infoDiagram-RXCK75RN-Cz14FAt7.js} +1 -1
  364. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-CmRUt3C-.js → ishikawaDiagram-5VMMS53U-7nxp2bIU.js} +1 -1
  365. package/web-shell/assets/{journeyDiagram-EYS64GPL-DzhE_c1Z.js → journeyDiagram-EYS64GPL-CjL47fk0.js} +1 -1
  366. package/web-shell/assets/{kanban-definition-3QL26DDD-BH5b6nn3.js → kanban-definition-3QL26DDD-CWFl-mHs.js} +1 -1
  367. package/web-shell/assets/{layout-BxoLK-LY.js → layout-BUP1BcwB.js} +1 -1
  368. package/web-shell/assets/{linear-CqDPvVI7.js → linear-CqbwqSbW.js} +1 -1
  369. package/web-shell/assets/{mermaid.core-DBoN4plo.js → mermaid.core-C_50HLol.js} +6 -6
  370. package/web-shell/assets/{mindmap-definition-FBJOCRG2-DJJtXPEM.js → mindmap-definition-FBJOCRG2-DbyD_AoU.js} +1 -1
  371. package/web-shell/assets/{pegDiagram-XKGWAZYB-DmgPXP5l.js → pegDiagram-XKGWAZYB-VozWyqyY.js} +1 -1
  372. package/web-shell/assets/{pieDiagram-E7YTZNPT-1ezjzcI5.js → pieDiagram-E7YTZNPT-O7EKamBL.js} +1 -1
  373. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-ChKARz3k.js → quadrantDiagram-AXDQQJYC-DOmPZxHg.js} +1 -1
  374. package/web-shell/assets/{railroadDiagram-O6MQD6OU-k7mNB_QT.js → railroadDiagram-O6MQD6OU-ElyfC2zE.js} +1 -1
  375. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-B0XFsii0.js → requirementDiagram-EFPCY7ZU-DbnqPbzR.js} +1 -1
  376. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-repJ2Ukk.js → sankeyDiagram-P5KCCOFB-yPWliSHr.js} +1 -1
  377. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-D0gUSKGu.js → sequenceDiagram-WJ2MYXX4-BImQFomC.js} +1 -1
  378. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CE463F74.js → sizeCapture-X5ZJPWSS-DEvqeEHo.js} +1 -1
  379. package/web-shell/assets/{stateDiagram-HBIQ2CUA-003zYtJa.js → stateDiagram-HBIQ2CUA-BbLtiF9u.js} +1 -1
  380. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DGtlzdpx.js +1 -0
  381. package/web-shell/assets/{swimlanes-XN3QIQJK-DBj8MFpu.js → swimlanes-XN3QIQJK-RFewDF6v.js} +1 -1
  382. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-CITCVFdx.js +8 -0
  383. package/web-shell/assets/{timeline-definition-24CTP7MA-D2aCh4a9.js → timeline-definition-24CTP7MA-DF4L3-UR.js} +1 -1
  384. package/web-shell/assets/{vennDiagram-4TSXK5OY-BHMfWBpl.js → vennDiagram-4TSXK5OY-BtlSJXaA.js} +1 -1
  385. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-RdHAj66j.js → wardleyDiagram-VM6X3IG4-C8ogG8Fh.js} +1 -1
  386. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-BgJWOvq0.js → xychartDiagram-S5SC5T6Z-C5QVfsGQ.js} +1 -1
  387. package/web-shell/index.html +3 -3
  388. package/chunks/MaxSizedBox-BFVLZP2E.js +0 -112
  389. package/chunks/agent-headless-UCBCS4V4.js +0 -87
  390. package/chunks/bridge-FRNYLYY7.js +0 -119
  391. package/chunks/channel-settings-store-IV4KDL7N.js +0 -117
  392. package/chunks/chunk-I6VVOZDK.js +0 -202
  393. package/chunks/chunk-JS73NNWF.js +0 -30
  394. package/chunks/chunk-K2OJUPOE.js +0 -78
  395. package/chunks/chunk-P3QQPMQA.js +0 -19
  396. package/chunks/chunk-SDVF6A42.js +0 -945
  397. package/chunks/chunk-T26EAKDL.js +0 -13
  398. package/chunks/chunk-VGHZT6JR.js +0 -51
  399. package/chunks/config-utils-PMX4QZ5Y.js +0 -113
  400. package/chunks/contextCommand-NZRLVAFC.js +0 -108
  401. package/chunks/daemon-status-provider-FTTYZEKN.js +0 -118
  402. package/chunks/daemon-trust-policy-WMGFPA3Z.js +0 -114
  403. package/chunks/deferred-core-runtime-BUFEFYNA.js +0 -116
  404. package/chunks/earlyInputCapture-ROPLMXA7.js +0 -109
  405. package/chunks/environment-ZBJ23YVR.js +0 -131
  406. package/chunks/errors-U5KNAADB.js +0 -115
  407. package/chunks/exitPlanMode-VFJ5R5DD.js +0 -85
  408. package/chunks/handleAutoUpdate-W4BUYFT7.js +0 -111
  409. package/chunks/i18n-KX7FEKJJ.js +0 -126
  410. package/chunks/initializer-SNVVLS7Y.js +0 -115
  411. package/chunks/installationInfo-D4XGQNHJ.js +0 -109
  412. package/chunks/list-WYECMLXZ.js +0 -118
  413. package/chunks/loadedSettingsAdapter-5WZBXBCR.js +0 -112
  414. package/chunks/mcp-CBWAROY3.js +0 -112
  415. package/chunks/nonInteractiveCli-O232UUV7.js +0 -185
  416. package/chunks/pidfile-MSPQ255Y.js +0 -113
  417. package/chunks/process-registry-PMJOA5CO.js +0 -172
  418. package/chunks/prompt-terminal-ledger-YPGMNDXT.js +0 -107
  419. package/chunks/resumeHistoryUtils-35D4KAVT.js +0 -120
  420. package/chunks/ripGrep-46N4FLOS.js +0 -39
  421. package/chunks/serve-WQ54UIYG.js +0 -120
  422. package/chunks/shell-7XMSANI3.js +0 -95
  423. package/chunks/skill-settings-SKMN5YXC.js +0 -120
  424. package/chunks/spawnChannel-NE43EEO3.js +0 -113
  425. package/chunks/standalone-update-XOCWGXAH.js +0 -120
  426. package/chunks/terminal-image-renderer-NREKYTAD.js +0 -116
  427. package/chunks/theme-manager-IJS6OICX.js +0 -104
  428. package/chunks/total-session-admission-L5RPEFZ2.js +0 -114
  429. package/chunks/trustedFolders-OILZCHRD.js +0 -124
  430. package/chunks/updateCheck-AK4COHNK.js +0 -120
  431. package/chunks/useAutoAcceptIndicator-O2N2Q6KG.js +0 -122
  432. package/chunks/workspace-providers-status-OCFEWIPQ.js +0 -116
  433. package/chunks/workspace-registry-WJLZPRTG.js +0 -123
  434. package/chunks/workspace-service-5ZOBMMIB.js +0 -131
  435. package/chunks/workspace-skills-status-B6NJZD4B.js +0 -115
  436. package/chunks/write-file-B2RNX6SU.js +0 -90
  437. package/web-shell/assets/channel-CU-Zyv0r.js +0 -1
  438. package/web-shell/assets/classDiagram-DTDB5LWJ-C0J2_LKs.js +0 -1
  439. package/web-shell/assets/classDiagram-v2-JRS7N3AN-C0J2_LKs.js +0 -1
  440. package/web-shell/assets/index-C-XlQn24.css +0 -5
  441. package/web-shell/assets/index-gdvMN4J1.js +0 -1860
  442. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-2uACDdJN.js +0 -1
  443. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-C4JJkavU.js +0 -8
@@ -7,10 +7,10 @@ import {
7
7
  OpenAIContentConverter,
8
8
  TaggedThinkingParser,
9
9
  openaiRequestCaptureContext
10
- } from "./chunk-BQBUZDDH.js";
10
+ } from "./chunk-DJECZIJX.js";
11
11
  import {
12
12
  safeJsonParse
13
- } from "./chunk-E4I5MVBR.js";
13
+ } from "./chunk-ABS25QER.js";
14
14
  import {
15
15
  runtimeDiagnostics
16
16
  } from "./chunk-VNOVK4I7.js";
@@ -18,18 +18,22 @@ import {
18
18
  reportOpenAiChunk,
19
19
  reportOpenAiRequest,
20
20
  reportOpenAiResponse
21
- } from "./chunk-5T4LWWNX.js";
21
+ } from "./chunk-KYWTPLBJ.js";
22
22
  import {
23
23
  applyOfficialOpenAIPromptCaching,
24
24
  isOfficialOpenAIEndpoint
25
- } from "./chunk-SAH4BD2J.js";
25
+ } from "./chunk-PQEISIKS.js";
26
26
  import {
27
27
  DashScopeOpenAICompatibleProvider,
28
28
  DefaultOpenAICompatibleProvider
29
- } from "./chunk-ZKAZP2ZG.js";
29
+ } from "./chunk-EB6QRGHM.js";
30
30
  import {
31
31
  getCurrentAgentId
32
- } from "./chunk-U45D46O5.js";
32
+ } from "./chunk-CMHFCLBU.js";
33
+ import {
34
+ InvalidStreamError,
35
+ getToolCallPreparations
36
+ } from "./chunk-CFKIH3D3.js";
33
37
  import {
34
38
  DEFAULT_STREAM_IDLE_TIMEOUT_MS,
35
39
  DEFAULT_STREAM_MAX_LIFETIME_MS,
@@ -42,39 +46,33 @@ import {
42
46
  createChildAbortController
43
47
  } from "./chunk-DJ2GSRLV.js";
44
48
  import {
49
+ getRateLimitErrorDetails,
45
50
  getTransportCode
46
- } from "./chunk-I6VVOZDK.js";
47
- import {
48
- InvalidStreamError,
49
- getToolCallPreparations
50
- } from "./chunk-CFKIH3D3.js";
51
- import {
52
- getRateLimitErrorDetails
53
- } from "./chunk-EB4VDXNI.js";
51
+ } from "./chunk-DYXFD5RO.js";
54
52
  import {
55
53
  ProtocolTagSanitizedEvent,
56
54
  logProtocolTagSanitized
57
- } from "./chunk-OF2DPXUS.js";
55
+ } from "./chunk-QYMAKPY5.js";
58
56
  import {
59
57
  isQwenFamilyWireModel,
60
58
  isTieredEffortWireModel
61
- } from "./chunk-YRLW2MSX.js";
59
+ } from "./chunk-XBVNNDPK.js";
62
60
  import {
63
61
  reconcileMaxTokens
64
62
  } from "./chunk-FPGTNKCP.js";
65
63
  import {
66
64
  redactProxyError
67
- } from "./chunk-GTUKW3I6.js";
65
+ } from "./chunk-PPKZ7JOE.js";
68
66
  import {
69
67
  isInForkExecution
70
- } from "./chunk-7OBH4AM2.js";
68
+ } from "./chunk-CAJTKR6W.js";
71
69
  import {
72
70
  createDebugLogger,
73
71
  getErrorMessage,
74
72
  getErrorStatus,
75
73
  getErrorType,
76
74
  isAbortError
77
- } from "./chunk-2NNTE2ED.js";
75
+ } from "./chunk-UHQFIS7N.js";
78
76
  import {
79
77
  GenerateContentResponse
80
78
  } from "./chunk-64REQJJ2.js";
@@ -190,16 +188,17 @@ var DeepSeekOpenAICompatibleProvider = class extends DefaultOpenAICompatibleProv
190
188
  return isDeepSeekHostname(this.contentGeneratorConfig) ? REASONING_EFFORT_TIERS : super.supportedReasoningEffortsFor(model);
191
189
  }
192
190
  /**
193
- * DeepSeek's API requires message content to be a plain string, not an
194
- * array of content parts. Flatten any text-part arrays into joined
195
- * strings; non-text parts (image_url, audio, …) are replaced with a
196
- * `[Unsupported content type: <type>]` placeholder so the request still
197
- * goes through with a textual breadcrumb rather than silently dropping
198
- * the part or raising mid-conversation. Also translate the standard
199
- * `reasoning.effort` config into DeepSeek's flat `reasoning_effort`
200
- * body parameter — but only on actual DeepSeek hostnames, since the
201
- * model-name fallback above can match self-hosted/strict OpenAI-compat
202
- * backends that don't accept the DeepSeek extension.
191
+ * Text-only DeepSeek APIs require message content to be a plain string, not
192
+ * an array of content parts. Flatten text-only request arrays into joined
193
+ * strings; non-text parts (image_url, audio, …) are replaced with an
194
+ * `[Unsupported content type: <type>]` placeholder so the request still goes
195
+ * through with a textual breadcrumb rather than silently dropping the part
196
+ * or raising mid-conversation. Models that explicitly declare image input
197
+ * retain multipart content for compatible gateways. Also translate the
198
+ * standard `reasoning.effort` config into DeepSeek's flat `reasoning_effort`
199
+ * body parameter — but only on actual DeepSeek hostnames, since the model-name
200
+ * fallback above can match self-hosted/strict OpenAI-compat backends that
201
+ * don't accept the DeepSeek extension.
203
202
  */
204
203
  buildRequest(request, userPromptId) {
205
204
  const baseRequest = super.buildRequest(request, userPromptId);
@@ -207,10 +206,11 @@ var DeepSeekOpenAICompatibleProvider = class extends DefaultOpenAICompatibleProv
207
206
  if (!reshaped.messages?.length) {
208
207
  return reshaped;
209
208
  }
210
- const messages = reshaped.messages.map((message) => {
211
- const flattened = flattenContentParts(message);
212
- return ensureReasoningContentOnAssistantMessage(flattened);
213
- });
209
+ const messages = reshaped.messages.map(
210
+ (message) => ensureReasoningContentOnAssistantMessage(
211
+ this.contentGeneratorConfig.modalities?.image ? message : flattenContentParts(message)
212
+ )
213
+ );
214
214
  return {
215
215
  ...reshaped,
216
216
  messages
@@ -1061,7 +1061,7 @@ var StreamContentError = class extends Error {
1061
1061
  var StreamInactivityTimeoutError = class extends Error {
1062
1062
  constructor(idleMs, chunksReceived, streamLifetimeMs) {
1063
1063
  super(
1064
- `No stream activity for ${idleMs}ms after ${chunksReceived} chunks (stream lifetime: ${streamLifetimeMs}ms). Set ${QWEN_STREAM_IDLE_TIMEOUT_MS_ENV} to increase this window (or 0 to disable it).`
1064
+ `No stream activity for ${idleMs}ms after ${chunksReceived} chunks (stream lifetime: ${streamLifetimeMs}ms). For provider-backed models, increase modelProviders[providerId][].generationConfig.streamIdleTimeoutMs; provider configuration takes precedence, so model.generationConfig is ignored for those models. For runtime models, increase model.generationConfig.streamIdleTimeoutMs. Built-in Qwen OAuth models cannot be overridden via settings. Use ${QWEN_STREAM_IDLE_TIMEOUT_MS_ENV} for them or whenever no explicit value is active. Set the active value to 0 to disable it.`
1065
1065
  );
1066
1066
  this.idleMs = idleMs;
1067
1067
  this.chunksReceived = chunksReceived;
@@ -1299,11 +1299,11 @@ var ContentGenerationPipeline = class {
1299
1299
  }
1300
1300
  );
1301
1301
  reportOpenAiResponse(telemetryAttempt, openaiResponse);
1302
- const geminiResponse = OpenAIContentConverter.convertOpenAIResponseToGemini(
1302
+ const llmResponse = OpenAIContentConverter.convertOpenAIResponseToLlm(
1303
1303
  openaiResponse,
1304
1304
  context
1305
1305
  );
1306
- return geminiResponse;
1306
+ return llmResponse;
1307
1307
  } finally {
1308
1308
  perRequestAc?.abort();
1309
1309
  }
@@ -1424,7 +1424,7 @@ var ContentGenerationPipeline = class {
1424
1424
  const errorContent = chunk.choices?.[0]?.delta?.content?.trim() || "Unknown stream error";
1425
1425
  throw new StreamContentError(errorContent);
1426
1426
  }
1427
- const response = OpenAIContentConverter.convertOpenAIChunkToGemini(
1427
+ const response = OpenAIContentConverter.convertOpenAIChunkToLlm(
1428
1428
  chunk,
1429
1429
  context
1430
1430
  );
@@ -1583,7 +1583,7 @@ var ContentGenerationPipeline = class {
1583
1583
  return true;
1584
1584
  }
1585
1585
  async buildRequest(request, userPromptId, context, isStreaming) {
1586
- const messages = OpenAIContentConverter.convertGeminiRequestToOpenAI(
1586
+ const messages = OpenAIContentConverter.convertLlmRequestToOpenAI(
1587
1587
  request,
1588
1588
  context
1589
1589
  );
@@ -1600,7 +1600,7 @@ var ContentGenerationPipeline = class {
1600
1600
  baseRequest.stream = false;
1601
1601
  }
1602
1602
  if (request.config?.tools && request.config.tools.length > 0) {
1603
- baseRequest.tools = await OpenAIContentConverter.convertGeminiToolsToOpenAI(
1603
+ baseRequest.tools = await OpenAIContentConverter.convertLlmToolsToOpenAI(
1604
1604
  request.config.tools,
1605
1605
  this.contentGeneratorConfig.schemaCompliance ?? "auto"
1606
1606
  );
@@ -3,23 +3,23 @@
3
3
  import {
4
4
  resolveModelConfig,
5
5
  resolveProviderProtocol
6
- } from "./chunk-XIRDDFRS.js";
6
+ } from "./chunk-ECE3UYVO.js";
7
7
  import {
8
8
  external_exports
9
9
  } from "./chunk-CQ35AJ4Z.js";
10
10
  import {
11
11
  stripRuntimeSnapshotPrefix
12
- } from "./chunk-AYVIGUUK.js";
12
+ } from "./chunk-JB4JIVTJ.js";
13
13
  import {
14
14
  REASONING_EFFORT_TIERS,
15
15
  normalizeReasoningEffort
16
16
  } from "./chunk-2LD5U7Q3.js";
17
17
  import {
18
18
  MODEL_GENERATION_CONFIG_FIELDS
19
- } from "./chunk-AA7VBRBG.js";
19
+ } from "./chunk-ARF6IJHM.js";
20
20
  import {
21
21
  AuthType
22
- } from "./chunk-GTUKW3I6.js";
22
+ } from "./chunk-PPKZ7JOE.js";
23
23
  import {
24
24
  init_esbuild_shims
25
25
  } from "./chunk-5O2XNYP6.js";
@@ -2,14 +2,14 @@
2
2
  "use strict";
3
3
  import {
4
4
  STATUS_SCHEMA_VERSION
5
- } from "./chunk-XUX6O2ZT.js";
5
+ } from "./chunk-KID24ZFN.js";
6
6
  import {
7
7
  formatMemoryUsage
8
- } from "./chunk-XIRDDFRS.js";
8
+ } from "./chunk-ECE3UYVO.js";
9
9
  import {
10
10
  detectRuntime,
11
11
  redactProxyCredentials
12
- } from "./chunk-GTUKW3I6.js";
12
+ } from "./chunk-PPKZ7JOE.js";
13
13
  import {
14
14
  init_esbuild_shims
15
15
  } from "./chunk-5O2XNYP6.js";
@@ -2,11 +2,11 @@
2
2
  "use strict";
3
3
  import {
4
4
  isTerminalWorkflowStatus
5
- } from "./chunk-XIRDDFRS.js";
5
+ } from "./chunk-ECE3UYVO.js";
6
6
  import {
7
7
  Storage,
8
8
  createDebugLogger
9
- } from "./chunk-2NNTE2ED.js";
9
+ } from "./chunk-UHQFIS7N.js";
10
10
  import {
11
11
  init_esbuild_shims
12
12
  } from "./chunk-5O2XNYP6.js";
@@ -14,10 +14,177 @@ import {
14
14
  __name
15
15
  } from "./chunk-J2S4EL5Y.js";
16
16
 
17
- // packages/core/src/agents/workflow-snapshot.ts
17
+ // packages/core/src/agents/runtime/workflow-saved.ts
18
18
  init_esbuild_shims();
19
19
  import { promises as fs } from "node:fs";
20
- var debugLogger = createDebugLogger("WORKFLOW_SNAPSHOT");
20
+ import * as path from "node:path";
21
+ var debugLogger = createDebugLogger("WORKFLOW_SAVED");
22
+ var WORKFLOW_NAME_PATTERN = /^[a-z][a-z0-9-]{0,40}$/;
23
+ function validateWorkflowName(name) {
24
+ if (!name) return "Workflow name is required.";
25
+ if (!WORKFLOW_NAME_PATTERN.test(name)) {
26
+ return `Invalid workflow name "${name}". Use lower-case letters, digits, and hyphens only (must start with a letter, max 41 chars).`;
27
+ }
28
+ return null;
29
+ }
30
+ __name(validateWorkflowName, "validateWorkflowName");
31
+ function getSavedWorkflowDirs(config) {
32
+ return [
33
+ { dir: config.storage.getProjectWorkflowsDir(), source: "project" },
34
+ { dir: Storage.getUserWorkflowsDir(), source: "user" }
35
+ ];
36
+ }
37
+ __name(getSavedWorkflowDirs, "getSavedWorkflowDirs");
38
+ function getWorkflowScriptRoots(config) {
39
+ return [
40
+ ...getSavedWorkflowDirs(config).map(({ dir }) => dir),
41
+ config.storage.getGeneratedWorkflowsDir()
42
+ ];
43
+ }
44
+ __name(getWorkflowScriptRoots, "getWorkflowScriptRoots");
45
+ async function isSymlinkedRoot(dir) {
46
+ return fs.lstat(dir).then((st) => st.isSymbolicLink()).catch(() => false);
47
+ }
48
+ __name(isSymlinkedRoot, "isSymlinkedRoot");
49
+ async function listJsFiles(dir) {
50
+ if (await isSymlinkedRoot(dir)) {
51
+ debugLogger.warn(`refusing symlinked saved-workflow dir: ${dir}`);
52
+ return [];
53
+ }
54
+ try {
55
+ const names = await fs.readdir(dir);
56
+ const out = [];
57
+ for (const n of names) {
58
+ if (!n.endsWith(".js")) continue;
59
+ const st = await fs.lstat(path.join(dir, n)).catch(() => null);
60
+ if (!st || st.isSymbolicLink()) continue;
61
+ out.push(n);
62
+ }
63
+ return out;
64
+ } catch (e) {
65
+ const code = e?.code;
66
+ if (code !== "ENOENT") {
67
+ debugLogger.warn(`listJsFiles failed for ${dir}: ${e}`);
68
+ }
69
+ return [];
70
+ }
71
+ }
72
+ __name(listJsFiles, "listJsFiles");
73
+ async function readWorkflowFileSecurely(filePath, config) {
74
+ const real = await fs.realpath(filePath);
75
+ const roots = await Promise.all(
76
+ getWorkflowScriptRoots(config).map(async (dir) => {
77
+ if (await isSymlinkedRoot(dir)) return { dir, real: null };
78
+ try {
79
+ return { dir, real: await fs.realpath(dir) };
80
+ } catch {
81
+ return { dir, real: path.resolve(dir) };
82
+ }
83
+ })
84
+ );
85
+ const dirs = roots.flatMap((r) => r.real === null ? [] : [r.real]);
86
+ const inside = dirs.some((d) => real === d || real.startsWith(d + path.sep));
87
+ if (!inside) {
88
+ const refused = roots.flatMap((r) => r.real === null ? [r.dir] : []);
89
+ const refusedNote = refused.length > 0 ? `; refused symlinked ${refused.length === 1 ? "root" : "roots"}: ${refused.join(", ")}` : "";
90
+ throw new Error(
91
+ `refusing to load a workflow file outside the workflow script roots (checked: ${dirs.join(", ")}${refusedNote}): '${filePath}'.`
92
+ );
93
+ }
94
+ return fs.readFile(real, "utf8");
95
+ }
96
+ __name(readWorkflowFileSecurely, "readWorkflowFileSecurely");
97
+ async function listSavedWorkflows(config) {
98
+ const byName = /* @__PURE__ */ new Map();
99
+ for (const { dir, source } of [...getSavedWorkflowDirs(config)].reverse()) {
100
+ for (const file of await listJsFiles(dir)) {
101
+ const name = file.slice(0, -".js".length);
102
+ if (!WORKFLOW_NAME_PATTERN.test(name)) continue;
103
+ byName.set(name, { name, scriptPath: path.join(dir, file), source });
104
+ }
105
+ }
106
+ return Array.from(byName.values()).sort(
107
+ (a, b) => a.name.localeCompare(b.name)
108
+ );
109
+ }
110
+ __name(listSavedWorkflows, "listSavedWorkflows");
111
+ async function resolveSavedWorkflowScript(nameOrRef, config) {
112
+ if (typeof nameOrRef === "object" && nameOrRef !== null) {
113
+ const scriptPath = nameOrRef.scriptPath;
114
+ if (typeof scriptPath !== "string" || scriptPath.length === 0) {
115
+ throw new Error(
116
+ "workflow() expects a workflow name (string) or {scriptPath: string}."
117
+ );
118
+ }
119
+ let script;
120
+ try {
121
+ script = await readWorkflowFileSecurely(scriptPath, config);
122
+ } catch (e) {
123
+ throw new Error(
124
+ `workflow({scriptPath: '${scriptPath}'}): ${e instanceof Error ? e.message : String(e)}`
125
+ );
126
+ }
127
+ const name2 = path.basename(scriptPath).replace(/\.js$/, "");
128
+ return { name: name2, scriptPath, script };
129
+ }
130
+ if (typeof nameOrRef !== "string") {
131
+ throw new Error(
132
+ "workflow() expects a workflow name (string) or {scriptPath: string}."
133
+ );
134
+ }
135
+ const name = nameOrRef;
136
+ const nameError = validateWorkflowName(name);
137
+ if (nameError) {
138
+ throw new Error(`workflow('${name}'): ${nameError}`);
139
+ }
140
+ for (const { dir } of getSavedWorkflowDirs(config)) {
141
+ const scriptPath = path.join(dir, `${name}.js`);
142
+ try {
143
+ const script = await readWorkflowFileSecurely(scriptPath, config);
144
+ return { name, scriptPath, script };
145
+ } catch {
146
+ }
147
+ }
148
+ const available = (await listSavedWorkflows(config)).map((e) => e.name);
149
+ throw new Error(
150
+ `workflow('${name}'): no workflow with that name. Available: ${available.length > 0 ? available.join(", ") : "(none)"}.`
151
+ );
152
+ }
153
+ __name(resolveSavedWorkflowScript, "resolveSavedWorkflowScript");
154
+ async function saveWorkflowScript(config, opts) {
155
+ const { name, scope, script, overwrite = false } = opts;
156
+ const nameError = validateWorkflowName(name);
157
+ if (nameError) return { status: "invalid-name", error: nameError };
158
+ if (!script || script.trim().length === 0) {
159
+ return {
160
+ status: "empty-script",
161
+ error: "This run has no script source to save."
162
+ };
163
+ }
164
+ const dir = scope === "project" ? config.storage.getProjectWorkflowsDir() : Storage.getUserWorkflowsDir();
165
+ if (await isSymlinkedRoot(dir)) {
166
+ throw new Error(
167
+ `refusing to save into a symlinked saved-workflow directory: '${dir}'.`
168
+ );
169
+ }
170
+ const filePath = path.join(dir, `${name}.js`);
171
+ if (!overwrite) {
172
+ try {
173
+ await fs.access(filePath);
174
+ return { status: "exists", name, scope, path: filePath };
175
+ } catch {
176
+ }
177
+ }
178
+ await fs.mkdir(dir, { recursive: true });
179
+ await fs.writeFile(filePath, script, "utf8");
180
+ return { status: "saved", name, scope, path: filePath };
181
+ }
182
+ __name(saveWorkflowScript, "saveWorkflowScript");
183
+
184
+ // packages/core/src/agents/workflow-snapshot.ts
185
+ init_esbuild_shims();
186
+ import { promises as fs2 } from "node:fs";
187
+ var debugLogger2 = createDebugLogger("WORKFLOW_SNAPSHOT");
21
188
  var MAX_RETAINED_SNAPSHOTS = 30;
22
189
  function toSnapshot(task) {
23
190
  if (!isTerminalWorkflowStatus(task.status)) {
@@ -68,15 +235,15 @@ async function writeWorkflowSnapshot(config, task) {
68
235
  try {
69
236
  const snapshot = toSnapshot(task);
70
237
  const dir = storage.getWorkflowRunsDir();
71
- await fs.mkdir(dir, { recursive: true });
72
- await fs.writeFile(
238
+ await fs2.mkdir(dir, { recursive: true });
239
+ await fs2.writeFile(
73
240
  storage.getWorkflowRunSnapshotPath(task.runId),
74
241
  JSON.stringify(snapshot, null, 2),
75
242
  "utf8"
76
243
  );
77
244
  await pruneSnapshots(dir);
78
245
  } catch (e) {
79
- debugLogger.warn(`writeWorkflowSnapshot failed for ${task.runId}: ${e}`);
246
+ debugLogger2.warn(`writeWorkflowSnapshot failed for ${task.runId}: ${e}`);
80
247
  }
81
248
  }
82
249
  __name(writeWorkflowSnapshot, "writeWorkflowSnapshot");
@@ -86,22 +253,22 @@ async function listWorkflowSnapshots(config) {
86
253
  const dir = storage.getWorkflowRunsDir();
87
254
  let files;
88
255
  try {
89
- files = (await fs.readdir(dir)).filter((f) => f.endsWith(".json"));
256
+ files = (await fs2.readdir(dir)).filter((f) => f.endsWith(".json"));
90
257
  } catch {
91
258
  return [];
92
259
  }
93
260
  const snapshots = [];
94
261
  for (const file of files) {
95
262
  try {
96
- const raw = await fs.readFile(`${dir}/${file}`, "utf8");
263
+ const raw = await fs2.readFile(`${dir}/${file}`, "utf8");
97
264
  const parsed = JSON.parse(raw);
98
265
  if (!isWorkflowSnapshot(parsed)) {
99
- debugLogger.warn(`skipping invalid workflow snapshot ${file}`);
266
+ debugLogger2.warn(`skipping invalid workflow snapshot ${file}`);
100
267
  continue;
101
268
  }
102
269
  snapshots.push(parsed);
103
270
  } catch (e) {
104
- debugLogger.warn(`skipping unparseable snapshot ${file}: ${e}`);
271
+ debugLogger2.warn(`skipping unparseable snapshot ${file}: ${e}`);
105
272
  }
106
273
  }
107
274
  snapshots.sort((a, b) => (b.startTime ?? 0) - (a.startTime ?? 0));
@@ -199,7 +366,7 @@ __name(isWorkflowSnapshot, "isWorkflowSnapshot");
199
366
  async function pruneSnapshots(dir) {
200
367
  let files;
201
368
  try {
202
- files = (await fs.readdir(dir)).filter((f) => f.endsWith(".json"));
369
+ files = (await fs2.readdir(dir)).filter((f) => f.endsWith(".json"));
203
370
  } catch {
204
371
  return;
205
372
  }
@@ -207,7 +374,7 @@ async function pruneSnapshots(dir) {
207
374
  const stats = await Promise.all(
208
375
  files.map(async (f) => {
209
376
  try {
210
- const s = await fs.stat(`${dir}/${f}`);
377
+ const s = await fs2.stat(`${dir}/${f}`);
211
378
  return { f, mtime: s.mtimeMs };
212
379
  } catch {
213
380
  return { f, mtime: 0 };
@@ -221,12 +388,12 @@ async function pruneSnapshots(dir) {
221
388
  const runId = s.f.replace(/\.json$/, "");
222
389
  const isRunDir = /^wf_[0-9a-f]+$/.test(runId);
223
390
  return Promise.all([
224
- fs.unlink(`${dir}/${s.f}`).catch(
225
- (e) => debugLogger.warn(`prune unlink failed for ${s.f}: ${e}`)
391
+ fs2.unlink(`${dir}/${s.f}`).catch(
392
+ (e) => debugLogger2.warn(`prune unlink failed for ${s.f}: ${e}`)
226
393
  ),
227
394
  ...isRunDir ? [
228
- fs.rm(`${dir}/${runId}`, { recursive: true, force: true }).catch(
229
- (e) => debugLogger.warn(
395
+ fs2.rm(`${dir}/${runId}`, { recursive: true, force: true }).catch(
396
+ (e) => debugLogger2.warn(
230
397
  `prune journal dir failed for ${runId}: ${e}`
231
398
  )
232
399
  )
@@ -237,167 +404,11 @@ async function pruneSnapshots(dir) {
237
404
  }
238
405
  __name(pruneSnapshots, "pruneSnapshots");
239
406
 
240
- // packages/core/src/agents/runtime/workflow-saved.ts
241
- init_esbuild_shims();
242
- import { promises as fs2 } from "node:fs";
243
- import * as path from "node:path";
244
- var debugLogger2 = createDebugLogger("WORKFLOW_SAVED");
245
- var WORKFLOW_NAME_PATTERN = /^[a-z][a-z0-9-]{0,40}$/;
246
- function validateWorkflowName(name) {
247
- if (!name) return "Workflow name is required.";
248
- if (!WORKFLOW_NAME_PATTERN.test(name)) {
249
- return `Invalid workflow name "${name}". Use lower-case letters, digits, and hyphens only (must start with a letter, max 41 chars).`;
250
- }
251
- return null;
252
- }
253
- __name(validateWorkflowName, "validateWorkflowName");
254
- function getSavedWorkflowDirs(config) {
255
- return [
256
- { dir: config.storage.getProjectWorkflowsDir(), source: "project" },
257
- { dir: Storage.getUserWorkflowsDir(), source: "user" }
258
- ];
259
- }
260
- __name(getSavedWorkflowDirs, "getSavedWorkflowDirs");
261
- async function isSymlinkedRoot(dir) {
262
- return fs2.lstat(dir).then((st) => st.isSymbolicLink()).catch(() => false);
263
- }
264
- __name(isSymlinkedRoot, "isSymlinkedRoot");
265
- async function listJsFiles(dir) {
266
- if (await isSymlinkedRoot(dir)) {
267
- debugLogger2.warn(`refusing symlinked saved-workflow dir: ${dir}`);
268
- return [];
269
- }
270
- try {
271
- const names = await fs2.readdir(dir);
272
- const out = [];
273
- for (const n of names) {
274
- if (!n.endsWith(".js")) continue;
275
- const st = await fs2.lstat(path.join(dir, n)).catch(() => null);
276
- if (!st || st.isSymbolicLink()) continue;
277
- out.push(n);
278
- }
279
- return out;
280
- } catch (e) {
281
- const code = e?.code;
282
- if (code !== "ENOENT") {
283
- debugLogger2.warn(`listJsFiles failed for ${dir}: ${e}`);
284
- }
285
- return [];
286
- }
287
- }
288
- __name(listJsFiles, "listJsFiles");
289
- async function readWorkflowFileSecurely(filePath, config) {
290
- const real = await fs2.realpath(filePath);
291
- const dirs = (await Promise.all(
292
- getSavedWorkflowDirs(config).map(async ({ dir }) => {
293
- if (await isSymlinkedRoot(dir)) return null;
294
- try {
295
- return await fs2.realpath(dir);
296
- } catch {
297
- return path.resolve(dir);
298
- }
299
- })
300
- )).filter((d) => d !== null);
301
- const inside = dirs.some((d) => real === d || real.startsWith(d + path.sep));
302
- if (!inside) {
303
- throw new Error(
304
- `refusing to load a workflow file outside the saved-workflow directories: '${filePath}'.`
305
- );
306
- }
307
- return fs2.readFile(real, "utf8");
308
- }
309
- __name(readWorkflowFileSecurely, "readWorkflowFileSecurely");
310
- async function listSavedWorkflows(config) {
311
- const byName = /* @__PURE__ */ new Map();
312
- for (const { dir, source } of [...getSavedWorkflowDirs(config)].reverse()) {
313
- for (const file of await listJsFiles(dir)) {
314
- const name = file.slice(0, -".js".length);
315
- if (!WORKFLOW_NAME_PATTERN.test(name)) continue;
316
- byName.set(name, { name, scriptPath: path.join(dir, file), source });
317
- }
318
- }
319
- return Array.from(byName.values()).sort(
320
- (a, b) => a.name.localeCompare(b.name)
321
- );
322
- }
323
- __name(listSavedWorkflows, "listSavedWorkflows");
324
- async function resolveSavedWorkflowScript(nameOrRef, config) {
325
- if (typeof nameOrRef === "object" && nameOrRef !== null) {
326
- const scriptPath = nameOrRef.scriptPath;
327
- if (typeof scriptPath !== "string" || scriptPath.length === 0) {
328
- throw new Error(
329
- "workflow() expects a workflow name (string) or {scriptPath: string}."
330
- );
331
- }
332
- let script;
333
- try {
334
- script = await readWorkflowFileSecurely(scriptPath, config);
335
- } catch (e) {
336
- throw new Error(
337
- `workflow({scriptPath: '${scriptPath}'}): ${e instanceof Error ? e.message : String(e)}`
338
- );
339
- }
340
- const name2 = path.basename(scriptPath).replace(/\.js$/, "");
341
- return { name: name2, scriptPath, script };
342
- }
343
- if (typeof nameOrRef !== "string") {
344
- throw new Error(
345
- "workflow() expects a workflow name (string) or {scriptPath: string}."
346
- );
347
- }
348
- const name = nameOrRef;
349
- const nameError = validateWorkflowName(name);
350
- if (nameError) {
351
- throw new Error(`workflow('${name}'): ${nameError}`);
352
- }
353
- for (const { dir } of getSavedWorkflowDirs(config)) {
354
- const scriptPath = path.join(dir, `${name}.js`);
355
- try {
356
- const script = await readWorkflowFileSecurely(scriptPath, config);
357
- return { name, scriptPath, script };
358
- } catch {
359
- }
360
- }
361
- const available = (await listSavedWorkflows(config)).map((e) => e.name);
362
- throw new Error(
363
- `workflow('${name}'): no workflow with that name. Available: ${available.length > 0 ? available.join(", ") : "(none)"}.`
364
- );
365
- }
366
- __name(resolveSavedWorkflowScript, "resolveSavedWorkflowScript");
367
- async function saveWorkflowScript(config, opts) {
368
- const { name, scope, script, overwrite = false } = opts;
369
- const nameError = validateWorkflowName(name);
370
- if (nameError) return { status: "invalid-name", error: nameError };
371
- if (!script || script.trim().length === 0) {
372
- return {
373
- status: "empty-script",
374
- error: "This run has no script source to save."
375
- };
376
- }
377
- const dir = scope === "project" ? config.storage.getProjectWorkflowsDir() : Storage.getUserWorkflowsDir();
378
- if (await isSymlinkedRoot(dir)) {
379
- throw new Error(
380
- `refusing to save into a symlinked saved-workflow directory: '${dir}'.`
381
- );
382
- }
383
- const filePath = path.join(dir, `${name}.js`);
384
- if (!overwrite) {
385
- try {
386
- await fs2.access(filePath);
387
- return { status: "exists", name, scope, path: filePath };
388
- } catch {
389
- }
390
- }
391
- await fs2.mkdir(dir, { recursive: true });
392
- await fs2.writeFile(filePath, script, "utf8");
393
- return { status: "saved", name, scope, path: filePath };
394
- }
395
- __name(saveWorkflowScript, "saveWorkflowScript");
396
-
397
407
  export {
398
408
  writeWorkflowSnapshot,
399
409
  listWorkflowSnapshots,
400
410
  validateWorkflowName,
411
+ isSymlinkedRoot,
401
412
  listSavedWorkflows,
402
413
  resolveSavedWorkflowScript,
403
414
  saveWorkflowScript
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  TotalSessionLimitExceededError,
5
5
  WorkspaceDrainingError
6
- } from "./chunk-624NHDGB.js";
6
+ } from "./chunk-ERFDKH32.js";
7
7
  import {
8
8
  init_esbuild_shims
9
9
  } from "./chunk-5O2XNYP6.js";