@openclaw/signal 2026.9.6 → 2026.9.8

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
package/assets/icon.png CHANGED
Binary file
@@ -1,5 +1,5 @@
1
1
  import { i as normalizeSignalTransportHost, n as buildSignalSocketUrl, o as resolveSignalAccountEntry, r as buildSignalTransportHttpUrl, t as assertSignalSocketTransport } from "./transport-url-CAC0JcuI.mjs";
2
- import { a as isSignalManagedNativeConnectionUrlForBind, i as assignSignalManagedNativePort, n as DEFAULT_SIGNAL_MANAGED_NATIVE_PORT, r as allocateSignalManagedNativePort, s as resolveLocalSignalTransportPort } from "./transport-policy-5VSnj5ma.mjs";
2
+ import { a as isSignalManagedNativeConnectionUrlForBind, c as resolveLocalSignalTransportPort, i as assignSignalManagedNativePort, n as DEFAULT_SIGNAL_MANAGED_NATIVE_PORT, r as allocateSignalManagedNativePort, s as reserveSignalTransportPorts } from "./transport-policy-B6C_LogW.mjs";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, normalizeAccountId, resolveMergedAccountConfig } from "openclaw/plugin-sdk/account-resolution";
5
5
  //#region extensions/signal/src/accounts.ts
@@ -61,23 +61,7 @@ function resolveSignalManagedNativePort(params) {
61
61
  for (const accountId of listSignalAccountIds(params.cfg)) {
62
62
  const accountConfig = resolveSignalAccountConfig(params.cfg, accountId);
63
63
  if (!isSignalAccountConfigured(accountConfig) || !isSignalAccountEnabled(params.cfg, accountConfig)) continue;
64
- const transport = accountConfig.transport;
65
- if (transport?.kind === "external-native" || transport?.kind === "container") {
66
- const localPort = resolveLocalSignalTransportPort(transport.url);
67
- if (localPort !== void 0) reservedPorts.add(localPort);
68
- continue;
69
- }
70
- if (transport?.kind === "managed-native") {
71
- if (transport.socketPath !== void 0) continue;
72
- if (transport.httpPort !== void 0) reservedPorts.add(transport.httpPort);
73
- else implicitManagedAccountIds.push(accountId);
74
- if (transport.url && !isSignalManagedNativeConnectionUrlForBind(transport)) {
75
- const localConnectionPort = resolveLocalSignalTransportPort(transport.url);
76
- if (localConnectionPort !== void 0) reservedPorts.add(localConnectionPort);
77
- }
78
- continue;
79
- }
80
- implicitManagedAccountIds.push(accountId);
64
+ if (reserveSignalTransportPorts(accountConfig.transport, reservedPorts)) implicitManagedAccountIds.push(accountId);
81
65
  }
82
66
  for (const accountId of implicitManagedAccountIds) {
83
67
  const port = allocateSignalManagedNativePort({ reservedPorts });
@@ -112,25 +96,20 @@ function resolveSignalTransport(transport, managedNativePort = DEFAULT_SIGNAL_MA
112
96
  }
113
97
  function resolveSignalAccount(params) {
114
98
  const accountId = normalizeAccountId(params.accountId ?? resolveDefaultSignalAccountId(params.cfg));
115
- const baseEnabled = params.cfg.channels?.signal?.enabled !== false;
116
99
  const merged = resolveSignalAccountConfig(params.cfg, accountId);
117
- const accountEnabled = merged.enabled !== false;
118
- const enabled = baseEnabled && accountEnabled;
119
100
  const transport = resolveSignalTransport(merged.transport, resolveSignalManagedNativePort({
120
101
  cfg: params.cfg,
121
102
  accountId,
122
103
  accountConfig: merged,
123
104
  transport: merged.transport
124
105
  }));
125
- const baseUrl = transport.baseUrl;
126
- const configured = isSignalAccountConfigured(merged);
127
106
  return {
128
107
  accountId,
129
- enabled,
108
+ enabled: isSignalAccountEnabled(params.cfg, merged),
130
109
  name: normalizeOptionalString(merged.name),
131
- baseUrl,
110
+ baseUrl: transport.baseUrl,
132
111
  transport,
133
- configured,
112
+ configured: isSignalAccountConfigured(merged),
134
113
  config: merged
135
114
  };
136
115
  }
@@ -148,15 +127,7 @@ function resolveSignalReplyToMode(params) {
148
127
  const signalConfig = params.cfg.channels?.signal;
149
128
  const accountConfig = resolveSignalAccountEntry(signalConfig?.accounts, accountId);
150
129
  const chatType = params.chatType === "direct" || params.chatType === "group" ? params.chatType : void 0;
151
- if (chatType) {
152
- const accountScoped = normalizeSignalReplyToMode(accountConfig?.replyToModeByChatType?.[chatType]);
153
- if (accountScoped) return accountScoped;
154
- const accountDefault = normalizeSignalReplyToMode(accountConfig?.replyToMode);
155
- if (accountDefault) return accountDefault;
156
- const channelScoped = normalizeSignalReplyToMode(signalConfig?.replyToModeByChatType?.[chatType]);
157
- if (channelScoped) return channelScoped;
158
- }
159
- return normalizeSignalReplyToMode(accountConfig?.replyToMode) ?? normalizeSignalReplyToMode(signalConfig?.replyToMode) ?? "all";
130
+ return normalizeSignalReplyToMode(chatType && accountConfig?.replyToModeByChatType?.[chatType]) ?? normalizeSignalReplyToMode(accountConfig?.replyToMode) ?? normalizeSignalReplyToMode(chatType && signalConfig?.replyToModeByChatType?.[chatType]) ?? normalizeSignalReplyToMode(signalConfig?.replyToMode) ?? "all";
160
131
  }
161
132
  //#endregion
162
133
  export { resolveSignalAccountConfig as a, resolveSignalAccount as i, listSignalAccountIds as n, resolveSignalReplyToMode as o, resolveDefaultSignalAccountId as r, resolveSignalTransport as s, listEnabledSignalAccounts as t };
@@ -0,0 +1,16 @@
1
+ import "./accounts-DMtj2E-4.mjs";
2
+ import "./normalize-l_b99hap.mjs";
3
+ import "./identity-B3JyPqGO.mjs";
4
+ import { l as signalSetupContract, n as createSignalPluginBase, r as signalSetupWizard } from "./channel-DrUxv5cf.mjs";
5
+ import "./reaction-runtime-api-DDi5x2wC.mjs";
6
+ import "./install-signal-cli-ChvjzM6X.mjs";
7
+ import "./monitor-BfwQr78f.mjs";
8
+ import "./send-DEjrbpIC.mjs";
9
+ import "./probe-BYLzra6D.mjs";
10
+ //#region extensions/signal/src/channel.setup.ts
11
+ const signalSetupPlugin = { ...createSignalPluginBase({
12
+ setupWizard: signalSetupWizard,
13
+ setupContract: signalSetupContract
14
+ }) };
15
+ //#endregion
16
+ export { signalSetupPlugin as t };
@@ -1,12 +1,12 @@
1
- import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-BV6tDOTc.mjs";
1
+ import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DMtj2E-4.mjs";
2
2
  import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.mjs";
3
- import { a as normalizeSignalAllowRecipient, c as resolveSignalSender, i as isSignalSenderAllowed, l as looksLikeUuid, n as formatSignalSenderDisplay, o as resolveSignalPeerId, r as formatSignalSenderId, s as resolveSignalRecipient, t as formatSignalPairingIdLine } from "./identity-YXPmgFMu.mjs";
4
- import { c as signalMessageActions, d as markdownToSignalText, f as markdownToSignalTextChunks, l as resolveSignalReactionLevel, t as detectSignalTransport } from "./transport-detection-CoiRl7Gx.mjs";
5
- import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-BnQGHcrB.mjs";
6
- import { a as normalizeSignalAccountInput, d as probeSignalTransport, f as writeSignalAccountTransport, p as resolveSignalOutboundTarget, t as signalPlugin, u as prepareSignalManagedNativeTransport } from "./channel-DhzTcFsK.mjs";
7
- import { t as signalSetupPlugin } from "./api-B9-B1L7Q.mjs";
8
- import { r as installSignalCli } from "./install-signal-cli-BDbzFcU2.mjs";
9
- import { t as monitorSignalProvider } from "./monitor-Dnz6Ygz5.mjs";
10
- import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-B78M_eFp.mjs";
11
- import { t as probeSignal } from "./probe-DXT2eLnw.mjs";
3
+ import { a as normalizeSignalAllowRecipient, c as resolveSignalSender, i as isSignalSenderAllowed, l as looksLikeUuid, n as formatSignalSenderDisplay, o as resolveSignalPeerId, r as formatSignalSenderId, s as resolveSignalRecipient, t as formatSignalPairingIdLine } from "./identity-B3JyPqGO.mjs";
4
+ import { _ as resolveSignalReactionLevel, a as normalizeSignalAccountInput, b as markdownToSignalTextChunks, d as probeSignalTransport, f as writeSignalAccountTransport, g as signalMessageActions, h as resolveSignalOutboundTarget, t as signalPlugin, u as prepareSignalManagedNativeTransport, y as markdownToSignalText } from "./channel-DrUxv5cf.mjs";
5
+ import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-DDi5x2wC.mjs";
6
+ import { t as detectSignalTransport } from "./transport-detection-BVUDE42e.mjs";
7
+ import { t as signalSetupPlugin } from "./api-DEB0Obj8.mjs";
8
+ import { r as installSignalCli } from "./install-signal-cli-ChvjzM6X.mjs";
9
+ import { t as monitorSignalProvider } from "./monitor-BfwQr78f.mjs";
10
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-DEjrbpIC.mjs";
11
+ import { t as probeSignal } from "./probe-BYLzra6D.mjs";
12
12
  export { detectSignalTransport, formatSignalPairingIdLine, formatSignalSenderDisplay, formatSignalSenderId, installSignalCli, isSignalSenderAllowed, listEnabledSignalAccounts, listSignalAccountIds, looksLikeSignalTargetId, looksLikeUuid, markdownToSignalText, markdownToSignalTextChunks, monitorSignalProvider, normalizeSignalAccountInput, normalizeSignalAllowRecipient, normalizeSignalMessagingTarget, prepareSignalManagedNativeTransport, probeSignal, probeSignalTransport, removeReactionSignal, resolveDefaultSignalAccountId, resolveSignalAccount, resolveSignalOutboundTarget, resolveSignalPeerId, resolveSignalReactionLevel, resolveSignalRecipient, resolveSignalSender, sendMessageSignal, sendReactionSignal, sendReadReceiptSignal, sendTypingSignal, signalMessageActions, signalPlugin, signalSetupPlugin, writeSignalAccountTransport };
@@ -1,15 +1,12 @@
1
- import { i as resolveSignalAccount } from "./accounts-BV6tDOTc.mjs";
1
+ import { i as resolveSignalAccount } from "./accounts-DMtj2E-4.mjs";
2
2
  import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.mjs";
3
- import { l as looksLikeUuid } from "./identity-YXPmgFMu.mjs";
3
+ import { l as looksLikeUuid } from "./identity-B3JyPqGO.mjs";
4
4
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
6
6
  import { normalizeE164 } from "openclaw/plugin-sdk/text-utility-runtime";
7
7
  //#region extensions/signal/src/aliases.ts
8
8
  function normalizeAliasKey(raw) {
9
- const trimmed = raw.trim();
10
- if (!trimmed) return;
11
- const withoutSignal = /^signal:/i.test(trimmed) ? trimmed.slice(7).trim() : trimmed;
12
- return normalizeLowercaseStringOrEmpty(withoutSignal) || void 0;
9
+ return normalizeLowercaseStringOrEmpty(raw.trim().replace(/^signal:/i, "")) || void 0;
13
10
  }
14
11
  function resolveAliasMap(params) {
15
12
  const account = resolveSignalAccount({
@@ -58,19 +55,16 @@ function resolveSignalAliasTargetFromMap(params) {
58
55
  throw new Error(`Signal alias "${initialAlias}" must point to an E.164 number, uuid:<id>, username:<name>, or group:<id>.`);
59
56
  }
60
57
  }
61
- function resolveSignalAliasTarget(params) {
62
- return resolveSignalAliasTargetFromMap({
63
- aliases: resolveAliasMap(params),
64
- input: params.input
65
- });
66
- }
67
58
  function resolveSignalTarget(params) {
68
59
  const rawTarget = resolveRawSignalTarget(params.input);
69
60
  if (rawTarget) return {
70
61
  ...rawTarget,
71
62
  source: "raw"
72
63
  };
73
- const aliasTarget = resolveSignalAliasTarget(params);
64
+ const aliasTarget = resolveSignalAliasTargetFromMap({
65
+ aliases: resolveAliasMap(params),
66
+ input: params.input
67
+ });
74
68
  if (aliasTarget) return {
75
69
  ...aliasTarget,
76
70
  source: "alias"
@@ -1,8 +1,8 @@
1
- import { r as resolveDefaultSignalAccountId } from "./accounts-BV6tDOTc.mjs";
1
+ import { r as resolveDefaultSignalAccountId } from "./accounts-DMtj2E-4.mjs";
2
2
  import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.mjs";
3
- import { a as resolveSignalTarget } from "./approval-auth-BBI9BTRm.mjs";
4
- import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-DDQvPP_z.mjs";
5
- import { r as sendTypingSignal, t as sendMessageSignal } from "./send-B78M_eFp.mjs";
3
+ import { a as resolveSignalTarget } from "./approval-auth-CszS7gwf.mjs";
4
+ import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-BKkjIAoi.mjs";
5
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-DEjrbpIC.mjs";
6
6
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
7
7
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
@@ -14,14 +14,11 @@ const log = createSubsystemLogger("signal/approvals");
14
14
  function readSignalApprovalRuntimeContext(context) {
15
15
  const value = context;
16
16
  return {
17
- baseUrl: typeof value?.baseUrl === "string" && value.baseUrl.trim() ? value.baseUrl.trim() : void 0,
18
- account: typeof value?.account === "string" && value.account.trim() ? value.account.trim() : void 0,
19
- accountUuid: typeof value?.accountUuid === "string" && value.accountUuid.trim() ? value.accountUuid.trim() : void 0
17
+ baseUrl: normalizeOptionalString(value?.baseUrl),
18
+ account: normalizeOptionalString(value?.account),
19
+ accountUuid: normalizeOptionalString(value?.accountUuid)
20
20
  };
21
21
  }
22
- function buildPendingPayload(params) {
23
- return buildApprovalReactionPendingContent(params);
24
- }
25
22
  const signalApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
26
23
  eventKinds: [
27
24
  "exec",
@@ -33,11 +30,7 @@ const signalApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
33
30
  shouldHandle: ({ context }) => Boolean(context)
34
31
  },
35
32
  presentation: {
36
- buildPendingPayload: ({ request, nowMs, view }) => buildPendingPayload({
37
- request,
38
- nowMs,
39
- view
40
- }),
33
+ buildPendingPayload: buildApprovalReactionPendingContent,
41
34
  buildResolvedResult: ({ request, resolved, view }) => ({
42
35
  kind: "update",
43
36
  payload: { text: buildChannelApprovalResolvedText({
@@ -159,20 +152,8 @@ const signalApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
159
152
  ttlMs: Math.max(1, view.expiresAtMs - Date.now())
160
153
  }) ? true : null;
161
154
  },
162
- unbindPending: async ({ entry }) => {
163
- await unregisterSignalApprovalReactionTarget({
164
- accountId: entry.accountId,
165
- conversationKey: entry.conversationKey,
166
- messageId: entry.messageId
167
- });
168
- },
169
- cancelDelivered: async ({ entry }) => {
170
- await unregisterSignalApprovalReactionTarget({
171
- accountId: entry.accountId,
172
- conversationKey: entry.conversationKey,
173
- messageId: entry.messageId
174
- });
175
- }
155
+ unbindPending: ({ entry }) => unregisterSignalApprovalReactionTarget(entry),
156
+ cancelDelivered: ({ entry }) => unregisterSignalApprovalReactionTarget(entry)
176
157
  },
177
158
  observe: { onDeliveryError: ({ error, request }) => {
178
159
  log.error(`signal approvals: failed to send request ${request.id}: ${String(error)}`);
@@ -1,8 +1,8 @@
1
- import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
1
+ import { o as __exportAll } from "./doctor-contract-api-Db9V9gsY.mjs";
2
2
  import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.mjs";
3
- import { a as resolveSignalTarget, i as resolveSignalDeliveredConversationKey, n as signalApprovalAuth, t as getSignalApprovalApprovers } from "./approval-auth-BBI9BTRm.mjs";
4
- import { l as looksLikeUuid } from "./identity-YXPmgFMu.mjs";
5
- import { i as getOptionalSignalRuntime } from "./transport-detection-CoiRl7Gx.mjs";
3
+ import { a as resolveSignalTarget, i as resolveSignalDeliveredConversationKey, n as signalApprovalAuth, t as getSignalApprovalApprovers } from "./approval-auth-CszS7gwf.mjs";
4
+ import { l as looksLikeUuid } from "./identity-B3JyPqGO.mjs";
5
+ import { t as getOptionalSignalRuntime } from "./runtime-8sxUF217.mjs";
6
6
  import { createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
7
7
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
8
8
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -15,15 +15,6 @@ import { matchesApprovalRequestFilters } from "openclaw/plugin-sdk/approval-clie
15
15
  function resolveApprovalForwardingConfig(params) {
16
16
  return params.approvalKind === "plugin" ? params.cfg.approvals?.plugin : params.cfg.approvals?.exec;
17
17
  }
18
- function normalizeApprovalForwardingMode(mode) {
19
- return mode ?? "session";
20
- }
21
- function approvalModeIncludesSession(mode) {
22
- return mode === "session" || mode === "both";
23
- }
24
- function approvalModeIncludesTargets(mode) {
25
- return mode === "targets" || mode === "both";
26
- }
27
18
  function matchesSignalApprovalReactionFilters(params) {
28
19
  return matchesApprovalRequestFilters({
29
20
  request: {
@@ -73,8 +64,8 @@ function isSignalApprovalReactionRouteStillEnabled(params) {
73
64
  approvalKind: params.target.approvalKind
74
65
  });
75
66
  if (!config?.enabled) return false;
76
- const mode = normalizeApprovalForwardingMode(config.mode);
77
- if (params.target.route.deliveryMode === "target") return approvalModeIncludesTargets(mode) && matchesSignalApprovalReactionFilters({
67
+ const mode = config.mode ?? "session";
68
+ if (params.target.route.deliveryMode === "target") return (mode === "targets" || mode === "both") && matchesSignalApprovalReactionFilters({
78
69
  config,
79
70
  route: params.target.route
80
71
  }) && hasMatchingSignalApprovalReactionTarget({
@@ -82,8 +73,7 @@ function isSignalApprovalReactionRouteStillEnabled(params) {
82
73
  config,
83
74
  route: params.target.route
84
75
  });
85
- if (!approvalModeIncludesSession(mode)) return false;
86
- return matchesSignalApprovalReactionFilters({
76
+ return (mode === "session" || mode === "both") && matchesSignalApprovalReactionFilters({
87
77
  config,
88
78
  route: params.target.route
89
79
  });
@@ -169,14 +159,12 @@ function readPersistedTarget(target) {
169
159
  if (!record || !value?.route || value.route.deliveryMode !== "session" && value.route.deliveryMode !== "target" || !Array.isArray(value.targetAuthorKeys)) return null;
170
160
  const targetRouteTo = value.route.deliveryMode === "target" && typeof value.route.to === "string" ? normalizeSignalMessagingTarget(value.route.to) : null;
171
161
  if (value.route.deliveryMode === "target" && !targetRouteTo) return null;
172
- const route = value.route.deliveryMode === "target" ? {
173
- deliveryMode: "target",
174
- to: targetRouteTo,
175
- ...typeof value.route.accountId === "string" ? { accountId: value.route.accountId } : {},
176
- ...typeof value.route.agentId === "string" ? { agentId: value.route.agentId } : {},
177
- ...typeof value.route.sessionKey === "string" ? { sessionKey: value.route.sessionKey } : {}
178
- } : {
179
- deliveryMode: "session",
162
+ const route = {
163
+ ...value.route.deliveryMode === "target" ? {
164
+ deliveryMode: "target",
165
+ to: targetRouteTo,
166
+ ...typeof value.route.accountId === "string" ? { accountId: value.route.accountId } : {}
167
+ } : { deliveryMode: "session" },
180
168
  ...typeof value.route.agentId === "string" ? { agentId: value.route.agentId } : {},
181
169
  ...typeof value.route.sessionKey === "string" ? { sessionKey: value.route.sessionKey } : {}
182
170
  };
@@ -194,18 +182,19 @@ async function registerSignalApprovalReactionTarget(params) {
194
182
  const approvalId = params.approvalId.trim();
195
183
  const targetAuthorKeys = Array.from(new Set(params.targetAuthorKeys.map((entry) => normalizeSignalApprovalTargetAuthorKey(entry)).filter((entry) => Boolean(entry))));
196
184
  const allowedDecisions = listApprovalReactionBindings({ allowedDecisions: params.allowedDecisions }).map((binding) => binding.decision);
197
- if (!params.routeAllowed || params.approvalKind !== "exec" && params.approvalKind !== "plugin" || !key || !approvalId || allowedDecisions.length === 0) return null;
185
+ if (!params.routeAllowed || params.approvalKind !== "exec" && params.approvalKind !== "plugin" && params.approvalKind !== "system-agent" || !key || !approvalId || allowedDecisions.length === 0) return null;
198
186
  if (targetAuthorKeys.length === 0) return null;
199
- const route = params.route.deliveryMode === "target" ? {
200
- deliveryMode: "target",
201
- to: params.route.to,
202
- ...normalizeOptionalString(params.route.accountId) ? { accountId: normalizeOptionalString(params.route.accountId) } : {},
203
- ...normalizeOptionalString(params.route.agentId) ? { agentId: normalizeOptionalString(params.route.agentId) } : {},
204
- ...normalizeOptionalString(params.route.sessionKey) ? { sessionKey: normalizeOptionalString(params.route.sessionKey) } : {}
205
- } : {
206
- deliveryMode: "session",
207
- ...normalizeOptionalString(params.route.agentId) ? { agentId: normalizeOptionalString(params.route.agentId) } : {},
208
- ...normalizeOptionalString(params.route.sessionKey) ? { sessionKey: normalizeOptionalString(params.route.sessionKey) } : {}
187
+ const agentId = normalizeOptionalString(params.route.agentId);
188
+ const sessionKey = normalizeOptionalString(params.route.sessionKey);
189
+ const accountId = params.route.deliveryMode === "target" ? normalizeOptionalString(params.route.accountId) : void 0;
190
+ const route = {
191
+ ...params.route.deliveryMode === "target" ? {
192
+ deliveryMode: "target",
193
+ to: params.route.to,
194
+ ...accountId ? { accountId } : {}
195
+ } : { deliveryMode: "session" },
196
+ ...agentId ? { agentId } : {},
197
+ ...sessionKey ? { sessionKey } : {}
209
198
  };
210
199
  const target = {
211
200
  approvalId,