@qwen-code/qwen-code 0.19.10 → 0.19.11-nightly.20260717.f8e6e8931

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 (275) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +7 -6
  2. package/bundled/qc-helper/docs/features/approval-mode.md +2 -2
  3. package/bundled/qc-helper/docs/features/channels/dingtalk.md +30 -0
  4. package/bundled/qc-helper/docs/features/channels/overview.md +53 -17
  5. package/bundled/qc-helper/docs/features/channels/wecom.md +8 -7
  6. package/bundled/qc-helper/docs/features/sandbox.md +2 -0
  7. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +42 -7
  8. package/bundled/qc-helper/docs/qwen-serve.md +53 -46
  9. package/bundled/review/SKILL.md +163 -403
  10. package/chunks/{MaxSizedBox-67ODZ4SZ.js → MaxSizedBox-JGTP7YJQ.js} +13 -13
  11. package/chunks/{StandaloneSessionPicker-SIPBQT5Z.js → StandaloneSessionPicker-2XQDOYZ5.js} +27 -27
  12. package/chunks/{acpAgent-VPZJXLFX.js → acpAgent-RXRJA7GD.js} +1135 -373
  13. package/chunks/{agent-Z7NWL6XL.js → agent-UQP53UWQ.js} +10 -10
  14. package/chunks/{agent-headless-73HZ6ROQ.js → agent-headless-I52OXDCK.js} +10 -10
  15. package/chunks/{anthropicContentGenerator-56U3YCP2.js → anthropicContentGenerator-HBRXJSP4.js} +76 -14
  16. package/chunks/{artifact-tool-BWZZJ42H.js → artifact-tool-MIZLXBLF.js} +1 -1
  17. package/chunks/{askUserQuestion-WU3S5A5T.js → askUserQuestion-XMJVPNWM.js} +1 -1
  18. package/chunks/{bridge-XFKW6S7Q.js → bridge-3DVRNBSF.js} +14 -16
  19. package/chunks/{ca-C2JTT2N5.js → ca-CODEN7TD.js} +5 -0
  20. package/chunks/channel-worker-group-SOUWTFHC.js +21 -0
  21. package/chunks/{channel-worker-manager-5RWKSGEU.js → channel-worker-manager-LOVSV3WW.js} +34 -10
  22. package/chunks/{channel-worker-supervisor-PCDAZN4D.js → channel-worker-supervisor-XW6MHJBQ.js} +6 -4
  23. package/chunks/{chunk-BBNVFRGD.js → chunk-3DWIFU7L.js} +1 -1
  24. package/chunks/{chunk-ZQTZXVHP.js → chunk-3KSHYS4T.js} +4 -18
  25. package/chunks/{chunk-ZKMGAFYV.js → chunk-3LS57JZI.js} +1 -1
  26. package/chunks/{chunk-B5I2IIWY.js → chunk-46Y6SSQ7.js} +5 -5
  27. package/chunks/{chunk-GDQQRV43.js → chunk-4BJVSIS3.js} +2 -2
  28. package/chunks/{chunk-L37RC7MQ.js → chunk-4HTHLSIH.js} +1 -1
  29. package/chunks/{chunk-DPFBNG72.js → chunk-4UBEB74N.js} +1 -1
  30. package/chunks/{chunk-AAR5SGMD.js → chunk-4YR7FSAM.js} +7 -5
  31. package/chunks/{chunk-OATTJGPJ.js → chunk-5CNYZ7TN.js} +7 -7
  32. package/chunks/{chunk-JSJFKYWT.js → chunk-5VWYKIMW.js} +1 -1
  33. package/chunks/{chunk-6GETGQWP.js → chunk-5WWYHNAH.js} +39 -10
  34. package/chunks/{chunk-65N2J6V2.js → chunk-6ANLV27M.js} +2 -2
  35. package/chunks/{chunk-L62SEJWY.js → chunk-6RV42SFP.js} +4 -4
  36. package/chunks/{chunk-XXJKGHZV.js → chunk-6VMOP2Z7.js} +4 -4
  37. package/chunks/{chunk-URU5UEK6.js → chunk-6WGZDD67.js} +135 -68
  38. package/chunks/{chunk-7NAWTFVY.js → chunk-6WPJRYLZ.js} +2 -2
  39. package/chunks/chunk-6WVLHULT.js +59 -0
  40. package/chunks/{chunk-N6FXRR6P.js → chunk-7ZFXHKKZ.js} +1 -1
  41. package/chunks/{chunk-E67NFMF4.js → chunk-A2HWMJVO.js} +35 -1
  42. package/chunks/{chunk-4FMG7EDJ.js → chunk-AEKHQ3E5.js} +77 -11
  43. package/chunks/{chunk-WIASPMLX.js → chunk-AH3YAJU6.js} +22 -33
  44. package/chunks/{chunk-6GKMJPOC.js → chunk-AHAH5H6D.js} +3 -3
  45. package/chunks/{chunk-3XJFUTNM.js → chunk-AVAU67KP.js} +57 -10
  46. package/chunks/{chunk-LNUXFLLJ.js → chunk-BDHYJ2MM.js} +53 -5
  47. package/chunks/{chunk-P6LART6G.js → chunk-BTSE2DUP.js} +957 -122
  48. package/chunks/{chunk-7MJAZMXK.js → chunk-BZ5D7OVV.js} +28 -77
  49. package/chunks/{chunk-WDWJ4OQJ.js → chunk-CC2UASQ4.js} +3 -3
  50. package/chunks/{chunk-WLXYAKV7.js → chunk-D7KYA6EY.js} +3 -3
  51. package/chunks/{chunk-5LROA5W4.js → chunk-DD45XVOQ.js} +3 -3
  52. package/chunks/{chunk-H3FQOPPS.js → chunk-DOPUYNXO.js} +2 -2
  53. package/chunks/{chunk-SPUYQB4T.js → chunk-DPXB3XRN.js} +1 -1
  54. package/chunks/{chunk-XLIRF7IK.js → chunk-E7ECGLZW.js} +1 -1
  55. package/chunks/{chunk-RDRVMDWV.js → chunk-EMJJBXS7.js} +10 -10
  56. package/chunks/{chunk-TXY2C3D2.js → chunk-F333XEAU.js} +1 -1
  57. package/chunks/chunk-FEOZBUMT.js +77 -0
  58. package/chunks/{chunk-YYPXHMWO.js → chunk-FEYHXPZG.js} +4 -4
  59. package/chunks/{chunk-ZRKBI3DP.js → chunk-FNX3LGAK.js} +1 -1
  60. package/chunks/chunk-FXK3QMRD.js +140 -0
  61. package/chunks/{chunk-422XAKCK.js → chunk-G5ZKRK2E.js} +2 -2
  62. package/chunks/{chunk-DK33QJ3V.js → chunk-GCRFH57X.js} +732 -13
  63. package/chunks/{chunk-EQY6POVO.js → chunk-GLEJW7T2.js} +1 -1
  64. package/chunks/{chunk-FXMC7SL2.js → chunk-I6NOSIVF.js} +1 -1
  65. package/chunks/{chunk-VBRRNQB7.js → chunk-IHJRUIWN.js} +109 -22
  66. package/chunks/{chunk-F7NXQH4Y.js → chunk-IIXEI2VE.js} +1 -1
  67. package/chunks/{chunk-2UUAIFQO.js → chunk-JGUT3LWZ.js} +5 -0
  68. package/chunks/{chunk-5EBKKSBX.js → chunk-JY74T7PW.js} +1 -1
  69. package/chunks/chunk-KSZKSE23.js +226 -0
  70. package/chunks/{chunk-MO7O5722.js → chunk-KW46DBFM.js} +35 -2
  71. package/chunks/{chunk-TISZXPAX.js → chunk-L263ROM6.js} +1 -1
  72. package/chunks/chunk-LXXMOYPL.js +22 -0
  73. package/chunks/{chunk-YX4LLZ3D.js → chunk-NABT4VOY.js} +109 -35
  74. package/chunks/{chunk-W34A5MJH.js → chunk-NROLDLP4.js} +1 -1
  75. package/chunks/{chunk-V7EQTZYR.js → chunk-O3WCEZEN.js} +191 -44
  76. package/chunks/{chunk-K4PZ5F5T.js → chunk-OWT2CAEQ.js} +1 -1
  77. package/chunks/{chunk-4YWLED2A.js → chunk-PNCWEDF6.js} +7 -4
  78. package/chunks/{chunk-WDW64OW3.js → chunk-PSDTLRAV.js} +5 -5
  79. package/chunks/{chunk-7R4DPSRA.js → chunk-R3VWUU2E.js} +1 -1
  80. package/chunks/{chunk-K7CRWKOE.js → chunk-R6AO7HBQ.js} +4617 -4012
  81. package/chunks/{chunk-6OATMEYN.js → chunk-RTV5TUYB.js} +12 -4
  82. package/chunks/{chunk-6W6DI34P.js → chunk-SE6GSFAO.js} +159 -2
  83. package/chunks/{chunk-WTSXKLG5.js → chunk-SUARMD4Q.js} +1 -1
  84. package/chunks/chunk-T4TZQJ7W.js +48 -0
  85. package/chunks/{chunk-LTNI523B.js → chunk-T7CZYIAU.js} +28 -5
  86. package/chunks/{chunk-3MX7D6QN.js → chunk-TIOE2OPE.js} +32 -4
  87. package/chunks/{chunk-TTUO4DNG.js → chunk-UF6ZTWU5.js} +75 -710
  88. package/chunks/{chunk-Q5GLXH5Q.js → chunk-UJG4VV2O.js} +5 -5
  89. package/chunks/{chunk-CJFNEBYB.js → chunk-VFEZWI6F.js} +1 -1
  90. package/chunks/{chunk-UFOKA4PR.js → chunk-VHCSIMTF.js} +114 -4
  91. package/chunks/{chunk-TQBODCFD.js → chunk-VRR65QYW.js} +250 -2
  92. package/chunks/{chunk-CUUXANEQ.js → chunk-W6J7RSCK.js} +6 -1
  93. package/chunks/{chunk-YHN5SUIJ.js → chunk-W7H223ZZ.js} +1 -1
  94. package/chunks/{chunk-WX6SD4IQ.js → chunk-WTNZ6DXB.js} +1 -1
  95. package/chunks/{chunk-GGJII3FM.js → chunk-WZJELXEU.js} +92 -3
  96. package/chunks/{chunk-OFEVHGVU.js → chunk-X5HZX4EP.js} +9 -11
  97. package/chunks/{chunk-KSO42X3Z.js → chunk-X6YQWCIJ.js} +21 -2
  98. package/chunks/{chunk-7L4XBYVW.js → chunk-XK42MWWO.js} +9 -2
  99. package/chunks/{chunk-X362TMXZ.js → chunk-XQDPCQ3A.js} +7 -5
  100. package/chunks/{chunk-YU56QGXX.js → chunk-Y3TNSHKF.js} +1 -1
  101. package/chunks/{chunk-HHEFI4RP.js → chunk-YOJGIRTD.js} +714 -109
  102. package/chunks/{chunk-CEW4HDPK.js → chunk-ZK4AMPKI.js} +2459 -350
  103. package/chunks/{chunk-SXU3KKNI.js → chunk-ZQIYGQCG.js} +251 -54
  104. package/chunks/{computer-use-IYTX45WA.js → computer-use-LTW3VB6L.js} +10 -10
  105. package/chunks/{config-utils-CFT33LTP.js → config-utils-IQQT3GCI.js} +3 -3
  106. package/chunks/{contextCommand-272V77WU.js → contextCommand-GLMC6CTP.js} +12 -12
  107. package/chunks/{create-sub-session-WNX2OQVX.js → create-sub-session-EAB2U5XW.js} +1 -1
  108. package/chunks/{create-sub-session-CBJMQLYP.js → create-sub-session-YMWQAWSN.js} +10 -10
  109. package/chunks/{cron-create-36TIFKRT.js → cron-create-GMVKSXZT.js} +1 -1
  110. package/chunks/{cron-delete-OQD3WULU.js → cron-delete-VDZKUAVK.js} +1 -1
  111. package/chunks/{cron-list-4533T2FH.js → cron-list-UG7C7RAR.js} +1 -1
  112. package/chunks/{daemon-RNGFPMAB.js → daemon-PRB64RP5.js} +303 -71
  113. package/chunks/{daemon-status-provider-L4STG5VO.js → daemon-status-provider-5OMM5JHF.js} +19 -20
  114. package/chunks/{de-2VCDRDGU.js → de-NOXPCSYN.js} +5 -0
  115. package/chunks/{dist-ERCPDVA6.js → dist-4WCQEZIN.js} +4 -51
  116. package/chunks/{dist-MOEC47TR.js → dist-DOPL5LSQ.js} +1 -1
  117. package/chunks/{dist-JZE7F6YR.js → dist-GXJVCOS7.js} +1 -1
  118. package/chunks/{dist-PHEPJLXD.js → dist-PX2ERZ6I.js} +2 -2
  119. package/chunks/{dist-HNN7DR2L.js → dist-V2YVLYOW.js} +58 -30
  120. package/chunks/{dist-3V3ZV6ML.js → dist-VYWUKURL.js} +1 -1
  121. package/chunks/{earlyInputCapture-EN4BRREQ.js → earlyInputCapture-A3WSRN4T.js} +10 -10
  122. package/chunks/{edit-OMAF2QDR.js → edit-7PG4AH27.js} +10 -10
  123. package/chunks/{en-NJCA3TAA.js → en-JFVULHTB.js} +6 -0
  124. package/chunks/{enter-worktree-BBZX52HG.js → enter-worktree-QUSB44RE.js} +10 -10
  125. package/chunks/{enterPlanMode-5NNFMBUY.js → enterPlanMode-NVSIEL7X.js} +10 -10
  126. package/chunks/{environment-7TEWMJYN.js → environment-AHHXHQTI.js} +12 -12
  127. package/chunks/{errors-I4VKVX3F.js → errors-NSWSRXC7.js} +12 -12
  128. package/chunks/{exit-worktree-FUWRJI33.js → exit-worktree-FXYEYHPL.js} +10 -10
  129. package/chunks/{exitPlanMode-IHCJ5EEI.js → exitPlanMode-JI5GK3F6.js} +10 -10
  130. package/chunks/{fast-path-ZA57TOH4.js → fast-path-X7EVDLKZ.js} +2 -2
  131. package/chunks/{fr-5F3E7WKD.js → fr-HVFNU42H.js} +5 -0
  132. package/chunks/{gemini-UOAKVXBG.js → gemini-YRLHY5KS.js} +162 -206
  133. package/chunks/{geminiContentGenerator-G6UCE6MW.js → geminiContentGenerator-SPLFPV5E.js} +1 -1
  134. package/chunks/{glob-4GJQ2UFF.js → glob-WASUBCSA.js} +10 -10
  135. package/chunks/{grep-5QSYXF2E.js → grep-DUVG3NGA.js} +10 -10
  136. package/chunks/{handleAutoUpdate-ULHNWL6R.js → handleAutoUpdate-NGE5AQ2N.js} +14 -14
  137. package/chunks/{i18n-CYDUTF6F.js → i18n-QNVR36NB.js} +11 -11
  138. package/chunks/{initializer-NRFKUGIO.js → initializer-ZY7ORPMH.js} +15 -15
  139. package/chunks/{installationInfo-WELKRHHE.js → installationInfo-4R75MFTB.js} +11 -11
  140. package/chunks/{ja-66J6B53L.js → ja-PY5AF544.js} +5 -0
  141. package/chunks/{list-JVDXEG2E.js → list-36JCMZRS.js} +18 -18
  142. package/chunks/{loadedSettingsAdapter-WAM4VUTG.js → loadedSettingsAdapter-PQIOJUSJ.js} +15 -15
  143. package/chunks/{loop-wakeup-MVUKDVCP.js → loop-wakeup-QXWZSCYM.js} +2 -2
  144. package/chunks/{ls-RXNIAQDE.js → ls-2OUTG3IZ.js} +1 -1
  145. package/chunks/{lsp-HB5LM5IL.js → lsp-4VMNXZW6.js} +1 -1
  146. package/chunks/{mcp-YHOZN3ZM.js → mcp-QXY6XA6H.js} +15 -15
  147. package/chunks/{monitor-R7XZPJHQ.js → monitor-AVEKRSY3.js} +12 -11
  148. package/chunks/{nonInteractiveCli-NSOB6D74.js → nonInteractiveCli-YWIBKX4M.js} +50 -50
  149. package/chunks/{notebook-edit-6RNKE2L2.js → notebook-edit-4SBTJX72.js} +10 -10
  150. package/chunks/{openaiContentGenerator-XNS5S64I.js → openaiContentGenerator-4EBAO7LR.js} +8 -8
  151. package/chunks/{pidfile-XE4RRR2P.js → pidfile-JMIUPXSU.js} +10 -10
  152. package/chunks/processUtils-EOINMEIH.js +29 -0
  153. package/chunks/{pt-TFZO5Y6T.js → pt-A3PRQXMU.js} +5 -0
  154. package/chunks/{qwenContentGenerator-APDPJ3VN.js → qwenContentGenerator-M7UBL3JS.js} +12 -12
  155. package/chunks/{read-file-XSUWXSR7.js → read-file-DXSEFHCV.js} +5 -5
  156. package/chunks/{read-mcp-resource-6LRTZKXI.js → read-mcp-resource-JUFHCKSC.js} +1 -1
  157. package/chunks/{record-artifact-PMDTY4OS.js → record-artifact-DWSMBXYY.js} +1 -1
  158. package/chunks/{ripGrep-APB3CDMU.js → ripGrep-VTRVFMDJ.js} +10 -10
  159. package/chunks/{ru-4L4LFHIT.js → ru-IBCWUTOC.js} +5 -0
  160. package/chunks/{run-qwen-serve-NWTGPERT.js → run-qwen-serve-P7WQDZAS.js} +59 -38
  161. package/chunks/{runtime-EIO3NQKR.js → runtime-UHYO6JGN.js} +19 -19
  162. package/chunks/{scheduler-JJDZBDRN.js → scheduler-WTK7ZLV5.js} +10 -10
  163. package/chunks/{send-message-SR4WSXP2.js → send-message-JZ752NWD.js} +2 -2
  164. package/chunks/{serve-WTIPB3EI.js → serve-AG2AOG56.js} +15 -15
  165. package/chunks/{server-NJPHQHLH.js → server-G5MM2BRI.js} +1157 -225
  166. package/chunks/{session-O4AO7FTS.js → session-NUAGEMVS.js} +51 -51
  167. package/chunks/{settings-HQNDK7TG.js → settings-VQA5PR2M.js} +14 -14
  168. package/chunks/{shell-UIXM6PWG.js → shell-X33RWGLP.js} +12 -10
  169. package/chunks/{skill-3XMB4ULV.js → skill-PHSU2OPP.js} +5 -5
  170. package/chunks/{spawnChannel-3R632QRM.js → spawnChannel-D6TZN4W7.js} +12 -13
  171. package/chunks/{src-USZKPUOC.js → src-6OJFUPTL.js} +95 -34
  172. package/chunks/{standalone-update-L5XW3D7K.js → standalone-update-ZARRW44Y.js} +12 -12
  173. package/chunks/{startInteractiveUI-CPZOL2WB.js → startInteractiveUI-C6IZRTF3.js} +176 -158
  174. package/chunks/{syntheticOutput-YKFNUQZD.js → syntheticOutput-LELY6HAI.js} +2 -2
  175. package/chunks/{task-create-NUFOHU53.js → task-create-QY3BIMNM.js} +3 -3
  176. package/chunks/{task-list-Z2IKQY3S.js → task-list-D2U47WBJ.js} +1 -1
  177. package/chunks/{task-stop-KQFIVQTJ.js → task-stop-N6E5IYLH.js} +1 -1
  178. package/chunks/{task-update-HKADXSTD.js → task-update-HJCQILLB.js} +3 -3
  179. package/chunks/{team-create-XXPRF3IQ.js → team-create-H434NQP2.js} +10 -10
  180. package/chunks/{team-delete-SDNTGZLG.js → team-delete-RCWYDRF4.js} +1 -1
  181. package/chunks/{team-plan-approval-EOTTKHDW.js → team-plan-approval-IIOHXZU6.js} +10 -10
  182. package/chunks/{theme-manager-P6UITO2L.js → theme-manager-IEOPHMX6.js} +10 -10
  183. package/chunks/{todoWrite-YNXB27GB.js → todoWrite-FKCGATPJ.js} +1 -1
  184. package/chunks/{tool-search-DDNGK2LR.js → tool-search-WIIEDALL.js} +6 -6
  185. package/chunks/{total-session-admission-PL5N7DNY.js → total-session-admission-WU3DORRW.js} +15 -17
  186. package/chunks/{trustedFolders-C5LMF3UR.js → trustedFolders-JVUTUAJ3.js} +11 -11
  187. package/chunks/update-relaunch-X5EQKCH5.js +87 -0
  188. package/chunks/{updateCheck-QTVVISH7.js → updateCheck-TGO2X735.js} +14 -12
  189. package/chunks/{validateNonInterActiveAuth-RY4RKBQG.js → validateNonInterActiveAuth-2MEUL2ME.js} +46 -46
  190. package/chunks/{version-U45RYOSD.js → version-KBGQKZWV.js} +1 -1
  191. package/chunks/{web-fetch-ZSPR3PRR.js → web-fetch-CFCWTCAP.js} +2 -3
  192. package/chunks/{workflow-TCIAQYOA.js → workflow-PAOSF4CG.js} +11 -11
  193. package/chunks/{workspace-providers-status-I3G2HYLY.js → workspace-providers-status-AYHJYSVO.js} +18 -18
  194. package/chunks/{workspace-registration-store-IH5GLZ6Y.js → workspace-registration-store-GZMR53QL.js} +1 -1
  195. package/chunks/{workspace-registry-QEKBELIX.js → workspace-registry-C2IXZWPF.js} +15 -17
  196. package/chunks/{workspace-service-ORKHGLP3.js → workspace-service-KDDAW33F.js} +20 -21
  197. package/chunks/{workspace-skills-status-D7QCNDYY.js → workspace-skills-status-WWEZBZXY.js} +16 -16
  198. package/chunks/{write-file-JGRQR5VM.js → write-file-ACN3TAIX.js} +10 -10
  199. package/chunks/{zh-FSAH32JB.js → zh-PAUNIMHQ.js} +6 -0
  200. package/chunks/{zh-TW-D2YIE2LO.js → zh-TW-GNEUIUFF.js} +6 -0
  201. package/cli-entry.js +92 -8
  202. package/cli.js +11 -11
  203. package/locales/ca.js +10 -0
  204. package/locales/de.js +10 -0
  205. package/locales/en.js +11 -0
  206. package/locales/fr.js +10 -0
  207. package/locales/ja.js +10 -0
  208. package/locales/pt.js +10 -0
  209. package/locales/ru.js +10 -0
  210. package/locales/zh-TW.js +11 -0
  211. package/locales/zh.js +11 -0
  212. package/package.json +3 -3
  213. package/web-shell/assets/{arc-CUeDlxvE.js → arc-Blc5_CnD.js} +1 -1
  214. package/web-shell/assets/{architectureDiagram-3BPJPVTR-PiUszkQA.js → architectureDiagram-3BPJPVTR-Dyv1BvGP.js} +1 -1
  215. package/web-shell/assets/{blockDiagram-GPEHLZMM-s2wYSO7e.js → blockDiagram-GPEHLZMM-CVAb8DyB.js} +1 -1
  216. package/web-shell/assets/{c4Diagram-AAUBKEIU-DyLxZoz9.js → c4Diagram-AAUBKEIU-ClHPb_6S.js} +1 -1
  217. package/web-shell/assets/channel-DkPTtnGS.js +1 -0
  218. package/web-shell/assets/{chunk-2J33WTMH-Dsdai7Tk.js → chunk-2J33WTMH-Dad9g3ZA.js} +1 -1
  219. package/web-shell/assets/{chunk-4BX2VUAB-DEosOjV7.js → chunk-4BX2VUAB-IJJSSdDs.js} +1 -1
  220. package/web-shell/assets/{chunk-55IACEB6-sNsRLTXf.js → chunk-55IACEB6-DRcc-Hl9.js} +1 -1
  221. package/web-shell/assets/{chunk-727SXJPM-DkRNZzmh.js → chunk-727SXJPM-DOCFB-6a.js} +1 -1
  222. package/web-shell/assets/{chunk-AQP2D5EJ-BrsRNpzd.js → chunk-AQP2D5EJ-CRZnSjHp.js} +1 -1
  223. package/web-shell/assets/{chunk-FMBD7UC4-CI039lpl.js → chunk-FMBD7UC4-BwUI4Yes.js} +1 -1
  224. package/web-shell/assets/{chunk-ND2GUHAM-M-pkeIfu.js → chunk-ND2GUHAM-DLy8doxd.js} +1 -1
  225. package/web-shell/assets/{chunk-QZHKN3VN-C4ckGNbH.js → chunk-QZHKN3VN-Bhz7iysj.js} +1 -1
  226. package/web-shell/assets/classDiagram-4FO5ZUOK-DBdPU8ix.js +1 -0
  227. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DBdPU8ix.js +1 -0
  228. package/web-shell/assets/{cose-bilkent-S5V4N54A-BciKUAFq.js → cose-bilkent-S5V4N54A-jT1e8KzN.js} +1 -1
  229. package/web-shell/assets/{dagre-BM42HDAG-C1nTSgU6.js → dagre-BM42HDAG-C1veApQk.js} +1 -1
  230. package/web-shell/assets/{diagram-2AECGRRQ-BDPNWr1m.js → diagram-2AECGRRQ-C_NOwKeT.js} +1 -1
  231. package/web-shell/assets/{diagram-5GNKFQAL-CNFhTszL.js → diagram-5GNKFQAL-Bigfuz1r.js} +1 -1
  232. package/web-shell/assets/{diagram-KO2AKTUF-CjPa4p5a.js → diagram-KO2AKTUF-CpXltPpU.js} +1 -1
  233. package/web-shell/assets/{diagram-LMA3HP47-ZzPykSyG.js → diagram-LMA3HP47-DYawbYbH.js} +1 -1
  234. package/web-shell/assets/{diagram-OG6HWLK6-0UVtZ9A4.js → diagram-OG6HWLK6-D2t-ttd1.js} +1 -1
  235. package/web-shell/assets/{erDiagram-TEJ5UH35-CajDZCat.js → erDiagram-TEJ5UH35-Buc53PB5.js} +1 -1
  236. package/web-shell/assets/{flowDiagram-I6XJVG4X-BRuFBIvL.js → flowDiagram-I6XJVG4X-DwdFsCN7.js} +1 -1
  237. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BevGmJqG.js → ganttDiagram-6RSMTGT7-XhiEKGoP.js} +1 -1
  238. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DvPMpBMb.js → gitGraphDiagram-PVQCEYII-D6We014a.js} +1 -1
  239. package/web-shell/assets/index-BctAmeF3.js +1143 -0
  240. package/web-shell/assets/{index-DzHwQkQq.js → index-CAWqS-bZ.js} +1 -1
  241. package/web-shell/assets/index-DLyhlZZO.css +5 -0
  242. package/web-shell/assets/{infoDiagram-5YYISTIA-Oixn7tA9.js → infoDiagram-5YYISTIA-C_iugRHQ.js} +1 -1
  243. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BgKpeg-j.js → ishikawaDiagram-YF4QCWOH-CAn9Kaix.js} +1 -1
  244. package/web-shell/assets/{journeyDiagram-JHISSGLW-74mwxIaA.js → journeyDiagram-JHISSGLW-BjDYOkEB.js} +1 -1
  245. package/web-shell/assets/{kanban-definition-UN3LZRKU-D4D6cEqA.js → kanban-definition-UN3LZRKU-Br_oI3Ob.js} +1 -1
  246. package/web-shell/assets/{linear-atZRE_L2.js → linear-BqnWHE9E.js} +1 -1
  247. package/web-shell/assets/{mermaid.core-KKudX-JC.js → mermaid.core-CT-sofSb.js} +5 -5
  248. package/web-shell/assets/{mindmap-definition-RKZ34NQL-CMCej9yG.js → mindmap-definition-RKZ34NQL-BbvrZR4B.js} +1 -1
  249. package/web-shell/assets/{pieDiagram-4H26LBE5-nhx40X7q.js → pieDiagram-4H26LBE5-gAwi3h_Q.js} +1 -1
  250. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CUmVcN3M.js → quadrantDiagram-W4KKPZXB-CONvBIuO.js} +1 -1
  251. package/web-shell/assets/{requirementDiagram-4Y6WPE33-C_vyEwyy.js → requirementDiagram-4Y6WPE33-lpkrcy1e.js} +1 -1
  252. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-DU6G4VWR.js → sankeyDiagram-5OEKKPKP-Bk6FJHqb.js} +1 -1
  253. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DdeRR_KJ.js → sequenceDiagram-3UESZ5HK-B9b9bBzt.js} +1 -1
  254. package/web-shell/assets/{stateDiagram-AJRCARHV-C6iCI8ps.js → stateDiagram-AJRCARHV-JqBGC-S3.js} +1 -1
  255. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-B_w4fDnm.js +1 -0
  256. package/web-shell/assets/{timeline-definition-PNZ67QCA-B_Ea8Cb7.js → timeline-definition-PNZ67QCA-CCCceXDP.js} +1 -1
  257. package/web-shell/assets/{vennDiagram-CIIHVFJN-BPUVZEJA.js → vennDiagram-CIIHVFJN-EHRnmZ09.js} +1 -1
  258. package/web-shell/assets/{wardley-L42UT6IY-BWEj0lKY.js → wardley-L42UT6IY-CYIcHx3_.js} +1 -1
  259. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BvDsdIQw.js → wardleyDiagram-YWT4CUSO-B81AuYRl.js} +1 -1
  260. package/web-shell/assets/{xychartDiagram-2RQKCTM6-crz0QhF_.js → xychartDiagram-2RQKCTM6-DOQ6E3z7.js} +1 -1
  261. package/web-shell/index.html +2 -2
  262. package/chunks/channel-worker-group-K7QKH6IG.js +0 -13
  263. package/chunks/chunk-B7NUUEXC.js +0 -311
  264. package/chunks/chunk-CARU2RR2.js +0 -24
  265. package/chunks/chunk-GYTKQYDB.js +0 -23
  266. package/chunks/chunk-LQU7EVFA.js +0 -30
  267. package/chunks/chunk-OCPBI7J5.js +0 -18
  268. package/chunks/chunk-OJAMDVF5.js +0 -66
  269. package/chunks/chunk-TEGEBB2I.js +0 -122
  270. package/web-shell/assets/channel-DkuJJ0qd.js +0 -1
  271. package/web-shell/assets/classDiagram-4FO5ZUOK-CwqHc0TB.js +0 -1
  272. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwqHc0TB.js +0 -1
  273. package/web-shell/assets/index-Cnvv4VcI.css +0 -5
  274. package/web-shell/assets/index-D1Uyklxa.js +0 -1088
  275. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C0_6nR6C.js +0 -1
@@ -1080,6 +1080,10 @@ var DaemonChannelBridge = class extends EventEmitter2 {
1080
1080
  case "tool_call_update": {
1081
1081
  const toolCallId = getString(update["toolCallId"]);
1082
1082
  const kind = getString(update["kind"]);
1083
+ const meta = isRecord(update["_meta"]) ? update["_meta"] : void 0;
1084
+ if (!kind && toolCallId && getString(update["status"]) === "in_progress" && meta?.["shellProgress"] !== void 0) {
1085
+ break;
1086
+ }
1083
1087
  if (!toolCallId || !kind) {
1084
1088
  this.emitProtocolError(`Malformed daemon ${type} event`, update);
1085
1089
  break;
@@ -2879,6 +2883,29 @@ var LIST_PATTERNS = [
2879
2883
  /^这个聊天你记住了什么[??]?$/u,
2880
2884
  /^what do you remember[??]?$/iu
2881
2885
  ];
2886
+ var LIST_PAGE_PATTERNS = [
2887
+ /^查看第\s*(\d+)\s*页记忆$/u,
2888
+ /^show memory page\s+(\d+)$/iu
2889
+ ];
2890
+ var INSPECT_PATTERNS = [
2891
+ /^查看记忆\s+(\S+)$/u,
2892
+ /^show memory\s+(\S+)$/iu
2893
+ ];
2894
+ var REMOVE_PATTERNS = [
2895
+ /^忘掉\s+(\S+)$/u,
2896
+ /^删除\s+(\S+)$/u,
2897
+ /^删掉\s+(\S+)$/u,
2898
+ /^forget\s+(\S+)$/iu,
2899
+ /^delete\s+(\S+)$/iu,
2900
+ /^remove\s+(\S+)$/iu
2901
+ ];
2902
+ var UPDATE_PATTERNS = [
2903
+ /^把\s+(\S+)\s+改成\s*(.+)$/su,
2904
+ /^更新\s+(\S+)\s+为\s*(.+)$/su,
2905
+ /^update\s+(\S+)\s+to\s+(.+)$/isu,
2906
+ /^change\s+(\S+)\s+to\s+(.+)$/isu
2907
+ ];
2908
+ var MEMORY_ID_PATTERN = /^m-[a-f0-9]{12}$/u;
2882
2909
  var CLEAR_REQUEST_PATTERNS = [
2883
2910
  /^清空记忆$/u,
2884
2911
  /^清除记忆$/u,
@@ -2901,14 +2928,41 @@ function parseChannelMemoryIntent(text) {
2901
2928
  return { kind: "clear_confirm" };
2902
2929
  }
2903
2930
  }
2931
+ for (const pattern of REMOVE_PATTERNS) {
2932
+ const match = trimmed.match(pattern);
2933
+ if (match?.[1] && MEMORY_ID_PATTERN.test(match[1])) {
2934
+ return { kind: "remove", id: match[1] };
2935
+ }
2936
+ }
2937
+ for (const pattern of UPDATE_PATTERNS) {
2938
+ const match = trimmed.match(pattern);
2939
+ const id = match?.[1];
2940
+ const updated = match?.[2]?.trim();
2941
+ if (id && updated && MEMORY_ID_PATTERN.test(id)) {
2942
+ return { kind: "update", id, text: updated };
2943
+ }
2944
+ }
2904
2945
  for (const pattern of CLEAR_REQUEST_PATTERNS) {
2905
2946
  if (pattern.test(trimmed)) {
2906
2947
  return { kind: "clear_request" };
2907
2948
  }
2908
2949
  }
2950
+ for (const pattern of INSPECT_PATTERNS) {
2951
+ const match = trimmed.match(pattern);
2952
+ if (match?.[1] && MEMORY_ID_PATTERN.test(match[1])) {
2953
+ return { kind: "inspect", id: match[1] };
2954
+ }
2955
+ }
2956
+ for (const pattern of LIST_PAGE_PATTERNS) {
2957
+ const match = trimmed.match(pattern);
2958
+ if (match?.[1]) {
2959
+ const page = Number(match[1]);
2960
+ return Number.isSafeInteger(page) && page > 0 ? { kind: "list", page } : null;
2961
+ }
2962
+ }
2909
2963
  for (const pattern of LIST_PATTERNS) {
2910
2964
  if (pattern.test(trimmed)) {
2911
- return { kind: "list" };
2965
+ return { kind: "list", page: 1 };
2912
2966
  }
2913
2967
  }
2914
2968
  for (const pattern of REMEMBER_PATTERNS) {
@@ -2930,8 +2984,10 @@ var GROUP_HISTORY_ENTRY_TEXT_LIMIT = 1e3;
2930
2984
  var GROUP_HISTORY_ENTRY_METADATA_LIMIT = 256;
2931
2985
  var LOOP_CANCEL_GRACE_MS = 5e3;
2932
2986
  var CHANNEL_MEMORY_PROMPT_CODE_POINT_LIMIT = 12e3;
2987
+ var CHANNEL_MEMORY_PAGE_SIZE = 20;
2988
+ var CHANNEL_MEMORY_PREVIEW_CODE_POINT_LIMIT = 160;
2933
2989
  var CHANNEL_MEMORY_CLASSIFIER_MIN_CONFIDENCE = 0.7;
2934
- var CHANNEL_MEMORY_CLASSIFIER_TRIGGER_RE = /(记住|记得|记一下|记忆|忘掉|忘记|清空|清除|删除|保存|remember|memory|forget)/iu;
2990
+ var CHANNEL_MEMORY_CLASSIFIER_TRIGGER_RE = /(?:记住|记得|记一下|记忆|忘掉|忘记|清空|清除|删除|删掉|改成|更新|刚才那条|保存|(?:只|仅)(?:看|列出)[\p{Script=Han}\s]{0,12}(?:偏好|习惯)|\b(?:remember|memory|forget|delete|remove|update|change)\b)/iu;
2935
2991
  var LOOP_TIMED_OUT_MESSAGE = "loop timed out";
2936
2992
  var DEBUG_PAYLOAD_ENV = "QWEN_CHANNEL_DEBUG_PAYLOAD";
2937
2993
  var DEBUG_PAYLOAD_LIMIT = 12e3;
@@ -3253,6 +3309,9 @@ var ChannelBase = class {
3253
3309
  supportsProactiveTarget(target) {
3254
3310
  return target.threadId === void 0;
3255
3311
  }
3312
+ supportsProactiveWebhookTarget(target) {
3313
+ return this.supportsProactiveTarget(target);
3314
+ }
3256
3315
  async pushProactive(target, text) {
3257
3316
  if (target.threadId) {
3258
3317
  throw new Error("Channel does not support proactive loop messages for threaded targets.");
@@ -3538,7 +3597,7 @@ ${sanitizePromptText(job.prompt)}`;
3538
3597
  throw new Error(`Unknown webhook source "${task.source}".`);
3539
3598
  }
3540
3599
  const target = resolveChannelWebhookTarget(this.name, this.config.webhooks, task.source, task.targetRef);
3541
- if (!this.supportsProactiveTarget(target)) {
3600
+ if (!this.supportsProactiveWebhookTarget(target)) {
3542
3601
  throw new Error("Channel does not support proactive webhook messages for this chat target.");
3543
3602
  }
3544
3603
  return target;
@@ -4169,30 +4228,6 @@ ${requestList}`);
4169
4228
  this.registerCommand("approve", (envelope, args) => this.handlePermissionResponseCommand(envelope, args, "approve"));
4170
4229
  this.registerCommand("approve-always", (envelope, args) => this.handlePermissionResponseCommand(envelope, args, "approve-always"));
4171
4230
  this.registerCommand("deny", (envelope, args) => this.handlePermissionResponseCommand(envelope, args, "deny"));
4172
- this.registerCommand("remember-channel", async (envelope, args) => {
4173
- const text = args.trim();
4174
- if (text === "") {
4175
- await this.sendMessage(envelope.chatId, "Usage: /remember-channel <text>");
4176
- return true;
4177
- }
4178
- await this.handleChannelMemoryIntent(envelope, {
4179
- kind: "remember",
4180
- text
4181
- });
4182
- return true;
4183
- });
4184
- this.registerCommand("channel-memory", async (envelope) => {
4185
- await this.handleChannelMemoryIntent(envelope, { kind: "list" });
4186
- return true;
4187
- });
4188
- this.registerCommand("forget-channel", async (envelope, args) => {
4189
- if (args.toLowerCase() !== "confirm") {
4190
- await this.sendMessage(envelope.chatId, 'This clears channel memory for this chat. Re-send with "confirm" (e.g. /forget-channel confirm) to proceed.');
4191
- return true;
4192
- }
4193
- await this.handleChannelMemoryIntent(envelope, { kind: "clear_confirm" }, { skipPendingClear: true });
4194
- return true;
4195
- });
4196
4231
  this.registerCommand("who", async (envelope) => {
4197
4232
  if (!this.isAuthorizedForSharedSession(envelope)) {
4198
4233
  await this.sendMessage(envelope.chatId, "Only authorized members can view this shared session.");
@@ -4647,7 +4682,60 @@ ${requestList}`);
4647
4682
  }
4648
4683
  return this.channelMemory;
4649
4684
  }
4650
- async handleChannelMemoryIntent(envelope, intent, options = {}) {
4685
+ entriesForChannelMemoryIds(entries, ids) {
4686
+ const selected = new Set(ids);
4687
+ return entries.filter((entry) => selected.has(entry.id));
4688
+ }
4689
+ renderChannelMemoryCandidate(entry) {
4690
+ const preview = truncateCodePoints(sanitizePromptText(entry.text).replace(/[\r\n]+/gu, " ").trim(), CHANNEL_MEMORY_PREVIEW_CODE_POINT_LIMIT);
4691
+ return `${entry.id} ${preview}`;
4692
+ }
4693
+ renderChannelMemoryCandidates(entries) {
4694
+ return entries.map((entry) => this.renderChannelMemoryCandidate(entry));
4695
+ }
4696
+ async handleChannelMemoryIntent(envelope, intent) {
4697
+ if (intent.kind === "no_match") {
4698
+ await this.sendMessage(envelope.chatId, "No matching channel memory entry.");
4699
+ return;
4700
+ }
4701
+ if (intent.kind === "ambiguous") {
4702
+ const channelMemory2 = await this.getChannelMemory(envelope);
4703
+ if (!channelMemory2)
4704
+ return;
4705
+ let entries;
4706
+ try {
4707
+ entries = await channelMemory2.listChannelMemoryEntries(this.channelMemoryTarget(envelope));
4708
+ } catch (error) {
4709
+ this.logChannelMemoryError("read", envelope, this.channelMemoryErrorMessage(error));
4710
+ await this.sendMessage(envelope.chatId, `Failed to read channel memory: ${this.channelMemoryUserErrorMessage()}`);
4711
+ return;
4712
+ }
4713
+ const selected = this.entriesForChannelMemoryIds(entries, intent.ids);
4714
+ await this.sendMessage(envelope.chatId, [
4715
+ "Multiple channel memory entries match:",
4716
+ ...this.renderChannelMemoryCandidates(selected)
4717
+ ].join("\n"));
4718
+ return;
4719
+ }
4720
+ if (intent.kind === "list_matches") {
4721
+ const channelMemory2 = await this.getChannelMemory(envelope);
4722
+ if (!channelMemory2)
4723
+ return;
4724
+ let entries;
4725
+ try {
4726
+ entries = await channelMemory2.listChannelMemoryEntries(this.channelMemoryTarget(envelope));
4727
+ } catch (error) {
4728
+ this.logChannelMemoryError("read", envelope, this.channelMemoryErrorMessage(error));
4729
+ await this.sendMessage(envelope.chatId, `Failed to read channel memory: ${this.channelMemoryUserErrorMessage()}`);
4730
+ return;
4731
+ }
4732
+ const selected = this.entriesForChannelMemoryIds(entries, intent.ids);
4733
+ await this.sendMessage(envelope.chatId, [
4734
+ "Channel memory (page 1/1):",
4735
+ ...this.renderChannelMemoryCandidates(selected)
4736
+ ].join("\n"));
4737
+ return;
4738
+ }
4651
4739
  if (intent.kind === "clear_request") {
4652
4740
  this.setPendingClear(this.clearPendingKey(envelope));
4653
4741
  await this.sendMessage(envelope.chatId, 'This clears channel memory for this chat. Say "\u786E\u8BA4\u6E05\u7A7A\u8BB0\u5FC6" or "confirm clear memory" to proceed.');
@@ -4658,40 +4746,96 @@ ${requestList}`);
4658
4746
  return;
4659
4747
  }
4660
4748
  if (intent.kind === "remember") {
4749
+ let result;
4661
4750
  try {
4662
- await channelMemory.appendChannelMemory(this.channelMemoryTarget(envelope), intent.text);
4751
+ result = await channelMemory.addChannelMemoryEntries(this.channelMemoryTarget(envelope), [intent.text], envelope.senderId);
4663
4752
  } catch (error) {
4664
4753
  const message = this.channelMemoryErrorMessage(error);
4665
4754
  this.logChannelMemoryError("save", envelope, message);
4666
4755
  await this.sendMessage(envelope.chatId, `Failed to save channel memory: ${this.channelMemoryUserErrorMessage()}`);
4667
4756
  return;
4668
4757
  }
4669
- this.invalidateSessionContext(envelope);
4670
- await this.sendMessage(envelope.chatId, "Channel memory updated.");
4758
+ if (result.changed) {
4759
+ this.invalidateSessionContext(envelope);
4760
+ }
4761
+ if (result.added.length > 0) {
4762
+ const ids = result.added.map((entry) => entry.id);
4763
+ await this.sendMessage(envelope.chatId, ids.length === 1 ? `Channel memory ${ids[0]} saved.` : `Channel memory saved: ${ids.join(", ")}.`);
4764
+ } else if (result.duplicateIds.length > 0) {
4765
+ await this.sendMessage(envelope.chatId, `Channel memory already contains ${result.duplicateIds.join(", ")}.`);
4766
+ } else {
4767
+ await this.sendMessage(envelope.chatId, "Channel memory updated.");
4768
+ }
4671
4769
  return;
4672
4770
  }
4673
- if (intent.kind === "list") {
4674
- let text;
4771
+ if (intent.kind === "list" || intent.kind === "inspect") {
4772
+ let entries;
4675
4773
  try {
4676
- text = (await channelMemory.readChannelMemory(this.channelMemoryTarget(envelope))).trim();
4774
+ entries = await channelMemory.listChannelMemoryEntries(this.channelMemoryTarget(envelope));
4677
4775
  } catch (error) {
4678
4776
  const message = this.channelMemoryErrorMessage(error);
4679
4777
  this.logChannelMemoryError("read", envelope, message);
4680
4778
  await this.sendMessage(envelope.chatId, `Failed to read channel memory: ${this.channelMemoryUserErrorMessage()}`);
4681
4779
  return;
4682
4780
  }
4683
- await this.sendMessage(envelope.chatId, text === "" ? "No channel memory saved." : sanitizePromptText(text));
4781
+ if (intent.kind === "inspect") {
4782
+ const entry = entries.find((candidate) => candidate.id === intent.id);
4783
+ await this.sendMessage(envelope.chatId, entry ? `Channel memory ${entry.id}:
4784
+ ${sanitizePromptText(entry.text).trim()}` : `No channel memory entry ${intent.id}.`);
4785
+ return;
4786
+ }
4787
+ const totalPages = Math.max(1, Math.ceil(entries.length / CHANNEL_MEMORY_PAGE_SIZE));
4788
+ if (intent.page > totalPages) {
4789
+ await this.sendMessage(envelope.chatId, `Channel memory page ${intent.page} does not exist.`);
4790
+ return;
4791
+ }
4792
+ if (entries.length === 0) {
4793
+ await this.sendMessage(envelope.chatId, "No channel memory saved.");
4794
+ return;
4795
+ }
4796
+ const pageStart = (intent.page - 1) * CHANNEL_MEMORY_PAGE_SIZE;
4797
+ const lines = entries.slice(pageStart, pageStart + CHANNEL_MEMORY_PAGE_SIZE).map((entry) => this.renderChannelMemoryCandidate(entry));
4798
+ await this.sendMessage(envelope.chatId, [`Channel memory (page ${intent.page}/${totalPages}):`, ...lines].join("\n"));
4684
4799
  return;
4685
4800
  }
4686
- if (intent.kind === "clear_confirm") {
4687
- if (!options.skipPendingClear) {
4688
- const pendingKey = this.clearPendingKey(envelope);
4689
- const expiresAt = this.pendingClears.get(pendingKey);
4690
- this.pendingClears.delete(pendingKey);
4691
- if (expiresAt === void 0 || expiresAt < Date.now()) {
4692
- await this.sendMessage(envelope.chatId, 'No pending clear request. Say "\u6E05\u7A7A\u8BB0\u5FC6" first.');
4693
- return;
4801
+ if (intent.kind === "update" || intent.kind === "remove" || intent.kind === "natural_update" || intent.kind === "natural_remove") {
4802
+ let changed;
4803
+ const isUpdate = intent.kind === "update" || intent.kind === "natural_update";
4804
+ const id = intent.id;
4805
+ try {
4806
+ if (isUpdate) {
4807
+ ({ changed } = await channelMemory.updateChannelMemoryEntry(this.channelMemoryTarget(envelope), intent.kind === "natural_update" ? {
4808
+ id: intent.id,
4809
+ text: intent.text,
4810
+ expectedText: intent.expectedText
4811
+ } : { id: intent.id, text: intent.text }));
4812
+ } else {
4813
+ ({ changed } = await channelMemory.removeChannelMemoryEntries(this.channelMemoryTarget(envelope), intent.kind === "natural_remove" ? {
4814
+ ids: [intent.id],
4815
+ expectedTextById: { [intent.id]: intent.expectedText }
4816
+ } : { ids: [intent.id] }));
4694
4817
  }
4818
+ } catch (error) {
4819
+ const message = this.channelMemoryErrorMessage(error);
4820
+ this.logChannelMemoryError(isUpdate ? "update" : "remove", envelope, message);
4821
+ await this.sendMessage(envelope.chatId, `Failed to ${isUpdate ? "update" : "remove"} channel memory: ${this.channelMemoryUserErrorMessage()}`);
4822
+ return;
4823
+ }
4824
+ if (!changed) {
4825
+ await this.sendMessage(envelope.chatId, `No channel memory entry ${id}.`);
4826
+ return;
4827
+ }
4828
+ this.invalidateSessionContext(envelope);
4829
+ await this.sendMessage(envelope.chatId, `Channel memory ${id} ${isUpdate ? "updated" : "removed"}.`);
4830
+ return;
4831
+ }
4832
+ if (intent.kind === "clear_confirm") {
4833
+ const pendingKey = this.clearPendingKey(envelope);
4834
+ const expiresAt = this.pendingClears.get(pendingKey);
4835
+ this.pendingClears.delete(pendingKey);
4836
+ if (expiresAt === void 0 || expiresAt < Date.now()) {
4837
+ await this.sendMessage(envelope.chatId, 'No pending clear request. Say "\u6E05\u7A7A\u8BB0\u5FC6" first.');
4838
+ return;
4695
4839
  }
4696
4840
  let result;
4697
4841
  try {
@@ -4702,7 +4846,9 @@ ${requestList}`);
4702
4846
  await this.sendMessage(envelope.chatId, `Failed to clear channel memory: ${this.channelMemoryUserErrorMessage()}`);
4703
4847
  return;
4704
4848
  }
4705
- this.invalidateSessionContext(envelope);
4849
+ if (result.changed) {
4850
+ this.invalidateSessionContext(envelope);
4851
+ }
4706
4852
  await this.sendMessage(envelope.chatId, result.changed ? "Channel memory cleared." : "No channel memory saved.");
4707
4853
  return;
4708
4854
  }
@@ -4725,31 +4871,82 @@ ${requestList}`);
4725
4871
  }
4726
4872
  this.pendingClears.set(key, now + 6e4);
4727
4873
  }
4728
- async classifyChannelMemoryIntent(text) {
4729
- if (!this.memoryIntentClassifier) {
4874
+ async classifyChannelMemoryIntent(envelope) {
4875
+ if (!this.memoryIntentClassifier || !this.channelMemory) {
4876
+ return null;
4877
+ }
4878
+ let entries;
4879
+ try {
4880
+ entries = await this.channelMemory.listChannelMemoryEntries(this.channelMemoryTarget(envelope));
4881
+ } catch (error) {
4882
+ this.logChannelMemoryError("read", envelope, this.channelMemoryErrorMessage(error));
4730
4883
  return null;
4731
4884
  }
4732
4885
  let classified;
4733
4886
  try {
4734
- classified = await this.memoryIntentClassifier.classifyChannelMemoryIntent(text);
4887
+ classified = await this.memoryIntentClassifier.classifyChannelMemoryIntent(envelope.text, entries);
4735
4888
  } catch (error) {
4736
4889
  process.stderr.write(`[${this.name}] channel memory intent classifier failed: ${sanitizeLogText(this.channelMemoryErrorMessage(error), 200)}
4737
4890
  `);
4738
4891
  return null;
4739
4892
  }
4740
- if (classified.confidence < CHANNEL_MEMORY_CLASSIFIER_MIN_CONFIDENCE) {
4893
+ const confidence = classified && typeof classified === "object" ? classified.confidence : void 0;
4894
+ if (typeof confidence !== "number" || !Number.isFinite(confidence) || confidence < 0 || confidence > 1 || confidence < CHANNEL_MEMORY_CLASSIFIER_MIN_CONFIDENCE) {
4741
4895
  return null;
4742
4896
  }
4743
- if (classified.intent === "remember") {
4744
- const memory = classified.memory?.trim();
4897
+ const result = classified;
4898
+ const targetIds = result.targetIds;
4899
+ const entryById = new Map(entries.map((entry2) => [entry2.id, entry2]));
4900
+ const resolvedEntries = targetIds === void 0 ? void 0 : Array.isArray(targetIds) && targetIds.every((id) => typeof id === "string" && entryById.has(id)) && new Set(targetIds).size === targetIds.length ? this.entriesForChannelMemoryIds(entries, targetIds) : null;
4901
+ if (result.intent === "remember") {
4902
+ const memory = typeof result.memory === "string" ? result.memory.trim() : "";
4745
4903
  return memory ? { kind: "remember", text: memory } : null;
4746
4904
  }
4747
- if (classified.intent === "list") {
4748
- return { kind: "list" };
4905
+ if (result.intent === "list") {
4906
+ if (resolvedEntries === void 0)
4907
+ return { kind: "list", page: 1 };
4908
+ if (resolvedEntries === null)
4909
+ return null;
4910
+ return resolvedEntries.length === 0 ? { kind: "no_match" } : {
4911
+ kind: "list_matches",
4912
+ ids: resolvedEntries.map((entry2) => entry2.id)
4913
+ };
4749
4914
  }
4750
- if (classified.intent === "clear_all") {
4915
+ if (result.intent === "clear_all") {
4751
4916
  return { kind: "clear_request" };
4752
4917
  }
4918
+ if (result.intent !== "inspect" && result.intent !== "update" && result.intent !== "remove") {
4919
+ return null;
4920
+ }
4921
+ if (resolvedEntries === null || resolvedEntries === void 0)
4922
+ return null;
4923
+ if (resolvedEntries.length === 0)
4924
+ return { kind: "no_match" };
4925
+ if (resolvedEntries.length > 1) {
4926
+ return {
4927
+ kind: "ambiguous",
4928
+ ids: resolvedEntries.map((entry2) => entry2.id)
4929
+ };
4930
+ }
4931
+ const entry = resolvedEntries[0];
4932
+ if (result.intent === "inspect")
4933
+ return { kind: "inspect", id: entry.id };
4934
+ if (result.intent === "remove") {
4935
+ return {
4936
+ kind: "natural_remove",
4937
+ id: entry.id,
4938
+ expectedText: entry.text
4939
+ };
4940
+ }
4941
+ const text = typeof result.memory === "string" ? result.memory.trim() : "";
4942
+ if (text) {
4943
+ return {
4944
+ kind: "natural_update",
4945
+ id: entry.id,
4946
+ text,
4947
+ expectedText: entry.text
4948
+ };
4949
+ }
4753
4950
  return null;
4754
4951
  }
4755
4952
  channelMemoryErrorMessage(error) {
@@ -5081,7 +5278,7 @@ ${promptText}`;
5081
5278
  }
5082
5279
  let memoryIntent = parseChannelMemoryIntent(envelope.text);
5083
5280
  if (!memoryIntent && this.shouldClassifyChannelMemoryIntent(envelope.text)) {
5084
- memoryIntent = await this.classifyChannelMemoryIntent(envelope.text);
5281
+ memoryIntent = await this.classifyChannelMemoryIntent(envelope);
5085
5282
  }
5086
5283
  if (memoryIntent) {
5087
5284
  await this.handleChannelMemoryIntent(envelope, memoryIntent);
@@ -4,22 +4,22 @@ import {
4
4
  Client,
5
5
  So,
6
6
  StdioClientTransport
7
- } from "./chunk-K7CRWKOE.js";
7
+ } from "./chunk-R6AO7HBQ.js";
8
+ import "./chunk-T4TZQJ7W.js";
8
9
  import "./chunk-H6XPXXMH.js";
9
10
  import "./chunk-5M6IDOMF.js";
10
- import "./chunk-E67NFMF4.js";
11
+ import "./chunk-A2HWMJVO.js";
11
12
  import "./chunk-RCEEXIOO.js";
12
13
  import "./chunk-KKRTYONM.js";
13
14
  import "./chunk-TV6K2FB4.js";
14
15
  import "./chunk-E2UVIFI2.js";
15
- import "./chunk-6OATMEYN.js";
16
16
  import "./chunk-XU457J4V.js";
17
17
  import "./chunk-VDDGDZMA.js";
18
18
  import "./chunk-SPJQO2CE.js";
19
19
  import "./chunk-SZRN75WQ.js";
20
20
  import "./chunk-HTO4JFDZ.js";
21
21
  import "./chunk-CPBF7KYF.js";
22
- import "./chunk-TXY2C3D2.js";
22
+ import "./chunk-F333XEAU.js";
23
23
  import "./chunk-6AM5D4ME.js";
24
24
  import "./chunk-2Z5UX4KI.js";
25
25
  import "./chunk-ARKANCNX.js";
@@ -27,25 +27,25 @@ import "./chunk-L5U3ELZX.js";
27
27
  import "./chunk-TYLOFD2U.js";
28
28
  import {
29
29
  safeJsonStringify
30
- } from "./chunk-P6LART6G.js";
30
+ } from "./chunk-BTSE2DUP.js";
31
31
  import "./chunk-4WKAA4KS.js";
32
32
  import "./chunk-CR3C7WXL.js";
33
- import "./chunk-CARU2RR2.js";
33
+ import "./chunk-RTV5TUYB.js";
34
34
  import "./chunk-VGC4I5JJ.js";
35
35
  import "./chunk-FBU7WRZI.js";
36
36
  import "./chunk-Y66VOBRP.js";
37
- import "./chunk-WX6SD4IQ.js";
37
+ import "./chunk-WTNZ6DXB.js";
38
38
  import {
39
39
  BaseDeclarativeTool,
40
40
  BaseToolInvocation
41
- } from "./chunk-2UUAIFQO.js";
41
+ } from "./chunk-JGUT3LWZ.js";
42
42
  import "./chunk-OKAIGAYW.js";
43
43
  import "./chunk-ZPAHLFZU.js";
44
44
  import "./chunk-JESCGQM3.js";
45
45
  import "./chunk-WIEO4CWB.js";
46
46
  import "./chunk-XVNQMZ2I.js";
47
- import "./chunk-B7NUUEXC.js";
48
- import "./chunk-TQBODCFD.js";
47
+ import "./chunk-FEOZBUMT.js";
48
+ import "./chunk-VRR65QYW.js";
49
49
  import "./chunk-A4UCTEB5.js";
50
50
  import "./chunk-XWRJCPHC.js";
51
51
  import "./chunk-4LD5APFL.js";
@@ -5,12 +5,12 @@ import {
5
5
  parseChannelWebhookConfig,
6
6
  parseChannelWebhookConfigLenient,
7
7
  resolveEnvVars
8
- } from "./chunk-OATTJGPJ.js";
9
- import "./chunk-ZRKBI3DP.js";
8
+ } from "./chunk-5CNYZ7TN.js";
9
+ import "./chunk-FNX3LGAK.js";
10
10
  import {
11
11
  findCliEntryPath
12
12
  } from "./chunk-V6WHFGST.js";
13
- import "./chunk-SXU3KKNI.js";
13
+ import "./chunk-ZQIYGQCG.js";
14
14
  import "./chunk-UDXSXLER.js";
15
15
  import "./chunk-H6XPXXMH.js";
16
16
  import "./chunk-5O2XNYP6.js";
@@ -4,49 +4,49 @@ import {
4
4
  collectContextData,
5
5
  contextCommand,
6
6
  formatContextUsageText
7
- } from "./chunk-B5I2IIWY.js";
7
+ } from "./chunk-46Y6SSQ7.js";
8
8
  import "./chunk-4WGODMVR.js";
9
9
  import "./chunk-7X7TEQNX.js";
10
10
  import "./chunk-HTHUX2T5.js";
11
- import "./chunk-RDRVMDWV.js";
11
+ import "./chunk-EMJJBXS7.js";
12
12
  import "./chunk-YUZI3WAC.js";
13
- import "./chunk-K7CRWKOE.js";
13
+ import "./chunk-R6AO7HBQ.js";
14
+ import "./chunk-T4TZQJ7W.js";
14
15
  import "./chunk-H6XPXXMH.js";
15
16
  import "./chunk-5M6IDOMF.js";
16
- import "./chunk-E67NFMF4.js";
17
+ import "./chunk-A2HWMJVO.js";
17
18
  import "./chunk-RCEEXIOO.js";
18
19
  import "./chunk-KKRTYONM.js";
19
20
  import "./chunk-TV6K2FB4.js";
20
21
  import "./chunk-E2UVIFI2.js";
21
- import "./chunk-6OATMEYN.js";
22
22
  import "./chunk-XU457J4V.js";
23
23
  import "./chunk-VDDGDZMA.js";
24
24
  import "./chunk-SPJQO2CE.js";
25
25
  import "./chunk-SZRN75WQ.js";
26
26
  import "./chunk-HTO4JFDZ.js";
27
27
  import "./chunk-CPBF7KYF.js";
28
- import "./chunk-TXY2C3D2.js";
28
+ import "./chunk-F333XEAU.js";
29
29
  import "./chunk-6AM5D4ME.js";
30
30
  import "./chunk-2Z5UX4KI.js";
31
31
  import "./chunk-ARKANCNX.js";
32
32
  import "./chunk-L5U3ELZX.js";
33
33
  import "./chunk-TYLOFD2U.js";
34
- import "./chunk-P6LART6G.js";
34
+ import "./chunk-BTSE2DUP.js";
35
35
  import "./chunk-4WKAA4KS.js";
36
36
  import "./chunk-CR3C7WXL.js";
37
- import "./chunk-CARU2RR2.js";
37
+ import "./chunk-RTV5TUYB.js";
38
38
  import "./chunk-VGC4I5JJ.js";
39
39
  import "./chunk-FBU7WRZI.js";
40
40
  import "./chunk-Y66VOBRP.js";
41
- import "./chunk-WX6SD4IQ.js";
42
- import "./chunk-2UUAIFQO.js";
41
+ import "./chunk-WTNZ6DXB.js";
42
+ import "./chunk-JGUT3LWZ.js";
43
43
  import "./chunk-OKAIGAYW.js";
44
44
  import "./chunk-ZPAHLFZU.js";
45
45
  import "./chunk-JESCGQM3.js";
46
46
  import "./chunk-WIEO4CWB.js";
47
47
  import "./chunk-XVNQMZ2I.js";
48
- import "./chunk-B7NUUEXC.js";
49
- import "./chunk-TQBODCFD.js";
48
+ import "./chunk-FEOZBUMT.js";
49
+ import "./chunk-VRR65QYW.js";
50
50
  import "./chunk-A4UCTEB5.js";
51
51
  import "./chunk-XWRJCPHC.js";
52
52
  import "./chunk-4LD5APFL.js";
@@ -5,7 +5,7 @@ import {
5
5
  BaseToolInvocation,
6
6
  ToolDisplayNames,
7
7
  ToolNames
8
- } from "./chunk-2UUAIFQO.js";
8
+ } from "./chunk-JGUT3LWZ.js";
9
9
  import "./chunk-7NFB7LBQ.js";
10
10
  import "./chunk-TB6UDU4T.js";
11
11
  import {
@@ -5,43 +5,43 @@ import {
5
5
  } from "./chunk-YUZI3WAC.js";
6
6
  import {
7
7
  stripTerminalControlSequences
8
- } from "./chunk-K7CRWKOE.js";
8
+ } from "./chunk-R6AO7HBQ.js";
9
+ import "./chunk-T4TZQJ7W.js";
9
10
  import "./chunk-H6XPXXMH.js";
10
11
  import "./chunk-5M6IDOMF.js";
11
- import "./chunk-E67NFMF4.js";
12
+ import "./chunk-A2HWMJVO.js";
12
13
  import "./chunk-RCEEXIOO.js";
13
14
  import "./chunk-KKRTYONM.js";
14
15
  import "./chunk-TV6K2FB4.js";
15
16
  import "./chunk-E2UVIFI2.js";
16
- import "./chunk-6OATMEYN.js";
17
17
  import "./chunk-XU457J4V.js";
18
18
  import "./chunk-VDDGDZMA.js";
19
19
  import "./chunk-SPJQO2CE.js";
20
20
  import "./chunk-SZRN75WQ.js";
21
21
  import "./chunk-HTO4JFDZ.js";
22
22
  import "./chunk-CPBF7KYF.js";
23
- import "./chunk-TXY2C3D2.js";
23
+ import "./chunk-F333XEAU.js";
24
24
  import "./chunk-6AM5D4ME.js";
25
25
  import "./chunk-2Z5UX4KI.js";
26
26
  import "./chunk-ARKANCNX.js";
27
27
  import "./chunk-L5U3ELZX.js";
28
28
  import "./chunk-TYLOFD2U.js";
29
- import "./chunk-P6LART6G.js";
29
+ import "./chunk-BTSE2DUP.js";
30
30
  import "./chunk-4WKAA4KS.js";
31
31
  import "./chunk-CR3C7WXL.js";
32
- import "./chunk-CARU2RR2.js";
32
+ import "./chunk-RTV5TUYB.js";
33
33
  import "./chunk-VGC4I5JJ.js";
34
34
  import "./chunk-FBU7WRZI.js";
35
35
  import "./chunk-Y66VOBRP.js";
36
- import "./chunk-WX6SD4IQ.js";
37
- import "./chunk-2UUAIFQO.js";
36
+ import "./chunk-WTNZ6DXB.js";
37
+ import "./chunk-JGUT3LWZ.js";
38
38
  import "./chunk-OKAIGAYW.js";
39
39
  import "./chunk-ZPAHLFZU.js";
40
40
  import "./chunk-JESCGQM3.js";
41
41
  import "./chunk-WIEO4CWB.js";
42
42
  import "./chunk-XVNQMZ2I.js";
43
- import "./chunk-B7NUUEXC.js";
44
- import "./chunk-TQBODCFD.js";
43
+ import "./chunk-FEOZBUMT.js";
44
+ import "./chunk-VRR65QYW.js";
45
45
  import "./chunk-A4UCTEB5.js";
46
46
  import "./chunk-XWRJCPHC.js";
47
47
  import "./chunk-4LD5APFL.js";
@@ -16,7 +16,7 @@ import {
16
16
  BaseToolInvocation,
17
17
  ToolDisplayNames,
18
18
  ToolNames
19
- } from "./chunk-2UUAIFQO.js";
19
+ } from "./chunk-JGUT3LWZ.js";
20
20
  import "./chunk-WIEO4CWB.js";
21
21
  import "./chunk-7NFB7LBQ.js";
22
22
  import "./chunk-TB6UDU4T.js";
@@ -10,7 +10,7 @@ import {
10
10
  BaseToolInvocation,
11
11
  ToolDisplayNames,
12
12
  ToolNames
13
- } from "./chunk-2UUAIFQO.js";
13
+ } from "./chunk-JGUT3LWZ.js";
14
14
  import "./chunk-WIEO4CWB.js";
15
15
  import {
16
16
  getErrorMessage
@@ -14,7 +14,7 @@ import {
14
14
  BaseToolInvocation,
15
15
  ToolDisplayNames,
16
16
  ToolNames
17
- } from "./chunk-2UUAIFQO.js";
17
+ } from "./chunk-JGUT3LWZ.js";
18
18
  import "./chunk-WIEO4CWB.js";
19
19
  import "./chunk-7NFB7LBQ.js";
20
20
  import "./chunk-TB6UDU4T.js";