@lawpath-tech/openclaw 2026.2.21-4 → 2026.2.21-6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/{accounts-CQT5u65w.js → accounts-CJEDkyd7.js} +1 -1
  2. package/dist/{accounts-DFrH9IVU.js → accounts-CaJg9v7D.js} +1 -1
  3. package/dist/{accounts-C8m4ADkw.js → accounts-DQo5uGA3.js} +14 -14
  4. package/dist/{active-listener-BKTctYlH.js → active-listener-Bhmh-BBe.js} +1 -1
  5. package/dist/{agent-scope-D-SlG1bQ.js → agent-scope-CKu-vMMp.js} +3 -3
  6. package/dist/{agents-BtqLW18n.js → agents-5gS4Morq.js} +4 -4
  7. package/dist/{agents.config-B-tuPgrg.js → agents.config-DGVdd0H4.js} +1 -1
  8. package/dist/{agents.config-ICVDwC0C.js → agents.config-Dy2Tojo2.js} +1 -1
  9. package/dist/{audio-preflight-BAupR5wm.js → audio-preflight-BoDf-OA5.js} +4 -4
  10. package/dist/{audio-preflight-DSln0Zsg.js → audio-preflight-yQKupU0M.js} +29 -29
  11. package/dist/{auth-choice-BjZRva43.js → auth-choice-CujjjpDj.js} +1 -1
  12. package/dist/{auth-choice-6iuXqwcN.js → auth-choice-CyeueHh0.js} +1 -1
  13. package/dist/{banner-B3WC17dn.js → banner-BB3Z8Akj.js} +1 -1
  14. package/dist/{bindings-DL-vZcXK.js → bindings-pn9FkE0Z.js} +2 -2
  15. package/dist/build-info.json +3 -3
  16. package/dist/bundled/boot-md/handler.js +53 -53
  17. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  18. package/dist/bundled/command-logger/handler.js +1 -1
  19. package/dist/bundled/session-memory/handler.js +53 -53
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-activity-BgsTqLau.js → channel-activity-pOw1s-fe.js} +1 -1
  22. package/dist/{channel-options-BDj65ZyO.js → channel-options-C1Z6nQwx.js} +1 -1
  23. package/dist/{channel-options-G8V1c6AS.js → channel-options-DxnRn3HQ.js} +1 -1
  24. package/dist/{channel-web-B_ZYKCEQ.js → channel-web-Bkp-VxtT.js} +1 -1
  25. package/dist/{channels-cli-raxsTCN2.js → channels-cli-B7GOmHwj.js} +4 -4
  26. package/dist/{channels-cli-DqFbn6qS.js → channels-cli-DGUKSzax.js} +4 -4
  27. package/dist/{chrome-_026ohiG.js → chrome-Bnq0CyY4.js} +20 -20
  28. package/dist/{chrome-CzHty2tf.js → chrome-CQlDoNNk.js} +7 -7
  29. package/dist/{chunk-fZrBDWYg.js → chunk-BkGjWi6P.js} +1 -1
  30. package/dist/{cli-E0T5u43Z.js → cli-DSVcE01B.js} +1 -1
  31. package/dist/{cli-CR9BTL9c.js → cli-RMmIna0L.js} +1 -1
  32. package/dist/{command-format-BOHIfoCX.js → command-format-CM0AxuCk.js} +1 -1
  33. package/dist/{command-registry-BmpWsMTW.js → command-registry-C8m3qBQR.js} +9 -9
  34. package/dist/{commands-registry-3kTkR4r1.js → commands-registry-BoKLuuwG.js} +4 -4
  35. package/dist/{completion-cli-S4G6qt8g.js → completion-cli-DDqcpVLn.js} +1 -1
  36. package/dist/{completion-cli-ilRVVz-z.js → completion-cli-Dto_ttBF.js} +2 -2
  37. package/dist/{config-CScuPNjn.js → config-D0UwRKru.js} +12 -12
  38. package/dist/{config-cli-Cko5ncf5.js → config-cli-5dIx4eBy.js} +1 -1
  39. package/dist/{config-cli-WbPlELKk.js → config-cli-daCg9d8E.js} +1 -1
  40. package/dist/{configure-B-GCDUGh.js → configure-C8s3_7RF.js} +3 -3
  41. package/dist/{configure-BBkx0Gee.js → configure-DOvWFudD.js} +3 -3
  42. package/dist/{deliver-CChv42uL.js → deliver--EhsFXv7.js} +20 -20
  43. package/dist/{deliver-IOU5_B6z.js → deliver-DXUDTvJu.js} +1 -1
  44. package/dist/{diagnostic-DriDPU6M.js → diagnostic-DTfVTKJM.js} +1 -1
  45. package/dist/{doctor-completion-7mRw3cHh.js → doctor-completion-Dwy9h3mp.js} +1 -1
  46. package/dist/{doctor-completion-CJKoQcYI.js → doctor-completion-PJG8ramM.js} +1 -1
  47. package/dist/entry.js +1 -1
  48. package/dist/extensionAPI.js +6 -6
  49. package/dist/{frontmatter-CdkBcBAo.js → frontmatter-Dab6NVCF.js} +2 -2
  50. package/dist/{gateway-cli-CmSTW0ue.js → gateway-cli-08bLT4Lm.js} +14 -9
  51. package/dist/{gateway-cli-AhPjzNqQ.js → gateway-cli-Y7MMw6f2.js} +14 -9
  52. package/dist/{gemini-auth-cD8BrH5d.js → gemini-auth-jiCC1_gO.js} +1 -1
  53. package/dist/{github-copilot-token-Dgb9dAHW.js → github-copilot-token-DAycnoAs.js} +7 -7
  54. package/dist/{health-ADwLM-Or.js → health-BuZYFEjf.js} +1 -1
  55. package/dist/{health-fiXB0fGK.js → health-C47gv6Ik.js} +1 -1
  56. package/dist/{hooks-cli-DRoJbg8P.js → hooks-cli-COO_JTQt.js} +2 -2
  57. package/dist/{hooks-cli-XfbsybsC.js → hooks-cli-D0f1i-sv.js} +2 -2
  58. package/dist/{image-CdTrSqaH.js → image-BHIZnUgU.js} +1 -1
  59. package/dist/{image-B9TdLqUC.js → image-Bxlb76-w.js} +4 -4
  60. package/dist/{image-ops-DSHe7MDO.js → image-ops-Bgwps3ZY.js} +1 -1
  61. package/dist/index.js +6 -6
  62. package/dist/{ir-p6xtdC2E.js → ir-C12Waxsc.js} +4 -4
  63. package/dist/llm-slug-generator.js +53 -53
  64. package/dist/{local-roots-DxIZcL-f.js → local-roots-BXHtS1lV.js} +5 -5
  65. package/dist/{login-D1xDylNg.js → login-CSOqZ7U4.js} +7 -7
  66. package/dist/{login-qr-DuFTjxNo.js → login-qr-C0P5yf2R.js} +12 -12
  67. package/dist/{manager-CHKGgP5H.js → manager-iCRgH8LP.js} +13 -13
  68. package/dist/{manifest-registry-Dhk4A5vb.js → manifest-registry-D31TP66o.js} +19 -19
  69. package/dist/{markdown-tables-_e0OifWF.js → markdown-tables-DfvQjS1F.js} +1 -1
  70. package/dist/{message-channel-CHYSjmbr.js → message-channel-BckS8bQ9.js} +1 -1
  71. package/dist/{model-auth-3yb_4VXX.js → model-auth-4U7dwHzy.js} +9 -9
  72. package/dist/{models-2tG63q_V.js → models-DogF-UP8.js} +2 -2
  73. package/dist/{models-cli-CR_SMGJ0.js → models-cli-DIDuJyRY.js} +2 -2
  74. package/dist/{models-cli-BWxHuaVU.js → models-cli-hTpwPgdx.js} +3 -3
  75. package/dist/{onboard-DBSlZhzk.js → onboard-CAaMOWVz.js} +2 -2
  76. package/dist/{onboard-a3lJkMHB.js → onboard-Dnbsa0t_.js} +2 -2
  77. package/dist/{onboard-channels-B8j2CJsJ.js → onboard-channels-Ck5vewaM.js} +1 -1
  78. package/dist/{onboard-channels-BUE80D3V.js → onboard-channels-CxXKKyqy.js} +1 -1
  79. package/dist/{onboarding-vEEafQpu.js → onboarding-CiHD_RlU.js} +3 -3
  80. package/dist/{onboarding-BPiYCwYW.js → onboarding-CoiWlTdt.js} +3 -3
  81. package/dist/{onboarding.finalize-ASGzuJ_m.js → onboarding.finalize-DsFwibvU.js} +6 -6
  82. package/dist/{onboarding.finalize-C7185nuS.js → onboarding.finalize-dcJBGnBz.js} +5 -5
  83. package/dist/{outbound-BqU-pis3.js → outbound-CyTM7y9i.js} +7 -7
  84. package/dist/{outbound-attachment-D9iNB8-3.js → outbound-attachment-egG5Hv4A.js} +2 -2
  85. package/dist/{paths-CyR9Pa1R.js → paths-CkkDESQ2.js} +5 -5
  86. package/dist/{paths-BEAbheM8.js → paths-Cv2Q0cX2.js} +1 -1
  87. package/dist/{pi-auth-json-B22wYwcC.js → pi-auth-json-DPksdYT4.js} +8 -8
  88. package/dist/{pi-embedded-DtVM2K0j.js → pi-embedded-CrYPeE2s.js} +53 -19
  89. package/dist/{pi-embedded-BfX7An0n.js → pi-embedded-DRWWBoNo.js} +199 -165
  90. package/dist/{pi-embedded-helpers-Mzn8kkGx.js → pi-embedded-helpers-BxT45zZ8.js} +52 -52
  91. package/dist/{pi-embedded-helpers-DChC7Q7D.js → pi-embedded-helpers-F2YKLBnV.js} +4 -4
  92. package/dist/{plugin-registry-CDCLBIsW.js → plugin-registry-BJ7SMd60.js} +1 -1
  93. package/dist/{plugin-registry-DAvWT8O2.js → plugin-registry-BvNBkzNY.js} +1 -1
  94. package/dist/plugin-sdk/{accounts-fnLsjAOi.js → accounts-Ciwy7Yxd.js} +3 -3
  95. package/dist/plugin-sdk/{accounts-BcQo4OUu.js → accounts-DUBJHEgi.js} +1 -1
  96. package/dist/plugin-sdk/{accounts-DEsAwvaZ.js → accounts-wSu5JyDM.js} +1 -1
  97. package/dist/plugin-sdk/{active-listener-CeaKSm29.js → active-listener-Bnau4oiu.js} +1 -1
  98. package/dist/plugin-sdk/{agent-scope-DSex4wfg.js → agent-scope-B_K0lnIZ.js} +2 -2
  99. package/dist/plugin-sdk/{api-key-rotation-DVRFDYWE.js → api-key-rotation-ubwcEE3L.js} +1 -1
  100. package/dist/plugin-sdk/{audio-preflight-rT8tAkD-.js → audio-preflight-BS8n82KZ.js} +24 -24
  101. package/dist/plugin-sdk/{bindings-DeKqzYUw.js → bindings-y5ob6sm3.js} +2 -2
  102. package/dist/plugin-sdk/{channel-activity-WgE8Z4Bb.js → channel-activity-CCnr-9bS.js} +1 -1
  103. package/dist/plugin-sdk/{channel-web-D7oXjz9F.js → channel-web-C6TCmDNo.js} +22 -22
  104. package/dist/plugin-sdk/{chrome-CmTDPHBP.js → chrome-BY2jt7nz.js} +3 -3
  105. package/dist/plugin-sdk/{chunk-CQk9vawA.js → chunk-DyzO7IVo.js} +1 -1
  106. package/dist/plugin-sdk/{command-format-DHXa0Clc.js → command-format-DcBXOX9Z.js} +1 -1
  107. package/dist/plugin-sdk/{commands-registry-lvrJ62DW.js → commands-registry-BlifvuiT.js} +4 -4
  108. package/dist/plugin-sdk/{config-BT7sZurc.js → config-c9LTBVr8.js} +9 -9
  109. package/dist/plugin-sdk/{deliver-CJxTyTAX.js → deliver-B0aMj415.js} +10 -10
  110. package/dist/plugin-sdk/{diagnostic-Up1aMyxZ.js → diagnostic-DKyVS3IK.js} +1 -1
  111. package/dist/plugin-sdk/{image-DN02b1Un.js → image-C2wTkNPw.js} +4 -4
  112. package/dist/plugin-sdk/{image-ops-CZqefviF.js → image-ops-DvH046F-.js} +1 -1
  113. package/dist/plugin-sdk/index.js +53 -53
  114. package/dist/plugin-sdk/{ir-B7rkHLE2.js → ir-CKLBdoDN.js} +4 -4
  115. package/dist/plugin-sdk/{local-roots-BQE1Ebnw.js → local-roots-Com8GhnT.js} +3 -3
  116. package/dist/plugin-sdk/{login-De0S3iEe.js → login-Bg_WVfHE.js} +7 -7
  117. package/dist/plugin-sdk/{login-qr-DbAmVoVd.js → login-qr-0RXOeFuV.js} +9 -9
  118. package/dist/plugin-sdk/{manager-NrAHkxhT.js → manager-0ITt6KKN.js} +8 -8
  119. package/dist/plugin-sdk/{manifest-registry-DvEm2HHf.js → manifest-registry-sgHvjA6E.js} +1 -1
  120. package/dist/plugin-sdk/{markdown-tables-FPKU-GAf.js → markdown-tables-CTgITejf.js} +1 -1
  121. package/dist/plugin-sdk/{message-channel-DY9wVB2A.js → message-channel-DmB4bGFh.js} +1 -1
  122. package/dist/plugin-sdk/{model-selection-D74TGHOt.js → model-selection-eaUqWB9v.js} +4 -4
  123. package/dist/plugin-sdk/{outbound-hovTyykv.js → outbound-YogvVnLx.js} +7 -7
  124. package/dist/plugin-sdk/{outbound-attachment-t84PRHhe.js → outbound-attachment-DFlJJUUs.js} +2 -2
  125. package/dist/plugin-sdk/{pi-auth-json-3M5ZaNhl.js → pi-auth-json-BNYV9v5Z.js} +5 -5
  126. package/dist/plugin-sdk/{pi-embedded-helpers-HEdGJVz9.js → pi-embedded-helpers-D-zgah-f.js} +17 -17
  127. package/dist/plugin-sdk/{plugins-a8_TtkpO.js → plugins-Bi3zjb1D.js} +4 -4
  128. package/dist/plugin-sdk/{pw-ai-CBpL2WWS.js → pw-ai-D17TBpla.js} +8 -8
  129. package/dist/plugin-sdk/{qmd-manager-Hv8FbJlj.js → qmd-manager-C5jlBI8H.js} +4 -4
  130. package/dist/plugin-sdk/{registry-DL-33c9X.js → registry-O1yza0Vh.js} +2 -2
  131. package/dist/{replies-AytmsAUn.js → plugin-sdk/replies-Bi2MUExf.js} +3 -3
  132. package/dist/plugin-sdk/{reply-CcZVzbxJ.js → reply-DRhWRalB.js} +115 -81
  133. package/dist/plugin-sdk/{reply-prefix-DNtb4_wd.js → reply-prefix-D9Vp9XsI.js} +1 -1
  134. package/dist/plugin-sdk/{resolve-outbound-target-EACA6DIF.js → resolve-outbound-target-4LJSOI03.js} +2 -2
  135. package/dist/plugin-sdk/{resolve-route-Cqj4b_M3.js → resolve-route-DGSGaQkJ.js} +3 -3
  136. package/dist/plugin-sdk/{retry-5P3d0rYw.js → retry-JFNwfUew.js} +1 -1
  137. package/dist/plugin-sdk/{runner-CF0Vfhdz.js → runner-DVSsxWbK.js} +9 -9
  138. package/dist/plugin-sdk/{send-jhlw6FJR.js → send-7v9Tg-1N.js} +10 -10
  139. package/dist/plugin-sdk/{send-4EuOqK3R.js → send-CuVP5yhW.js} +7 -7
  140. package/dist/plugin-sdk/{send-B3LOEv4r.js → send-Cy2TYbta.js} +6 -6
  141. package/dist/plugin-sdk/{send-Cz-EZBfd.js → send-e4x0TcgT.js} +10 -10
  142. package/dist/plugin-sdk/{send-Czuwer1y.js → send-iHZz9oKf.js} +6 -6
  143. package/dist/plugin-sdk/{session-BjNuud8u.js → session-CHV-qoDA.js} +4 -4
  144. package/dist/plugin-sdk/{skill-commands-B5t3dEA3.js → skill-commands-uBEgxRtL.js} +5 -5
  145. package/dist/plugin-sdk/{skills-n6vXaMPn.js → skills-CIpuy3Vv.js} +7 -7
  146. package/dist/plugin-sdk/{sqlite-ulpcowfN.js → sqlite-DUu0dwic.js} +1 -1
  147. package/dist/plugin-sdk/{store-CLotPIp_.js → store-BVL3fS5q.js} +2 -2
  148. package/dist/plugin-sdk/{subsystem-C9WnrKN8.js → subsystem-C4Rh0kdL.js} +1 -1
  149. package/dist/plugin-sdk/{tables-7y86aoG1.js → tables-DHwGo-4a.js} +1 -1
  150. package/dist/{target-errors-1-pM-0-N.js → plugin-sdk/target-errors-DGfjmC5j.js} +2 -2
  151. package/dist/plugin-sdk/{thinking-b64dDuH9.js → thinking-D3o92jol.js} +5 -5
  152. package/dist/plugin-sdk/{tokens-2475WU2Z.js → tokens-K9ITCatc.js} +1 -1
  153. package/dist/plugin-sdk/{tool-images-CbUjCJCh.js → tool-images-zxFUoVW3.js} +2 -2
  154. package/dist/plugin-sdk/{tool-loop-detection-D0ADW0h2.js → tool-loop-detection-BBRtoox8.js} +2 -2
  155. package/dist/plugin-sdk/web-Ct7mP_gq.js +65 -0
  156. package/dist/plugin-sdk/{whatsapp-actions-DrC9AVN9.js → whatsapp-actions-DdqYVOos.js} +21 -21
  157. package/dist/{plugins-BfEZesgD.js → plugins-9d8EqI-y.js} +9 -9
  158. package/dist/{plugins-cli-ekc2VJ2E.js → plugins-cli--LHZoYj1.js} +2 -2
  159. package/dist/{plugins-cli-BUojFAGL.js → plugins-cli-C_3vwAkb.js} +2 -2
  160. package/dist/{program-C6lY3-78.js → program-Da_x_bot.js} +7 -7
  161. package/dist/{program-context-Cf4DLb4D.js → program-context-Cx1Qh1rs.js} +17 -17
  162. package/dist/{prompt-select-styled-BB0toldS.js → prompt-select-styled-Bymthwby.js} +4 -4
  163. package/dist/{prompt-select-styled-DZrDBBvM.js → prompt-select-styled-CW0DXnqy.js} +4 -4
  164. package/dist/{provider-auth-helpers-DzLX-hrT.js → provider-auth-helpers-BVl_Luuc.js} +1 -1
  165. package/dist/{provider-auth-helpers-BmRtSzv1.js → provider-auth-helpers-CtRweZXm.js} +1 -1
  166. package/dist/{push-apns-DRicQb8n.js → push-apns-DUaQ63kJ.js} +1 -1
  167. package/dist/{push-apns-BoavuUl1.js → push-apns-ekX9ZTw-.js} +1 -1
  168. package/dist/{pw-ai-BE9RDOQB.js → pw-ai-CbID-iUw.js} +11 -11
  169. package/dist/{pw-ai-CpnhdYBs.js → pw-ai-DrpEVs06.js} +1 -1
  170. package/dist/{qmd-manager-ClbsWpec.js → qmd-manager-Cf7kXRay.js} +7 -7
  171. package/dist/{register.agent-Ddx0H8cv.js → register.agent-CNVcqBdt.js} +6 -6
  172. package/dist/{register.agent-BmmgT0mN.js → register.agent-DIsFvRR6.js} +5 -5
  173. package/dist/{register.configure-DJnHqk6O.js → register.configure-BIJfddKS.js} +6 -6
  174. package/dist/{register.configure-CQU6KgeW.js → register.configure-CJoWBabk.js} +6 -6
  175. package/dist/{register.maintenance-Cqc5yCQG.js → register.maintenance-BRek-1ya.js} +7 -7
  176. package/dist/{register.maintenance-BV1xriuR.js → register.maintenance-Cz2zQo7V.js} +8 -8
  177. package/dist/{register.message-Ihec9Qhj.js → register.message-BXmCfdH1.js} +2 -2
  178. package/dist/{register.message-CNpNd0Ap.js → register.message-Ctt3_FvF.js} +2 -2
  179. package/dist/{register.onboard-DIwP9ira.js → register.onboard-461jnfmp.js} +4 -4
  180. package/dist/{register.onboard-CL9W60Ru.js → register.onboard-MafRy-YC.js} +4 -4
  181. package/dist/{register.setup-CsdexgyX.js → register.setup-B00v-7zz.js} +4 -4
  182. package/dist/{register.setup-2GCiWxqM.js → register.setup-DWTcsKRx.js} +4 -4
  183. package/dist/{register.status-health-sessions-GhqBz76y.js → register.status-health-sessions-GbMD4jFP.js} +3 -3
  184. package/dist/{register.status-health-sessions-CZoLCevz.js → register.status-health-sessions-X9_7OJkB.js} +3 -3
  185. package/dist/{register.subclis-B4o6BJ2N.js → register.subclis-u7MHey8m.js} +9 -9
  186. package/dist/{registry-DpeZG5fo.js → registry-wimgwqAA.js} +18 -18
  187. package/dist/{plugin-sdk/replies-BsiP6hrm.js → replies-Byh9FfWs.js} +3 -3
  188. package/dist/{reply-CebOfFpO.js → reply-DMk4EZm4.js} +39 -5
  189. package/dist/{reply-prefix-CssWitTj.js → reply-prefix-gRdjPOm5.js} +1 -1
  190. package/dist/{resolve-route-DSDE-n34.js → resolve-route-CyHelKQ0.js} +4 -4
  191. package/dist/{retry-Bdu4_ZcT.js → retry-DwLEH9x4.js} +1 -1
  192. package/dist/{run-main-Dhw3C-_j.js → run-main-B7R_5UKA.js} +14 -14
  193. package/dist/{runner-B-q1xy9_.js → runner-CHDFbZ9T.js} +1 -1
  194. package/dist/{runner-DU6rPdbF.js → runner-CJ_5xc_x.js} +9 -9
  195. package/dist/{send-d8Q5AJj9.js → send-BQ-4ogN3.js} +18 -18
  196. package/dist/{send-CT34cBxw.js → send-DB9VeUuY.js} +10 -10
  197. package/dist/{send-B0jdgPgL.js → send-DRUbeUiJ.js} +6 -6
  198. package/dist/{send-DbL1jVFV.js → send-DU-5eFpT.js} +7 -7
  199. package/dist/{send-CcqTwaor.js → send-DWg2VUt0.js} +6 -6
  200. package/dist/{server-node-events-Cx6vpHYY.js → server-node-events-BOFr19ex.js} +2 -2
  201. package/dist/{server-node-events-Cd_Um0Ih.js → server-node-events-CmEqVERQ.js} +2 -2
  202. package/dist/{session-B17teh6u.js → session-B3K56SrZ.js} +8 -8
  203. package/dist/{session-dirs-D1JZtaFB.js → session-dirs-B9BYJOI3.js} +1 -1
  204. package/dist/{session-dirs-BksC_ZJx.js → session-dirs-Dbcjy8I0.js} +1 -1
  205. package/dist/{skill-commands-BTCEJgtW.js → skill-commands-qdiEBLa5.js} +9 -9
  206. package/dist/{skills-DgwYCNoi.js → skills-YvF_jQ7u.js} +21 -21
  207. package/dist/{sqlite-C3XxSzBN.js → sqlite-B6SD9PTM.js} +4 -4
  208. package/dist/{status-CadxgcYe.js → status-7mnD_0oy.js} +2 -2
  209. package/dist/{status-BcZRY3RM.js → status-BphM--I6.js} +1 -1
  210. package/dist/{status-vxjEMgge.js → status-CfB8C1S5.js} +1 -1
  211. package/dist/{status-UO6LTko9.js → status-OhqCGfGI.js} +2 -2
  212. package/dist/{store-JuIN_QG_.js → store-Bb9yEhl9.js} +2 -2
  213. package/dist/{subagent-registry-DxAANdOO.js → subagent-registry-DfNgHH_n.js} +39 -5
  214. package/dist/{subsystem-BF9jT_Nw.js → subsystem-BEdh_1O5.js} +1 -1
  215. package/dist/{tables-3Vjm1My5.js → tables-D0LXVaNN.js} +1 -1
  216. package/dist/{plugin-sdk/target-errors-Bu2PpCSS.js → target-errors-BLDmuN_6.js} +2 -2
  217. package/dist/{thinking-CYyGFSWd.js → thinking-THRIcxDi.js} +5 -5
  218. package/dist/{tokens-B-c56SkM.js → tokens-GCiqN5mi.js} +1 -1
  219. package/dist/{tool-images-i5cb4-nX.js → tool-images-D4n7jwYR.js} +2 -2
  220. package/dist/{tool-loop-detection-Bu3OGskw.js → tool-loop-detection-BPAeTbUj.js} +3 -3
  221. package/dist/{update-cli-CidTQDU8.js → update-cli-CjpoNUkt.js} +8 -8
  222. package/dist/{update-cli-CqsOKfGt.js → update-cli-DLD4tZtd.js} +7 -7
  223. package/dist/{web-BBMLIpu1.js → web-CN6HZzwn.js} +57 -57
  224. package/dist/{web-IgO1--qh.js → web-DG1eHpeH.js} +2 -2
  225. package/dist/{web-IvoqYVGl.js → web-gYLnj19G.js} +6 -6
  226. package/dist/{web-CxJJ94q0.js → web-ifWeOB6N.js} +1 -1
  227. package/dist/{whatsapp-actions-55P6E6cS.js → whatsapp-actions-BKmhU2Qu.js} +23 -23
  228. package/dist/{workspace-D-fnhRGM.js → workspace-BjFHGrDX.js} +6 -6
  229. package/package.json +1 -1
  230. package/dist/plugin-sdk/web-DKcOGlkN.js +0 -65
@@ -1,75 +1,75 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { c as expandHomePrefix, i as resolveGatewayPort, n as resolveConfigPath, s as resolveStateDir, t as STATE_DIR, u as resolveRequiredHomeDir } from "./paths-CyR9Pa1R.js";
2
+ import { c as expandHomePrefix, i as resolveGatewayPort, n as resolveConfigPath, s as resolveStateDir, t as STATE_DIR, u as resolveRequiredHomeDir } from "./paths-CkkDESQ2.js";
3
3
  import { _ as isCronSessionKey, b as resolveThreadParentSessionKey, c as normalizeMainKey, d as sanitizeAgentId, f as DEFAULT_ACCOUNT_ID, g as isAcpSessionKey, h as getSubagentDepth, l as resolveAgentIdFromSessionKey, o as classifySessionKeyShape, p as normalizeAccountId$2, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, u as resolveThreadSessionKeys, v as isSubagentSessionKey, y as parseAgentSessionKey } from "./session-key-BCzIW1Y2.js";
4
- import { $ as warn, B as sleep$1, D as escapeRegExp, E as ensureDir$3, G as danger, I as resolveUserPath, J as logVerbose, M as normalizeE164, O as formatTerminalLink, R as shortenHomeInString, S as CONFIG_DIR, U as truncateUtf16Safe, V as sliceUtf16Safe, W as isPlainObject, X as setVerbose, Z as shouldLogVerbose, _ as matchPluginCommand, a as normalizeAnyChannelId, d as createPluginRegistry, dt as resolvePreferredOpenClawTmpDir, et as colorize, f as normalizePluginHttpPath, g as listPluginCommands, h as getPluginCommandSpecs, k as isRecord$1, l as requireActivePluginRegistry, lt as normalizeLogLevel, m as executePluginCommand, n as CHAT_CHANNEL_ORDER, nt as theme, o as normalizeChannelId, p as clearPluginCommands, r as DEFAULT_CHAT_CHANNEL, rt as getChildLogger, tt as isRich, u as setActivePluginRegistry, v as createInternalHookEvent, w as clampInt, x as triggerInternalHook, z as shortenHomePath } from "./registry-DpeZG5fo.js";
5
- import { a as resolveAgentModelPrimary, c as resolveDefaultAgentId, d as resolveSessionAgentIds, i as resolveAgentModelFallbacksOverride, l as resolveEffectiveModelFallbacks, n as resolveAgentConfig, o as resolveAgentSkillsFilter, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId } from "./agent-scope-D-SlG1bQ.js";
6
- import { a as registerActiveProgressLine, i as clearActiveProgressLine, n as createNonExitingRuntime, o as unregisterActiveProgressLine, r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BF9jT_Nw.js";
7
- import { S as logWarn, _ as runExec, a as DEFAULT_IDENTITY_FILENAME, b as logError, f as loadWorkspaceBootstrapFiles, g as runCommandWithTimeout, l as ensureAgentWorkspace, m as resolveOpenClawPackageRoot, n as DEFAULT_AGENT_WORKSPACE_DIR, r as DEFAULT_BOOTSTRAP_FILENAME, u as filterBootstrapFilesForSession, v as spawnWithFallback, x as logInfo, y as logDebug } from "./workspace-D-fnhRGM.js";
8
- import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN, r as isSilentReplyPrefixText, t as HEARTBEAT_TOKEN } from "./tokens-B-c56SkM.js";
9
- import { _ as resolveDiscordAccount, a as normalizeWhatsAppTarget, c as listTelegramAccountIds, d as resolveSlackAccount, g as listEnabledDiscordAccounts, h as createDiscordActionGate, i as isWhatsAppGroupJid, l as resolveTelegramAccount, m as resolveSlackBotToken, n as listChannelPlugins, o as createTelegramActionGate, p as resolveSlackAppToken, r as normalizeChannelId$1, s as listEnabledTelegramAccounts, t as getChannelPlugin, u as resolveTelegramToken, v as normalizeDiscordToken } from "./plugins-BfEZesgD.js";
10
- import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExists, r as getWebAuthAgeMs, t as resolveWhatsAppAccount } from "./accounts-C8m4ADkw.js";
4
+ import { $ as warn, B as sleep$1, D as escapeRegExp, E as ensureDir$3, G as danger, I as resolveUserPath, J as logVerbose, M as normalizeE164, O as formatTerminalLink, R as shortenHomeInString, S as CONFIG_DIR, U as truncateUtf16Safe, V as sliceUtf16Safe, W as isPlainObject, X as setVerbose, Z as shouldLogVerbose, _ as matchPluginCommand, a as normalizeAnyChannelId, d as createPluginRegistry, dt as resolvePreferredOpenClawTmpDir, et as colorize, f as normalizePluginHttpPath, g as listPluginCommands, h as getPluginCommandSpecs, k as isRecord$1, l as requireActivePluginRegistry, lt as normalizeLogLevel, m as executePluginCommand, n as CHAT_CHANNEL_ORDER, nt as theme, o as normalizeChannelId, p as clearPluginCommands, r as DEFAULT_CHAT_CHANNEL, rt as getChildLogger, tt as isRich, u as setActivePluginRegistry, v as createInternalHookEvent, w as clampInt, x as triggerInternalHook, z as shortenHomePath } from "./registry-wimgwqAA.js";
5
+ import { a as resolveAgentModelPrimary, c as resolveDefaultAgentId, d as resolveSessionAgentIds, i as resolveAgentModelFallbacksOverride, l as resolveEffectiveModelFallbacks, n as resolveAgentConfig, o as resolveAgentSkillsFilter, r as resolveAgentDir, s as resolveAgentWorkspaceDir, t as listAgentIds, u as resolveSessionAgentId } from "./agent-scope-CKu-vMMp.js";
6
+ import { a as registerActiveProgressLine, i as clearActiveProgressLine, n as createNonExitingRuntime, o as unregisterActiveProgressLine, r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BEdh_1O5.js";
7
+ import { S as logWarn, _ as runExec, a as DEFAULT_IDENTITY_FILENAME, b as logError, f as loadWorkspaceBootstrapFiles, g as runCommandWithTimeout, l as ensureAgentWorkspace, m as resolveOpenClawPackageRoot, n as DEFAULT_AGENT_WORKSPACE_DIR, r as DEFAULT_BOOTSTRAP_FILENAME, u as filterBootstrapFilesForSession, v as spawnWithFallback, x as logInfo, y as logDebug } from "./workspace-BjFHGrDX.js";
8
+ import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN, r as isSilentReplyPrefixText, t as HEARTBEAT_TOKEN } from "./tokens-GCiqN5mi.js";
9
+ import { _ as resolveDiscordAccount, a as normalizeWhatsAppTarget, c as listTelegramAccountIds, d as resolveSlackAccount, g as listEnabledDiscordAccounts, h as createDiscordActionGate, i as isWhatsAppGroupJid, l as resolveTelegramAccount, m as resolveSlackBotToken, n as listChannelPlugins, o as createTelegramActionGate, p as resolveSlackAppToken, r as normalizeChannelId$1, s as listEnabledTelegramAccounts, t as getChannelPlugin, u as resolveTelegramToken, v as normalizeDiscordToken } from "./plugins-9d8EqI-y.js";
10
+ import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExists, r as getWebAuthAgeMs, t as resolveWhatsAppAccount } from "./accounts-DQo5uGA3.js";
11
11
  import { t as normalizeChatType } from "./chat-type-C_KiWNAH.js";
12
12
  import { t as parseBooleanValue$1 } from "./boolean-B8-BqKGQ.js";
13
- import { n as resolveCliName, r as isTruthyEnvValue, t as formatCliCommand } from "./command-format-BOHIfoCX.js";
14
- import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-CcqTwaor.js";
15
- import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-CT34cBxw.js";
16
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-CChv42uL.js";
17
- import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-DriDPU6M.js";
13
+ import { n as resolveCliName, r as isTruthyEnvValue, t as formatCliCommand } from "./command-format-CM0AxuCk.js";
14
+ import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-DWg2VUt0.js";
15
+ import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-DB9VeUuY.js";
16
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver--EhsFXv7.js";
17
+ import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-DTfVTKJM.js";
18
18
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Bxo4UHOL.js";
19
- import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-CQT5u65w.js";
20
- import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-d8Q5AJj9.js";
21
- import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-DSHe7MDO.js";
22
- import { A as normalizeProviderId, C as buildAllowedModelSet, D as isCliProvider, E as findNormalizedProviderValue, F as resolveSubagentSpawnModelSelection, G as DEFAULT_MODEL, H as OLLAMA_NATIVE_BASE_URL, I as resolveThinkingDefault, J as normalizeSecretInput, K as DEFAULT_PROVIDER, M as resolveConfiguredModelRef, N as resolveDefaultModelForAgent, O as modelKey, P as resolveModelRefFromString, T as buildModelAliasIndex, U as createOllamaStreamFn, W as DEFAULT_CONTEXT_TOKENS, Y as getShellPathFromLoginShell, Z as resolveShellEnvFallbackTimeoutMs, _ as ensureAuthProfileStore, a as resolveEnvApiKey, b as withFileLock, c as resolveAuthProfileOrder, d as markAuthProfileFailure, f as markAuthProfileUsed, g as markAuthProfileGood, h as listProfilesForProvider, i as resolveApiKeyForProvider, k as normalizeModelRef$2, l as getSoonestCooldownExpiry, m as dedupeProfileIds, n as getCustomProviderApiKey, o as resolveModelAuthMode, p as resolveApiKeyForProfile, q as resolveAuthProfileDisplayLabel, r as requireApiKey, t as getApiKeyForModel, u as isProfileInCooldown, v as resolveAuthStorePathForDisplay, w as buildConfiguredAllowlistKeys, y as resolveOpenClawAgentDir } from "./model-auth-3yb_4VXX.js";
23
- import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-Dgb9dAHW.js";
19
+ import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-CJEDkyd7.js";
20
+ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as buildTelegramGroupFrom, D as buildTypingThreadParams, E as buildTelegramThreadParams, F as resolveTelegramMediaPlaceholder, G as formatLocationText, H as firstDefined$1, I as resolveTelegramReplyId, J as readChannelAllowFromStore, K as toLocationContext, L as resolveTelegramStreamMode, M as normalizeForwardedContext, N as resolveTelegramForumThreadId, O as describeReplyTarget, P as resolveTelegramGroupAllowFromContext, Q as listPairingChannels, R as resolveTelegramThreadSpec, S as buildSenderName, T as buildTelegramParentPeer, U as isSenderIdAllowed, V as resolveSenderAllowMatch, W as mergeAllowFromSources, X as upsertChannelPairingRequest, Y as removeChannelAllowFromStoreEntry, Z as getPairingAdapter, _ as resolveTelegramFetch, a as reactMessageTelegram, b as buildGroupLabel, c as sendStickerTelegram, d as wasSentByBot, et as parseTelegramTarget, f as isRecoverableTelegramNetworkError, g as wrapFileReferencesInHtml, h as renderTelegramHtmlText, i as editMessageTelegram, j as hasBotMention, k as expandTextLinks, m as markdownToTelegramHtml, n as createForumTopicTelegram, o as sendMessageTelegram, p as markdownToTelegramChunks, q as addChannelAllowFromStoreEntry, r as deleteMessageTelegram, s as sendPollTelegram, t as buildInlineKeyboard, tt as resolveTelegramTargetChatType, u as resolveTelegramVoiceSend, v as splitTelegramCaption, w as buildTelegramGroupPeerId, x as buildSenderLabel, y as withTelegramApiErrorLogging, z as isSenderAllowed$1 } from "./send-BQ-4ogN3.js";
21
+ import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-Bgwps3ZY.js";
22
+ import { A as normalizeProviderId, C as buildAllowedModelSet, D as isCliProvider, E as findNormalizedProviderValue, F as resolveSubagentSpawnModelSelection, G as DEFAULT_MODEL, H as OLLAMA_NATIVE_BASE_URL, I as resolveThinkingDefault, J as normalizeSecretInput, K as DEFAULT_PROVIDER, M as resolveConfiguredModelRef, N as resolveDefaultModelForAgent, O as modelKey, P as resolveModelRefFromString, T as buildModelAliasIndex, U as createOllamaStreamFn, W as DEFAULT_CONTEXT_TOKENS, Y as getShellPathFromLoginShell, Z as resolveShellEnvFallbackTimeoutMs, _ as ensureAuthProfileStore, a as resolveEnvApiKey, b as withFileLock, c as resolveAuthProfileOrder, d as markAuthProfileFailure, f as markAuthProfileUsed, g as markAuthProfileGood, h as listProfilesForProvider, i as resolveApiKeyForProvider, k as normalizeModelRef$2, l as getSoonestCooldownExpiry, m as dedupeProfileIds, n as getCustomProviderApiKey, o as resolveModelAuthMode, p as resolveApiKeyForProfile, q as resolveAuthProfileDisplayLabel, r as requireApiKey, t as getApiKeyForModel, u as isProfileInCooldown, v as resolveAuthStorePathForDisplay, w as buildConfiguredAllowlistKeys, y as resolveOpenClawAgentDir } from "./model-auth-4U7dwHzy.js";
23
+ import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-DAycnoAs.js";
24
24
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DaNAekda.js";
25
- import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-CHYSjmbr.js";
26
- import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-Mzn8kkGx.js";
27
- import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-CScuPNjn.js";
28
- import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverOpenClawPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-Dhk4A5vb.js";
29
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-_026ohiG.js";
30
- import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-DgwYCNoi.js";
25
+ import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BckS8bQ9.js";
26
+ import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-BxT45zZ8.js";
27
+ import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-D0UwRKru.js";
28
+ import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverOpenClawPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-D31TP66o.js";
29
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-Bnq0CyY4.js";
30
+ import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-YvF_jQ7u.js";
31
31
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-BoQgnc8X.js";
32
32
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-BTMDZjHT.js";
33
- import { n as getMediaDir, r as saveMediaBuffer } from "./store-JuIN_QG_.js";
34
- import { _ as normalizeAtHashSlug, a as normalizeReasoningLevel, b as normalizeStringEntriesLower, c as normalizeVerboseLevel, d as getChannelDock, f as listChannelDocks, g as resolveChannelGroupToolsPolicy, h as resolveChannelGroupRequireMention, i as normalizeElevatedLevel, l as resolveResponseUsageMode, m as resolveChannelGroupPolicy, n as formatXHighModelHint, o as normalizeThinkLevel, p as normalizeSignalMessagingTarget, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking, v as normalizeHyphenSlug, y as normalizeStringEntries } from "./thinking-CYyGFSWd.js";
33
+ import { n as getMediaDir, r as saveMediaBuffer } from "./store-Bb9yEhl9.js";
34
+ import { _ as normalizeAtHashSlug, a as normalizeReasoningLevel, b as normalizeStringEntriesLower, c as normalizeVerboseLevel, d as getChannelDock, f as listChannelDocks, g as resolveChannelGroupToolsPolicy, h as resolveChannelGroupRequireMention, i as normalizeElevatedLevel, l as resolveResponseUsageMode, m as resolveChannelGroupPolicy, n as formatXHighModelHint, o as normalizeThinkLevel, p as normalizeSignalMessagingTarget, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking, v as normalizeHyphenSlug, y as normalizeStringEntries } from "./thinking-THRIcxDi.js";
35
35
  import { n as resolveConversationLabel } from "./conversation-label-DXUkoKcB.js";
36
- import { t as resolveIMessageAccount } from "./accounts-DFrH9IVU.js";
37
- import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-BEAbheM8.js";
36
+ import { t as resolveIMessageAccount } from "./accounts-CaJg9v7D.js";
37
+ import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-Cv2Q0cX2.js";
38
38
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-DDYvbmRV.js";
39
- import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-i5cb4-nX.js";
40
- import { S as ensureOpenClawModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-B9TdLqUC.js";
41
- import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CssWitTj.js";
42
- import { n as resolveMemorySearchConfig } from "./manager-CHKGgP5H.js";
43
- import { d as listMemoryFiles, f as normalizeExtraMemoryPaths, g as runTasksWithConcurrency } from "./sqlite-C3XxSzBN.js";
44
- import { n as retryAsync } from "./retry-Bdu4_ZcT.js";
45
- import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-1-pM-0-N.js";
46
- import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-fZrBDWYg.js";
47
- import { n as resolveMarkdownTableMode } from "./markdown-tables-_e0OifWF.js";
39
+ import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-D4n7jwYR.js";
40
+ import { S as ensureOpenClawModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-Bxlb76-w.js";
41
+ import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-gRdjPOm5.js";
42
+ import { n as resolveMemorySearchConfig } from "./manager-iCRgH8LP.js";
43
+ import { d as listMemoryFiles, f as normalizeExtraMemoryPaths, g as runTasksWithConcurrency } from "./sqlite-B6SD9PTM.js";
44
+ import { n as retryAsync } from "./retry-DwLEH9x4.js";
45
+ import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-BLDmuN_6.js";
46
+ import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-BkGjWi6P.js";
47
+ import { n as resolveMarkdownTableMode } from "./markdown-tables-DfvQjS1F.js";
48
48
  import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-DL3f_O53.js";
49
- import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-DxIZcL-f.js";
50
- import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-p6xtdC2E.js";
51
- import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-3kTkR4r1.js";
52
- import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-BTCEJgtW.js";
49
+ import { a as readResponseWithLimit, i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, t as getAgentScopedMediaLocalRoots } from "./local-roots-BXHtS1lV.js";
50
+ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-C12Waxsc.js";
51
+ import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-BoKLuuwG.js";
52
+ import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-qdiEBLa5.js";
53
53
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-BlHX0H3E.js";
54
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-DU6rPdbF.js";
54
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-CJ_5xc_x.js";
55
55
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-DtI0mtzx.js";
56
56
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-Bup9wS1y.js";
57
- import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-BgsTqLau.js";
57
+ import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-pOw1s-fe.js";
58
58
  import { n as normalizePollInput } from "./polls-CCuCaqgv.js";
59
- import { t as convertMarkdownTables } from "./tables-3Vjm1My5.js";
60
- import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-B0jdgPgL.js";
61
- import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-DbL1jVFV.js";
62
- import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-DSDE-n34.js";
59
+ import { t as convertMarkdownTables } from "./tables-D0LXVaNN.js";
60
+ import { a as resolveSignalRpcContext, c as streamSignalEvents, n as sendReadReceiptSignal, o as signalCheck, r as sendTypingSignal, s as signalRpcRequest, t as sendMessageSignal } from "./send-DRUbeUiJ.js";
61
+ import { a as formatIMessageChatTarget, c as parseIMessageTarget, i as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, o as isAllowedIMessageSender, r as createIMessageRpcClient, s as normalizeIMessageHandle, t as sendMessageIMessage } from "./send-DU-5eFpT.js";
62
+ import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-CyHelKQ0.js";
63
63
  import { t as makeProxyFetch } from "./proxy-CBJ1upuz.js";
64
- import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-AytmsAUn.js";
65
- import { t as getActiveWebListener } from "./active-listener-BKTctYlH.js";
64
+ import { a as createReplyReferencePlanner, i as resolveSlackThreadTs, n as deliverReplies$3, t as createSlackReplyDeliveryPlan } from "./replies-Byh9FfWs.js";
65
+ import { t as getActiveWebListener } from "./active-listener-Bhmh-BBe.js";
66
66
  import { createRequire } from "node:module";
67
- import * as fs$2 from "node:fs/promises";
67
+ import * as fs$1 from "node:fs/promises";
68
68
  import fs from "node:fs/promises";
69
69
  import os, { homedir } from "node:os";
70
70
  import * as path$1 from "node:path";
71
71
  import path from "node:path";
72
- import fs$1, { existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
72
+ import fsSync, { existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
73
73
  import JSON5 from "json5";
74
74
  import { execFile, execFileSync, spawn, spawnSync } from "node:child_process";
75
75
  import { inspect, promisify } from "node:util";
@@ -81,7 +81,7 @@ import { EdgeTTS } from "node-edge-tts";
81
81
  import AjvPkg from "ajv";
82
82
  import { createServer } from "node:http";
83
83
  import { ProxyAgent, fetch as fetch$1 } from "undici";
84
- import WebSocket, { WebSocket as WebSocket$1 } from "ws";
84
+ import WebSocket$1, { WebSocket } from "ws";
85
85
  import { Buffer as Buffer$1 } from "node:buffer";
86
86
  import { createJiti } from "jiti";
87
87
  import { Type } from "@sinclair/typebox";
@@ -3144,7 +3144,7 @@ async function resolveOpenClawDocsPath(params) {
3144
3144
  const workspaceDir = params.workspaceDir?.trim();
3145
3145
  if (workspaceDir) {
3146
3146
  const workspaceDocs = path.join(workspaceDir, "docs");
3147
- if (fs$1.existsSync(workspaceDocs)) return workspaceDocs;
3147
+ if (fsSync.existsSync(workspaceDocs)) return workspaceDocs;
3148
3148
  }
3149
3149
  const packageRoot = await resolveOpenClawPackageRoot({
3150
3150
  cwd: params.cwd,
@@ -3153,7 +3153,7 @@ async function resolveOpenClawDocsPath(params) {
3153
3153
  });
3154
3154
  if (!packageRoot) return null;
3155
3155
  const packageDocs = path.join(packageRoot, "docs");
3156
- return fs$1.existsSync(packageDocs) ? packageDocs : null;
3156
+ return fsSync.existsSync(packageDocs) ? packageDocs : null;
3157
3157
  }
3158
3158
 
3159
3159
  //#endregion
@@ -3462,7 +3462,7 @@ async function getMemorySearchManager(params) {
3462
3462
  if (cached) return { manager: cached };
3463
3463
  }
3464
3464
  try {
3465
- const { QmdMemoryManager } = await import("./qmd-manager-ClbsWpec.js");
3465
+ const { QmdMemoryManager } = await import("./qmd-manager-Cf7kXRay.js");
3466
3466
  const primary = await QmdMemoryManager.create({
3467
3467
  cfg: params.cfg,
3468
3468
  agentId: params.agentId,
@@ -3474,7 +3474,7 @@ async function getMemorySearchManager(params) {
3474
3474
  const wrapper = new FallbackMemoryManager({
3475
3475
  primary,
3476
3476
  fallbackFactory: async () => {
3477
- const { MemoryIndexManager } = await import("./manager-CHKGgP5H.js").then((n) => n.t);
3477
+ const { MemoryIndexManager } = await import("./manager-iCRgH8LP.js").then((n) => n.t);
3478
3478
  return await MemoryIndexManager.get(params);
3479
3479
  }
3480
3480
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -3487,7 +3487,7 @@ async function getMemorySearchManager(params) {
3487
3487
  }
3488
3488
  }
3489
3489
  try {
3490
- const { MemoryIndexManager } = await import("./manager-CHKGgP5H.js").then((n) => n.t);
3490
+ const { MemoryIndexManager } = await import("./manager-iCRgH8LP.js").then((n) => n.t);
3491
3491
  return { manager: await MemoryIndexManager.get(params) };
3492
3492
  } catch (err) {
3493
3493
  return {
@@ -4175,7 +4175,7 @@ function resolveDefaultIdentityPath() {
4175
4175
  return path.join(resolveStateDir(), "identity", "device.json");
4176
4176
  }
4177
4177
  function ensureDir$2(filePath) {
4178
- fs$1.mkdirSync(path.dirname(filePath), { recursive: true });
4178
+ fsSync.mkdirSync(path.dirname(filePath), { recursive: true });
4179
4179
  }
4180
4180
  const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
4181
4181
  function base64UrlEncode(buf) {
@@ -4211,8 +4211,8 @@ function generateIdentity() {
4211
4211
  }
4212
4212
  function loadOrCreateDeviceIdentity(filePath = resolveDefaultIdentityPath()) {
4213
4213
  try {
4214
- if (fs$1.existsSync(filePath)) {
4215
- const raw = fs$1.readFileSync(filePath, "utf8");
4214
+ if (fsSync.existsSync(filePath)) {
4215
+ const raw = fsSync.readFileSync(filePath, "utf8");
4216
4216
  const parsed = JSON.parse(raw);
4217
4217
  if (parsed?.version === 1 && typeof parsed.deviceId === "string" && typeof parsed.publicKeyPem === "string" && typeof parsed.privateKeyPem === "string") {
4218
4218
  const derivedId = fingerprintPublicKey(parsed.publicKeyPem);
@@ -4221,9 +4221,9 @@ function loadOrCreateDeviceIdentity(filePath = resolveDefaultIdentityPath()) {
4221
4221
  ...parsed,
4222
4222
  deviceId: derivedId
4223
4223
  };
4224
- fs$1.writeFileSync(filePath, `${JSON.stringify(updated, null, 2)}\n`, { mode: 384 });
4224
+ fsSync.writeFileSync(filePath, `${JSON.stringify(updated, null, 2)}\n`, { mode: 384 });
4225
4225
  try {
4226
- fs$1.chmodSync(filePath, 384);
4226
+ fsSync.chmodSync(filePath, 384);
4227
4227
  } catch {}
4228
4228
  return {
4229
4229
  deviceId: derivedId,
@@ -4248,9 +4248,9 @@ function loadOrCreateDeviceIdentity(filePath = resolveDefaultIdentityPath()) {
4248
4248
  privateKeyPem: identity.privateKeyPem,
4249
4249
  createdAtMs: Date.now()
4250
4250
  };
4251
- fs$1.writeFileSync(filePath, `${JSON.stringify(stored, null, 2)}\n`, { mode: 384 });
4251
+ fsSync.writeFileSync(filePath, `${JSON.stringify(stored, null, 2)}\n`, { mode: 384 });
4252
4252
  try {
4253
- fs$1.chmodSync(filePath, 384);
4253
+ fsSync.chmodSync(filePath, 384);
4254
4254
  } catch {}
4255
4255
  return identity;
4256
4256
  }
@@ -4400,8 +4400,8 @@ function resolveDeviceAuthPath(env = process.env) {
4400
4400
  }
4401
4401
  function readStore(filePath) {
4402
4402
  try {
4403
- if (!fs$1.existsSync(filePath)) return null;
4404
- const raw = fs$1.readFileSync(filePath, "utf8");
4403
+ if (!fsSync.existsSync(filePath)) return null;
4404
+ const raw = fsSync.readFileSync(filePath, "utf8");
4405
4405
  const parsed = JSON.parse(raw);
4406
4406
  if (parsed?.version !== 1 || typeof parsed.deviceId !== "string") return null;
4407
4407
  if (!parsed.tokens || typeof parsed.tokens !== "object") return null;
@@ -4411,10 +4411,10 @@ function readStore(filePath) {
4411
4411
  }
4412
4412
  }
4413
4413
  function writeStore(filePath, store) {
4414
- fs$1.mkdirSync(path.dirname(filePath), { recursive: true });
4415
- fs$1.writeFileSync(filePath, `${JSON.stringify(store, null, 2)}\n`, { mode: 384 });
4414
+ fsSync.mkdirSync(path.dirname(filePath), { recursive: true });
4415
+ fsSync.writeFileSync(filePath, `${JSON.stringify(store, null, 2)}\n`, { mode: 384 });
4416
4416
  try {
4417
- fs$1.chmodSync(filePath, 384);
4417
+ fsSync.chmodSync(filePath, 384);
4418
4418
  } catch {}
4419
4419
  }
4420
4420
  function loadDeviceAuthToken(params) {
@@ -5715,7 +5715,7 @@ var GatewayClient = class {
5715
5715
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
5716
5716
  });
5717
5717
  }
5718
- this.ws = new WebSocket$1(url, wsOptions);
5718
+ this.ws = new WebSocket(url, wsOptions);
5719
5719
  this.ws.on("open", () => {
5720
5720
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
5721
5721
  const tlsError = this.validateTlsFingerprint();
@@ -5934,7 +5934,7 @@ var GatewayClient = class {
5934
5934
  return null;
5935
5935
  }
5936
5936
  async request(method, params, opts) {
5937
- if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
5937
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
5938
5938
  const id = randomUUID();
5939
5939
  const frame = {
5940
5940
  type: "req",
@@ -7198,7 +7198,7 @@ async function routeReply(params) {
7198
7198
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7199
7199
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7200
7200
  try {
7201
- const { deliverOutboundPayloads } = await import("./deliver-CChv42uL.js").then((n) => n.n);
7201
+ const { deliverOutboundPayloads } = await import("./deliver--EhsFXv7.js").then((n) => n.n);
7202
7202
  return {
7203
7203
  ok: true,
7204
7204
  messageId: (await deliverOutboundPayloads({
@@ -7594,7 +7594,7 @@ function normalizeSessionKey(value) {
7594
7594
  }
7595
7595
  function readSessionStore(storePath) {
7596
7596
  try {
7597
- const raw = fs$1.readFileSync(storePath, "utf-8");
7597
+ const raw = fsSync.readFileSync(storePath, "utf-8");
7598
7598
  const parsed = JSON5.parse(raw);
7599
7599
  if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
7600
7600
  } catch {}
@@ -12651,7 +12651,7 @@ async function createModelSelectionState(params) {
12651
12651
  }
12652
12652
  }
12653
12653
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
12654
- const { ensureAuthProfileStore } = await import("./model-auth-3yb_4VXX.js").then((n) => n.s);
12654
+ const { ensureAuthProfileStore } = await import("./model-auth-4U7dwHzy.js").then((n) => n.s);
12655
12655
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
12656
12656
  const providerKey = normalizeProviderId(provider);
12657
12657
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -15024,8 +15024,8 @@ const DEFAULT_SAFE_BINS = [
15024
15024
  ];
15025
15025
  function isExecutableFile(filePath) {
15026
15026
  try {
15027
- if (!fs$1.statSync(filePath).isFile()) return false;
15028
- if (process.platform !== "win32") fs$1.accessSync(filePath, fs$1.constants.X_OK);
15027
+ if (!fsSync.statSync(filePath).isFile()) return false;
15028
+ if (process.platform !== "win32") fsSync.accessSync(filePath, fsSync.constants.X_OK);
15029
15029
  return true;
15030
15030
  } catch {
15031
15031
  return false;
@@ -15063,7 +15063,7 @@ function normalizeMatchTarget(value) {
15063
15063
  }
15064
15064
  function tryRealpath(value) {
15065
15065
  try {
15066
- return fs$1.realpathSync(value);
15066
+ return fsSync.realpathSync(value);
15067
15067
  } catch {
15068
15068
  return null;
15069
15069
  }
@@ -16295,7 +16295,7 @@ function mergeLegacyAgent(current, legacy) {
16295
16295
  }
16296
16296
  function ensureDir$1(filePath) {
16297
16297
  const dir = path.dirname(filePath);
16298
- fs$1.mkdirSync(dir, { recursive: true });
16298
+ fsSync.mkdirSync(dir, { recursive: true });
16299
16299
  }
16300
16300
  function coerceAllowlistEntries(allowlist) {
16301
16301
  if (!Array.isArray(allowlist) || allowlist.length === 0) return Array.isArray(allowlist) ? allowlist : void 0;
@@ -16365,11 +16365,11 @@ function generateToken() {
16365
16365
  function loadExecApprovals() {
16366
16366
  const filePath = resolveExecApprovalsPath();
16367
16367
  try {
16368
- if (!fs$1.existsSync(filePath)) return normalizeExecApprovals({
16368
+ if (!fsSync.existsSync(filePath)) return normalizeExecApprovals({
16369
16369
  version: 1,
16370
16370
  agents: {}
16371
16371
  });
16372
- const raw = fs$1.readFileSync(filePath, "utf8");
16372
+ const raw = fsSync.readFileSync(filePath, "utf8");
16373
16373
  const parsed = JSON.parse(raw);
16374
16374
  if (parsed?.version !== 1) return normalizeExecApprovals({
16375
16375
  version: 1,
@@ -16386,9 +16386,9 @@ function loadExecApprovals() {
16386
16386
  function saveExecApprovals(file) {
16387
16387
  const filePath = resolveExecApprovalsPath();
16388
16388
  ensureDir$1(filePath);
16389
- fs$1.writeFileSync(filePath, `${JSON.stringify(file, null, 2)}\n`, { mode: 384 });
16389
+ fsSync.writeFileSync(filePath, `${JSON.stringify(file, null, 2)}\n`, { mode: 384 });
16390
16390
  try {
16391
- fs$1.chmodSync(filePath, 384);
16391
+ fsSync.chmodSync(filePath, 384);
16392
16392
  } catch {}
16393
16393
  }
16394
16394
  function ensureExecApprovals() {
@@ -16709,7 +16709,7 @@ function resolvePowerShellPath() {
16709
16709
  const systemRoot = process.env.SystemRoot || process.env.WINDIR;
16710
16710
  if (systemRoot) {
16711
16711
  const candidate = path.join(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
16712
- if (fs$1.existsSync(candidate)) return candidate;
16712
+ if (fsSync.existsSync(candidate)) return candidate;
16713
16713
  }
16714
16714
  return "powershell.exe";
16715
16715
  }
@@ -16747,7 +16747,7 @@ function resolveShellFromPath(name) {
16747
16747
  for (const entry of entries) {
16748
16748
  const candidate = path.join(entry, name);
16749
16749
  try {
16750
- fs$1.accessSync(candidate, fs$1.constants.X_OK);
16750
+ fsSync.accessSync(candidate, fsSync.constants.X_OK);
16751
16751
  return candidate;
16752
16752
  } catch {}
16753
16753
  }
@@ -19860,7 +19860,7 @@ function walkUpFrom(startDir, opts, resolveAtDir) {
19860
19860
  function hasGitMarker(repoRoot) {
19861
19861
  const gitPath = path.join(repoRoot, ".git");
19862
19862
  try {
19863
- const stat = fs$1.statSync(gitPath);
19863
+ const stat = fsSync.statSync(gitPath);
19864
19864
  return stat.isDirectory() || stat.isFile();
19865
19865
  } catch {
19866
19866
  return false;
@@ -19872,10 +19872,10 @@ function findGitRoot(startDir, opts = {}) {
19872
19872
  function resolveGitDirFromMarker(repoRoot) {
19873
19873
  const gitPath = path.join(repoRoot, ".git");
19874
19874
  try {
19875
- const stat = fs$1.statSync(gitPath);
19875
+ const stat = fsSync.statSync(gitPath);
19876
19876
  if (stat.isDirectory()) return gitPath;
19877
19877
  if (!stat.isFile()) return null;
19878
- const match = fs$1.readFileSync(gitPath, "utf-8").match(/gitdir:\s*(.+)/i);
19878
+ const match = fsSync.readFileSync(gitPath, "utf-8").match(/gitdir:\s*(.+)/i);
19879
19879
  if (!match?.[1]) return null;
19880
19880
  return path.resolve(repoRoot, match[1].trim());
19881
19881
  } catch {
@@ -19942,7 +19942,7 @@ const resolveCommitHash = (options = {}) => {
19942
19942
  cachedCommit = null;
19943
19943
  return cachedCommit;
19944
19944
  }
19945
- const head = fs$1.readFileSync(headPath, "utf-8").trim();
19945
+ const head = fsSync.readFileSync(headPath, "utf-8").trim();
19946
19946
  if (!head) {
19947
19947
  cachedCommit = null;
19948
19948
  return cachedCommit;
@@ -19950,7 +19950,7 @@ const resolveCommitHash = (options = {}) => {
19950
19950
  if (head.startsWith("ref:")) {
19951
19951
  const ref = head.replace(/^ref:\s*/i, "").trim();
19952
19952
  const refPath = path.resolve(path.dirname(headPath), ref);
19953
- cachedCommit = formatCommit(fs$1.readFileSync(refPath, "utf-8").trim());
19953
+ cachedCommit = formatCommit(fsSync.readFileSync(refPath, "utf-8").trim());
19954
19954
  return cachedCommit;
19955
19955
  }
19956
19956
  cachedCommit = formatCommit(head);
@@ -20154,9 +20154,9 @@ const readUsageFromSessionLog = (sessionId, sessionEntry, agentId, sessionKey, s
20154
20154
  } catch {
20155
20155
  return;
20156
20156
  }
20157
- if (!fs$1.existsSync(logPath)) return;
20157
+ if (!fsSync.existsSync(logPath)) return;
20158
20158
  try {
20159
- const lines = fs$1.readFileSync(logPath, "utf-8").split(/\n+/);
20159
+ const lines = fsSync.readFileSync(logPath, "utf-8").split(/\n+/);
20160
20160
  let input = 0;
20161
20161
  let output = 0;
20162
20162
  let promptTokens = 0;
@@ -21396,7 +21396,7 @@ function resolveRepoRoot(params) {
21396
21396
  const configured = params.config?.agents?.defaults?.repoRoot?.trim();
21397
21397
  if (configured) try {
21398
21398
  const resolved = path.resolve(configured);
21399
- if (fs$1.statSync(resolved).isDirectory()) return resolved;
21399
+ if (fsSync.statSync(resolved).isDirectory()) return resolved;
21400
21400
  } catch {}
21401
21401
  const candidates = [params.workspaceDir, params.cwd].map((value) => value?.trim()).filter(Boolean);
21402
21402
  const seen = /* @__PURE__ */ new Set();
@@ -22158,7 +22158,7 @@ async function buildContextReply(params) {
22158
22158
  //#region src/auto-reply/reply/commands-export-session.ts
22159
22159
  const EXPORT_HTML_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "export-html");
22160
22160
  function loadTemplate(fileName) {
22161
- return fs$1.readFileSync(path.join(EXPORT_HTML_DIR, fileName), "utf-8");
22161
+ return fsSync.readFileSync(path.join(EXPORT_HTML_DIR, fileName), "utf-8");
22162
22162
  }
22163
22163
  function generateHtml(sessionData) {
22164
22164
  const template = loadTemplate("template.html");
@@ -22232,7 +22232,7 @@ async function buildExportSessionReply(params) {
22232
22232
  } catch (err) {
22233
22233
  return { text: `❌ Failed to resolve session file: ${err instanceof Error ? err.message : String(err)}` };
22234
22234
  }
22235
- if (!fs$1.existsSync(sessionFile)) return { text: `❌ Session file not found: ${sessionFile}` };
22235
+ if (!fsSync.existsSync(sessionFile)) return { text: `❌ Session file not found: ${sessionFile}` };
22236
22236
  const sessionManager = SessionManager.open(sessionFile);
22237
22237
  const entries = sessionManager.getEntries();
22238
22238
  const header = sessionManager.getHeader();
@@ -22253,8 +22253,8 @@ async function buildExportSessionReply(params) {
22253
22253
  const defaultFileName = `openclaw-session-${entry.sessionId.slice(0, 8)}-${timestamp}.html`;
22254
22254
  const outputPath = args.outputPath ? path.resolve(args.outputPath.startsWith("~") ? args.outputPath.replace("~", process.env.HOME ?? "") : args.outputPath) : path.join(params.workspaceDir, defaultFileName);
22255
22255
  const outputDir = path.dirname(outputPath);
22256
- if (!fs$1.existsSync(outputDir)) fs$1.mkdirSync(outputDir, { recursive: true });
22257
- fs$1.writeFileSync(outputPath, html, "utf-8");
22256
+ if (!fsSync.existsSync(outputDir)) fsSync.mkdirSync(outputDir, { recursive: true });
22257
+ fsSync.writeFileSync(outputPath, html, "utf-8");
22258
22258
  const relativePath = path.relative(params.workspaceDir, outputPath);
22259
22259
  return { text: [
22260
22260
  "✅ Session exported!",
@@ -22368,8 +22368,8 @@ function resolveZaiApiKey() {
22368
22368
  }
22369
22369
  try {
22370
22370
  const authPath = path.join(os.homedir(), ".pi", "agent", "auth.json");
22371
- if (!fs$1.existsSync(authPath)) return;
22372
- const data = JSON.parse(fs$1.readFileSync(authPath, "utf-8"));
22371
+ if (!fsSync.existsSync(authPath)) return;
22372
+ const data = JSON.parse(fsSync.readFileSync(authPath, "utf-8"));
22373
22373
  return data["z-ai"]?.access || data.zai?.access;
22374
22374
  } catch {
22375
22375
  return;
@@ -23934,7 +23934,7 @@ function shouldPersistAnyBindingState() {
23934
23934
  }
23935
23935
  function shouldPersistBindingMutations() {
23936
23936
  if (shouldPersistAnyBindingState()) return true;
23937
- return fs$1.existsSync(resolveThreadBindingsPath());
23937
+ return fsSync.existsSync(resolveThreadBindingsPath());
23938
23938
  }
23939
23939
  function saveBindingsToDisk(params = {}) {
23940
23940
  if (!params.force && !shouldPersistAnyBindingState()) return;
@@ -24922,7 +24922,7 @@ const applyCostTotal = (totals, costTotal) => {
24922
24922
  totals.totalCost += costTotal;
24923
24923
  };
24924
24924
  async function* readJsonlRecords(filePath) {
24925
- const fileStream = fs$1.createReadStream(filePath, { encoding: "utf-8" });
24925
+ const fileStream = fsSync.createReadStream(filePath, { encoding: "utf-8" });
24926
24926
  const rl = readline.createInterface({
24927
24927
  input: fileStream,
24928
24928
  crlfDelay: Infinity
@@ -24994,10 +24994,10 @@ async function loadCostUsageSummary(params) {
24994
24994
  const dailyMap = /* @__PURE__ */ new Map();
24995
24995
  const totals = emptyTotals();
24996
24996
  const sessionsDir = resolveSessionTranscriptsDirForAgent(params?.agentId);
24997
- const entries = await fs$1.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
24997
+ const entries = await fsSync.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
24998
24998
  const files = (await Promise.all(entries.filter((entry) => entry.isFile() && entry.name.endsWith(".jsonl")).map(async (entry) => {
24999
24999
  const filePath = path.join(sessionsDir, entry.name);
25000
- const stats = await fs$1.promises.stat(filePath).catch(() => null);
25000
+ const stats = await fsSync.promises.stat(filePath).catch(() => null);
25001
25001
  if (!stats) return null;
25002
25002
  if (stats.mtimeMs < sinceTime) return null;
25003
25003
  return filePath;
@@ -25030,7 +25030,7 @@ async function loadCostUsageSummary(params) {
25030
25030
  }
25031
25031
  async function loadSessionCostSummary(params) {
25032
25032
  const sessionFile = params.sessionFile ?? (params.sessionId ? resolveSessionFilePath(params.sessionId, params.sessionEntry, { agentId: params.agentId }) : void 0);
25033
- if (!sessionFile || !fs$1.existsSync(sessionFile)) return null;
25033
+ if (!sessionFile || !fsSync.existsSync(sessionFile)) return null;
25034
25034
  const totals = emptyTotals();
25035
25035
  let firstActivity;
25036
25036
  let lastActivity;
@@ -29236,7 +29236,7 @@ function asBoolean(value) {
29236
29236
  }
29237
29237
  function resolveTempPathParts(opts) {
29238
29238
  const tmpDir = opts.tmpDir ?? resolvePreferredOpenClawTmpDir();
29239
- if (!opts.tmpDir) fs$1.mkdirSync(tmpDir, {
29239
+ if (!opts.tmpDir) fsSync.mkdirSync(tmpDir, {
29240
29240
  recursive: true,
29241
29241
  mode: 448
29242
29242
  });
@@ -29302,7 +29302,7 @@ async function writeUrlToFile(filePath, url) {
29302
29302
  if (typeof contentLength === "number" && Number.isFinite(contentLength) && contentLength > MAX_CAMERA_URL_DOWNLOAD_BYTES) throw new Error(`writeUrlToFile: content-length ${contentLength} exceeds max ${MAX_CAMERA_URL_DOWNLOAD_BYTES}`);
29303
29303
  const body = res.body;
29304
29304
  if (!body) throw new Error(`failed to download ${url}: empty response body`);
29305
- const fileHandle = await fs$2.open(filePath, "w");
29305
+ const fileHandle = await fs$1.open(filePath, "w");
29306
29306
  let bytes = 0;
29307
29307
  let thrown;
29308
29308
  try {
@@ -29321,7 +29321,7 @@ async function writeUrlToFile(filePath, url) {
29321
29321
  await fileHandle.close();
29322
29322
  }
29323
29323
  if (thrown) {
29324
- await fs$2.unlink(filePath).catch(() => {});
29324
+ await fs$1.unlink(filePath).catch(() => {});
29325
29325
  throw thrown;
29326
29326
  }
29327
29327
  return {
@@ -29331,7 +29331,7 @@ async function writeUrlToFile(filePath, url) {
29331
29331
  }
29332
29332
  async function writeBase64ToFile(filePath, base64) {
29333
29333
  const buf = Buffer.from(base64, "base64");
29334
- await fs$2.writeFile(filePath, buf);
29334
+ await fs$1.writeFile(filePath, buf);
29335
29335
  return {
29336
29336
  path: filePath,
29337
29337
  bytes: buf.length
@@ -34695,7 +34695,7 @@ function listExistingAgentIdsFromDisk() {
34695
34695
  const root = resolveStateDir();
34696
34696
  const agentsDir = path.join(root, "agents");
34697
34697
  try {
34698
- return fs$1.readdirSync(agentsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => normalizeAgentId(entry.name)).filter(Boolean);
34698
+ return fsSync.readdirSync(agentsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => normalizeAgentId(entry.name)).filter(Boolean);
34699
34699
  } catch {
34700
34700
  return [];
34701
34701
  }
@@ -39730,7 +39730,7 @@ async function runAgentTurnWithFallback(params) {
39730
39730
  if (corruptedSessionId) {
39731
39731
  const transcriptPath = resolveSessionTranscriptPath(corruptedSessionId);
39732
39732
  try {
39733
- fs$1.unlinkSync(transcriptPath);
39733
+ fsSync.unlinkSync(transcriptPath);
39734
39734
  } catch {}
39735
39735
  }
39736
39736
  delete params.activeSessionStore[sessionKey];
@@ -40435,9 +40435,9 @@ function auditPostCompactionReads(readFilePaths, workspaceDir, requiredReads = D
40435
40435
  * Returns messages from the last N lines (default 100).
40436
40436
  */
40437
40437
  function readSessionMessages(sessionFile, maxLines = 100) {
40438
- if (!fs$1.existsSync(sessionFile)) return [];
40438
+ if (!fsSync.existsSync(sessionFile)) return [];
40439
40439
  try {
40440
- const recentLines = fs$1.readFileSync(sessionFile, "utf-8").trim().split("\n").slice(-maxLines);
40440
+ const recentLines = fsSync.readFileSync(sessionFile, "utf-8").trim().split("\n").slice(-maxLines);
40441
40441
  const messages = [];
40442
40442
  for (const line of recentLines) try {
40443
40443
  const entry = JSON.parse(line);
@@ -40478,8 +40478,8 @@ const MAX_CONTEXT_CHARS = 3e3;
40478
40478
  async function readPostCompactionContext(workspaceDir) {
40479
40479
  const agentsPath = path.join(workspaceDir, "AGENTS.md");
40480
40480
  try {
40481
- if (!fs$1.existsSync(agentsPath)) return null;
40482
- const sections = extractSections(await fs$1.promises.readFile(agentsPath, "utf-8"), ["Session Startup", "Red Lines"]);
40481
+ if (!fsSync.existsSync(agentsPath)) return null;
40482
+ const sections = extractSections(await fsSync.promises.readFile(agentsPath, "utf-8"), ["Session Startup", "Red Lines"]);
40483
40483
  if (sections.length === 0) return null;
40484
40484
  const combined = sections.join("\n\n");
40485
40485
  return "[Post-compaction context refresh]\n\nSession was just compacted. The conversation summary above is a hint, NOT a substitute for your startup sequence. Execute your Session Startup sequence now — read the required files before responding to the user.\n\nCritical rules from AGENTS.md:\n\n" + (combined.length > MAX_CONTEXT_CHARS ? combined.slice(0, MAX_CONTEXT_CHARS) + "\n...[truncated]..." : combined);
@@ -40683,7 +40683,7 @@ async function runReplyAgent(params) {
40683
40683
  if (resolved) transcriptCandidates.add(resolved);
40684
40684
  transcriptCandidates.add(resolveSessionTranscriptPath(prevSessionId, agentId));
40685
40685
  for (const candidate of transcriptCandidates) try {
40686
- fs$1.unlinkSync(candidate);
40686
+ fsSync.unlinkSync(candidate);
40687
40687
  } catch {}
40688
40688
  }
40689
40689
  return true;
@@ -41571,7 +41571,7 @@ async function deliverSessionMaintenanceWarning(params) {
41571
41571
  return;
41572
41572
  }
41573
41573
  try {
41574
- const { deliverOutboundPayloads } = await import("./deliver-CChv42uL.js").then((n) => n.n);
41574
+ const { deliverOutboundPayloads } = await import("./deliver--EhsFXv7.js").then((n) => n.n);
41575
41575
  await deliverOutboundPayloads({
41576
41576
  cfg: params.cfg,
41577
41577
  channel,
@@ -41597,7 +41597,7 @@ function forkSessionFromParent(params) {
41597
41597
  agentId: params.agentId,
41598
41598
  sessionsDir: params.sessionsDir
41599
41599
  });
41600
- if (!parentSessionFile || !fs$1.existsSync(parentSessionFile)) return null;
41600
+ if (!parentSessionFile || !fsSync.existsSync(parentSessionFile)) return null;
41601
41601
  try {
41602
41602
  const manager = SessionManager.open(parentSessionFile);
41603
41603
  const leafId = manager.getLeafId();
@@ -41621,7 +41621,7 @@ function forkSessionFromParent(params) {
41621
41621
  cwd: manager.getCwd(),
41622
41622
  parentSession: parentSessionFile
41623
41623
  };
41624
- fs$1.writeFileSync(sessionFile, `${JSON.stringify(header)}\n`, "utf-8");
41624
+ fsSync.writeFileSync(sessionFile, `${JSON.stringify(header)}\n`, "utf-8");
41625
41625
  return {
41626
41626
  sessionId,
41627
41627
  sessionFile
@@ -45014,7 +45014,7 @@ async function describeStickerImage(params) {
45014
45014
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
45015
45015
  try {
45016
45016
  const buffer = await fs.readFile(imagePath);
45017
- const { describeImageWithModel } = await import("./image-B9TdLqUC.js").then((n) => n.n);
45017
+ const { describeImageWithModel } = await import("./image-Bxlb76-w.js").then((n) => n.n);
45018
45018
  return (await describeImageWithModel({
45019
45019
  buffer,
45020
45020
  fileName: "sticker.webp",
@@ -45437,7 +45437,7 @@ function createWhatsAppLoginTool() {
45437
45437
  force: Type.Optional(Type.Boolean())
45438
45438
  }),
45439
45439
  execute: async (_toolCallId, args) => {
45440
- const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-DuFTjxNo.js");
45440
+ const { startWebLoginWithQr, waitForWebLogin } = await import("./login-qr-C0P5yf2R.js");
45441
45441
  if ((args?.action ?? "start") === "wait") {
45442
45442
  const result = await waitForWebLogin({ timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0 });
45443
45443
  return {
@@ -45719,7 +45719,7 @@ async function withMemoryManagerForAgent(params) {
45719
45719
  }
45720
45720
  async function checkReadableFile(pathname) {
45721
45721
  try {
45722
- await fs.access(pathname, fs$1.constants.R_OK);
45722
+ await fs.access(pathname, fsSync.constants.R_OK);
45723
45723
  return { exists: true };
45724
45724
  } catch (err) {
45725
45725
  const code = err.code;
@@ -45778,7 +45778,7 @@ async function scanMemoryFiles(workspaceDir, extraPaths = []) {
45778
45778
  }
45779
45779
  let dirReadable = null;
45780
45780
  try {
45781
- await fs.access(memoryDir, fs$1.constants.R_OK);
45781
+ await fs.access(memoryDir, fsSync.constants.R_OK);
45782
45782
  dirReadable = true;
45783
45783
  } catch (err) {
45784
45784
  const code = err.code;
@@ -47475,7 +47475,7 @@ async function preflightDiscordMessage(params) {
47475
47475
  let preflightTranscript;
47476
47476
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
47477
47477
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
47478
- const { transcribeFirstAudio } = await import("./audio-preflight-DSln0Zsg.js");
47478
+ const { transcribeFirstAudio } = await import("./audio-preflight-yQKupU0M.js");
47479
47479
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
47480
47480
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
47481
47481
  ctx: {
@@ -48438,7 +48438,7 @@ function identityHasValues(identity) {
48438
48438
  }
48439
48439
  function loadIdentityFromFile(identityPath) {
48440
48440
  try {
48441
- const parsed = parseIdentityMarkdown(fs$1.readFileSync(identityPath, "utf-8"));
48441
+ const parsed = parseIdentityMarkdown(fsSync.readFileSync(identityPath, "utf-8"));
48442
48442
  if (!identityHasValues(parsed)) return null;
48443
48443
  return parsed;
48444
48444
  } catch {
@@ -48477,7 +48477,7 @@ function isDataAvatar(value) {
48477
48477
  }
48478
48478
  function resolveExistingPath(value) {
48479
48479
  try {
48480
- return fs$1.realpathSync(value);
48480
+ return fsSync.realpathSync(value);
48481
48481
  } catch {
48482
48482
  return path.resolve(value);
48483
48483
  }
@@ -48501,7 +48501,7 @@ function resolveLocalAvatarPath(params) {
48501
48501
  reason: "unsupported_extension"
48502
48502
  };
48503
48503
  try {
48504
- if (!fs$1.statSync(realPath).isFile()) return {
48504
+ if (!fsSync.statSync(realPath).isFile()) return {
48505
48505
  ok: false,
48506
48506
  reason: "missing"
48507
48507
  };
@@ -49364,7 +49364,7 @@ function sanitizeRecentModels(models, limit) {
49364
49364
  }
49365
49365
  async function readJsonFileWithFallback(filePath, fallback) {
49366
49366
  try {
49367
- const raw = await fs$1.promises.readFile(filePath, "utf-8");
49367
+ const raw = await fsSync.promises.readFile(filePath, "utf-8");
49368
49368
  return {
49369
49369
  value: JSON.parse(raw),
49370
49370
  exists: true
@@ -49382,14 +49382,14 @@ async function readJsonFileWithFallback(filePath, fallback) {
49382
49382
  }
49383
49383
  async function writeJsonFileAtomically(filePath, value) {
49384
49384
  const dir = path.dirname(filePath);
49385
- await fs$1.promises.mkdir(dir, {
49385
+ await fsSync.promises.mkdir(dir, {
49386
49386
  recursive: true,
49387
49387
  mode: 448
49388
49388
  });
49389
49389
  const tmp = path.join(dir, `${path.basename(filePath)}.${crypto.randomUUID()}.tmp`);
49390
- await fs$1.promises.writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, "utf-8");
49391
- await fs$1.promises.chmod(tmp, 384);
49392
- await fs$1.promises.rename(tmp, filePath);
49390
+ await fsSync.promises.writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, "utf-8");
49391
+ await fsSync.promises.chmod(tmp, 384);
49392
+ await fsSync.promises.rename(tmp, filePath);
49393
49393
  }
49394
49394
  async function readPreferencesStore(filePath) {
49395
49395
  const { value } = await readJsonFileWithFallback(filePath, {
@@ -51481,27 +51481,27 @@ function isVoiceChannelType(type) {
51481
51481
  function createDefaultDeps() {
51482
51482
  return {
51483
51483
  sendMessageWhatsApp: async (...args) => {
51484
- const { sendMessageWhatsApp } = await import("./web-BBMLIpu1.js");
51484
+ const { sendMessageWhatsApp } = await import("./web-CN6HZzwn.js");
51485
51485
  return await sendMessageWhatsApp(...args);
51486
51486
  },
51487
51487
  sendMessageTelegram: async (...args) => {
51488
- const { sendMessageTelegram } = await import("./send-d8Q5AJj9.js").then((n) => n.l);
51488
+ const { sendMessageTelegram } = await import("./send-BQ-4ogN3.js").then((n) => n.l);
51489
51489
  return await sendMessageTelegram(...args);
51490
51490
  },
51491
51491
  sendMessageDiscord: async (...args) => {
51492
- const { sendMessageDiscord } = await import("./send-CT34cBxw.js").then((n) => n.t);
51492
+ const { sendMessageDiscord } = await import("./send-DB9VeUuY.js").then((n) => n.t);
51493
51493
  return await sendMessageDiscord(...args);
51494
51494
  },
51495
51495
  sendMessageSlack: async (...args) => {
51496
- const { sendMessageSlack } = await import("./send-CcqTwaor.js").then((n) => n.n);
51496
+ const { sendMessageSlack } = await import("./send-DWg2VUt0.js").then((n) => n.n);
51497
51497
  return await sendMessageSlack(...args);
51498
51498
  },
51499
51499
  sendMessageSignal: async (...args) => {
51500
- const { sendMessageSignal } = await import("./send-B0jdgPgL.js").then((n) => n.i);
51500
+ const { sendMessageSignal } = await import("./send-DRUbeUiJ.js").then((n) => n.i);
51501
51501
  return await sendMessageSignal(...args);
51502
51502
  },
51503
51503
  sendMessageIMessage: async (...args) => {
51504
- const { sendMessageIMessage } = await import("./send-DbL1jVFV.js").then((n) => n.n);
51504
+ const { sendMessageIMessage } = await import("./send-DU-5eFpT.js").then((n) => n.n);
51505
51505
  return await sendMessageIMessage(...args);
51506
51506
  }
51507
51507
  };
@@ -54394,7 +54394,7 @@ function createDiscordGatewayPlugin(params) {
54394
54394
  super(options);
54395
54395
  }
54396
54396
  createWebSocket(url) {
54397
- return new WebSocket(url, { agent });
54397
+ return new WebSocket$1(url, { agent });
54398
54398
  }
54399
54399
  }
54400
54400
  return new ProxyGatewayPlugin();
@@ -56388,7 +56388,7 @@ async function monitorIMessageProvider(opts = {}) {
56388
56388
  function readFileIfExists(filePath) {
56389
56389
  if (!filePath) return;
56390
56390
  try {
56391
- return fs$1.readFileSync(filePath, "utf-8").trim();
56391
+ return fsSync.readFileSync(filePath, "utf-8").trim();
56392
56392
  } catch {
56393
56393
  return;
56394
56394
  }
@@ -56949,7 +56949,7 @@ async function downloadLineMedia(messageId, channelAccessToken, maxBytes = 10 *
56949
56949
  prefix: "line-media",
56950
56950
  extension: getExtensionForContentType(contentType)
56951
56951
  });
56952
- await fs$1.promises.writeFile(filePath, buffer);
56952
+ await fsSync.promises.writeFile(filePath, buffer);
56953
56953
  logVerbose(`line: downloaded media ${messageId} to ${filePath} (${buffer.length} bytes)`);
56954
56954
  return {
56955
56955
  path: filePath,
@@ -60272,7 +60272,10 @@ function registerSlackMessageEvents(params) {
60272
60272
  ctx.app.event("app_mention", async ({ event, body }) => {
60273
60273
  try {
60274
60274
  if (ctx.shouldDropMismatchedSlackEvent(body)) return;
60275
- await handleSlackMessage(event, {
60275
+ const mention = event;
60276
+ const channelType = mention.channel_type;
60277
+ if (channelType === "im" || channelType === "mpim") return;
60278
+ await handleSlackMessage(mention, {
60276
60279
  source: "app_mention",
60277
60280
  wasMentioned: true
60278
60281
  });
@@ -61808,6 +61811,11 @@ function createSlackThreadTsResolver(params) {
61808
61811
 
61809
61812
  //#endregion
61810
61813
  //#region src/slack/monitor/message-handler.ts
61814
+ const APP_MENTION_RETRY_TTL_MS = 6e4;
61815
+ function buildSeenMessageKey(channelId, ts) {
61816
+ if (!channelId || !ts) return null;
61817
+ return `${channelId}:${ts}`;
61818
+ }
61811
61819
  function createSlackMessageHandler(params) {
61812
61820
  const { ctx, account } = params;
61813
61821
  const debounceMs = resolveInboundDebounceMs({
@@ -61815,6 +61823,21 @@ function createSlackMessageHandler(params) {
61815
61823
  channel: "slack"
61816
61824
  });
61817
61825
  const threadTsResolver = createSlackThreadTsResolver({ client: ctx.app.client });
61826
+ const appMentionRetryKeys = /* @__PURE__ */ new Map();
61827
+ const pruneAppMentionRetryKeys = (now) => {
61828
+ for (const [key, expiresAt] of appMentionRetryKeys) if (expiresAt <= now) appMentionRetryKeys.delete(key);
61829
+ };
61830
+ const rememberAppMentionRetryKey = (key) => {
61831
+ const now = Date.now();
61832
+ pruneAppMentionRetryKeys(now);
61833
+ appMentionRetryKeys.set(key, now + APP_MENTION_RETRY_TTL_MS);
61834
+ };
61835
+ const consumeAppMentionRetryKey = (key) => {
61836
+ pruneAppMentionRetryKeys(Date.now());
61837
+ if (!appMentionRetryKeys.has(key)) return false;
61838
+ appMentionRetryKeys.delete(key);
61839
+ return true;
61840
+ };
61818
61841
  const debouncer = createInboundDebouncer({
61819
61842
  debounceMs,
61820
61843
  buildKey: (entry) => {
@@ -61847,7 +61870,14 @@ function createSlackMessageHandler(params) {
61847
61870
  wasMentioned: combinedMentioned || last.opts.wasMentioned
61848
61871
  }
61849
61872
  });
61850
- if (!prepared) return;
61873
+ const seenMessageKey = buildSeenMessageKey(last.message.channel, last.message.ts);
61874
+ if (!prepared) {
61875
+ const hasMessageSource = entries.some((entry) => entry.opts.source === "message");
61876
+ const hasAppMentionSource = entries.some((entry) => entry.opts.source === "app_mention");
61877
+ if (seenMessageKey && hasMessageSource && !hasAppMentionSource) rememberAppMentionRetryKey(seenMessageKey);
61878
+ return;
61879
+ }
61880
+ if (seenMessageKey) appMentionRetryKeys.delete(seenMessageKey);
61851
61881
  if (entries.length > 1) {
61852
61882
  const ids = entries.map((entry) => entry.message.ts).filter(Boolean);
61853
61883
  if (ids.length > 0) {
@@ -61865,7 +61895,10 @@ function createSlackMessageHandler(params) {
61865
61895
  return async (message, opts) => {
61866
61896
  if (opts.source === "message" && message.type !== "message") return;
61867
61897
  if (opts.source === "message" && message.subtype && message.subtype !== "file_share" && message.subtype !== "bot_message") return;
61868
- if (ctx.markMessageSeen(message.channel, message.ts)) return;
61898
+ const seenMessageKey = buildSeenMessageKey(message.channel, message.ts);
61899
+ if (seenMessageKey && ctx.markMessageSeen(message.channel, message.ts)) {
61900
+ if (opts.source !== "app_mention" || !consumeAppMentionRetryKey(seenMessageKey)) return;
61901
+ }
61869
61902
  const resolvedMessage = await threadTsResolver.resolve({
61870
61903
  message,
61871
61904
  source: opts.source
@@ -61936,7 +61969,7 @@ function readSlackExternalArgMenuToken(raw) {
61936
61969
  }
61937
61970
  let commandsRegistry;
61938
61971
  async function getCommandsRegistry() {
61939
- if (!commandsRegistry) commandsRegistry = await import("./commands-registry-3kTkR4r1.js").then((n) => n.n);
61972
+ if (!commandsRegistry) commandsRegistry = await import("./commands-registry-BoKLuuwG.js").then((n) => n.n);
61940
61973
  return commandsRegistry;
61941
61974
  }
61942
61975
  function encodeSlackCommandArgValue(parts) {
@@ -62278,11 +62311,11 @@ async function registerSlackMonitorSlashCommands(params) {
62278
62311
  const channelName = channelInfo?.name;
62279
62312
  const roomLabel = channelName ? `#${channelName}` : `#${command.channel_id}`;
62280
62313
  const [{ resolveAgentRoute }, { finalizeInboundContext }, { dispatchReplyWithDispatcher }] = await Promise.all([
62281
- import("./resolve-route-DSDE-n34.js").then((n) => n.r),
62314
+ import("./resolve-route-CyHelKQ0.js").then((n) => n.r),
62282
62315
  import("./inbound-context-BlHX0H3E.js").then((n) => n.n),
62283
62316
  Promise.resolve().then(() => provider_dispatcher_exports)
62284
62317
  ]);
62285
- const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-DXUkoKcB.js").then((n) => n.t), import("./reply-prefix-CssWitTj.js").then((n) => n.n)]);
62318
+ const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-DXUkoKcB.js").then((n) => n.t), import("./reply-prefix-gRdjPOm5.js").then((n) => n.n)]);
62286
62319
  const route = resolveAgentRoute({
62287
62320
  cfg,
62288
62321
  channel: "slack",
@@ -62339,9 +62372,9 @@ async function registerSlackMonitorSlashCommands(params) {
62339
62372
  });
62340
62373
  const deliverSlashPayloads = async (replies) => {
62341
62374
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
62342
- import("./replies-AytmsAUn.js").then((n) => n.r),
62343
- import("./chunk-fZrBDWYg.js").then((n) => n.s),
62344
- import("./markdown-tables-_e0OifWF.js").then((n) => n.t)
62375
+ import("./replies-Byh9FfWs.js").then((n) => n.r),
62376
+ import("./chunk-BkGjWi6P.js").then((n) => n.s),
62377
+ import("./markdown-tables-DfvQjS1F.js").then((n) => n.t)
62345
62378
  ]);
62346
62379
  await deliverSlackSlashReplies({
62347
62380
  replies,
@@ -62394,7 +62427,7 @@ async function registerSlackMonitorSlashCommands(params) {
62394
62427
  let nativeCommands = [];
62395
62428
  if (nativeEnabled) {
62396
62429
  reg = await getCommandsRegistry();
62397
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-BTCEJgtW.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
62430
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-qdiEBLa5.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
62398
62431
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
62399
62432
  skillCommands,
62400
62433
  provider: "slack"
@@ -64612,7 +64645,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
64612
64645
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
64613
64646
  let preflightTranscript;
64614
64647
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
64615
- const { transcribeFirstAudio } = await import("./audio-preflight-DSln0Zsg.js");
64648
+ const { transcribeFirstAudio } = await import("./audio-preflight-yQKupU0M.js");
64616
64649
  preflightTranscript = await transcribeFirstAudio({
64617
64650
  ctx: {
64618
64651
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -66757,23 +66790,23 @@ let webLoginQrPromise = null;
66757
66790
  let webChannelPromise = null;
66758
66791
  let whatsappActionsPromise = null;
66759
66792
  function loadWebOutbound() {
66760
- webOutboundPromise ??= import("./outbound-BqU-pis3.js").then((n) => n.t);
66793
+ webOutboundPromise ??= import("./outbound-CyTM7y9i.js").then((n) => n.t);
66761
66794
  return webOutboundPromise;
66762
66795
  }
66763
66796
  function loadWebLogin() {
66764
- webLoginPromise ??= import("./login-D1xDylNg.js").then((n) => n.n);
66797
+ webLoginPromise ??= import("./login-CSOqZ7U4.js").then((n) => n.n);
66765
66798
  return webLoginPromise;
66766
66799
  }
66767
66800
  function loadWebLoginQr() {
66768
- webLoginQrPromise ??= import("./login-qr-DuFTjxNo.js");
66801
+ webLoginQrPromise ??= import("./login-qr-C0P5yf2R.js");
66769
66802
  return webLoginQrPromise;
66770
66803
  }
66771
66804
  function loadWebChannel() {
66772
- webChannelPromise ??= import("./web-BBMLIpu1.js");
66805
+ webChannelPromise ??= import("./web-CN6HZzwn.js");
66773
66806
  return webChannelPromise;
66774
66807
  }
66775
66808
  function loadWhatsAppActions() {
66776
- whatsappActionsPromise ??= import("./whatsapp-actions-55P6E6cS.js");
66809
+ whatsappActionsPromise ??= import("./whatsapp-actions-BKmhU2Qu.js");
66777
66810
  return whatsappActionsPromise;
66778
66811
  }
66779
66812
  function createPluginRuntime() {
@@ -66994,7 +67027,7 @@ const resolvePluginSdkAliasFile = (params) => {
66994
67027
  const srcCandidate = path.join(cursor, "src", "plugin-sdk", params.srcFile);
66995
67028
  const distCandidate = path.join(cursor, "dist", "plugin-sdk", params.distFile);
66996
67029
  const orderedCandidates = isTest ? [distCandidate, srcCandidate] : [distCandidate];
66997
- for (const candidate of orderedCandidates) if (fs$1.existsSync(candidate)) return candidate;
67030
+ for (const candidate of orderedCandidates) if (fsSync.existsSync(candidate)) return candidate;
66998
67031
  const parent = path.dirname(cursor);
66999
67032
  if (parent === cursor) break;
67000
67033
  cursor = parent;
@@ -68052,7 +68085,7 @@ async function recordLoopOutcome(args) {
68052
68085
  if (!args.ctx?.sessionKey) return;
68053
68086
  try {
68054
68087
  const { getDiagnosticSessionState } = await import("./diagnostic-session-state-Bxo4UHOL.js").then((n) => n.n);
68055
- const { recordToolCallOutcome } = await import("./tool-loop-detection-Bu3OGskw.js");
68088
+ const { recordToolCallOutcome } = await import("./tool-loop-detection-BPAeTbUj.js");
68056
68089
  recordToolCallOutcome(getDiagnosticSessionState({
68057
68090
  sessionKey: args.ctx.sessionKey,
68058
68091
  sessionId: args.ctx?.agentId
@@ -68073,8 +68106,8 @@ async function runBeforeToolCallHook(args) {
68073
68106
  const params = args.params;
68074
68107
  if (args.ctx?.sessionKey) {
68075
68108
  const { getDiagnosticSessionState } = await import("./diagnostic-session-state-Bxo4UHOL.js").then((n) => n.n);
68076
- const { logToolLoopAction } = await import("./diagnostic-DriDPU6M.js").then((n) => n.n);
68077
- const { detectToolCallLoop, recordToolCall } = await import("./tool-loop-detection-Bu3OGskw.js");
68109
+ const { logToolLoopAction } = await import("./diagnostic-DTfVTKJM.js").then((n) => n.n);
68110
+ const { detectToolCallLoop, recordToolCall } = await import("./tool-loop-detection-BPAeTbUj.js");
68078
68111
  const sessionState = getDiagnosticSessionState({
68079
68112
  sessionKey: args.ctx.sessionKey,
68080
68113
  sessionId: args.ctx?.agentId
@@ -70603,8 +70636,8 @@ async function readWorkspaceContextForSummary() {
70603
70636
  const workspaceDir = process.cwd();
70604
70637
  const agentsPath = path.join(workspaceDir, "AGENTS.md");
70605
70638
  try {
70606
- if (!fs$1.existsSync(agentsPath)) return "";
70607
- const sections = extractSections(await fs$1.promises.readFile(agentsPath, "utf-8"), ["Session Startup", "Red Lines"]);
70639
+ if (!fsSync.existsSync(agentsPath)) return "";
70640
+ const sections = extractSections(await fsSync.promises.readFile(agentsPath, "utf-8"), ["Session Startup", "Red Lines"]);
70608
70641
  if (sections.length === 0) return "";
70609
70642
  const combined = sections.join("\n\n");
70610
70643
  return `\n\n<workspace-critical-rules>\n${combined.length > MAX_SUMMARY_CONTEXT_CHARS ? combined.slice(0, MAX_SUMMARY_CONTEXT_CHARS) + "\n...[truncated]..." : combined}\n</workspace-critical-rules>`;
@@ -71558,6 +71591,7 @@ function resolveSessionLane(key) {
71558
71591
  }
71559
71592
  function resolveGlobalLane(lane) {
71560
71593
  const cleaned = lane?.trim();
71594
+ if (cleaned === CommandLane.Cron) return CommandLane.Nested;
71561
71595
  return cleaned ? cleaned : CommandLane.Main;
71562
71596
  }
71563
71597
  function resolveEmbeddedSessionLane(key) {
@@ -71935,7 +71969,7 @@ async function compactEmbeddedPiSessionDirect(params) {
71935
71969
  if (!apiKeyInfo.apiKey) {
71936
71970
  if (apiKeyInfo.mode !== "aws-sdk") throw new Error(`No API key resolved for provider "${model.provider}" (auth mode: ${apiKeyInfo.mode}).`);
71937
71971
  } else if (model.provider === "github-copilot") {
71938
- const { resolveCopilotApiToken } = await import("./github-copilot-token-Dgb9dAHW.js").then((n) => n.n);
71972
+ const { resolveCopilotApiToken } = await import("./github-copilot-token-DAycnoAs.js").then((n) => n.n);
71939
71973
  const copilotToken = await resolveCopilotApiToken({ githubToken: apiKeyInfo.apiKey });
71940
71974
  authStorage.setRuntimeApiKey(model.provider, copilotToken.token);
71941
71975
  } else authStorage.setRuntimeApiKey(model.provider, apiKeyInfo.apiKey);
@@ -73155,11 +73189,11 @@ function appendRawStream(payload) {
73155
73189
  if (!rawStreamReady) {
73156
73190
  rawStreamReady = true;
73157
73191
  try {
73158
- fs$1.mkdirSync(path.dirname(RAW_STREAM_PATH), { recursive: true });
73192
+ fsSync.mkdirSync(path.dirname(RAW_STREAM_PATH), { recursive: true });
73159
73193
  } catch {}
73160
73194
  }
73161
73195
  try {
73162
- fs$1.promises.appendFile(RAW_STREAM_PATH, `${JSON.stringify(payload)}\n`);
73196
+ fsSync.promises.appendFile(RAW_STREAM_PATH, `${JSON.stringify(payload)}\n`);
73163
73197
  } catch {}
73164
73198
  }
73165
73199
 
@@ -76379,7 +76413,7 @@ async function runEmbeddedPiAgent(params) {
76379
76413
  return;
76380
76414
  }
76381
76415
  if (model.provider === "github-copilot") {
76382
- const { resolveCopilotApiToken } = await import("./github-copilot-token-Dgb9dAHW.js").then((n) => n.n);
76416
+ const { resolveCopilotApiToken } = await import("./github-copilot-token-DAycnoAs.js").then((n) => n.n);
76383
76417
  const copilotToken = await resolveCopilotApiToken({ githubToken: apiKeyInfo.apiKey });
76384
76418
  authStorage.setRuntimeApiKey(model.provider, copilotToken.token);
76385
76419
  } else authStorage.setRuntimeApiKey(model.provider, apiKeyInfo.apiKey);