@openclaw/signal 2026.9.4 → 2026.9.5

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 (525) hide show
  1. package/assets/activity.svg +40 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/{accounts-DO4HMqaK.js → .setup/accounts-BV6tDOTc.mjs} +20 -5
  4. package/dist/.setup/api-Cu01dJRP.mjs +12 -0
  5. package/dist/.setup/api-DbdeJVQ8.mjs +17 -0
  6. package/dist/{approval-auth-pNCKKotV.js → .setup/approval-auth-BBI9BTRm.mjs} +3 -3
  7. package/dist/{approval-handler.runtime-DCPJkIqo.js → .setup/approval-handler.runtime-Clf_1IZj.mjs} +11 -11
  8. package/dist/{approval-reactions-CjhdkJ8P.js → .setup/approval-reactions-B25QoVJc.mjs} +14 -14
  9. package/dist/{channel-CyQvEuyA.js → .setup/channel-gMpZmqLx.mjs} +56 -33
  10. package/dist/{channel.runtime--koF_1H0.js → .setup/channel.runtime-Dqc18A1e.mjs} +3 -3
  11. package/dist/{client-B3C0ciqU.js → .setup/client-BseAt7F7.mjs} +311 -41
  12. package/dist/{client-adapter-CNc5wzzs.js → .setup/client-adapter-dvFa47YL.mjs} +1 -1
  13. package/dist/{config-schema-DfEbpMVQ.js → .setup/config-schema-aQwwMGUj.mjs} +19 -3
  14. package/dist/{doctor-contract-api-D0SnglP4.js → .setup/doctor-contract-api-Rbq_sRTI.mjs} +79 -15
  15. package/dist/{install-signal-cli-QlEIfWBv.js → .setup/install-signal-cli-bXeTrTyL.mjs} +3 -4
  16. package/dist/{monitor-BiNWxMB3.js → .setup/monitor-DAMQw1pZ.mjs} +32 -20
  17. package/dist/{probe-kOJqyjWz.js → .setup/probe-IKCS9D-z.mjs} +3 -3
  18. package/dist/{question-reactions-BFR9Mf-O.js → .setup/question-reactions-DSNAD0cd.mjs} +3 -3
  19. package/dist/{reaction-runtime-api-CWqDv5-q.js → .setup/reaction-runtime-api-BnQGHcrB.mjs} +6 -5
  20. package/dist/{rpc-context-dXSy4NtF.js → .setup/rpc-context-CwwADZ1b.mjs} +1 -1
  21. package/dist/{send-Bz0x0JC1.js → .setup/send-CcetN4rk.mjs} +7 -6
  22. package/dist/{send.runtime-CeV1p7Sq.js → .setup/send.runtime-B7C4IP23.mjs} +1 -1
  23. package/dist/{transport-detection-Do2pYMAH.js → .setup/transport-detection-CqyR2vG8.mjs} +50 -21
  24. package/dist/{transport-detection.runtime-QasZp3BE.js → .setup/transport-detection.runtime-CW1lp2d9.mjs} +1 -1
  25. package/dist/{transport-policy-DxvSMHp9.js → .setup/transport-policy-5VSnj5ma.mjs} +2 -33
  26. package/dist/.setup/transport-probes.runtime-WprAyBbL.mjs +2 -0
  27. package/dist/.setup/transport-url-CAC0JcuI.mjs +55 -0
  28. package/dist/api.js +11 -16
  29. package/dist/channel-config-api.js +1 -1
  30. package/dist/channel-plugin-api.js +1 -1
  31. package/dist/contract-api.js +4 -4
  32. package/dist/doctor-contract-api.js +1 -1
  33. package/dist/reaction-runtime-api.js +1 -1
  34. package/dist/runtime-api.js +9 -9
  35. package/dist/setup-entry.js +2 -1
  36. package/node_modules/zod/README.md +27 -0
  37. package/node_modules/zod/compile.cjs +77 -0
  38. package/node_modules/zod/compile.d.cts +1 -0
  39. package/node_modules/zod/compile.d.ts +1 -0
  40. package/node_modules/zod/compile.js +52 -0
  41. package/node_modules/zod/index.cjs +2 -2
  42. package/node_modules/zod/index.d.cts +1 -2
  43. package/node_modules/zod/index.d.ts +1 -2
  44. package/node_modules/zod/index.js +5 -2
  45. package/node_modules/zod/package.json +13 -2
  46. package/node_modules/zod/src/compile.ts +56 -0
  47. package/node_modules/zod/src/index.ts +5 -2
  48. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  49. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  50. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  51. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  52. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  53. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  54. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  55. package/node_modules/zod/src/v3/types.ts +5 -5
  56. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  57. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  58. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  59. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  60. package/node_modules/zod/src/v4/classic/external.ts +12 -9
  61. package/node_modules/zod/src/v4/classic/from-json-schema.ts +140 -78
  62. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  63. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  64. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  65. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  66. package/node_modules/zod/src/v4/classic/schemas.ts +452 -262
  67. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  68. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  69. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +135 -0
  70. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +30 -1
  71. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  72. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  73. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  74. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  75. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  76. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +720 -0
  77. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  78. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  79. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  80. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  81. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  82. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  83. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +155 -13
  84. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +11 -0
  85. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  86. package/node_modules/zod/src/v4/classic/tests/error.test.ts +274 -6
  87. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +425 -10
  88. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  89. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  90. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  91. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  92. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  93. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +281 -0
  94. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +47 -0
  95. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  96. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +183 -0
  97. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  98. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  99. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  100. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  101. package/node_modules/zod/src/v4/classic/tests/number.test.ts +46 -9
  102. package/node_modules/zod/src/v4/classic/tests/object.test.ts +245 -12
  103. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +234 -0
  104. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  105. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  106. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  107. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  108. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  109. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +33 -2
  110. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  111. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  112. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  113. package/node_modules/zod/src/v4/classic/tests/string.test.ts +127 -5
  114. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  115. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +11 -2
  116. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1585 -173
  117. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  118. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  119. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +76 -0
  120. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  121. package/node_modules/zod/src/v4/core/api.ts +48 -12
  122. package/node_modules/zod/src/v4/core/checks.ts +57 -44
  123. package/node_modules/zod/src/v4/core/compile.ts +2188 -0
  124. package/node_modules/zod/src/v4/core/core.ts +98 -19
  125. package/node_modules/zod/src/v4/core/doc.ts +11 -7
  126. package/node_modules/zod/src/v4/core/errors.ts +115 -24
  127. package/node_modules/zod/src/v4/core/index.ts +3 -0
  128. package/node_modules/zod/src/v4/core/json-schema-generator.ts +6 -1
  129. package/node_modules/zod/src/v4/core/json-schema-processors.ts +257 -93
  130. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  131. package/node_modules/zod/src/v4/core/memoizer.ts +284 -0
  132. package/node_modules/zod/src/v4/core/parse.ts +131 -38
  133. package/node_modules/zod/src/v4/core/regexes.ts +30 -13
  134. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  135. package/node_modules/zod/src/v4/core/schemas.ts +759 -461
  136. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +969 -0
  137. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  138. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  139. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  140. package/node_modules/zod/src/v4/core/tests/compile.test.ts +1639 -0
  141. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  142. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  143. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  144. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  145. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  146. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  147. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +31 -0
  148. package/node_modules/zod/src/v4/core/to-json-schema.ts +275 -42
  149. package/node_modules/zod/src/v4/core/util.ts +268 -42
  150. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  151. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  152. package/node_modules/zod/src/v4/index.ts +3 -3
  153. package/node_modules/zod/src/v4/locales/ar.ts +3 -0
  154. package/node_modules/zod/src/v4/locales/az.ts +3 -0
  155. package/node_modules/zod/src/v4/locales/be.ts +10 -0
  156. package/node_modules/zod/src/v4/locales/bg.ts +3 -0
  157. package/node_modules/zod/src/v4/locales/bn.ts +121 -0
  158. package/node_modules/zod/src/v4/locales/ca.ts +3 -0
  159. package/node_modules/zod/src/v4/locales/ckb.ts +138 -0
  160. package/node_modules/zod/src/v4/locales/cs.ts +3 -0
  161. package/node_modules/zod/src/v4/locales/da.ts +5 -2
  162. package/node_modules/zod/src/v4/locales/de.ts +3 -0
  163. package/node_modules/zod/src/v4/locales/el.ts +1 -0
  164. package/node_modules/zod/src/v4/locales/en.ts +15 -4
  165. package/node_modules/zod/src/v4/locales/eo.ts +3 -0
  166. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  167. package/node_modules/zod/src/v4/locales/fa.ts +3 -0
  168. package/node_modules/zod/src/v4/locales/fi.ts +3 -0
  169. package/node_modules/zod/src/v4/locales/fr-CA.ts +3 -0
  170. package/node_modules/zod/src/v4/locales/fr.ts +19 -14
  171. package/node_modules/zod/src/v4/locales/gu.ts +121 -0
  172. package/node_modules/zod/src/v4/locales/he.ts +6 -1
  173. package/node_modules/zod/src/v4/locales/hi.ts +124 -0
  174. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  175. package/node_modules/zod/src/v4/locales/hu.ts +3 -0
  176. package/node_modules/zod/src/v4/locales/hy.ts +9 -0
  177. package/node_modules/zod/src/v4/locales/id.ts +3 -0
  178. package/node_modules/zod/src/v4/locales/index.ts +10 -0
  179. package/node_modules/zod/src/v4/locales/is.ts +3 -0
  180. package/node_modules/zod/src/v4/locales/it.ts +3 -0
  181. package/node_modules/zod/src/v4/locales/ja.ts +3 -0
  182. package/node_modules/zod/src/v4/locales/ka.ts +3 -0
  183. package/node_modules/zod/src/v4/locales/km.ts +3 -0
  184. package/node_modules/zod/src/v4/locales/kn.ts +124 -0
  185. package/node_modules/zod/src/v4/locales/ko.ts +3 -0
  186. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  187. package/node_modules/zod/src/v4/locales/mk.ts +3 -0
  188. package/node_modules/zod/src/v4/locales/ms.ts +3 -0
  189. package/node_modules/zod/src/v4/locales/ne.ts +126 -0
  190. package/node_modules/zod/src/v4/locales/nl.ts +3 -0
  191. package/node_modules/zod/src/v4/locales/nn.ts +119 -0
  192. package/node_modules/zod/src/v4/locales/no.ts +5 -2
  193. package/node_modules/zod/src/v4/locales/ota.ts +3 -0
  194. package/node_modules/zod/src/v4/locales/pl.ts +3 -0
  195. package/node_modules/zod/src/v4/locales/ps.ts +3 -0
  196. package/node_modules/zod/src/v4/locales/pt-BR.ts +159 -0
  197. package/node_modules/zod/src/v4/locales/pt.ts +99 -58
  198. package/node_modules/zod/src/v4/locales/ro.ts +1 -0
  199. package/node_modules/zod/src/v4/locales/ru.ts +10 -0
  200. package/node_modules/zod/src/v4/locales/sk.ts +121 -0
  201. package/node_modules/zod/src/v4/locales/sl.ts +3 -0
  202. package/node_modules/zod/src/v4/locales/sv.ts +5 -2
  203. package/node_modules/zod/src/v4/locales/ta.ts +3 -0
  204. package/node_modules/zod/src/v4/locales/th.ts +3 -0
  205. package/node_modules/zod/src/v4/locales/tk.ts +111 -0
  206. package/node_modules/zod/src/v4/locales/tr.ts +3 -0
  207. package/node_modules/zod/src/v4/locales/uk.ts +3 -0
  208. package/node_modules/zod/src/v4/locales/ur.ts +3 -0
  209. package/node_modules/zod/src/v4/locales/uz.ts +1 -0
  210. package/node_modules/zod/src/v4/locales/vi.ts +3 -0
  211. package/node_modules/zod/src/v4/locales/yo.ts +3 -0
  212. package/node_modules/zod/src/v4/locales/zh-CN.ts +3 -0
  213. package/node_modules/zod/src/v4/locales/zh-TW.ts +3 -0
  214. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  215. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  216. package/node_modules/zod/src/v4/mini/external.ts +10 -1
  217. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  218. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  219. package/node_modules/zod/src/v4/mini/schemas.ts +135 -56
  220. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  221. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  222. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  223. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  224. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  225. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  226. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  227. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  228. package/node_modules/zod/src/v4/mini/tests/index.test.ts +72 -5
  229. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  230. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  231. package/node_modules/zod/src/v4/mini/tests/string.test.ts +21 -0
  232. package/node_modules/zod/v3/ZodError.cjs +22 -12
  233. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  234. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  235. package/node_modules/zod/v3/ZodError.js +22 -12
  236. package/node_modules/zod/v3/types.cjs +7 -5
  237. package/node_modules/zod/v3/types.js +7 -5
  238. package/node_modules/zod/v4/classic/checks.cjs +2 -1
  239. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  240. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  241. package/node_modules/zod/v4/classic/checks.js +1 -1
  242. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  243. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  244. package/node_modules/zod/v4/classic/deep-partial.cjs +39 -0
  245. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  246. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  247. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  248. package/node_modules/zod/v4/classic/errors.cjs +43 -34
  249. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  250. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  251. package/node_modules/zod/v4/classic/errors.js +43 -34
  252. package/node_modules/zod/v4/classic/external.cjs +30 -27
  253. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  254. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  255. package/node_modules/zod/v4/classic/external.js +5 -8
  256. package/node_modules/zod/v4/classic/from-json-schema.cjs +136 -75
  257. package/node_modules/zod/v4/classic/from-json-schema.js +136 -75
  258. package/node_modules/zod/v4/classic/in-out.cjs +63 -0
  259. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  260. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  261. package/node_modules/zod/v4/classic/in-out.js +36 -0
  262. package/node_modules/zod/v4/classic/index.cjs +2 -2
  263. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  264. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  265. package/node_modules/zod/v4/classic/index.js +2 -2
  266. package/node_modules/zod/v4/classic/iso.cjs +11 -22
  267. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  268. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  269. package/node_modules/zod/v4/classic/iso.js +2 -17
  270. package/node_modules/zod/v4/classic/parse.cjs +4 -1
  271. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  272. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  273. package/node_modules/zod/v4/classic/parse.js +1 -0
  274. package/node_modules/zod/v4/classic/schemas.cjs +498 -398
  275. package/node_modules/zod/v4/classic/schemas.d.cts +53 -18
  276. package/node_modules/zod/v4/classic/schemas.d.ts +53 -18
  277. package/node_modules/zod/v4/classic/schemas.js +492 -396
  278. package/node_modules/zod/v4/core/api.cjs +23 -4
  279. package/node_modules/zod/v4/core/api.d.cts +13 -9
  280. package/node_modules/zod/v4/core/api.d.ts +13 -9
  281. package/node_modules/zod/v4/core/api.js +21 -4
  282. package/node_modules/zod/v4/core/checks.cjs +37 -31
  283. package/node_modules/zod/v4/core/checks.d.cts +13 -13
  284. package/node_modules/zod/v4/core/checks.d.ts +13 -13
  285. package/node_modules/zod/v4/core/checks.js +37 -31
  286. package/node_modules/zod/v4/core/compile.cjs +1813 -0
  287. package/node_modules/zod/v4/core/compile.d.cts +51 -0
  288. package/node_modules/zod/v4/core/compile.d.ts +51 -0
  289. package/node_modules/zod/v4/core/compile.js +1783 -0
  290. package/node_modules/zod/v4/core/core.cjs +81 -18
  291. package/node_modules/zod/v4/core/core.d.cts +16 -4
  292. package/node_modules/zod/v4/core/core.d.ts +16 -4
  293. package/node_modules/zod/v4/core/core.js +82 -19
  294. package/node_modules/zod/v4/core/doc.cjs +5 -7
  295. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  296. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  297. package/node_modules/zod/v4/core/doc.js +5 -7
  298. package/node_modules/zod/v4/core/errors.cjs +110 -25
  299. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  300. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  301. package/node_modules/zod/v4/core/errors.js +110 -25
  302. package/node_modules/zod/v4/core/index.cjs +5 -1
  303. package/node_modules/zod/v4/core/index.d.cts +3 -0
  304. package/node_modules/zod/v4/core/index.d.ts +3 -0
  305. package/node_modules/zod/v4/core/index.js +3 -0
  306. package/node_modules/zod/v4/core/json-schema-generator.cjs +4 -0
  307. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  308. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  309. package/node_modules/zod/v4/core/json-schema-generator.js +4 -0
  310. package/node_modules/zod/v4/core/json-schema-processors.cjs +264 -95
  311. package/node_modules/zod/v4/core/json-schema-processors.js +243 -97
  312. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  313. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  314. package/node_modules/zod/v4/core/memoizer.cjs +272 -0
  315. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  316. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  317. package/node_modules/zod/v4/core/memoizer.js +265 -0
  318. package/node_modules/zod/v4/core/parse.cjs +96 -34
  319. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  320. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  321. package/node_modules/zod/v4/core/parse.js +94 -33
  322. package/node_modules/zod/v4/core/regexes.cjs +27 -15
  323. package/node_modules/zod/v4/core/regexes.d.cts +2 -0
  324. package/node_modules/zod/v4/core/regexes.d.ts +2 -0
  325. package/node_modules/zod/v4/core/regexes.js +24 -13
  326. package/node_modules/zod/v4/core/registries.js +2 -2
  327. package/node_modules/zod/v4/core/schemas.cjs +537 -326
  328. package/node_modules/zod/v4/core/schemas.d.cts +100 -31
  329. package/node_modules/zod/v4/core/schemas.d.ts +100 -31
  330. package/node_modules/zod/v4/core/schemas.js +526 -325
  331. package/node_modules/zod/v4/core/to-json-schema.cjs +242 -39
  332. package/node_modules/zod/v4/core/to-json-schema.d.cts +42 -3
  333. package/node_modules/zod/v4/core/to-json-schema.d.ts +42 -3
  334. package/node_modules/zod/v4/core/to-json-schema.js +241 -39
  335. package/node_modules/zod/v4/core/util.cjs +212 -31
  336. package/node_modules/zod/v4/core/util.d.cts +58 -1
  337. package/node_modules/zod/v4/core/util.d.ts +58 -1
  338. package/node_modules/zod/v4/core/util.js +202 -30
  339. package/node_modules/zod/v4/core/versions.cjs +2 -2
  340. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  341. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  342. package/node_modules/zod/v4/core/versions.js +2 -2
  343. package/node_modules/zod/v4/core/visit.cjs +195 -0
  344. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  345. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  346. package/node_modules/zod/v4/core/visit.js +169 -0
  347. package/node_modules/zod/v4/index.cjs +15 -5
  348. package/node_modules/zod/v4/index.d.cts +2 -2
  349. package/node_modules/zod/v4/index.d.ts +2 -2
  350. package/node_modules/zod/v4/index.js +3 -2
  351. package/node_modules/zod/v4/locales/ar.cjs +3 -0
  352. package/node_modules/zod/v4/locales/ar.js +3 -0
  353. package/node_modules/zod/v4/locales/az.cjs +3 -0
  354. package/node_modules/zod/v4/locales/az.js +3 -0
  355. package/node_modules/zod/v4/locales/be.cjs +10 -0
  356. package/node_modules/zod/v4/locales/be.js +10 -0
  357. package/node_modules/zod/v4/locales/bg.cjs +3 -0
  358. package/node_modules/zod/v4/locales/bg.js +3 -0
  359. package/node_modules/zod/v4/locales/bn.cjs +138 -0
  360. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  361. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  362. package/node_modules/zod/v4/locales/bn.js +111 -0
  363. package/node_modules/zod/v4/locales/ca.cjs +3 -0
  364. package/node_modules/zod/v4/locales/ca.js +3 -0
  365. package/node_modules/zod/v4/locales/ckb.cjs +158 -0
  366. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  367. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  368. package/node_modules/zod/v4/locales/ckb.js +131 -0
  369. package/node_modules/zod/v4/locales/cs.cjs +3 -0
  370. package/node_modules/zod/v4/locales/cs.js +3 -0
  371. package/node_modules/zod/v4/locales/da.cjs +5 -2
  372. package/node_modules/zod/v4/locales/da.js +5 -2
  373. package/node_modules/zod/v4/locales/de.cjs +3 -0
  374. package/node_modules/zod/v4/locales/de.js +3 -0
  375. package/node_modules/zod/v4/locales/el.cjs +1 -0
  376. package/node_modules/zod/v4/locales/el.js +1 -0
  377. package/node_modules/zod/v4/locales/en.cjs +14 -4
  378. package/node_modules/zod/v4/locales/en.js +14 -4
  379. package/node_modules/zod/v4/locales/eo.cjs +3 -0
  380. package/node_modules/zod/v4/locales/eo.js +3 -0
  381. package/node_modules/zod/v4/locales/es.cjs +2 -0
  382. package/node_modules/zod/v4/locales/es.js +2 -0
  383. package/node_modules/zod/v4/locales/fa.cjs +3 -0
  384. package/node_modules/zod/v4/locales/fa.js +3 -0
  385. package/node_modules/zod/v4/locales/fi.cjs +3 -0
  386. package/node_modules/zod/v4/locales/fi.js +3 -0
  387. package/node_modules/zod/v4/locales/fr-CA.cjs +3 -0
  388. package/node_modules/zod/v4/locales/fr-CA.js +3 -0
  389. package/node_modules/zod/v4/locales/fr.cjs +16 -14
  390. package/node_modules/zod/v4/locales/fr.js +16 -14
  391. package/node_modules/zod/v4/locales/gu.cjs +138 -0
  392. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  393. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  394. package/node_modules/zod/v4/locales/gu.js +111 -0
  395. package/node_modules/zod/v4/locales/he.cjs +5 -0
  396. package/node_modules/zod/v4/locales/he.js +5 -0
  397. package/node_modules/zod/v4/locales/hi.cjs +136 -0
  398. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  399. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  400. package/node_modules/zod/v4/locales/hi.js +109 -0
  401. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  402. package/node_modules/zod/v4/locales/hr.js +2 -0
  403. package/node_modules/zod/v4/locales/hu.cjs +3 -0
  404. package/node_modules/zod/v4/locales/hu.js +3 -0
  405. package/node_modules/zod/v4/locales/hy.cjs +9 -0
  406. package/node_modules/zod/v4/locales/hy.js +9 -0
  407. package/node_modules/zod/v4/locales/id.cjs +3 -0
  408. package/node_modules/zod/v4/locales/id.js +3 -0
  409. package/node_modules/zod/v4/locales/index.cjs +22 -2
  410. package/node_modules/zod/v4/locales/index.d.cts +10 -0
  411. package/node_modules/zod/v4/locales/index.d.ts +10 -0
  412. package/node_modules/zod/v4/locales/index.js +10 -0
  413. package/node_modules/zod/v4/locales/is.cjs +3 -0
  414. package/node_modules/zod/v4/locales/is.js +3 -0
  415. package/node_modules/zod/v4/locales/it.cjs +3 -0
  416. package/node_modules/zod/v4/locales/it.js +3 -0
  417. package/node_modules/zod/v4/locales/ja.cjs +3 -0
  418. package/node_modules/zod/v4/locales/ja.js +3 -0
  419. package/node_modules/zod/v4/locales/ka.cjs +3 -0
  420. package/node_modules/zod/v4/locales/ka.js +3 -0
  421. package/node_modules/zod/v4/locales/km.cjs +3 -0
  422. package/node_modules/zod/v4/locales/km.js +3 -0
  423. package/node_modules/zod/v4/locales/kn.cjs +141 -0
  424. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  425. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  426. package/node_modules/zod/v4/locales/kn.js +114 -0
  427. package/node_modules/zod/v4/locales/ko.cjs +3 -0
  428. package/node_modules/zod/v4/locales/ko.js +3 -0
  429. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  430. package/node_modules/zod/v4/locales/lt.js +2 -0
  431. package/node_modules/zod/v4/locales/mk.cjs +3 -0
  432. package/node_modules/zod/v4/locales/mk.js +3 -0
  433. package/node_modules/zod/v4/locales/ms.cjs +3 -0
  434. package/node_modules/zod/v4/locales/ms.js +3 -0
  435. package/node_modules/zod/v4/locales/ne.cjs +136 -0
  436. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  437. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  438. package/node_modules/zod/v4/locales/ne.js +109 -0
  439. package/node_modules/zod/v4/locales/nl.cjs +3 -0
  440. package/node_modules/zod/v4/locales/nl.js +3 -0
  441. package/node_modules/zod/v4/locales/nn.cjs +138 -0
  442. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  443. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  444. package/node_modules/zod/v4/locales/nn.js +111 -0
  445. package/node_modules/zod/v4/locales/no.cjs +5 -2
  446. package/node_modules/zod/v4/locales/no.js +5 -2
  447. package/node_modules/zod/v4/locales/ota.cjs +3 -0
  448. package/node_modules/zod/v4/locales/ota.js +3 -0
  449. package/node_modules/zod/v4/locales/pl.cjs +3 -0
  450. package/node_modules/zod/v4/locales/pl.js +3 -0
  451. package/node_modules/zod/v4/locales/ps.cjs +3 -0
  452. package/node_modules/zod/v4/locales/ps.js +3 -0
  453. package/node_modules/zod/v4/locales/pt-BR.cjs +168 -0
  454. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  455. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  456. package/node_modules/zod/v4/locales/pt-BR.js +141 -0
  457. package/node_modules/zod/v4/locales/pt.cjs +87 -55
  458. package/node_modules/zod/v4/locales/pt.js +87 -55
  459. package/node_modules/zod/v4/locales/ro.cjs +1 -0
  460. package/node_modules/zod/v4/locales/ro.js +1 -0
  461. package/node_modules/zod/v4/locales/ru.cjs +10 -0
  462. package/node_modules/zod/v4/locales/ru.js +10 -0
  463. package/node_modules/zod/v4/locales/sk.cjs +141 -0
  464. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  465. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  466. package/node_modules/zod/v4/locales/sk.js +114 -0
  467. package/node_modules/zod/v4/locales/sl.cjs +3 -0
  468. package/node_modules/zod/v4/locales/sl.js +3 -0
  469. package/node_modules/zod/v4/locales/sv.cjs +5 -2
  470. package/node_modules/zod/v4/locales/sv.js +5 -2
  471. package/node_modules/zod/v4/locales/ta.cjs +3 -0
  472. package/node_modules/zod/v4/locales/ta.js +3 -0
  473. package/node_modules/zod/v4/locales/th.cjs +3 -0
  474. package/node_modules/zod/v4/locales/th.js +3 -0
  475. package/node_modules/zod/v4/locales/tk.cjs +132 -0
  476. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  477. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  478. package/node_modules/zod/v4/locales/tk.js +105 -0
  479. package/node_modules/zod/v4/locales/tr.cjs +3 -0
  480. package/node_modules/zod/v4/locales/tr.js +3 -0
  481. package/node_modules/zod/v4/locales/uk.cjs +3 -0
  482. package/node_modules/zod/v4/locales/uk.js +3 -0
  483. package/node_modules/zod/v4/locales/ur.cjs +3 -0
  484. package/node_modules/zod/v4/locales/ur.js +3 -0
  485. package/node_modules/zod/v4/locales/uz.cjs +1 -0
  486. package/node_modules/zod/v4/locales/uz.js +1 -0
  487. package/node_modules/zod/v4/locales/vi.cjs +3 -0
  488. package/node_modules/zod/v4/locales/vi.js +3 -0
  489. package/node_modules/zod/v4/locales/yo.cjs +3 -0
  490. package/node_modules/zod/v4/locales/yo.js +3 -0
  491. package/node_modules/zod/v4/locales/zh-CN.cjs +3 -0
  492. package/node_modules/zod/v4/locales/zh-CN.js +3 -0
  493. package/node_modules/zod/v4/locales/zh-TW.cjs +3 -0
  494. package/node_modules/zod/v4/locales/zh-TW.js +3 -0
  495. package/node_modules/zod/v4/mini/checks.cjs +2 -1
  496. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  497. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  498. package/node_modules/zod/v4/mini/checks.js +1 -1
  499. package/node_modules/zod/v4/mini/deep-partial.cjs +39 -0
  500. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  501. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  502. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  503. package/node_modules/zod/v4/mini/external.cjs +12 -1
  504. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  505. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  506. package/node_modules/zod/v4/mini/external.js +3 -1
  507. package/node_modules/zod/v4/mini/in-out.cjs +63 -0
  508. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  509. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  510. package/node_modules/zod/v4/mini/in-out.js +36 -0
  511. package/node_modules/zod/v4/mini/parse.cjs +3 -1
  512. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  513. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  514. package/node_modules/zod/v4/mini/parse.js +1 -1
  515. package/node_modules/zod/v4/mini/schemas.cjs +75 -47
  516. package/node_modules/zod/v4/mini/schemas.d.cts +43 -13
  517. package/node_modules/zod/v4/mini/schemas.d.ts +43 -13
  518. package/node_modules/zod/v4/mini/schemas.js +71 -45
  519. package/openclaw.plugin.json +35 -42
  520. package/package.json +8 -6
  521. package/dist/transport-probes.runtime-DV7x4VWu.js +0 -2
  522. package/node_modules/zod/src/v4/core/config.ts +0 -15
  523. /package/dist/{identity-YXPmgFMu.js → .setup/identity-YXPmgFMu.mjs} +0 -0
  524. /package/dist/{normalize-l_b99hap.js → .setup/normalize-l_b99hap.mjs} +0 -0
  525. /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
@@ -1,15 +1,23 @@
1
1
  import { createRequire } from "node:module";
2
+ import { fileURLToPath } from "node:url";
3
+ import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
4
+ import net, { createConnection } from "node:net";
5
+ import path from "node:path";
2
6
  import { detectMime, extractOriginalFilename, parseMediaContentLength } from "openclaw/plugin-sdk/media-runtime";
3
- import { parseStrictNonNegativeInteger, resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
7
+ import { parseStrictNonNegativeInteger, resolvePositiveTimerTimeoutMs, resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
4
8
  import { coerceErrorMessage, formatErrorMessage, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
5
9
  import { resolveFetch } from "openclaw/plugin-sdk/fetch-runtime";
6
10
  import { readResponseTextPrefix, readResponseWithLimit } from "openclaw/plugin-sdk/response-limit-runtime";
7
11
  import { readRegularFile } from "openclaw/plugin-sdk/security-runtime";
8
- import path from "node:path";
9
12
  import { Buffer as Buffer$1 } from "node:buffer";
10
13
  import http from "node:http";
11
14
  import https from "node:https";
12
15
  import { generateSecureUuid } from "openclaw/plugin-sdk/core";
16
+ import { randomUUID } from "node:crypto";
17
+ import { execFile } from "node:child_process";
18
+ import { lstat, mkdir, rmdir, unlink } from "node:fs/promises";
19
+ import os from "node:os";
20
+ import { promisify } from "node:util";
13
21
  //#region extensions/signal/src/ws-runtime.ts
14
22
  const require = createRequire(import.meta.url);
15
23
  const WebSocket = require(path.join(path.dirname(require.resolve("ws/package.json")), "index.js"));
@@ -22,7 +30,7 @@ const WebSocket = require(path.join(path.dirname(require.resolve("ws/package.jso
22
30
  * This is a separate implementation from client.ts (native signal-cli)
23
31
  * to keep the two modes cleanly isolated.
24
32
  */
25
- const DEFAULT_TIMEOUT_MS$1 = 1e4;
33
+ const DEFAULT_TIMEOUT_MS$2 = 1e4;
26
34
  const DEFAULT_ATTACHMENT_RESPONSE_MAX_BYTES = 1048576;
27
35
  const SIGNAL_REST_ERROR_RESPONSE_MAX_BYTES = 16384;
28
36
  const SIGNAL_REST_SUCCESS_RESPONSE_MAX_BYTES = 16777216;
@@ -58,7 +66,7 @@ function signalRestRequestTimeoutError() {
58
66
  }
59
67
  /** Keep one absolute deadline across headers and every bounded body reader. */
60
68
  async function withSignalRestDeadline(timeoutMs, run) {
61
- const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$1);
69
+ const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
62
70
  const deadlineAtMs = Date.now() + safeTimeoutMs;
63
71
  const controller = new AbortController();
64
72
  const timer = setTimeout(() => controller.abort(signalRestRequestTimeoutError()), safeTimeoutMs);
@@ -132,7 +140,7 @@ async function releaseUnreadResponseBody(res) {
132
140
  /**
133
141
  * Check if bbernhard container REST API is available.
134
142
  */
135
- async function containerCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS$1, account) {
143
+ async function containerCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS$2, account) {
136
144
  const normalized = normalizeBaseUrl$1(baseUrl);
137
145
  let res;
138
146
  try {
@@ -162,7 +170,7 @@ async function containerCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS$1, account
162
170
  function containerReceiveCheck(normalizedBaseUrl, account, timeoutMs) {
163
171
  const wsUrl = `${normalizedBaseUrl.replace(/^http/, "ws")}/v1/receive/${encodeURIComponent(account)}`;
164
172
  return new Promise((resolve) => {
165
- const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$1);
173
+ const safeTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
166
174
  let settled = false;
167
175
  let ws;
168
176
  const timer = setTimeout(() => {
@@ -233,11 +241,12 @@ async function containerRestRequest(endpoint, opts, method = "GET", body) {
233
241
  headers: { "Content-Type": "application/json" }
234
242
  };
235
243
  if (body) init.body = JSON.stringify(body);
236
- const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$1;
237
- const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$1);
244
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$2;
245
+ const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
238
246
  const fetchImpl = resolveFetch();
239
247
  if (!fetchImpl) throw new Error("fetch is not available");
240
248
  return await withSignalRestDeadline(timeoutMs, async ({ signal, timeoutMs: bodyTimeoutMs }) => {
249
+ opts.assertDirectAdapterHandoff?.();
241
250
  const res = await fetchImpl(url, {
242
251
  ...init,
243
252
  signal
@@ -266,8 +275,8 @@ async function containerRestRequest(endpoint, opts, method = "GET", body) {
266
275
  */
267
276
  async function containerFetchAttachment(attachmentId, opts) {
268
277
  const url = `${normalizeBaseUrl$1(opts.baseUrl)}/v1/attachments/${encodeURIComponent(attachmentId)}`;
269
- const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$1;
270
- const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$1);
278
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS$2;
279
+ const bodyIdleTimeoutMs = resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS$2);
271
280
  const fetchImpl = resolveFetch();
272
281
  if (!fetchImpl) throw new Error("fetch is not available");
273
282
  return await withSignalRestDeadline(timeoutMs, async ({ signal, timeoutMs: bodyTimeoutMs }) => {
@@ -328,7 +337,7 @@ async function streamContainerEvents(params) {
328
337
  try {
329
338
  ws = new WebSocket(wsUrl, {
330
339
  maxPayload: WS_MAX_PAYLOAD,
331
- handshakeTimeout: WS_HANDSHAKE_MS
340
+ handshakeTimeout: resolvePositiveTimerTimeoutMs(params.timeoutMs, WS_HANDSHAKE_MS)
332
341
  });
333
342
  } catch (err) {
334
343
  logError(`[signal-ws] failed to create WebSocket: ${coerceErrorMessage(err)}`);
@@ -477,10 +486,7 @@ async function containerSendMessage(params) {
477
486
  payload.quote_author = params.quoteAuthor;
478
487
  payload.quote_message = params.quoteMessage ?? "";
479
488
  }
480
- const timestamp = parseContainerSendTimestamp((await containerRestRequest("/v2/send", {
481
- baseUrl: params.baseUrl,
482
- timeoutMs: params.timeoutMs
483
- }, "POST", payload))?.timestamp);
489
+ const timestamp = parseContainerSendTimestamp((await containerRestRequest("/v2/send", params, "POST", payload))?.timestamp);
484
490
  return timestamp === void 0 ? {} : { timestamp };
485
491
  }
486
492
  /**
@@ -488,20 +494,14 @@ async function containerSendMessage(params) {
488
494
  */
489
495
  async function containerSendTyping(params) {
490
496
  const method = params.stop ? "DELETE" : "PUT";
491
- await containerRestRequest(`/v1/typing-indicator/${encodeURIComponent(params.account)}`, {
492
- baseUrl: params.baseUrl,
493
- timeoutMs: params.timeoutMs
494
- }, method, { recipient: params.recipient });
497
+ await containerRestRequest(`/v1/typing-indicator/${encodeURIComponent(params.account)}`, params, method, { recipient: params.recipient });
495
498
  return true;
496
499
  }
497
500
  /**
498
501
  * Send read receipt via bbernhard container REST API.
499
502
  */
500
503
  async function containerSendReceipt(params) {
501
- await containerRestRequest(`/v1/receipts/${encodeURIComponent(params.account)}`, {
502
- baseUrl: params.baseUrl,
503
- timeoutMs: params.timeoutMs
504
- }, "POST", {
504
+ await containerRestRequest(`/v1/receipts/${encodeURIComponent(params.account)}`, params, "POST", {
505
505
  recipient: params.recipient,
506
506
  timestamp: params.timestamp,
507
507
  receipt_type: params.type ?? "read"
@@ -519,10 +519,7 @@ async function containerSendReaction(params) {
519
519
  timestamp: params.targetTimestamp
520
520
  };
521
521
  if (params.groupId) payload.group_id = params.groupId;
522
- return await containerRestRequest(`/v1/reactions/${encodeURIComponent(params.account)}`, {
523
- baseUrl: params.baseUrl,
524
- timeoutMs: params.timeoutMs
525
- }, params.remove ? "DELETE" : "POST", payload) ?? {};
522
+ return await containerRestRequest(`/v1/reactions/${encodeURIComponent(params.account)}`, params, params.remove ? "DELETE" : "POST", payload) ?? {};
526
523
  }
527
524
  /**
528
525
  * Strip the "uuid:" prefix that native signal-cli accepts but the container API rejects.
@@ -565,39 +562,35 @@ async function containerRpcRequest(method, params, opts) {
565
562
  const quoteTimestamp = normalizeContainerQuoteTimestamp(p.quoteTimestamp ?? p["quote-timestamp"]);
566
563
  const quoteAuthor = normalizeContainerQuoteText(p.quoteAuthor ?? p["quote-author"]);
567
564
  return await containerSendMessage({
568
- baseUrl: opts.baseUrl,
565
+ ...opts,
569
566
  account: p.account ?? "",
570
567
  recipients: finalRecipients,
571
568
  message: p.message ?? "",
572
569
  textStyles,
573
570
  attachments: p.attachments,
574
- maxAttachmentBytes: opts.maxAttachmentBytes,
575
571
  quoteTimestamp,
576
572
  quoteAuthor: quoteAuthor ? stripUuidPrefix(quoteAuthor) : void 0,
577
- quoteMessage: normalizeContainerQuoteText(p.quoteMessage ?? p["quote-message"]),
578
- timeoutMs: opts.timeoutMs
573
+ quoteMessage: normalizeContainerQuoteText(p.quoteMessage ?? p["quote-message"])
579
574
  });
580
575
  }
581
576
  case "sendTyping": {
582
577
  const recipient = stripUuidPrefix(p.recipient?.[0] ?? (p.groupId ? formatGroupIdForContainer(p.groupId) : ""));
583
578
  await containerSendTyping({
584
- baseUrl: opts.baseUrl,
579
+ ...opts,
585
580
  account: p.account ?? "",
586
581
  recipient,
587
- stop: p.stop,
588
- timeoutMs: opts.timeoutMs
582
+ stop: p.stop
589
583
  });
590
584
  return;
591
585
  }
592
586
  case "sendReceipt": {
593
587
  const recipient = stripUuidPrefix(p.recipient?.[0] ?? "");
594
588
  await containerSendReceipt({
595
- baseUrl: opts.baseUrl,
589
+ ...opts,
596
590
  account: p.account ?? "",
597
591
  recipient,
598
592
  timestamp: p.targetTimestamp,
599
- type: p.type,
600
- timeoutMs: opts.timeoutMs
593
+ type: p.type
601
594
  });
602
595
  return;
603
596
  }
@@ -607,14 +600,13 @@ async function containerRpcRequest(method, params, opts) {
607
600
  const formattedGroupId = groupId ? formatGroupIdForContainer(groupId) : void 0;
608
601
  const effectiveRecipient = formattedGroupId || recipient || "";
609
602
  return await containerSendReaction({
610
- baseUrl: opts.baseUrl,
603
+ ...opts,
611
604
  account: p.account ?? "",
612
605
  recipient: effectiveRecipient,
613
606
  emoji: p.emoji ?? "",
614
607
  targetAuthor: stripUuidPrefix(p.targetAuthor ?? recipient),
615
608
  targetTimestamp: p.targetTimestamp,
616
609
  groupId: formattedGroupId,
617
- timeoutMs: opts.timeoutMs,
618
610
  remove: Boolean(p.remove)
619
611
  });
620
612
  }
@@ -636,6 +628,269 @@ async function containerRpcRequest(method, params, opts) {
636
628
  }
637
629
  }
638
630
  //#endregion
631
+ //#region extensions/signal/src/socket-path.ts
632
+ const execFileAsync = promisify(execFile);
633
+ function socketOwner(socketPath) {
634
+ if (process.platform === "win32" || !process.getuid) throw new Error("Signal UNIX socket transport requires a POSIX host");
635
+ if (!path.isAbsolute(socketPath) || path.normalize(socketPath) !== socketPath || socketPath.includes("\0")) throw new Error("Signal socketPath must be a normalized absolute path without NUL bytes");
636
+ if (Buffer.byteLength(socketPath) > 103) throw new Error("Signal socketPath must be at most 103 UTF-8 bytes");
637
+ return process.getuid();
638
+ }
639
+ async function assertDarwinAclSafe(entryPath, ownerUid, rejectInheritedAllow) {
640
+ if (process.platform !== "darwin") return;
641
+ let stdout;
642
+ try {
643
+ ({stdout} = await execFileAsync("/bin/ls", ["-lde", entryPath], { encoding: "utf8" }));
644
+ } catch {
645
+ throw new Error("Signal socketPath ACLs could not be inspected safely");
646
+ }
647
+ const ownerName = ownerUid === 0 ? "root" : os.userInfo().username;
648
+ for (const line of stdout.split("\n").slice(1)) {
649
+ if (!/^\s*\d+:\s+/.test(line) || !/\ballow\b/.test(line)) continue;
650
+ const ownerAllow = line.includes(`user:${ownerName} `);
651
+ const inheritable = /\b(file_inherit|directory_inherit|limit_inherit|only_inherit)\b/.test(line);
652
+ if (!ownerAllow || rejectInheritedAllow && inheritable) throw new Error("Signal socketPath must not grant ACL access to other users");
653
+ }
654
+ }
655
+ async function validateDirectories(directory, uid, privateParent, inspectAcl) {
656
+ const parts = path.resolve(directory).split(path.sep).filter(Boolean);
657
+ let current = path.parse(directory).root;
658
+ for (const part of parts) {
659
+ current = path.join(current, part);
660
+ const stat = await lstat(current);
661
+ if (!stat.isDirectory() || stat.isSymbolicLink()) throw new Error("Signal socketPath must not traverse symlinks or non-directories");
662
+ if (stat.uid !== uid && stat.uid !== 0) throw new Error("Signal socketPath ancestors must belong to the current user or root");
663
+ if ((stat.mode & 18) !== 0 && !(stat.uid === 0 && (stat.mode & 512) !== 0)) throw new Error("Signal socketPath ancestors must not be writable by other users");
664
+ if (privateParent && current === path.resolve(directory)) {
665
+ if (stat.uid !== uid || (stat.mode & 511) !== 448) throw new Error("Signal socketPath parent must belong to the current user with mode 0700");
666
+ }
667
+ if (inspectAcl) await assertDarwinAclSafe(current, stat.uid, true);
668
+ }
669
+ if (privateParent && parts.length === 0) throw new Error("Signal socketPath requires a private parent directory");
670
+ }
671
+ /** Validate the OS-user boundary before every connection, not only at startup. */
672
+ async function validateSignalSocketPath(socketPath) {
673
+ const uid = socketOwner(socketPath);
674
+ await validateDirectories(path.dirname(socketPath), uid, true, true);
675
+ }
676
+ async function assertSignalSocketEndpoint(socketPath) {
677
+ await validateSignalSocketPath(socketPath);
678
+ const stat = await lstat(socketPath);
679
+ if (!stat.isSocket() || stat.uid !== socketOwner(socketPath)) throw new Error("Signal socketPath must name a socket owned by the current user");
680
+ await assertDarwinAclSafe(socketPath, stat.uid, false);
681
+ }
682
+ async function isStaleSocket(socketPath, abortSignal) {
683
+ abortSignal?.throwIfAborted();
684
+ return new Promise((resolve, reject) => {
685
+ const socket = createConnection(socketPath);
686
+ const timer = setTimeout(() => finish(/* @__PURE__ */ new Error("Signal socket ownership probe timed out")), 1e3);
687
+ const onAbort = () => finish(/* @__PURE__ */ new Error("Signal socket ownership probe aborted"));
688
+ function finish(error, stale = false) {
689
+ clearTimeout(timer);
690
+ abortSignal?.removeEventListener("abort", onAbort);
691
+ socket.destroy();
692
+ if (error) reject(error);
693
+ else resolve(stale);
694
+ }
695
+ socket.once("connect", () => finish());
696
+ socket.once("error", (error) => {
697
+ if ("code" in error && error.code === "ECONNREFUSED") finish(void 0, true);
698
+ else finish(error);
699
+ });
700
+ abortSignal?.addEventListener("abort", onAbort, { once: true });
701
+ });
702
+ }
703
+ /** Recover crash leftovers without unlinking a live or replaced endpoint. */
704
+ async function prepareSignalSocketPath(socketPath, abortSignal) {
705
+ const uid = socketOwner(socketPath);
706
+ abortSignal?.throwIfAborted();
707
+ const parent = path.dirname(socketPath);
708
+ await validateDirectories(path.dirname(parent), uid, false, false);
709
+ let createdParent = false;
710
+ try {
711
+ await mkdir(parent, { mode: 448 });
712
+ createdParent = true;
713
+ } catch (error) {
714
+ if (!(error instanceof Error && "code" in error && error.code === "EEXIST")) throw error;
715
+ }
716
+ try {
717
+ await validateSignalSocketPath(socketPath);
718
+ let existing;
719
+ try {
720
+ existing = await lstat(socketPath);
721
+ } catch (error) {
722
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") return;
723
+ throw error;
724
+ }
725
+ if (existing.isSocket() && existing.uid === uid && await isStaleSocket(socketPath, abortSignal)) {
726
+ await validateSignalSocketPath(socketPath);
727
+ const current = await lstat(socketPath);
728
+ abortSignal?.throwIfAborted();
729
+ if (current.isSocket() && current.uid === uid && current.dev === existing.dev && current.ino === existing.ino) {
730
+ await unlink(socketPath);
731
+ return;
732
+ }
733
+ throw new Error("Signal socketPath changed during its ownership probe; retry startup");
734
+ }
735
+ throw new Error("Signal socketPath already exists; stop its owner or choose a different socket path before starting");
736
+ } catch (error) {
737
+ if (createdParent) try {
738
+ const stat = await lstat(parent);
739
+ if (stat.isDirectory() && !stat.isSymbolicLink() && stat.uid === uid) await rmdir(parent);
740
+ } catch {}
741
+ throw error;
742
+ }
743
+ }
744
+ //#endregion
745
+ //#region extensions/signal/src/client-unix.ts
746
+ const MAX_FRAME_BYTES = 1048576;
747
+ const DEFAULT_TIMEOUT_MS$1 = 1e4;
748
+ function socketPath(baseUrl) {
749
+ const url = new URL(baseUrl.trim());
750
+ if (url.protocol !== "unix:" || url.host || url.username || url.password || url.search || url.hash) throw new Error("Signal UNIX URL must contain only an absolute socket path");
751
+ return fileURLToPath(`file://${url.pathname}`);
752
+ }
753
+ function abortError() {
754
+ return Object.assign(/* @__PURE__ */ new Error("Signal UNIX stream aborted"), { name: "AbortError" });
755
+ }
756
+ async function openSocket(options, abortSignal) {
757
+ if (abortSignal?.aborted) throw abortError();
758
+ const path = socketPath(options.baseUrl);
759
+ await assertSignalSocketEndpoint(path);
760
+ if (abortSignal?.aborted) throw abortError();
761
+ const socket = net.createConnection({ path });
762
+ socket.on("error", () => {});
763
+ const timeoutMs = resolveTimerTimeoutMs(options.timeoutMs ?? DEFAULT_TIMEOUT_MS$1, DEFAULT_TIMEOUT_MS$1);
764
+ const deadline = setTimeout(() => {
765
+ socket.destroy(/* @__PURE__ */ new Error(`Signal UNIX RPC exceeded deadline after ${timeoutMs}ms`));
766
+ }, timeoutMs);
767
+ deadline.unref();
768
+ const onAbort = () => socket.destroy(abortError());
769
+ abortSignal?.addEventListener("abort", onAbort, { once: true });
770
+ return {
771
+ socket,
772
+ ready: () => clearTimeout(deadline),
773
+ close: () => {
774
+ clearTimeout(deadline);
775
+ abortSignal?.removeEventListener("abort", onAbort);
776
+ socket.destroy();
777
+ }
778
+ };
779
+ }
780
+ async function* messages(socket, maxBytes = MAX_FRAME_BYTES) {
781
+ let pending = Buffer$1.alloc(0);
782
+ for await (const chunk of socket) {
783
+ if (!Buffer$1.isBuffer(chunk)) throw new Error("Signal UNIX RPC expected a byte stream");
784
+ let offset = 0;
785
+ while (offset < chunk.length) {
786
+ const newline = chunk.indexOf(10, offset);
787
+ const end = newline < 0 ? chunk.length : newline;
788
+ const fragment = chunk.subarray(offset, end);
789
+ if (pending.length + fragment.length > maxBytes) throw new Error("Signal UNIX RPC frame exceeded size limit");
790
+ pending = Buffer$1.concat([pending, fragment]);
791
+ if (newline < 0) break;
792
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(pending);
793
+ pending = Buffer$1.alloc(0);
794
+ offset = newline + 1;
795
+ let parsed;
796
+ try {
797
+ parsed = JSON.parse(text);
798
+ } catch {
799
+ throw new Error("Signal UNIX RPC returned malformed JSON");
800
+ }
801
+ if (!isRecord(parsed)) throw new Error("Signal UNIX RPC returned invalid response envelope");
802
+ yield parsed;
803
+ }
804
+ }
805
+ if (pending.length) throw new Error("Signal UNIX RPC closed with an incomplete frame");
806
+ }
807
+ const QUOTE_REJECTION_WORDS = [
808
+ "reject",
809
+ "invalid",
810
+ "unrecognized",
811
+ "unsupported",
812
+ "not found",
813
+ "no such",
814
+ "unknown"
815
+ ];
816
+ function isQuoteMetadataRejection(code, rawMessage) {
817
+ if (code !== -32602) return false;
818
+ const normalized = rawMessage.toLowerCase();
819
+ return normalized.includes("quote") && QUOTE_REJECTION_WORDS.some((word) => normalized.includes(word));
820
+ }
821
+ function result(message) {
822
+ if (message.jsonrpc !== "2.0" || !Object.hasOwn(message, "result") && !message.error) throw new Error("Signal UNIX RPC returned invalid response envelope");
823
+ if (message.error) {
824
+ const error = isRecord(message.error) ? message.error : {};
825
+ const code = typeof error.code === "number" ? error.code : "unknown";
826
+ if (typeof error.message === "string" && isQuoteMetadataRejection(code, error.message)) throw new Error(`Signal RPC ${code}: quote metadata rejected (redacted)`);
827
+ throw new Error(`Signal RPC ${code}: remote error`);
828
+ }
829
+ return message.result;
830
+ }
831
+ async function signalUnixRpcRequest(method, params, options) {
832
+ const connection = await openSocket(options);
833
+ const id = randomUUID();
834
+ const maxBytes = typeof options.maxResponseBytes === "number" && Number.isFinite(options.maxResponseBytes) && options.maxResponseBytes >= 1 ? Math.floor(options.maxResponseBytes) : MAX_FRAME_BYTES;
835
+ try {
836
+ const frame = `${JSON.stringify({
837
+ jsonrpc: "2.0",
838
+ id,
839
+ method,
840
+ params
841
+ })}\n`;
842
+ options.assertDirectAdapterHandoff?.();
843
+ connection.socket.write(frame);
844
+ for await (const message of messages(connection.socket, maxBytes)) if (message.id === id) return result(message);
845
+ throw new Error("Signal UNIX RPC closed before response");
846
+ } finally {
847
+ connection.close();
848
+ }
849
+ }
850
+ async function streamSignalUnixEvents(params) {
851
+ const connection = await openSocket({
852
+ ...params,
853
+ timeoutMs: params.timeoutMs === 0 ? DEFAULT_TIMEOUT_MS$1 : params.timeoutMs
854
+ }, params.abortSignal);
855
+ const id = randomUUID();
856
+ let subscribed = false;
857
+ let subscription;
858
+ try {
859
+ connection.socket.write(`${JSON.stringify({
860
+ jsonrpc: "2.0",
861
+ id,
862
+ method: "subscribeReceive",
863
+ params: params.account ? { account: params.account } : void 0
864
+ })}\n`);
865
+ for await (const message of messages(connection.socket)) {
866
+ if (params.abortSignal?.aborted) throw abortError();
867
+ if (message.id === id) {
868
+ const value = result(message);
869
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0) throw new Error("Signal UNIX RPC returned invalid receive subscription");
870
+ subscription = value;
871
+ subscribed = true;
872
+ connection.ready();
873
+ params.onStreamOpen?.();
874
+ continue;
875
+ }
876
+ if (message.jsonrpc !== "2.0" || message.method !== "receive" || !isRecord(message.params)) continue;
877
+ const notification = message.params;
878
+ if (subscription !== void 0 && notification.subscription !== subscription) continue;
879
+ const payload = notification.result;
880
+ if (!isRecord(payload)) continue;
881
+ const account = payload.account;
882
+ if (params.account && typeof account === "string" && account !== params.account) continue;
883
+ await params.onEvent({
884
+ event: "receive",
885
+ data: JSON.stringify(payload)
886
+ });
887
+ }
888
+ if (!subscribed) throw new Error("Signal UNIX RPC closed before receive subscription");
889
+ } finally {
890
+ connection.close();
891
+ }
892
+ }
893
+ //#endregion
639
894
  //#region extensions/signal/src/client.ts
640
895
  /** Thrown when the native SSE endpoint rejects the request with a non-2xx HTTP status. */
641
896
  var SignalSseRejectionError = class extends Error {
@@ -699,6 +954,7 @@ function requestSignalHttp(url, options) {
699
954
  assertSignalHttpProtocol(url, "HTTP");
700
955
  const timeoutMs = resolveTimerTimeoutMs(options.timeoutMs, DEFAULT_TIMEOUT_MS);
701
956
  const client = url.protocol === "https:" ? https : http;
957
+ options.assertDirectAdapterHandoff?.();
702
958
  return new Promise((resolve, reject) => {
703
959
  let settled = false;
704
960
  const deadline = setTimeout(() => {
@@ -757,6 +1013,7 @@ function requestSignalHttp(url, options) {
757
1013
  });
758
1014
  }
759
1015
  async function signalRpcRequest(method, params, opts) {
1016
+ if (opts.baseUrl.trim().startsWith("unix:")) return signalUnixRpcRequest(method, params, opts);
760
1017
  const id = generateSecureUuid();
761
1018
  const body = JSON.stringify({
762
1019
  jsonrpc: "2.0",
@@ -772,7 +1029,8 @@ async function signalRpcRequest(method, params, opts) {
772
1029
  },
773
1030
  body,
774
1031
  timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,
775
- maxResponseBytes: opts.maxResponseBytes
1032
+ maxResponseBytes: opts.maxResponseBytes,
1033
+ assertDirectAdapterHandoff: opts.assertDirectAdapterHandoff
776
1034
  });
777
1035
  if (res.status === 201) return;
778
1036
  const text = new TextDecoder("utf-8", { fatal: true }).decode(res.body);
@@ -787,6 +1045,17 @@ async function signalRpcRequest(method, params, opts) {
787
1045
  }
788
1046
  async function signalCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS) {
789
1047
  try {
1048
+ if (baseUrl.trim().startsWith("unix:")) {
1049
+ await signalUnixRpcRequest("version", void 0, {
1050
+ baseUrl,
1051
+ timeoutMs
1052
+ });
1053
+ return {
1054
+ ok: true,
1055
+ status: null,
1056
+ error: null
1057
+ };
1058
+ }
790
1059
  const res = await requestSignalHttp(resolveSignalEndpointUrl(baseUrl, "/api/v1/check"), {
791
1060
  method: "GET",
792
1061
  timeoutMs
@@ -869,6 +1138,7 @@ function openSignalEventStream(url, abortSignal, timeoutMs = DEFAULT_TIMEOUT_MS)
869
1138
  });
870
1139
  }
871
1140
  async function streamSignalEvents(params) {
1141
+ if (params.baseUrl.trim().startsWith("unix:")) return streamSignalUnixEvents(params);
872
1142
  const url = resolveSignalEndpointUrl(params.baseUrl, "/api/v1/events");
873
1143
  if (params.account) url.searchParams.set("account", params.account);
874
1144
  const { response, cleanup } = await openSignalEventStream(url, params.abortSignal, params.timeoutMs ?? DEFAULT_TIMEOUT_MS);
@@ -939,4 +1209,4 @@ async function streamSignalEvents(params) {
939
1209
  await flushEvent();
940
1210
  }
941
1211
  //#endregion
942
- export { containerCheck as a, streamSignalEvents as i, signalCheck as n, containerRpcRequest as o, signalRpcRequest as r, streamContainerEvents as s, SignalSseRejectionError as t };
1212
+ export { prepareSignalSocketPath as a, streamContainerEvents as c, streamSignalEvents as i, signalCheck as n, containerCheck as o, signalRpcRequest as r, containerRpcRequest as s, SignalSseRejectionError as t };
@@ -1,4 +1,4 @@
1
- import { a as containerCheck, i as streamSignalEvents$1, n as signalCheck$1, o as containerRpcRequest, r as signalRpcRequest$1, s as streamContainerEvents } from "./client-B3C0ciqU.js";
1
+ import { c as streamContainerEvents, i as streamSignalEvents$1, n as signalCheck$1, o as containerCheck, r as signalRpcRequest$1, s as containerRpcRequest } from "./client-BseAt7F7.mjs";
2
2
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
3
3
  //#region extensions/signal/src/client-adapter.ts
4
4
  /**
@@ -1,6 +1,7 @@
1
+ import { o as resolveSignalAccountEntry, t as assertSignalSocketTransport } from "./transport-url-CAC0JcuI.mjs";
1
2
  import { createChannelConfigUiHints } from "openclaw/plugin-sdk/channel-core";
2
3
  import { isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
- import { DEFAULT_ACCOUNT_ID, normalizeAccountId, resolveAccountEntry } from "openclaw/plugin-sdk/account-resolution";
4
+ import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
4
5
  import { ChannelDeliveryStreamingConfigSchema, ChannelSendReadReceiptsSchema, ExecutableTokenSchema, ReplyToModeSchema, buildChannelAccountSchemaParts, buildChannelConfigSchema, buildChannelReactionShape, buildGroupEntrySchema, refineChannelDmPolicy } from "openclaw/plugin-sdk/channel-config-schema";
5
6
  import { z } from "zod";
6
7
  //#region extensions/signal/src/config-ui-hints.ts
@@ -40,6 +41,10 @@ const signalChannelConfigUiHints = {
40
41
  label: "Signal CLI Config Path",
41
42
  help: "Optional directory passed to signal-cli via --config when the service needs a non-default signal-cli data path."
42
43
  },
44
+ "transport.socketPath": {
45
+ label: "Signal UNIX Socket Path",
46
+ help: "Opt-in managed-native transport on POSIX. Use an absolute socket path in a private directory owned by the Gateway user (mode 0700). Excludes url, httpHost, httpPort, and receiveMode on-start. HTTP remains the default; socket failures never fall back to HTTP."
47
+ },
43
48
  "transport.url": {
44
49
  label: "Signal Transport URL",
45
50
  help: "Base URL for an external-native or container transport, or the connection endpoint for a managed-native daemon when it differs from the bind address."
@@ -76,6 +81,7 @@ const SignalTransportSchema = z.discriminatedUnion("kind", [
76
81
  z.object({
77
82
  kind: z.literal("managed-native"),
78
83
  configPath: z.string().optional(),
84
+ socketPath: z.string().regex(/^\/(?!\/)[^\0]*[^/\0]$/, "Expected an absolute POSIX socket file path").optional(),
79
85
  url: SignalTransportUrlSchema.optional(),
80
86
  httpHost: z.string().optional(),
81
87
  httpPort: z.number().int().min(1).max(65535).optional(),
@@ -83,7 +89,17 @@ const SignalTransportSchema = z.discriminatedUnion("kind", [
83
89
  startupTimeoutMs: z.number().int().min(1e3).max(12e4).optional(),
84
90
  receiveMode: z.union([z.literal("on-start"), z.literal("manual")]).optional(),
85
91
  ignoreStories: z.boolean().optional()
86
- }).strict(),
92
+ }).strict().superRefine((transport, ctx) => {
93
+ try {
94
+ assertSignalSocketTransport(transport);
95
+ } catch (error) {
96
+ ctx.addIssue({
97
+ code: "custom",
98
+ path: ["socketPath"],
99
+ message: String(error instanceof Error ? error.message : error)
100
+ });
101
+ }
102
+ }),
87
103
  z.object({
88
104
  kind: z.literal("external-native"),
89
105
  url: SignalTransportUrlSchema
@@ -158,7 +174,7 @@ function validateSignalConfigAllowFrom(value, ctx) {
158
174
  }
159
175
  }
160
176
  function validateSignalContainerAccounts(value, ctx) {
161
- const defaultAccount = resolveAccountEntry(value.accounts, DEFAULT_ACCOUNT_ID);
177
+ const defaultAccount = resolveSignalAccountEntry(value.accounts, DEFAULT_ACCOUNT_ID);
162
178
  const effectiveDefaultAccount = defaultAccount?.account === void 0 ? value.account : defaultAccount.account;
163
179
  const channelEnabled = value.enabled !== false;
164
180
  const defaultEnabled = defaultAccount?.enabled !== false;