@openclaw/signal 2026.9.6 → 2026.9.7

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 (279) hide show
  1. package/assets/icon.png +0 -0
  2. package/dist/.setup/{accounts-BV6tDOTc.mjs → accounts-DMtj2E-4.mjs} +6 -35
  3. package/dist/.setup/api-DEB0Obj8.mjs +16 -0
  4. package/dist/.setup/{api-CGh4eWR8.mjs → api-DmCb6e7E.mjs} +10 -10
  5. package/dist/.setup/{approval-auth-BBI9BTRm.mjs → approval-auth-CszS7gwf.mjs} +7 -13
  6. package/dist/.setup/{approval-handler.runtime-C3vN5OWd.mjs → approval-handler.runtime-D9ofZcZW.mjs} +10 -29
  7. package/dist/.setup/{approval-reactions-DDQvPP_z.mjs → approval-reactions-BKkjIAoi.mjs} +25 -36
  8. package/dist/.setup/{channel-DhzTcFsK.mjs → channel-DrUxv5cf.mjs} +567 -136
  9. package/dist/.setup/{client-BseAt7F7.mjs → client-AXcDteBZ.mjs} +63 -152
  10. package/dist/.setup/client-adapter-c_O1ouxZ.mjs +30 -0
  11. package/dist/.setup/{config-schema-aQwwMGUj.mjs → config-schema-DvxZ18SD.mjs} +3 -13
  12. package/dist/.setup/{doctor-contract-api-Rbq_sRTI.mjs → doctor-contract-api-Db9V9gsY.mjs} +212 -91
  13. package/dist/.setup/{identity-YXPmgFMu.mjs → identity-B3JyPqGO.mjs} +2 -6
  14. package/dist/.setup/{install-signal-cli-BDbzFcU2.mjs → install-signal-cli-ChvjzM6X.mjs} +0 -4
  15. package/dist/.setup/legacy-transport-QIpaMNST.mjs +18 -0
  16. package/dist/.setup/{monitor-Dnz6Ygz5.mjs → monitor-BfwQr78f.mjs} +95 -124
  17. package/dist/.setup/{probe-DXT2eLnw.mjs → probe-BYLzra6D.mjs} +9 -9
  18. package/dist/.setup/{reaction-runtime-api-BnQGHcrB.mjs → reaction-runtime-api-DDi5x2wC.mjs} +3 -17
  19. package/dist/.setup/{question-reactions-C8cSEjVf.mjs → reaction-targets-CEdyjtrC.mjs} +11 -8
  20. package/dist/.setup/{rpc-context-CwwADZ1b.mjs → rpc-context-D26RxFIm.mjs} +1 -1
  21. package/dist/.setup/runtime-8sxUF217.mjs +8 -0
  22. package/dist/.setup/{send-B78M_eFp.mjs → send-DEjrbpIC.mjs} +25 -55
  23. package/dist/.setup/{channel.runtime-CG79z_Vy.mjs → setup-surface-Drt-4t3R.mjs} +4 -6
  24. package/dist/.setup/transport-detection-BVUDE42e.mjs +25 -0
  25. package/dist/.setup/{transport-policy-5VSnj5ma.mjs → transport-policy-B6C_LogW.mjs} +19 -1
  26. package/dist/.setup/transport-probes.runtime-DwXEHnXr.mjs +2 -0
  27. package/dist/api.js +10 -10
  28. package/dist/channel-config-api.js +1 -1
  29. package/dist/channel-plugin-api.js +1 -1
  30. package/dist/contract-api.js +2 -2
  31. package/dist/doctor-contract-api.js +1 -1
  32. package/dist/reaction-runtime-api.js +1 -1
  33. package/dist/runtime-api.js +2 -19
  34. package/dist/setup-entry.js +1 -1
  35. package/node_modules/@openclaw/fs-safe/CHANGELOG.md +102 -0
  36. package/node_modules/@openclaw/fs-safe/README.md +24 -6
  37. package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts +6 -1
  38. package/node_modules/@openclaw/fs-safe/dist/advanced.js +3 -1
  39. package/node_modules/@openclaw/fs-safe/dist/archive-durability.js +1 -1
  40. package/node_modules/@openclaw/fs-safe/dist/archive-merge.js +1 -2
  41. package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts +2 -7
  42. package/node_modules/@openclaw/fs-safe/dist/archive-read.js +9 -18
  43. package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts +1 -2
  44. package/node_modules/@openclaw/fs-safe/dist/archive-staging.js +3 -3
  45. package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.js +4 -0
  46. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts +11 -11
  47. package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.js +3 -35
  48. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts +2 -2
  49. package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.js +2 -12
  50. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.d.ts +7 -3
  51. package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.js +13 -10
  52. package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.js +3 -1
  53. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts +2 -3
  54. package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.js +16 -8
  55. package/node_modules/@openclaw/fs-safe/dist/archive.d.ts +6 -3
  56. package/node_modules/@openclaw/fs-safe/dist/archive.js +22 -19
  57. package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts +1 -1
  58. package/node_modules/@openclaw/fs-safe/dist/copy-publication.d.ts +1 -3
  59. package/node_modules/@openclaw/fs-safe/dist/copy-publication.js +2 -6
  60. package/node_modules/@openclaw/fs-safe/dist/deny-mutation-match.d.ts +2 -0
  61. package/node_modules/@openclaw/fs-safe/dist/deny-mutation-match.js +71 -0
  62. package/node_modules/@openclaw/fs-safe/dist/deny-mutations.js +4 -3
  63. package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts +0 -1
  64. package/node_modules/@openclaw/fs-safe/dist/directory-guard.js +0 -3
  65. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts +20 -2
  66. package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.js +77 -1
  67. package/node_modules/@openclaw/fs-safe/dist/directory-receipt.js +5 -7
  68. package/node_modules/@openclaw/fs-safe/dist/effective-uid.js +1 -4
  69. package/node_modules/@openclaw/fs-safe/dist/errors.d.ts +3 -1
  70. package/node_modules/@openclaw/fs-safe/dist/errors.js +3 -2
  71. package/node_modules/@openclaw/fs-safe/dist/file-identity.js +10 -2
  72. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.js +1 -1
  73. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.js +5 -1
  74. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.d.ts +4 -11
  75. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.js +1 -4
  76. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.d.ts +3 -6
  77. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.js +1 -1
  78. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.d.ts +2 -10
  79. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.d.ts +2 -4
  80. package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.js +2 -2
  81. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts +3 -7
  82. package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.js +7 -10
  83. package/node_modules/@openclaw/fs-safe/dist/file-store-prune.js +7 -6
  84. package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts +4 -7
  85. package/node_modules/@openclaw/fs-safe/dist/file-store.js +19 -21
  86. package/node_modules/@openclaw/fs-safe/dist/guest-native-python.js +23 -31
  87. package/node_modules/@openclaw/fs-safe/dist/guest.js +21 -12
  88. package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts +4 -9
  89. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts +1 -5
  90. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts +0 -1
  91. package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.js +2 -7
  92. package/node_modules/@openclaw/fs-safe/dist/local-file-access.js +2 -5
  93. package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.d.ts +2 -5
  94. package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts +2 -7
  95. package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.js +4 -4
  96. package/node_modules/@openclaw/fs-safe/dist/mutation-authority.js +5 -0
  97. package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts +51 -14
  98. package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.js +8 -2
  99. package/node_modules/@openclaw/fs-safe/dist/native-staged-symlink.d.ts +13 -0
  100. package/node_modules/@openclaw/fs-safe/dist/native-staged-symlink.js +303 -0
  101. package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch-worker.d.ts +1 -0
  102. package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch-worker.js +54 -0
  103. package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch.d.ts +5 -0
  104. package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch.js +64 -0
  105. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts +2 -0
  106. package/node_modules/@openclaw/fs-safe/dist/owner-dacl.js +3 -0
  107. package/node_modules/@openclaw/fs-safe/dist/path.js +17 -1
  108. package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts +6 -0
  109. package/node_modules/@openclaw/fs-safe/dist/permission-exec.js +3 -6
  110. package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts +3 -1
  111. package/node_modules/@openclaw/fs-safe/dist/permissions-public.js +1 -0
  112. package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts +3 -6
  113. package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts +3 -10
  114. package/node_modules/@openclaw/fs-safe/dist/permissions.js +0 -1
  115. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.d.ts +0 -1
  116. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.js +4 -2
  117. package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.d.ts +2 -8
  118. package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts +1 -1
  119. package/node_modules/@openclaw/fs-safe/dist/pinned-open.js +2 -3
  120. package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.js +4 -0
  121. package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts +2 -5
  122. package/node_modules/@openclaw/fs-safe/dist/regular-file.js +3 -3
  123. package/node_modules/@openclaw/fs-safe/dist/replace-directory.js +5 -17
  124. package/node_modules/@openclaw/fs-safe/dist/replace-file-buffer.d.ts +4 -0
  125. package/node_modules/@openclaw/fs-safe/dist/replace-file-buffer.js +36 -0
  126. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts +4 -10
  127. package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.js +66 -38
  128. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts +7 -11
  129. package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.js +10 -2
  130. package/node_modules/@openclaw/fs-safe/dist/replace-file-destination.d.ts +21 -0
  131. package/node_modules/@openclaw/fs-safe/dist/replace-file-destination.js +123 -0
  132. package/node_modules/@openclaw/fs-safe/dist/replace-file-mutation.d.ts +26 -0
  133. package/node_modules/@openclaw/fs-safe/dist/replace-file-mutation.js +47 -0
  134. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts +2 -2
  135. package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.js +16 -4
  136. package/node_modules/@openclaw/fs-safe/dist/replace-file-types.d.ts +55 -0
  137. package/node_modules/@openclaw/fs-safe/dist/replace-file-types.js +1 -0
  138. package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts +3 -55
  139. package/node_modules/@openclaw/fs-safe/dist/replace-file.js +31 -11
  140. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.d.ts +1 -0
  141. package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.js +1 -1
  142. package/node_modules/@openclaw/fs-safe/dist/retained-file-types.d.ts +50 -0
  143. package/node_modules/@openclaw/fs-safe/dist/retained-file-types.js +1 -0
  144. package/node_modules/@openclaw/fs-safe/dist/retained-file.d.ts +3 -0
  145. package/node_modules/@openclaw/fs-safe/dist/retained-file.js +121 -0
  146. package/node_modules/@openclaw/fs-safe/dist/root-context.js +3 -2
  147. package/node_modules/@openclaw/fs-safe/dist/root-directory-entry.d.ts +9 -0
  148. package/node_modules/@openclaw/fs-safe/dist/root-directory-entry.js +28 -0
  149. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.d.ts +9 -1
  150. package/node_modules/@openclaw/fs-safe/dist/root-directory-list.js +88 -37
  151. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.d.ts +1 -1
  152. package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.js +1 -6
  153. package/node_modules/@openclaw/fs-safe/dist/root-file.js +2 -5
  154. package/node_modules/@openclaw/fs-safe/dist/root-handle-context.d.ts +4 -0
  155. package/node_modules/@openclaw/fs-safe/dist/root-handle-context.js +12 -0
  156. package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts +3 -3
  157. package/node_modules/@openclaw/fs-safe/dist/root-impl.js +8 -5
  158. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.d.ts +2 -7
  159. package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.js +3 -3
  160. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.d.ts +0 -1
  161. package/node_modules/@openclaw/fs-safe/dist/root-observed-path.js +0 -3
  162. package/node_modules/@openclaw/fs-safe/dist/root-path-observation.d.ts +4 -11
  163. package/node_modules/@openclaw/fs-safe/dist/root-path.js +7 -10
  164. package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts +2 -6
  165. package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.d.ts +1 -3
  166. package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts +19 -12
  167. package/node_modules/@openclaw/fs-safe/dist/root-walk.js +56 -20
  168. package/node_modules/@openclaw/fs-safe/dist/root-write-admission.js +1 -6
  169. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.d.ts +2 -0
  170. package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.js +1 -1
  171. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts +1 -0
  172. package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.js +8 -2
  173. package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts +6 -2
  174. package/node_modules/@openclaw/fs-safe/dist/secret-file.js +12 -16
  175. package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.js +1 -1
  176. package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.js +5 -14
  177. package/node_modules/@openclaw/fs-safe/dist/secure-file.js +3 -2
  178. package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.js +2 -7
  179. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.js +4 -4
  180. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.d.ts +1 -2
  181. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts +2 -8
  182. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts +2 -7
  183. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts +2 -2
  184. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.js +11 -12
  185. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.d.ts +1 -5
  186. package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.js +9 -7
  187. package/node_modules/@openclaw/fs-safe/dist/staged-symlink-types.d.ts +39 -0
  188. package/node_modules/@openclaw/fs-safe/dist/staged-symlink-types.js +1 -0
  189. package/node_modules/@openclaw/fs-safe/dist/stat-observation.js +3 -10
  190. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts +2 -0
  191. package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.js +6 -6
  192. package/node_modules/@openclaw/fs-safe/dist/symlink-parents.js +58 -7
  193. package/node_modules/@openclaw/fs-safe/dist/temp-target.js +8 -10
  194. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.js +28 -33
  195. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.d.ts +1 -1
  196. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.js +16 -17
  197. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.js +1 -2
  198. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.js +4 -9
  199. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-ownership.d.ts +8 -0
  200. package/node_modules/@openclaw/fs-safe/dist/temp-workspace-ownership.js +52 -0
  201. package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts +5 -1
  202. package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts +2 -1
  203. package/node_modules/@openclaw/fs-safe/dist/text-atomic.js +2 -0
  204. package/node_modules/@openclaw/fs-safe/dist/trash.js +27 -1
  205. package/node_modules/@openclaw/fs-safe/dist/walk.d.ts +2 -5
  206. package/node_modules/@openclaw/fs-safe/dist/watch-alias.d.ts +6 -0
  207. package/node_modules/@openclaw/fs-safe/dist/watch-alias.js +88 -0
  208. package/node_modules/@openclaw/fs-safe/dist/watch-hints.d.ts +9 -0
  209. package/node_modules/@openclaw/fs-safe/dist/watch-hints.js +93 -0
  210. package/node_modules/@openclaw/fs-safe/dist/watch-native.d.ts +36 -0
  211. package/node_modules/@openclaw/fs-safe/dist/watch-native.js +73 -0
  212. package/node_modules/@openclaw/fs-safe/dist/watch-scan.d.ts +28 -0
  213. package/node_modules/@openclaw/fs-safe/dist/watch-scan.js +300 -0
  214. package/node_modules/@openclaw/fs-safe/dist/watch-stream.d.ts +8 -0
  215. package/node_modules/@openclaw/fs-safe/dist/watch-stream.js +32 -0
  216. package/node_modules/@openclaw/fs-safe/dist/watch-types.d.ts +60 -0
  217. package/node_modules/@openclaw/fs-safe/dist/watch-types.js +1 -0
  218. package/node_modules/@openclaw/fs-safe/dist/watch.d.ts +5 -0
  219. package/node_modules/@openclaw/fs-safe/dist/watch.js +530 -0
  220. package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts +3 -7
  221. package/node_modules/@openclaw/fs-safe/dist/windows-owner.js +0 -1
  222. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.cs +6 -6
  223. package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.ps1 +78 -3
  224. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.d.ts +8 -0
  225. package/node_modules/@openclaw/fs-safe/dist/windows-security-command.js +66 -15
  226. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.d.ts +4 -0
  227. package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.js +6 -2
  228. package/node_modules/@openclaw/fs-safe/docs/advanced.md +4 -2
  229. package/node_modules/@openclaw/fs-safe/docs/archive.md +16 -0
  230. package/node_modules/@openclaw/fs-safe/docs/atomic.md +93 -3
  231. package/node_modules/@openclaw/fs-safe/docs/contributing.md +102 -4
  232. package/node_modules/@openclaw/fs-safe/docs/copy.md +2 -0
  233. package/node_modules/@openclaw/fs-safe/docs/durability.md +7 -0
  234. package/node_modules/@openclaw/fs-safe/docs/file-store.md +5 -0
  235. package/node_modules/@openclaw/fs-safe/docs/guest.md +7 -1
  236. package/node_modules/@openclaw/fs-safe/docs/index.md +1 -0
  237. package/node_modules/@openclaw/fs-safe/docs/install.md +30 -0
  238. package/node_modules/@openclaw/fs-safe/docs/native-helper.md +20 -4
  239. package/node_modules/@openclaw/fs-safe/docs/native.md +63 -1
  240. package/node_modules/@openclaw/fs-safe/docs/permissions.md +66 -0
  241. package/node_modules/@openclaw/fs-safe/docs/public-api.md +30 -3
  242. package/node_modules/@openclaw/fs-safe/docs/retained-file.md +115 -0
  243. package/node_modules/@openclaw/fs-safe/docs/root.md +35 -9
  244. package/node_modules/@openclaw/fs-safe/docs/secret-file.md +19 -0
  245. package/node_modules/@openclaw/fs-safe/docs/security-model.md +4 -1
  246. package/node_modules/@openclaw/fs-safe/docs/sidecar-lock.md +5 -1
  247. package/node_modules/@openclaw/fs-safe/docs/staged-symlink.md +124 -0
  248. package/node_modules/@openclaw/fs-safe/docs/store.md +3 -1
  249. package/node_modules/@openclaw/fs-safe/docs/temp.md +24 -4
  250. package/node_modules/@openclaw/fs-safe/docs/testing.md +210 -0
  251. package/node_modules/@openclaw/fs-safe/docs/types.md +6 -0
  252. package/node_modules/@openclaw/fs-safe/docs/walk.md +34 -1
  253. package/node_modules/@openclaw/fs-safe/docs/watch.md +251 -0
  254. package/node_modules/@openclaw/fs-safe/docs/writing.md +21 -0
  255. package/node_modules/@openclaw/fs-safe/package.json +13 -9
  256. package/node_modules/@openclaw/fs-safe-darwin-arm64/fs-safe-native.node +0 -0
  257. package/node_modules/@openclaw/fs-safe-darwin-arm64/package.json +1 -1
  258. package/node_modules/@openclaw/fs-safe-darwin-x64/fs-safe-native.node +0 -0
  259. package/node_modules/@openclaw/fs-safe-darwin-x64/package.json +1 -1
  260. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/fs-safe-native.node +0 -0
  261. package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/package.json +1 -1
  262. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/fs-safe-native.node +0 -0
  263. package/node_modules/@openclaw/fs-safe-linux-arm64-musl/package.json +1 -1
  264. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/fs-safe-native.node +0 -0
  265. package/node_modules/@openclaw/fs-safe-linux-x64-gnu/package.json +1 -1
  266. package/node_modules/@openclaw/fs-safe-linux-x64-musl/fs-safe-native.node +0 -0
  267. package/node_modules/@openclaw/fs-safe-linux-x64-musl/package.json +1 -1
  268. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/fs-safe-native.node +0 -0
  269. package/node_modules/@openclaw/fs-safe-win32-x64-msvc/package.json +1 -1
  270. package/package.json +5 -5
  271. package/dist/.setup/api-B9-B1L7Q.mjs +0 -17
  272. package/dist/.setup/client-adapter-dvFa47YL.mjs +0 -63
  273. package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
  274. package/dist/.setup/send.runtime-CLnCWvrM.mjs +0 -2
  275. package/dist/.setup/transport-detection-CoiRl7Gx.mjs +0 -576
  276. package/dist/.setup/transport-detection.runtime-Tlhuv3T_.mjs +0 -2
  277. package/dist/.setup/transport-probes.runtime-WprAyBbL.mjs +0 -2
  278. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts +0 -20
  279. package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.js +0 -78
@@ -1,20 +1,36 @@
1
1
  import { a as normalizeSignalTransportUrl, r as buildSignalTransportHttpUrl, s as resolveSignalAccountKey, t as assertSignalSocketTransport } from "./transport-url-CAC0JcuI.mjs";
2
- import { a as isSignalManagedNativeConnectionUrlForBind, i as assignSignalManagedNativePort, o as isValidSignalManagedNativePort, r as allocateSignalManagedNativePort, s as resolveLocalSignalTransportPort } from "./transport-policy-5VSnj5ma.mjs";
2
+ import { a as isSignalManagedNativeConnectionUrlForBind, c as resolveLocalSignalTransportPort, i as assignSignalManagedNativePort, o as isValidSignalManagedNativePort, r as allocateSignalManagedNativePort } from "./transport-policy-B6C_LogW.mjs";
3
+ import { n as hasLegacySignalTransportFields, t as LEGACY_SIGNAL_TRANSPORT_FIELDS } from "./legacy-transport-QIpaMNST.mjs";
4
+ import "node:module";
3
5
  import { isRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
6
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
5
- import { defineChannelAliasMigration } from "openclaw/plugin-sdk/runtime-doctor-migrations";
7
+ //#region \0rolldown/runtime.js
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __exportAll = (all, no_symbols) => {
13
+ let target = {};
14
+ for (var name in all) __defProp(target, name, {
15
+ get: all[name],
16
+ enumerable: true
17
+ });
18
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
19
+ return target;
20
+ };
21
+ var __copyProps = (to, from, except, desc) => {
22
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
23
+ key = keys[i];
24
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
25
+ get: ((k) => from[k]).bind(null, key),
26
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
27
+ });
28
+ }
29
+ return to;
30
+ };
31
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
32
+ //#endregion
6
33
  //#region extensions/signal/src/config-compat.ts
7
- const LEGACY_TRANSPORT_FIELDS = [
8
- "configPath",
9
- "httpUrl",
10
- "httpHost",
11
- "httpPort",
12
- "cliPath",
13
- "autoStart",
14
- "startupTimeoutMs",
15
- "receiveMode",
16
- "ignoreStories"
17
- ];
18
34
  const PENDING_LEGACY_TRANSPORT_WARNING = "- channels.signal: legacy auto transport is ambiguous while its endpoint is unavailable; bring the endpoint online and rerun openclaw doctor --fix, or replace the retired fields with an explicit account-owned transport in openclaw.json.";
19
35
  const PENDING_LEGACY_INVALID_URL_WARNING = "- channels.signal: legacy httpUrl is invalid; keep the current config, correct httpUrl, then run openclaw doctor --fix.";
20
36
  const PENDING_LEGACY_INVALID_HOST_WARNING = "- channels.signal: legacy httpHost is invalid; keep the current config, correct httpHost, then run openclaw doctor --fix.";
@@ -22,24 +38,13 @@ const PENDING_LEGACY_INVALID_PORT_WARNING = "- channels.signal: legacy httpPort
22
38
  const PENDING_LEGACY_CONTAINER_ACCOUNT_WARNING = "- channels.signal: legacy container transport requires an account number; add channels.signal.account (or the relevant channels.signal.accounts.*.account) and rerun openclaw doctor --fix.";
23
39
  function isSignalTransportConfig(value) {
24
40
  if (!isRecord(value)) return false;
25
- if (value.kind === "managed-native") {
26
- try {
41
+ try {
42
+ if (value.kind === "managed-native") {
27
43
  assertSignalSocketTransport(value);
28
- } catch {
29
- return false;
30
- }
31
- if (value.httpPort !== void 0 && !isValidSignalManagedNativePort(value.httpPort)) return false;
32
- if (value.url === void 0) return true;
44
+ if (value.httpPort !== void 0 && !isValidSignalManagedNativePort(value.httpPort)) return false;
45
+ if (value.url === void 0) return true;
46
+ } else if (value.kind !== "external-native" && value.kind !== "container") return false;
33
47
  if (typeof value.url !== "string") return false;
34
- try {
35
- normalizeSignalTransportUrl(value.url);
36
- return true;
37
- } catch {
38
- return false;
39
- }
40
- }
41
- if (value.kind !== "external-native" && value.kind !== "container" || typeof value.url !== "string") return false;
42
- try {
43
48
  normalizeSignalTransportUrl(value.url);
44
49
  return true;
45
50
  } catch {
@@ -56,9 +61,6 @@ function legacyBaseUrl(entry, parent) {
56
61
  const rawPort = inherited(entry, parent, "httpPort");
57
62
  return buildSignalTransportHttpUrl(host, typeof rawPort === "number" ? rawPort : 8080);
58
63
  }
59
- function hasLegacyFields(entry) {
60
- return LEGACY_TRANSPORT_FIELDS.some((field) => Object.hasOwn(entry, field));
61
- }
62
64
  function wasLegacySignalAccountConfigured(entry, parent) {
63
65
  return Boolean(normalizeOptionalString(inherited(entry, parent, "account")) || normalizeOptionalString(inherited(entry, parent, "configPath")) || normalizeOptionalString(inherited(entry, parent, "httpUrl")) || normalizeOptionalString(inherited(entry, parent, "httpHost")) || normalizeOptionalString(inherited(entry, parent, "cliPath")) || typeof inherited(entry, parent, "httpPort") === "number" || typeof inherited(entry, parent, "autoStart") === "boolean");
64
66
  }
@@ -169,7 +171,7 @@ async function resolveLegacyTransport(params) {
169
171
  }
170
172
  }
171
173
  function clearLegacyTransportFields(entry) {
172
- for (const field of LEGACY_TRANSPORT_FIELDS) delete entry[field];
174
+ for (const field of LEGACY_SIGNAL_TRANSPORT_FIELDS) delete entry[field];
173
175
  }
174
176
  function hasRootSignalAccount(entries) {
175
177
  const root = entries[0];
@@ -192,7 +194,7 @@ function nestedDefaultOwnsEffectiveTransport(entries) {
192
194
  const accounts = isRecord(entries[0]?.accounts) ? entries[0].accounts : {};
193
195
  const nestedDefaultKey = resolveSignalAccountKey(accounts, DEFAULT_ACCOUNT_ID);
194
196
  const nestedDefault = nestedDefaultKey ? accounts[nestedDefaultKey] : void 0;
195
- return isRecord(nestedDefault) && (isSignalTransportConfig(nestedDefault.transport) || hasLegacyFields(nestedDefault));
197
+ return isRecord(nestedDefault) && (isSignalTransportConfig(nestedDefault.transport) || hasLegacySignalTransportFields(nestedDefault));
196
198
  }
197
199
  function isDiscardedTransportEntry(entries, index) {
198
200
  if (index === 0) return !hasRootSignalAccount(entries) || nestedDefaultOwnsEffectiveTransport(entries);
@@ -302,6 +304,13 @@ function hasContainerTransportWithoutEffectiveAccount(cfg) {
302
304
  }
303
305
  return false;
304
306
  }
307
+ function pendingSignalTransportMigration(cfg, warning) {
308
+ return {
309
+ config: cfg,
310
+ changes: [],
311
+ warnings: [warning]
312
+ };
313
+ }
305
314
  function prepareLegacySignalTransportMigration(cfg) {
306
315
  const signal = cfg.channels?.signal;
307
316
  if (!isRecord(signal)) return {
@@ -309,29 +318,17 @@ function prepareLegacySignalTransportMigration(cfg) {
309
318
  changes: []
310
319
  };
311
320
  const accounts = isRecord(signal.accounts) ? signal.accounts : {};
312
- if (!(Object.hasOwn(signal, "apiMode") || hasLegacyFields(signal) || Object.values(accounts).some((entry) => isRecord(entry) && hasLegacyFields(entry)))) return {
321
+ if (!(Object.hasOwn(signal, "apiMode") || hasLegacySignalTransportFields(signal) || Object.values(accounts).some(hasLegacySignalTransportFields))) return {
313
322
  config: cfg,
314
323
  changes: []
315
324
  };
316
325
  const apiMode = signal.apiMode;
317
326
  const entries = [signal, ...Object.values(accounts).filter(isRecord)];
318
- if (entries.some((entry) => isRecord(entry.transport) && Object.hasOwn(entry.transport, "socketPath") && (entry.transport.kind !== "managed-native" || !isSignalTransportConfig(entry.transport)))) return {
319
- config: cfg,
320
- changes: [],
321
- warnings: ["- channels.signal: invalid transport.socketPath configuration; correct the socket path and remove conflicting HTTP or receiveMode on-start options, then run openclaw doctor --fix."]
322
- };
327
+ if (entries.some((entry) => isRecord(entry.transport) && Object.hasOwn(entry.transport, "socketPath") && (entry.transport.kind !== "managed-native" || !isSignalTransportConfig(entry.transport)))) return pendingSignalTransportMigration(cfg, "- channels.signal: invalid transport.socketPath configuration; correct the socket path and remove conflicting HTTP or receiveMode on-start options, then run openclaw doctor --fix.");
323
328
  const legacyResolutionEntries = entries.filter((_, index) => shouldMaterializeTransport(entries, index)).filter((entry) => !isSignalTransportConfig(entry.transport));
324
329
  const invalidDerivedEndpoint = findInvalidLegacyDerivedEndpoint(legacyResolutionEntries, signal);
325
- if (invalidDerivedEndpoint) return {
326
- config: cfg,
327
- changes: [],
328
- warnings: [invalidDerivedEndpoint === "port" ? PENDING_LEGACY_INVALID_PORT_WARNING : PENDING_LEGACY_INVALID_HOST_WARNING]
329
- };
330
- if (hasInvalidLegacyHttpUrl(legacyResolutionEntries, signal)) return {
331
- config: cfg,
332
- changes: [],
333
- warnings: [PENDING_LEGACY_INVALID_URL_WARNING]
334
- };
330
+ if (invalidDerivedEndpoint) return pendingSignalTransportMigration(cfg, invalidDerivedEndpoint === "port" ? PENDING_LEGACY_INVALID_PORT_WARNING : PENDING_LEGACY_INVALID_HOST_WARNING);
331
+ if (hasInvalidLegacyHttpUrl(legacyResolutionEntries, signal)) return pendingSignalTransportMigration(cfg, PENDING_LEGACY_INVALID_URL_WARNING);
335
332
  return {
336
333
  signal,
337
334
  apiMode,
@@ -340,20 +337,12 @@ function prepareLegacySignalTransportMigration(cfg) {
340
337
  };
341
338
  }
342
339
  function finishLegacySignalTransportMigration(cfg, entries, resolvedTransports) {
343
- if (hasInvalidManagedTransportPort(resolvedTransports)) return {
344
- config: cfg,
345
- changes: [],
346
- warnings: [PENDING_LEGACY_INVALID_PORT_WARNING]
347
- };
340
+ if (hasInvalidManagedTransportPort(resolvedTransports)) return pendingSignalTransportMigration(cfg, PENDING_LEGACY_INVALID_PORT_WARNING);
348
341
  const transports = allocateMigratedManagedPorts({
349
342
  entries,
350
343
  transports: resolvedTransports
351
344
  });
352
- if (transports.some((transport, index) => shouldMaterializeTransport(entries, index) && !transport)) return {
353
- config: cfg,
354
- changes: [],
355
- warnings: [PENDING_LEGACY_TRANSPORT_WARNING]
356
- };
345
+ if (transports.some((transport, index) => shouldMaterializeTransport(entries, index) && !transport)) return pendingSignalTransportMigration(cfg, PENDING_LEGACY_TRANSPORT_WARNING);
357
346
  const next = applyMigratedSignalTransports({
358
347
  cfg,
359
348
  entries,
@@ -363,11 +352,7 @@ function finishLegacySignalTransportMigration(cfg, entries, resolvedTransports)
363
352
  config: cfg,
364
353
  changes: []
365
354
  };
366
- if (hasContainerTransportWithoutEffectiveAccount(next)) return {
367
- config: cfg,
368
- changes: [],
369
- warnings: [PENDING_LEGACY_CONTAINER_ACCOUNT_WARNING]
370
- };
355
+ if (hasContainerTransportWithoutEffectiveAccount(next)) return pendingSignalTransportMigration(cfg, PENDING_LEGACY_CONTAINER_ACCOUNT_WARNING);
371
356
  return {
372
357
  config: next,
373
358
  changes: ["Migrated channels.signal transport settings to concrete account-owned transport objects."]
@@ -377,11 +362,7 @@ async function migrateLegacySignalTransportConfig(params) {
377
362
  const prepared = prepareLegacySignalTransportMigration(params.cfg);
378
363
  if ("config" in prepared) return prepared;
379
364
  const { signal, apiMode, entries, legacyResolutionEntries } = prepared;
380
- if (!params.detect && legacyResolutionEntries.some((entry) => requiresDetection(entry, signal, apiMode))) return {
381
- config: params.cfg,
382
- changes: [],
383
- warnings: [PENDING_LEGACY_TRANSPORT_WARNING]
384
- };
365
+ if (!params.detect && legacyResolutionEntries.some((entry) => requiresDetection(entry, signal, apiMode))) return pendingSignalTransportMigration(params.cfg, PENDING_LEGACY_TRANSPORT_WARNING);
385
366
  const resolvedTransports = await Promise.all(entries.map(async (entry, index) => !shouldMaterializeTransport(entries, index) ? void 0 : await resolveLegacyTransport({
386
367
  entry,
387
368
  parent: signal,
@@ -404,6 +385,163 @@ function migrateLegacySignalTransportConfigSync(cfg) {
404
385
  }));
405
386
  }
406
387
  //#endregion
388
+ //#region packages/normalization-core/src/record-coerce.ts
389
+ /** Type guard for non-array object records at browser-safe boundaries. */
390
+ function isRecord$1(value) {
391
+ return value !== null && typeof value === "object" && !Array.isArray(value);
392
+ }
393
+ /** Returns a non-array record or null. */
394
+ function asNullableRecord(value) {
395
+ return isRecord$1(value) ? value : null;
396
+ }
397
+ //#endregion
398
+ //#region src/config/channel-config-normalization.ts
399
+ /** Applies one channel-specific doctor migration to every object-shaped account. */
400
+ function normalizeChannelAccounts(params) {
401
+ const rawAccounts = asNullableRecord(params.entry.accounts);
402
+ if (!rawAccounts) return {
403
+ entry: params.entry,
404
+ changed: false
405
+ };
406
+ let changed = false;
407
+ const accounts = { ...rawAccounts };
408
+ for (const [accountId, value] of Object.entries(rawAccounts)) {
409
+ const account = asNullableRecord(value);
410
+ if (!account) continue;
411
+ const normalized = params.normalizeAccount({
412
+ account,
413
+ accountId,
414
+ pathPrefix: `${params.pathPrefix}.accounts.${accountId}`,
415
+ changes: params.changes
416
+ });
417
+ if (normalized.changed) {
418
+ accounts[accountId] = normalized.entry;
419
+ changed = true;
420
+ }
421
+ }
422
+ return changed ? {
423
+ entry: {
424
+ ...params.entry,
425
+ accounts
426
+ },
427
+ changed: true
428
+ } : {
429
+ entry: params.entry,
430
+ changed: false
431
+ };
432
+ }
433
+ /** Applies the same channel-specific doctor migration at root and account scope. */
434
+ function normalizeChannelConfigEntries(params) {
435
+ const changes = params.changes ?? [];
436
+ const channels = params.cfg.channels;
437
+ const entry = asNullableRecord(channels?.[params.channelId]);
438
+ if (!entry) return {
439
+ config: params.cfg,
440
+ changes
441
+ };
442
+ const channelPath = `channels.${params.channelId}`;
443
+ const root = params.normalizeEntry({
444
+ entry,
445
+ pathPrefix: channelPath,
446
+ changes
447
+ });
448
+ const accounts = normalizeChannelAccounts({
449
+ entry: root.entry,
450
+ pathPrefix: channelPath,
451
+ changes,
452
+ normalizeAccount: (accountParams) => params.normalizeEntry({
453
+ entry: accountParams.account,
454
+ accountId: accountParams.accountId,
455
+ pathPrefix: accountParams.pathPrefix,
456
+ changes: accountParams.changes
457
+ })
458
+ });
459
+ if (!root.changed && !accounts.changed) return {
460
+ config: params.cfg,
461
+ changes
462
+ };
463
+ return {
464
+ config: {
465
+ ...params.cfg,
466
+ channels: {
467
+ ...channels,
468
+ [params.channelId]: accounts.entry
469
+ }
470
+ },
471
+ changes
472
+ };
473
+ }
474
+ //#endregion
475
+ //#region src/plugin-sdk/legacy-webhook-listener-migration.ts
476
+ /** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
477
+ function createLegacyWebhookListenerDoctorContract(params) {
478
+ const portKey = params.portKey ?? "webhookPort";
479
+ const hostKey = params.hostKey === void 0 ? "webhookHost" : params.hostKey;
480
+ const source = (entry) => params.webhookKey ? asNullableRecord(entry[params.webhookKey]) : entry;
481
+ const hasLegacy = (value) => {
482
+ const entry = asNullableRecord(value);
483
+ const listener = entry && source(entry);
484
+ return Boolean(listener && (Object.hasOwn(listener, portKey) || hostKey && Object.hasOwn(listener, hostKey)));
485
+ };
486
+ const prefix = `channels.${params.channelKey}`;
487
+ return {
488
+ legacyConfigRules: [{
489
+ path: ["channels", params.channelKey],
490
+ message: `${prefix} webhook listeners moved to Gateway routes. Run "openclaw doctor --fix" to preserve explicitly configured listener settings as legacyWebhook.`,
491
+ match: (value) => {
492
+ const accounts = asNullableRecord(asNullableRecord(value)?.accounts);
493
+ return hasLegacy(value) || Object.values(accounts ?? {}).some(hasLegacy);
494
+ }
495
+ }],
496
+ normalizeCompatibilityConfig: ({ cfg }) => {
497
+ const root = asNullableRecord(asNullableRecord(cfg.channels)?.[params.channelKey]);
498
+ const inherited = root && source(root);
499
+ const canonicalRoot = asNullableRecord(root?.legacyWebhook);
500
+ return normalizeChannelConfigEntries({
501
+ cfg,
502
+ channelId: params.channelKey,
503
+ normalizeEntry: ({ entry, accountId, pathPrefix, changes }) => {
504
+ const listener = source(entry);
505
+ if (!listener || !hasLegacy(entry)) return {
506
+ entry,
507
+ changed: false
508
+ };
509
+ const next = { ...entry };
510
+ const port = Object.hasOwn(listener, portKey) ? listener[portKey] : (accountId ? canonicalRoot?.port ?? inherited?.[portKey] : void 0) ?? params.defaultPort;
511
+ const inheritedHost = accountId ? canonicalRoot ? canonicalRoot.host : (hostKey ? inherited?.[hostKey] : void 0) ?? params.defaultHost : params.defaultHost;
512
+ const host = hostKey ? listener[hostKey] ?? inheritedHost : inheritedHost;
513
+ const legacyPath = [pathPrefix, params.webhookKey].filter(Boolean).join(".");
514
+ if (Object.hasOwn(entry, "legacyWebhook")) changes.push(`Removed ${legacyPath} legacy listener keys; ${pathPrefix}.legacyWebhook is already configured.`);
515
+ else if (accountId && root?.legacyWebhook === false) changes.push(`Removed ${legacyPath} legacy listener keys; ${prefix}.legacyWebhook: false keeps this account's inherited listener disabled.`);
516
+ else {
517
+ next.legacyWebhook = {
518
+ port,
519
+ ...host !== void 0 ? { host } : {}
520
+ };
521
+ changes.push(`Moved ${legacyPath} listener settings to ${pathPrefix}.legacyWebhook. Point the external callback or reverse proxy at the Gateway port and webhook path, verify delivery, then set legacyWebhook: false to disable legacy forwarding.`);
522
+ }
523
+ const updated = params.webhookKey ? { ...listener } : next;
524
+ delete updated[portKey];
525
+ if (hostKey) delete updated[hostKey];
526
+ if (params.webhookKey) {
527
+ if (Object.keys(updated).length) next[params.webhookKey] = updated;
528
+ else delete next[params.webhookKey];
529
+ }
530
+ return {
531
+ entry: next,
532
+ changed: true
533
+ };
534
+ }
535
+ });
536
+ }
537
+ };
538
+ }
539
+ //#endregion
540
+ //#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
541
+ var runtime_doctor_migrations_exports = /* @__PURE__ */ __exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
542
+ import * as import_openclaw_plugin_sdk_runtime_doctor_migrations from "openclaw/plugin-sdk/runtime-doctor-migrations";
543
+ __reExport(runtime_doctor_migrations_exports, import_openclaw_plugin_sdk_runtime_doctor_migrations);
544
+ //#endregion
407
545
  //#region extensions/signal/src/account-key-repair.ts
408
546
  function repairSignalAccountKeys({ cfg }) {
409
547
  const signal = cfg.channels?.signal;
@@ -450,24 +588,7 @@ function repairSignalAccountKeys({ cfg }) {
450
588
  }
451
589
  //#endregion
452
590
  //#region extensions/signal/config-doctor-api.ts
453
- const RETIRED_SIGNAL_ACCOUNT_TRANSPORT_FIELDS = [
454
- "configPath",
455
- "httpUrl",
456
- "httpHost",
457
- "httpPort",
458
- "cliPath",
459
- "autoStart",
460
- "startupTimeoutMs",
461
- "receiveMode",
462
- "ignoreStories"
463
- ];
464
- function hasRetiredSignalAccountTransportFields(value) {
465
- return isRecord(value) && RETIRED_SIGNAL_ACCOUNT_TRANSPORT_FIELDS.some((field) => Object.hasOwn(value, field));
466
- }
467
- function hasRetiredSignalAccountMapTransportFields(value) {
468
- return isRecord(value) && Object.values(value).some(hasRetiredSignalAccountTransportFields);
469
- }
470
- const streamingAliasMigration = defineChannelAliasMigration({
591
+ const streamingAliasMigration = (0, runtime_doctor_migrations_exports.defineChannelAliasMigration)({
471
592
  channelId: "signal",
472
593
  streaming: {
473
594
  defaultMode: "partial",
@@ -480,7 +601,7 @@ const legacyConfigRules = [
480
601
  {
481
602
  path: ["channels", "signal"],
482
603
  message: "Signal transport config is now account-owned; run \"openclaw doctor --fix\" to migrate retired channels.signal transport fields.",
483
- match: (value) => isRecord(value) && (Object.hasOwn(value, "apiMode") || hasRetiredSignalAccountTransportFields(value))
604
+ match: (value) => isRecord(value) && (Object.hasOwn(value, "apiMode") || hasLegacySignalTransportFields(value))
484
605
  },
485
606
  {
486
607
  path: [
@@ -489,7 +610,7 @@ const legacyConfigRules = [
489
610
  "accounts"
490
611
  ],
491
612
  message: "Signal transport config is now account-owned; run \"openclaw doctor --fix\" to migrate retired per-account transport fields.",
492
- match: hasRetiredSignalAccountMapTransportFields
613
+ match: (value) => isRecord(value) && Object.values(value).some(hasLegacySignalTransportFields)
493
614
  }
494
615
  ];
495
616
  function normalizeCompatibilityConfig({ cfg }) {
@@ -507,4 +628,4 @@ function normalizeCompatibilityConfig({ cfg }) {
507
628
  };
508
629
  }
509
630
  //#endregion
510
- export { migrateLegacySignalTransportConfig as a, clearLegacySignalTransportFieldsForAccount as i, normalizeCompatibilityConfig as n, repairSignalAccountKeys as r, legacyConfigRules as t };
631
+ export { migrateLegacySignalTransportConfig as a, clearLegacySignalTransportFieldsForAccount as i, normalizeCompatibilityConfig as n, __exportAll as o, repairSignalAccountKeys as r, legacyConfigRules as t };
@@ -36,9 +36,7 @@ function resolveSignalSender(params) {
36
36
  function formatSignalSenderId(sender) {
37
37
  return sender.kind === "phone" ? sender.e164 : `uuid:${sender.raw}`;
38
38
  }
39
- function formatSignalSenderDisplay(sender) {
40
- return sender.kind === "phone" ? sender.e164 : `uuid:${sender.raw}`;
41
- }
39
+ const formatSignalSenderDisplay = formatSignalSenderId;
42
40
  function formatSignalPairingIdLine(sender) {
43
41
  if (sender.kind === "phone") return `Your Signal number: ${sender.e164}`;
44
42
  return `Your Signal sender id: ${formatSignalSenderId(sender)}`;
@@ -46,9 +44,7 @@ function formatSignalPairingIdLine(sender) {
46
44
  function resolveSignalRecipient(sender) {
47
45
  return sender.kind === "phone" ? sender.e164 : sender.raw;
48
46
  }
49
- function resolveSignalPeerId(sender) {
50
- return sender.kind === "phone" ? sender.e164 : `uuid:${sender.raw}`;
51
- }
47
+ const resolveSignalPeerId = formatSignalSenderId;
52
48
  function parseSignalAllowEntry(entry) {
53
49
  const trimmed = entry.trim();
54
50
  if (!trimmed) return null;
@@ -224,10 +224,6 @@ async function installSignalCliFromRelease(runtime) {
224
224
  await downloadToFile(asset.browser_download_url, archivePath);
225
225
  const installRoot = path.join(CONFIG_DIR, "tools", "signal-cli", releaseInfo.version);
226
226
  await fs.mkdir(installRoot, { recursive: true });
227
- if (!looksLikeArchive(normalizeLowercaseStringOrEmpty(asset.name))) return {
228
- ok: false,
229
- error: `Unsupported archive type: ${asset.name}`
230
- };
231
227
  try {
232
228
  await extractSignalCliArchive(archivePath, installRoot, 6e4);
233
229
  } catch (err) {
@@ -0,0 +1,18 @@
1
+ import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
2
+ //#region extensions/signal/src/legacy-transport.ts
3
+ const LEGACY_SIGNAL_TRANSPORT_FIELDS = [
4
+ "configPath",
5
+ "httpUrl",
6
+ "httpHost",
7
+ "httpPort",
8
+ "cliPath",
9
+ "autoStart",
10
+ "startupTimeoutMs",
11
+ "receiveMode",
12
+ "ignoreStories"
13
+ ];
14
+ function hasLegacySignalTransportFields(value) {
15
+ return isRecord(value) && LEGACY_SIGNAL_TRANSPORT_FIELDS.some((field) => Object.hasOwn(value, field));
16
+ }
17
+ //#endregion
18
+ export { hasLegacySignalTransportFields as n, LEGACY_SIGNAL_TRANSPORT_FIELDS as t };