@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.
- package/assets/icon.png +0 -0
- package/dist/.setup/{accounts-BV6tDOTc.mjs → accounts-DMtj2E-4.mjs} +6 -35
- package/dist/.setup/api-DEB0Obj8.mjs +16 -0
- package/dist/.setup/{api-CGh4eWR8.mjs → api-DmCb6e7E.mjs} +10 -10
- package/dist/.setup/{approval-auth-BBI9BTRm.mjs → approval-auth-CszS7gwf.mjs} +7 -13
- package/dist/.setup/{approval-handler.runtime-C3vN5OWd.mjs → approval-handler.runtime-D9ofZcZW.mjs} +10 -29
- package/dist/.setup/{approval-reactions-DDQvPP_z.mjs → approval-reactions-BKkjIAoi.mjs} +25 -36
- package/dist/.setup/{channel-DhzTcFsK.mjs → channel-DrUxv5cf.mjs} +567 -136
- package/dist/.setup/{client-BseAt7F7.mjs → client-AXcDteBZ.mjs} +63 -152
- package/dist/.setup/client-adapter-c_O1ouxZ.mjs +30 -0
- package/dist/.setup/{config-schema-aQwwMGUj.mjs → config-schema-DvxZ18SD.mjs} +3 -13
- package/dist/.setup/{doctor-contract-api-Rbq_sRTI.mjs → doctor-contract-api-Db9V9gsY.mjs} +212 -91
- package/dist/.setup/{identity-YXPmgFMu.mjs → identity-B3JyPqGO.mjs} +2 -6
- package/dist/.setup/{install-signal-cli-BDbzFcU2.mjs → install-signal-cli-ChvjzM6X.mjs} +0 -4
- package/dist/.setup/legacy-transport-QIpaMNST.mjs +18 -0
- package/dist/.setup/{monitor-Dnz6Ygz5.mjs → monitor-BfwQr78f.mjs} +95 -124
- package/dist/.setup/{probe-DXT2eLnw.mjs → probe-BYLzra6D.mjs} +9 -9
- package/dist/.setup/{reaction-runtime-api-BnQGHcrB.mjs → reaction-runtime-api-DDi5x2wC.mjs} +3 -17
- package/dist/.setup/{question-reactions-C8cSEjVf.mjs → reaction-targets-CEdyjtrC.mjs} +11 -8
- package/dist/.setup/{rpc-context-CwwADZ1b.mjs → rpc-context-D26RxFIm.mjs} +1 -1
- package/dist/.setup/runtime-8sxUF217.mjs +8 -0
- package/dist/.setup/{send-B78M_eFp.mjs → send-DEjrbpIC.mjs} +25 -55
- package/dist/.setup/{channel.runtime-CG79z_Vy.mjs → setup-surface-Drt-4t3R.mjs} +4 -6
- package/dist/.setup/transport-detection-BVUDE42e.mjs +25 -0
- package/dist/.setup/{transport-policy-5VSnj5ma.mjs → transport-policy-B6C_LogW.mjs} +19 -1
- package/dist/.setup/transport-probes.runtime-DwXEHnXr.mjs +2 -0
- package/dist/api.js +10 -10
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/contract-api.js +2 -2
- package/dist/doctor-contract-api.js +1 -1
- package/dist/reaction-runtime-api.js +1 -1
- package/dist/runtime-api.js +2 -19
- package/dist/setup-entry.js +1 -1
- package/node_modules/@openclaw/fs-safe/CHANGELOG.md +102 -0
- package/node_modules/@openclaw/fs-safe/README.md +24 -6
- package/node_modules/@openclaw/fs-safe/dist/advanced.d.ts +6 -1
- package/node_modules/@openclaw/fs-safe/dist/advanced.js +3 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-durability.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-merge.js +1 -2
- package/node_modules/@openclaw/fs-safe/dist/archive-plan.d.ts +2 -7
- package/node_modules/@openclaw/fs-safe/dist/archive-read.js +9 -18
- package/node_modules/@openclaw/fs-safe/dist/archive-staging.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/archive-staging.js +3 -3
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-directory.js +4 -0
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.d.ts +11 -11
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-entry.js +3 -35
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.d.ts +2 -2
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-integrity.js +2 -12
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.d.ts +7 -3
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-loader.js +13 -10
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-manifest.js +3 -1
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.d.ts +2 -3
- package/node_modules/@openclaw/fs-safe/dist/archive-zip-preflight.js +16 -8
- package/node_modules/@openclaw/fs-safe/dist/archive.d.ts +6 -3
- package/node_modules/@openclaw/fs-safe/dist/archive.js +22 -19
- package/node_modules/@openclaw/fs-safe/dist/atomic.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/copy-publication.d.ts +1 -3
- package/node_modules/@openclaw/fs-safe/dist/copy-publication.js +2 -6
- package/node_modules/@openclaw/fs-safe/dist/deny-mutation-match.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/deny-mutation-match.js +71 -0
- package/node_modules/@openclaw/fs-safe/dist/deny-mutations.js +4 -3
- package/node_modules/@openclaw/fs-safe/dist/directory-guard.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-guard.js +0 -3
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.d.ts +20 -2
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-node.js +77 -1
- package/node_modules/@openclaw/fs-safe/dist/directory-receipt.js +5 -7
- package/node_modules/@openclaw/fs-safe/dist/effective-uid.js +1 -4
- package/node_modules/@openclaw/fs-safe/dist/errors.d.ts +3 -1
- package/node_modules/@openclaw/fs-safe/dist/errors.js +3 -2
- package/node_modules/@openclaw/fs-safe/dist/file-identity.js +10 -2
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-acquisition.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-admission.js +5 -1
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.d.ts +4 -11
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-held.js +1 -4
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.d.ts +3 -6
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-io.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root-options.d.ts +2 -10
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync-root.d.ts +2 -4
- package/node_modules/@openclaw/fs-safe/dist/file-lock-sync.js +2 -2
- package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.d.ts +3 -7
- package/node_modules/@openclaw/fs-safe/dist/file-store-boundary.js +7 -10
- package/node_modules/@openclaw/fs-safe/dist/file-store-prune.js +7 -6
- package/node_modules/@openclaw/fs-safe/dist/file-store.d.ts +4 -7
- package/node_modules/@openclaw/fs-safe/dist/file-store.js +19 -21
- package/node_modules/@openclaw/fs-safe/dist/guest-native-python.js +23 -31
- package/node_modules/@openclaw/fs-safe/dist/guest.js +21 -12
- package/node_modules/@openclaw/fs-safe/dist/json-document-store.d.ts +4 -9
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue-ownership.d.ts +1 -5
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/json-durable-queue.js +2 -7
- package/node_modules/@openclaw/fs-safe/dist/local-file-access.js +2 -5
- package/node_modules/@openclaw/fs-safe/dist/local-file-descriptor.d.ts +2 -5
- package/node_modules/@openclaw/fs-safe/dist/local-roots.d.ts +2 -7
- package/node_modules/@openclaw/fs-safe/dist/move-path-cleanup.js +4 -4
- package/node_modules/@openclaw/fs-safe/dist/mutation-authority.js +5 -0
- package/node_modules/@openclaw/fs-safe/dist/native-binding.d.ts +51 -14
- package/node_modules/@openclaw/fs-safe/dist/native-pinned-write.js +8 -2
- package/node_modules/@openclaw/fs-safe/dist/native-staged-symlink.d.ts +13 -0
- package/node_modules/@openclaw/fs-safe/dist/native-staged-symlink.js +303 -0
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch-worker.d.ts +1 -0
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch-worker.js +54 -0
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch.d.ts +5 -0
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl-batch.js +64 -0
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/owner-dacl.js +3 -0
- package/node_modules/@openclaw/fs-safe/dist/path.js +17 -1
- package/node_modules/@openclaw/fs-safe/dist/permission-exec.d.ts +6 -0
- package/node_modules/@openclaw/fs-safe/dist/permission-exec.js +3 -6
- package/node_modules/@openclaw/fs-safe/dist/permissions-public.d.ts +3 -1
- package/node_modules/@openclaw/fs-safe/dist/permissions-public.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/permissions-windows.d.ts +3 -6
- package/node_modules/@openclaw/fs-safe/dist/permissions.d.ts +3 -10
- package/node_modules/@openclaw/fs-safe/dist/permissions.js +0 -1
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-admission.js +4 -2
- package/node_modules/@openclaw/fs-safe/dist/pinned-mutation-shared-route.d.ts +2 -8
- package/node_modules/@openclaw/fs-safe/dist/pinned-open.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/pinned-open.js +2 -3
- package/node_modules/@openclaw/fs-safe/dist/publish-copy-stage.js +4 -0
- package/node_modules/@openclaw/fs-safe/dist/read-opened-file.d.ts +2 -5
- package/node_modules/@openclaw/fs-safe/dist/regular-file.js +3 -3
- package/node_modules/@openclaw/fs-safe/dist/replace-directory.js +5 -17
- package/node_modules/@openclaw/fs-safe/dist/replace-file-buffer.d.ts +4 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-buffer.js +36 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.d.ts +4 -10
- package/node_modules/@openclaw/fs-safe/dist/replace-file-copy-fallback.js +66 -38
- package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.d.ts +7 -11
- package/node_modules/@openclaw/fs-safe/dist/replace-file-descriptor.js +10 -2
- package/node_modules/@openclaw/fs-safe/dist/replace-file-destination.d.ts +21 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-destination.js +123 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-mutation.d.ts +26 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-mutation.js +47 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.d.ts +2 -2
- package/node_modules/@openclaw/fs-safe/dist/replace-file-temp-owner.js +16 -4
- package/node_modules/@openclaw/fs-safe/dist/replace-file-types.d.ts +55 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file-types.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/replace-file.d.ts +3 -55
- package/node_modules/@openclaw/fs-safe/dist/replace-file.js +31 -11
- package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.d.ts +1 -0
- package/node_modules/@openclaw/fs-safe/dist/retained-directory-replacement.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/retained-file-types.d.ts +50 -0
- package/node_modules/@openclaw/fs-safe/dist/retained-file-types.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/retained-file.d.ts +3 -0
- package/node_modules/@openclaw/fs-safe/dist/retained-file.js +121 -0
- package/node_modules/@openclaw/fs-safe/dist/root-context.js +3 -2
- package/node_modules/@openclaw/fs-safe/dist/root-directory-entry.d.ts +9 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory-entry.js +28 -0
- package/node_modules/@openclaw/fs-safe/dist/root-directory-list.d.ts +9 -1
- package/node_modules/@openclaw/fs-safe/dist/root-directory-list.js +88 -37
- package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/root-file-final-admission.js +1 -6
- package/node_modules/@openclaw/fs-safe/dist/root-file.js +2 -5
- package/node_modules/@openclaw/fs-safe/dist/root-handle-context.d.ts +4 -0
- package/node_modules/@openclaw/fs-safe/dist/root-handle-context.js +12 -0
- package/node_modules/@openclaw/fs-safe/dist/root-impl.d.ts +3 -3
- package/node_modules/@openclaw/fs-safe/dist/root-impl.js +8 -5
- package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.d.ts +2 -7
- package/node_modules/@openclaw/fs-safe/dist/root-move-noreplace.js +3 -3
- package/node_modules/@openclaw/fs-safe/dist/root-observed-path.d.ts +0 -1
- package/node_modules/@openclaw/fs-safe/dist/root-observed-path.js +0 -3
- package/node_modules/@openclaw/fs-safe/dist/root-path-observation.d.ts +4 -11
- package/node_modules/@openclaw/fs-safe/dist/root-path.js +7 -10
- package/node_modules/@openclaw/fs-safe/dist/root-paths.d.ts +2 -6
- package/node_modules/@openclaw/fs-safe/dist/root-remove-identity.d.ts +1 -3
- package/node_modules/@openclaw/fs-safe/dist/root-walk.d.ts +19 -12
- package/node_modules/@openclaw/fs-safe/dist/root-walk.js +56 -20
- package/node_modules/@openclaw/fs-safe/dist/root-write-admission.js +1 -6
- package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/root-write-complete-parent.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.d.ts +1 -0
- package/node_modules/@openclaw/fs-safe/dist/safe-path-segment.js +8 -2
- package/node_modules/@openclaw/fs-safe/dist/secret-file.d.ts +6 -2
- package/node_modules/@openclaw/fs-safe/dist/secret-file.js +12 -16
- package/node_modules/@openclaw/fs-safe/dist/secret-read-policy.js +1 -1
- package/node_modules/@openclaw/fs-safe/dist/secure-file-windows.js +5 -14
- package/node_modules/@openclaw/fs-safe/dist/secure-file.js +3 -2
- package/node_modules/@openclaw/fs-safe/dist/secure-temp-dir.js +2 -7
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-acquire.js +4 -4
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-admission-parser.d.ts +1 -2
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-handle.d.ts +2 -8
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-policy.d.ts +2 -7
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.d.ts +2 -2
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-reclaim.js +11 -12
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock-stale-admission.d.ts +1 -5
- package/node_modules/@openclaw/fs-safe/dist/sidecar-lock.js +9 -7
- package/node_modules/@openclaw/fs-safe/dist/staged-symlink-types.d.ts +39 -0
- package/node_modules/@openclaw/fs-safe/dist/staged-symlink-types.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/stat-observation.js +3 -10
- package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.d.ts +2 -0
- package/node_modules/@openclaw/fs-safe/dist/strict-file-identity.js +6 -6
- package/node_modules/@openclaw/fs-safe/dist/symlink-parents.js +58 -7
- package/node_modules/@openclaw/fs-safe/dist/temp-target.js +8 -10
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-admission.js +28 -33
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.d.ts +1 -1
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-child-admission.js +16 -17
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-descriptor.js +1 -2
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-owner.js +4 -9
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-ownership.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/temp-workspace-ownership.js +52 -0
- package/node_modules/@openclaw/fs-safe/dist/test-hooks.d.ts +5 -1
- package/node_modules/@openclaw/fs-safe/dist/text-atomic.d.ts +2 -1
- package/node_modules/@openclaw/fs-safe/dist/text-atomic.js +2 -0
- package/node_modules/@openclaw/fs-safe/dist/trash.js +27 -1
- package/node_modules/@openclaw/fs-safe/dist/walk.d.ts +2 -5
- package/node_modules/@openclaw/fs-safe/dist/watch-alias.d.ts +6 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-alias.js +88 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-hints.d.ts +9 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-hints.js +93 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-native.d.ts +36 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-native.js +73 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-scan.d.ts +28 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-scan.js +300 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-stream.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-stream.js +32 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-types.d.ts +60 -0
- package/node_modules/@openclaw/fs-safe/dist/watch-types.js +1 -0
- package/node_modules/@openclaw/fs-safe/dist/watch.d.ts +5 -0
- package/node_modules/@openclaw/fs-safe/dist/watch.js +530 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-owner.d.ts +3 -7
- package/node_modules/@openclaw/fs-safe/dist/windows-owner.js +0 -1
- package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.cs +6 -6
- package/node_modules/@openclaw/fs-safe/dist/windows-security-bridge.ps1 +78 -3
- package/node_modules/@openclaw/fs-safe/dist/windows-security-command.d.ts +8 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-command.js +66 -15
- package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.d.ts +4 -0
- package/node_modules/@openclaw/fs-safe/dist/windows-security-facts.js +6 -2
- package/node_modules/@openclaw/fs-safe/docs/advanced.md +4 -2
- package/node_modules/@openclaw/fs-safe/docs/archive.md +16 -0
- package/node_modules/@openclaw/fs-safe/docs/atomic.md +93 -3
- package/node_modules/@openclaw/fs-safe/docs/contributing.md +102 -4
- package/node_modules/@openclaw/fs-safe/docs/copy.md +2 -0
- package/node_modules/@openclaw/fs-safe/docs/durability.md +7 -0
- package/node_modules/@openclaw/fs-safe/docs/file-store.md +5 -0
- package/node_modules/@openclaw/fs-safe/docs/guest.md +7 -1
- package/node_modules/@openclaw/fs-safe/docs/index.md +1 -0
- package/node_modules/@openclaw/fs-safe/docs/install.md +30 -0
- package/node_modules/@openclaw/fs-safe/docs/native-helper.md +20 -4
- package/node_modules/@openclaw/fs-safe/docs/native.md +63 -1
- package/node_modules/@openclaw/fs-safe/docs/permissions.md +66 -0
- package/node_modules/@openclaw/fs-safe/docs/public-api.md +30 -3
- package/node_modules/@openclaw/fs-safe/docs/retained-file.md +115 -0
- package/node_modules/@openclaw/fs-safe/docs/root.md +35 -9
- package/node_modules/@openclaw/fs-safe/docs/secret-file.md +19 -0
- package/node_modules/@openclaw/fs-safe/docs/security-model.md +4 -1
- package/node_modules/@openclaw/fs-safe/docs/sidecar-lock.md +5 -1
- package/node_modules/@openclaw/fs-safe/docs/staged-symlink.md +124 -0
- package/node_modules/@openclaw/fs-safe/docs/store.md +3 -1
- package/node_modules/@openclaw/fs-safe/docs/temp.md +24 -4
- package/node_modules/@openclaw/fs-safe/docs/testing.md +210 -0
- package/node_modules/@openclaw/fs-safe/docs/types.md +6 -0
- package/node_modules/@openclaw/fs-safe/docs/walk.md +34 -1
- package/node_modules/@openclaw/fs-safe/docs/watch.md +251 -0
- package/node_modules/@openclaw/fs-safe/docs/writing.md +21 -0
- package/node_modules/@openclaw/fs-safe/package.json +13 -9
- package/node_modules/@openclaw/fs-safe-darwin-arm64/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-darwin-arm64/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-darwin-x64/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-darwin-x64/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-arm64-gnu/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-arm64-musl/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-arm64-musl/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-x64-gnu/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-x64-gnu/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-linux-x64-musl/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-linux-x64-musl/package.json +1 -1
- package/node_modules/@openclaw/fs-safe-win32-x64-msvc/fs-safe-native.node +0 -0
- package/node_modules/@openclaw/fs-safe-win32-x64-msvc/package.json +1 -1
- package/package.json +5 -5
- package/dist/.setup/api-B9-B1L7Q.mjs +0 -17
- package/dist/.setup/client-adapter-dvFa47YL.mjs +0 -63
- package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
- package/dist/.setup/send.runtime-CLnCWvrM.mjs +0 -2
- package/dist/.setup/transport-detection-CoiRl7Gx.mjs +0 -576
- package/dist/.setup/transport-detection.runtime-Tlhuv3T_.mjs +0 -2
- package/dist/.setup/transport-probes.runtime-WprAyBbL.mjs +0 -2
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.d.ts +0 -20
- package/node_modules/@openclaw/fs-safe/dist/directory-mode-owner.js +0 -78
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as __exportAll } from "./doctor-contract-api-Db9V9gsY.mjs";
|
|
2
2
|
import { i as normalizeSignalTransportHost } from "./transport-url-CAC0JcuI.mjs";
|
|
3
|
-
import { i as resolveSignalAccount, o as resolveSignalReplyToMode } from "./accounts-
|
|
3
|
+
import { i as resolveSignalAccount, o as resolveSignalReplyToMode } from "./accounts-DMtj2E-4.mjs";
|
|
4
4
|
import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.mjs";
|
|
5
|
-
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-
|
|
6
|
-
import {
|
|
7
|
-
import { a as prepareSignalSocketPath, t as SignalSseRejectionError } from "./client-
|
|
8
|
-
import { n as signalRpcRequest, r as streamSignalEvents, t as signalCheck } from "./client-adapter-
|
|
9
|
-
import { n as sendReactionSignal } from "./reaction-runtime-api-
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { n as
|
|
5
|
+
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";
|
|
6
|
+
import { _ as resolveSignalReactionLevel, m as materializeSignalPresentationFallback, p as registerSignalReplyContext, v as formatSignalMediaText, x as isSignalNativeApprovalHandlerConfigured } from "./channel-DrUxv5cf.mjs";
|
|
7
|
+
import { a as prepareSignalSocketPath, t as SignalSseRejectionError } from "./client-AXcDteBZ.mjs";
|
|
8
|
+
import { n as signalRpcRequest, r as streamSignalEvents, t as signalCheck } from "./client-adapter-c_O1ouxZ.mjs";
|
|
9
|
+
import { n as sendReactionSignal } from "./reaction-runtime-api-DDi5x2wC.mjs";
|
|
10
|
+
import { n as getSignalRuntime, t as getOptionalSignalRuntime } from "./runtime-8sxUF217.mjs";
|
|
11
|
+
import { i as maybeResolveSignalApprovalReaction, s as resolveSignalApprovalConversationKey, t as addSignalApprovalReactionHintToStructuredPayload } from "./approval-reactions-BKkjIAoi.mjs";
|
|
12
|
+
import { n as registerSignalReactionTargetsForDeliveredPayload, r as maybeResolveSignalQuestionReaction } from "./reaction-targets-CEdyjtrC.mjs";
|
|
13
|
+
import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-DEjrbpIC.mjs";
|
|
13
14
|
import { bindIngressLifecycleToReplyOptions, createChannelIngressError, createChannelIngressMonitor, createChannelMessageReplyPipeline, resolveChannelStreamingBlockEnabled } from "openclaw/plugin-sdk/channel-outbound";
|
|
14
15
|
import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
|
|
15
16
|
import { resolveAgentRoute, resolveInboundLastRouteSessionKey } from "openclaw/plugin-sdk/routing";
|
|
@@ -150,15 +151,13 @@ function spawnSignalDaemon(opts) {
|
|
|
150
151
|
const log = opts.runtime?.log ?? (() => {});
|
|
151
152
|
const error = opts.runtime?.error ?? (() => {});
|
|
152
153
|
let exited = false;
|
|
153
|
-
let settledExit = false;
|
|
154
154
|
let stopPromise;
|
|
155
155
|
let resolveExit;
|
|
156
156
|
const exitedPromise = new Promise((resolve) => {
|
|
157
157
|
resolveExit = resolve;
|
|
158
158
|
});
|
|
159
159
|
const settleExit = (value) => {
|
|
160
|
-
if (
|
|
161
|
-
settledExit = true;
|
|
160
|
+
if (exited) return;
|
|
162
161
|
exited = true;
|
|
163
162
|
resolveExit(value);
|
|
164
163
|
};
|
|
@@ -547,10 +546,6 @@ function resolveSignalQuoteContext(params) {
|
|
|
547
546
|
});
|
|
548
547
|
return {
|
|
549
548
|
contextVisibilityMode,
|
|
550
|
-
decision: {
|
|
551
|
-
include: Boolean(visibleQuote),
|
|
552
|
-
reason: visibleQuote ? contextVisibilityMode === "all" ? "mode_all" : quoteSenderAllowed ? "sender_allowed" : "quote_override" : "blocked"
|
|
553
|
-
},
|
|
554
549
|
quoteSenderAllowed,
|
|
555
550
|
visibleQuoteText: visibleQuote?.body ?? "",
|
|
556
551
|
visibleQuoteSender: visibleQuote?.sender
|
|
@@ -583,10 +578,10 @@ function normalizeAccountPhone(account) {
|
|
|
583
578
|
const trimmed = account?.trim();
|
|
584
579
|
return trimmed ? normalizeE164(trimmed) : void 0;
|
|
585
580
|
}
|
|
586
|
-
function
|
|
587
|
-
const validMentions = (
|
|
588
|
-
const botUuid =
|
|
589
|
-
const botPhone = normalizeAccountPhone(
|
|
581
|
+
function resolveSignalMentionFacts(identity, message, mentions) {
|
|
582
|
+
const validMentions = (mentions ?? []).filter((mention) => isValidStructuredMention(message, mention));
|
|
583
|
+
const botUuid = identity.accountUuid?.trim();
|
|
584
|
+
const botPhone = normalizeAccountPhone(identity.account);
|
|
590
585
|
const canDetectBotMention = Boolean(botUuid || botPhone);
|
|
591
586
|
const mentionsBot = validMentions.some((mention) => {
|
|
592
587
|
const mentionUuid = mention.uuid?.trim();
|
|
@@ -600,14 +595,6 @@ function resolveSignalNativeMentionFacts(params) {
|
|
|
600
595
|
mentionsBot
|
|
601
596
|
};
|
|
602
597
|
}
|
|
603
|
-
function resolveSignalMentionFacts(identity, message, mentions) {
|
|
604
|
-
return resolveSignalNativeMentionFacts({
|
|
605
|
-
message,
|
|
606
|
-
mentions,
|
|
607
|
-
account: identity.account,
|
|
608
|
-
accountUuid: identity.accountUuid
|
|
609
|
-
});
|
|
610
|
-
}
|
|
611
598
|
function renderSignalMentions(message, mentions) {
|
|
612
599
|
if (!message || !mentions?.length) return message;
|
|
613
600
|
let normalized = message;
|
|
@@ -623,6 +610,64 @@ function renderSignalMentions(message, mentions) {
|
|
|
623
610
|
return normalized;
|
|
624
611
|
}
|
|
625
612
|
//#endregion
|
|
613
|
+
//#region extensions/signal/src/monitor/reactions.ts
|
|
614
|
+
function resolveSignalStatusReactionTimestamp(params) {
|
|
615
|
+
if (typeof params.timestamp === "number") return Number.isFinite(params.timestamp) && params.timestamp > 0 ? params.timestamp : null;
|
|
616
|
+
const parsed = Number(params.messageId);
|
|
617
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
|
|
618
|
+
}
|
|
619
|
+
function resolveSignalReactionTargets(reaction) {
|
|
620
|
+
const targets = [];
|
|
621
|
+
const uuid = reaction.targetAuthorUuid?.trim();
|
|
622
|
+
if (uuid) targets.push({
|
|
623
|
+
kind: "uuid",
|
|
624
|
+
id: uuid,
|
|
625
|
+
display: `uuid:${uuid}`
|
|
626
|
+
});
|
|
627
|
+
const author = reaction.targetAuthor?.trim();
|
|
628
|
+
if (author) {
|
|
629
|
+
const normalized = normalizeE164(author);
|
|
630
|
+
targets.push({
|
|
631
|
+
kind: "phone",
|
|
632
|
+
id: normalized,
|
|
633
|
+
display: normalized
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
return targets;
|
|
637
|
+
}
|
|
638
|
+
function isSignalReactionMessage(reaction) {
|
|
639
|
+
if (!reaction) return false;
|
|
640
|
+
const emoji = reaction.emoji?.trim();
|
|
641
|
+
const timestamp = reaction.targetSentTimestamp;
|
|
642
|
+
const hasTarget = Boolean(normalizeOptionalString(reaction.targetAuthor) || normalizeOptionalString(reaction.targetAuthorUuid));
|
|
643
|
+
return Boolean(emoji && typeof timestamp === "number" && timestamp > 0 && hasTarget);
|
|
644
|
+
}
|
|
645
|
+
function shouldEmitSignalReactionNotification(params) {
|
|
646
|
+
const { mode, account, accountUuid, targets, sender, allowlist } = params;
|
|
647
|
+
const effectiveMode = mode ?? "own";
|
|
648
|
+
if (effectiveMode === "off") return false;
|
|
649
|
+
if (effectiveMode === "own") {
|
|
650
|
+
const accountId = normalizeOptionalString(account);
|
|
651
|
+
const normalizedAccountUuid = normalizeOptionalString(accountUuid);
|
|
652
|
+
if (!accountId && !normalizedAccountUuid || !targets || targets.length === 0) return false;
|
|
653
|
+
const normalizedAccount = accountId ? normalizeE164(accountId) : void 0;
|
|
654
|
+
return targets.some((target) => {
|
|
655
|
+
if (target.kind === "uuid") return [accountId, normalizedAccountUuid].some((candidate) => candidate === target.id || candidate === `uuid:${target.id}`);
|
|
656
|
+
return Boolean(normalizedAccount) && normalizedAccount === target.id;
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
if (effectiveMode === "allowlist") {
|
|
660
|
+
if (!sender || !allowlist || allowlist.length === 0) return false;
|
|
661
|
+
return isSignalSenderAllowed(sender, allowlist);
|
|
662
|
+
}
|
|
663
|
+
return true;
|
|
664
|
+
}
|
|
665
|
+
function buildSignalReactionSystemEventText(params) {
|
|
666
|
+
const base = `Signal reaction added: ${params.emojiLabel} by ${params.actorLabel} msg ${params.messageId}`;
|
|
667
|
+
const withTarget = params.targetLabel ? `${base} from ${params.targetLabel}` : base;
|
|
668
|
+
return params.groupLabel ? `${withTarget} in ${params.groupLabel}` : withTarget;
|
|
669
|
+
}
|
|
670
|
+
//#endregion
|
|
626
671
|
//#region extensions/signal/src/monitor/event-handler.ts
|
|
627
672
|
const REPLY_SESSION_INIT_CONFLICT_MESSAGE_RE = /reply session initialization conflicted for \S+/u;
|
|
628
673
|
const RETRYABLE_FLUSH_RETRY_DELAYS_MS = [
|
|
@@ -644,21 +689,9 @@ function resolveSignalInboundRoute(params) {
|
|
|
644
689
|
}
|
|
645
690
|
});
|
|
646
691
|
}
|
|
647
|
-
function resolveSignalStatusReactionTimestamp(params) {
|
|
648
|
-
if (typeof params.timestamp === "number") return Number.isFinite(params.timestamp) && params.timestamp > 0 ? params.timestamp : null;
|
|
649
|
-
const parsed = Number(params.messageId);
|
|
650
|
-
return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
|
|
651
|
-
}
|
|
652
692
|
function hasSignalStatusReplyDeliveryFailure(result) {
|
|
653
693
|
return Object.values(result.settledReceipt?.counts ?? {}).some((counts) => counts.failedBeforeSend > 0 || counts.failedAfterSend > 0);
|
|
654
694
|
}
|
|
655
|
-
function resolveSignalStatusReactionEmojis(emojis) {
|
|
656
|
-
if (emojis?.stallHard !== void 0) return emojis;
|
|
657
|
-
return {
|
|
658
|
-
...emojis,
|
|
659
|
-
stallHard: DEFAULT_EMOJIS.stallSoft
|
|
660
|
-
};
|
|
661
|
-
}
|
|
662
695
|
async function finalizeSignalStatusReaction(params) {
|
|
663
696
|
if (params.outcome === "done") await params.controller.setDone();
|
|
664
697
|
else await params.controller.setError();
|
|
@@ -830,7 +863,7 @@ function createSignalEventHandler(deps) {
|
|
|
830
863
|
await sendReactionSignal(statusReactionRecipient, statusReactionTimestamp, emoji, signalReactionOpts);
|
|
831
864
|
} },
|
|
832
865
|
initialEmoji: ackReaction,
|
|
833
|
-
emojis:
|
|
866
|
+
emojis: { stallHard: DEFAULT_EMOJIS.stallSoft },
|
|
834
867
|
timing: statusReactionTiming,
|
|
835
868
|
onError: (err) => {
|
|
836
869
|
logAckFailure({
|
|
@@ -1210,8 +1243,8 @@ function createSignalEventHandler(deps) {
|
|
|
1210
1243
|
targetAuthorUuid: params.reaction.targetAuthorUuid,
|
|
1211
1244
|
logDebug: logVerbose
|
|
1212
1245
|
})) return true;
|
|
1213
|
-
const targets =
|
|
1214
|
-
if (!
|
|
1246
|
+
const targets = resolveSignalReactionTargets(params.reaction);
|
|
1247
|
+
if (!shouldEmitSignalReactionNotification({
|
|
1215
1248
|
mode: deps.reactionMode,
|
|
1216
1249
|
account: deps.account,
|
|
1217
1250
|
accountUuid: deps.accountUuid,
|
|
@@ -1228,7 +1261,7 @@ function createSignalEventHandler(deps) {
|
|
|
1228
1261
|
senderPeerId
|
|
1229
1262
|
});
|
|
1230
1263
|
const groupLabel = isGroup ? `${groupName ?? "Signal Group"} id:${groupId}` : void 0;
|
|
1231
|
-
const text =
|
|
1264
|
+
const text = buildSignalReactionSystemEventText({
|
|
1232
1265
|
emojiLabel,
|
|
1233
1266
|
actorLabel: senderName,
|
|
1234
1267
|
messageId,
|
|
@@ -1269,7 +1302,7 @@ function createSignalEventHandler(deps) {
|
|
|
1269
1302
|
if (sender.kind === "phone" && normalizedAccount != null && sender.e164 === normalizedAccount || sender.kind === "uuid" && deps.accountUuid != null && sender.raw === deps.accountUuid) return;
|
|
1270
1303
|
if ("syncMessage" in envelope) return;
|
|
1271
1304
|
const dataMessage = envelope.dataMessage ?? envelope.editMessage?.dataMessage;
|
|
1272
|
-
const reaction =
|
|
1305
|
+
const reaction = isSignalReactionMessage(envelope.reactionMessage) ? envelope.reactionMessage : isSignalReactionMessage(dataMessage?.reaction) ? dataMessage?.reaction : null;
|
|
1273
1306
|
const rawMessage = dataMessage?.message ?? "";
|
|
1274
1307
|
const messageText = renderSignalMentions(rawMessage, dataMessage?.mentions).trim();
|
|
1275
1308
|
const groupId = dataMessage?.groupInfo?.groupId ?? reaction?.groupInfo?.groupId ?? void 0;
|
|
@@ -1507,17 +1540,19 @@ function createSignalEventHandler(deps) {
|
|
|
1507
1540
|
});
|
|
1508
1541
|
}
|
|
1509
1542
|
if (!bodyText && mediaFacts.length === 0 && !visibleQuoteText) return;
|
|
1510
|
-
if (deps.sendReadReceipts && !deps.readReceiptsViaDaemon && !isGroup
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1543
|
+
if (deps.sendReadReceipts && !deps.readReceiptsViaDaemon && !isGroup) {
|
|
1544
|
+
if (inboundTimestamp) try {
|
|
1545
|
+
await sendReadReceiptSignal(`signal:${senderRecipient}`, inboundTimestamp, {
|
|
1546
|
+
cfg,
|
|
1547
|
+
baseUrl: deps.baseUrl,
|
|
1548
|
+
account: deps.account,
|
|
1549
|
+
accountId: deps.accountId
|
|
1550
|
+
});
|
|
1551
|
+
} catch (err) {
|
|
1552
|
+
logVerbose(`signal read receipt failed for ${senderDisplay}: ${String(err)}`);
|
|
1553
|
+
}
|
|
1554
|
+
else logVerbose(`signal read receipt skipped (missing timestamp) for ${senderDisplay}`);
|
|
1519
1555
|
}
|
|
1520
|
-
else if (deps.sendReadReceipts && !deps.readReceiptsViaDaemon && !isGroup && !inboundTimestamp) logVerbose(`signal read receipt skipped (missing timestamp) for ${senderDisplay}`);
|
|
1521
1556
|
const senderName = envelope.sourceName ?? senderDisplay;
|
|
1522
1557
|
await registerSignalReplyContext({
|
|
1523
1558
|
accountId: deps.accountId,
|
|
@@ -1567,18 +1602,9 @@ function createSignalEventHandler(deps) {
|
|
|
1567
1602
|
};
|
|
1568
1603
|
}
|
|
1569
1604
|
//#endregion
|
|
1570
|
-
//#region extensions/signal/src/reaction-targets.ts
|
|
1571
|
-
async function registerSignalReactionTargetsForDeliveredPayload(params) {
|
|
1572
|
-
registerSignalQuestionReactionTargetForDeliveredPayload(params);
|
|
1573
|
-
await registerSignalApprovalReactionTargetForDeliveredPayload(params);
|
|
1574
|
-
}
|
|
1575
|
-
//#endregion
|
|
1576
1605
|
//#region extensions/signal/src/signal-ingress.ts
|
|
1577
1606
|
const SIGNAL_INGRESS_DRAIN_INTERVAL_MS = 1e3;
|
|
1578
1607
|
const SignalIngressPermanentError = createChannelIngressError("SignalIngressPermanentError", { withReason: true });
|
|
1579
|
-
function normalizeTimestamp(value) {
|
|
1580
|
-
return asPositiveSafeInteger(value) ?? null;
|
|
1581
|
-
}
|
|
1582
1608
|
function parseReceivePayload(event) {
|
|
1583
1609
|
if (event.event !== "receive" || !event.data) return null;
|
|
1584
1610
|
let parsed;
|
|
@@ -1605,8 +1631,8 @@ function inspectSignalIngressEvent(prepared) {
|
|
|
1605
1631
|
const senderNumber = normalizeNullableString(envelope.sourceNumber);
|
|
1606
1632
|
const senderKey = senderUuid ? `uuid:${senderUuid}` : senderNumber ? `number:${senderNumber}` : null;
|
|
1607
1633
|
if (!senderKey) throw new SignalIngressPermanentError("missing-sender", "Signal dispatchable envelope is missing sourceUuid/sourceNumber");
|
|
1608
|
-
const timestamp =
|
|
1609
|
-
if (timestamp ===
|
|
1634
|
+
const timestamp = asPositiveSafeInteger(envelope.timestamp) ?? asPositiveSafeInteger(dataMessage?.timestamp);
|
|
1635
|
+
if (timestamp === void 0) throw new SignalIngressPermanentError("missing-timestamp", "Signal dispatchable envelope is missing a stable timestamp");
|
|
1610
1636
|
const dataGroup = isRecord(dataMessage?.groupInfo) ? dataMessage.groupInfo : null;
|
|
1611
1637
|
const reactionGroup = isRecord(reactionMessage?.groupInfo) ? reactionMessage.groupInfo : null;
|
|
1612
1638
|
const groupId = normalizeNullableString(dataGroup?.groupId) ?? normalizeNullableString(reactionGroup?.groupId);
|
|
@@ -1633,7 +1659,7 @@ async function startSignalIngressMonitor(params) {
|
|
|
1633
1659
|
const ingressQueue = queue;
|
|
1634
1660
|
const monitor = createChannelIngressMonitor({
|
|
1635
1661
|
queue: ingressQueue,
|
|
1636
|
-
inspect:
|
|
1662
|
+
inspect: inspectSignalIngressEvent,
|
|
1637
1663
|
payload: {
|
|
1638
1664
|
version: 1,
|
|
1639
1665
|
serialize: ([event], { receivedAt }) => ({
|
|
@@ -1783,57 +1809,6 @@ function createSignalMonitorTaskRunner(runtime) {
|
|
|
1783
1809
|
}
|
|
1784
1810
|
};
|
|
1785
1811
|
}
|
|
1786
|
-
function resolveSignalReactionTargets(reaction) {
|
|
1787
|
-
const targets = [];
|
|
1788
|
-
const uuid = reaction.targetAuthorUuid?.trim();
|
|
1789
|
-
if (uuid) targets.push({
|
|
1790
|
-
kind: "uuid",
|
|
1791
|
-
id: uuid,
|
|
1792
|
-
display: `uuid:${uuid}`
|
|
1793
|
-
});
|
|
1794
|
-
const author = reaction.targetAuthor?.trim();
|
|
1795
|
-
if (author) {
|
|
1796
|
-
const normalized = normalizeE164(author);
|
|
1797
|
-
targets.push({
|
|
1798
|
-
kind: "phone",
|
|
1799
|
-
id: normalized,
|
|
1800
|
-
display: normalized
|
|
1801
|
-
});
|
|
1802
|
-
}
|
|
1803
|
-
return targets;
|
|
1804
|
-
}
|
|
1805
|
-
function isSignalReactionMessage(reaction) {
|
|
1806
|
-
if (!reaction) return false;
|
|
1807
|
-
const emoji = reaction.emoji?.trim();
|
|
1808
|
-
const timestamp = reaction.targetSentTimestamp;
|
|
1809
|
-
const hasTarget = Boolean(normalizeOptionalString(reaction.targetAuthor) || normalizeOptionalString(reaction.targetAuthorUuid));
|
|
1810
|
-
return Boolean(emoji && typeof timestamp === "number" && timestamp > 0 && hasTarget);
|
|
1811
|
-
}
|
|
1812
|
-
function shouldEmitSignalReactionNotification(params) {
|
|
1813
|
-
const { mode, account, accountUuid, targets, sender, allowlist } = params;
|
|
1814
|
-
const effectiveMode = mode ?? "own";
|
|
1815
|
-
if (effectiveMode === "off") return false;
|
|
1816
|
-
if (effectiveMode === "own") {
|
|
1817
|
-
const accountId = normalizeOptionalString(account);
|
|
1818
|
-
const normalizedAccountUuid = normalizeOptionalString(accountUuid);
|
|
1819
|
-
if (!accountId && !normalizedAccountUuid || !targets || targets.length === 0) return false;
|
|
1820
|
-
const normalizedAccount = accountId ? normalizeE164(accountId) : void 0;
|
|
1821
|
-
return targets.some((target) => {
|
|
1822
|
-
if (target.kind === "uuid") return [accountId, normalizedAccountUuid].some((candidate) => candidate === target.id || candidate === `uuid:${target.id}`);
|
|
1823
|
-
return Boolean(normalizedAccount) && normalizedAccount === target.id;
|
|
1824
|
-
});
|
|
1825
|
-
}
|
|
1826
|
-
if (effectiveMode === "allowlist") {
|
|
1827
|
-
if (!sender || !allowlist || allowlist.length === 0) return false;
|
|
1828
|
-
return isSignalSenderAllowed(sender, allowlist);
|
|
1829
|
-
}
|
|
1830
|
-
return true;
|
|
1831
|
-
}
|
|
1832
|
-
function buildSignalReactionSystemEventText(params) {
|
|
1833
|
-
const base = `Signal reaction added: ${params.emojiLabel} by ${params.actorLabel} msg ${params.messageId}`;
|
|
1834
|
-
const withTarget = params.targetLabel ? `${base} from ${params.targetLabel}` : base;
|
|
1835
|
-
return params.groupLabel ? `${withTarget} in ${params.groupLabel}` : withTarget;
|
|
1836
|
-
}
|
|
1837
1812
|
const SIGNAL_ATTACHMENT_RPC_RESPONSE_HEADROOM_BYTES = 65536;
|
|
1838
1813
|
const SIGNAL_BASE64_OVERHEAD_NUMERATOR = 4;
|
|
1839
1814
|
const SIGNAL_BASE64_OVERHEAD_DENOMINATOR = 3;
|
|
@@ -2092,11 +2067,7 @@ async function monitorSignalProvider(opts = {}) {
|
|
|
2092
2067
|
...params,
|
|
2093
2068
|
cfg,
|
|
2094
2069
|
chunkMode
|
|
2095
|
-
})
|
|
2096
|
-
resolveSignalReactionTargets,
|
|
2097
|
-
isSignalReactionMessage,
|
|
2098
|
-
shouldEmitSignalReactionNotification,
|
|
2099
|
-
buildSignalReactionSystemEventText
|
|
2070
|
+
})
|
|
2100
2071
|
});
|
|
2101
2072
|
ingressMonitor = await startSignalIngressMonitor({
|
|
2102
2073
|
accountId: accountInfo.accountId,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as
|
|
3
|
-
import {
|
|
1
|
+
import { o as __exportAll } from "./doctor-contract-api-Db9V9gsY.mjs";
|
|
2
|
+
import { n as signalRpcRequest, t as signalCheck } from "./client-adapter-c_O1ouxZ.mjs";
|
|
3
|
+
import { t as detectSignalTransport } from "./transport-detection-BVUDE42e.mjs";
|
|
4
|
+
import { normalizeOptionalString, normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
5
|
import { runChannelProbe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
5
6
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
6
7
|
//#region extensions/signal/src/probe.ts
|
|
@@ -9,14 +10,13 @@ var probe_exports = /* @__PURE__ */ __exportAll({
|
|
|
9
10
|
probeSignalAccount: () => probeSignalAccount
|
|
10
11
|
});
|
|
11
12
|
function parseSignalVersion(value) {
|
|
12
|
-
|
|
13
|
+
const directVersion = normalizeOptionalString(value);
|
|
14
|
+
if (directVersion) return directVersion;
|
|
13
15
|
if (typeof value === "object" && value !== null) {
|
|
14
16
|
const { version, versions } = value;
|
|
15
|
-
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
if (normalizedVersions.length > 0) return normalizedVersions.join(", ");
|
|
19
|
-
}
|
|
17
|
+
const normalizedVersion = normalizeOptionalString(version);
|
|
18
|
+
if (normalizedVersion) return normalizedVersion;
|
|
19
|
+
return normalizeTrimmedStringList(versions).join(", ") || null;
|
|
20
20
|
}
|
|
21
21
|
return null;
|
|
22
22
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { i as resolveSignalAccount } from "./accounts-
|
|
1
|
+
import { i as resolveSignalAccount } from "./accounts-DMtj2E-4.mjs";
|
|
2
2
|
import { r as normalizeSignalReactionRecipient } from "./normalize-l_b99hap.mjs";
|
|
3
|
-
import { n as signalRpcRequest } from "./client-adapter-
|
|
4
|
-
import { t as resolveSignalRpcContext } from "./rpc-context-
|
|
3
|
+
import { n as signalRpcRequest } from "./client-adapter-c_O1ouxZ.mjs";
|
|
4
|
+
import { t as resolveSignalRpcContext } from "./rpc-context-D26RxFIm.mjs";
|
|
5
5
|
import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
|
|
6
6
|
//#region extensions/signal/src/send-reactions.ts
|
|
7
7
|
async function sendReactionSignalCore(params) {
|
|
@@ -43,13 +43,6 @@ async function sendReactionSignalCore(params) {
|
|
|
43
43
|
}))?.timestamp
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
47
|
-
* Send a Signal reaction to a message
|
|
48
|
-
* @param recipient - UUID or E.164 phone number of the message author
|
|
49
|
-
* @param targetTimestamp - Message ID (timestamp) to react to
|
|
50
|
-
* @param emoji - Emoji to react with
|
|
51
|
-
* @param opts - Optional account/connection overrides
|
|
52
|
-
*/
|
|
53
46
|
async function sendReactionSignal(recipient, targetTimestamp, emoji, opts) {
|
|
54
47
|
return await sendReactionSignalCore({
|
|
55
48
|
recipient,
|
|
@@ -59,13 +52,6 @@ async function sendReactionSignal(recipient, targetTimestamp, emoji, opts) {
|
|
|
59
52
|
opts
|
|
60
53
|
});
|
|
61
54
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Remove a Signal reaction from a message
|
|
64
|
-
* @param recipient - UUID or E.164 phone number of the message author
|
|
65
|
-
* @param targetTimestamp - Message ID (timestamp) to remove reaction from
|
|
66
|
-
* @param emoji - Emoji to remove
|
|
67
|
-
* @param opts - Optional account/connection overrides
|
|
68
|
-
*/
|
|
69
55
|
async function removeReactionSignal(recipient, targetTimestamp, emoji, opts) {
|
|
70
56
|
return await sendReactionSignalCore({
|
|
71
57
|
recipient,
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as resolveSignalDeliveredConversationKey } from "./approval-auth-
|
|
3
|
-
import { c as resolveSignalApprovalTargetAuthorKeys } from "./approval-reactions-
|
|
1
|
+
import { o as __exportAll } from "./doctor-contract-api-Db9V9gsY.mjs";
|
|
2
|
+
import { i as resolveSignalDeliveredConversationKey } from "./approval-auth-CszS7gwf.mjs";
|
|
3
|
+
import { c as resolveSignalApprovalTargetAuthorKeys, o as registerSignalApprovalReactionTargetForDeliveredPayload } from "./approval-reactions-BKkjIAoi.mjs";
|
|
4
4
|
import { createQuestionReactionTargetStore, questionGatewayRuntime } from "openclaw/plugin-sdk/question-gateway-runtime";
|
|
5
5
|
import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
|
|
6
6
|
//#region extensions/signal/src/question-reactions.ts
|
|
7
|
-
var question_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
8
|
-
maybeResolveSignalQuestionReaction: () => maybeResolveSignalQuestionReaction,
|
|
9
|
-
registerSignalQuestionReactionTargetForDeliveredPayload: () => registerSignalQuestionReactionTargetForDeliveredPayload
|
|
10
|
-
});
|
|
11
7
|
function buildKey(identity) {
|
|
12
8
|
const values = [
|
|
13
9
|
identity.accountId,
|
|
@@ -66,4 +62,11 @@ async function maybeResolveSignalQuestionReaction(params) {
|
|
|
66
62
|
});
|
|
67
63
|
}
|
|
68
64
|
//#endregion
|
|
69
|
-
|
|
65
|
+
//#region extensions/signal/src/reaction-targets.ts
|
|
66
|
+
var reaction_targets_exports = /* @__PURE__ */ __exportAll({ registerSignalReactionTargetsForDeliveredPayload: () => registerSignalReactionTargetsForDeliveredPayload });
|
|
67
|
+
async function registerSignalReactionTargetsForDeliveredPayload(params) {
|
|
68
|
+
registerSignalQuestionReactionTargetForDeliveredPayload(params);
|
|
69
|
+
await registerSignalApprovalReactionTargetForDeliveredPayload(params);
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { registerSignalReactionTargetsForDeliveredPayload as n, maybeResolveSignalQuestionReaction as r, reaction_targets_exports as t };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
|
|
2
|
+
//#region extensions/signal/src/runtime.ts
|
|
3
|
+
const { setRuntime: setSignalRuntime, getRuntime: getSignalRuntime, tryGetRuntime: getOptionalSignalRuntime } = createPluginRuntimeStore({
|
|
4
|
+
pluginId: "signal",
|
|
5
|
+
errorMessage: "Signal runtime not initialized"
|
|
6
|
+
});
|
|
7
|
+
//#endregion
|
|
8
|
+
export { getSignalRuntime as n, setSignalRuntime as r, getOptionalSignalRuntime as t };
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as __exportAll } from "./doctor-contract-api-Db9V9gsY.mjs";
|
|
2
|
+
import { i as resolveSignalAccount } from "./accounts-DMtj2E-4.mjs";
|
|
2
3
|
import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { p as registerSignalReplyContext, y as markdownToSignalText } from "./channel-DrUxv5cf.mjs";
|
|
5
|
+
import { o as isSignalQuoteMetadataRejection } from "./client-AXcDteBZ.mjs";
|
|
6
|
+
import { n as signalRpcRequest } from "./client-adapter-c_O1ouxZ.mjs";
|
|
7
|
+
import { t as resolveSignalRpcContext } from "./rpc-context-D26RxFIm.mjs";
|
|
6
8
|
import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
|
|
7
9
|
import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
|
|
8
|
-
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
10
|
+
import { asPositiveSafeInteger, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
9
11
|
import { kindFromMime, resolveOutboundAttachmentFromUrl } from "openclaw/plugin-sdk/media-runtime";
|
|
10
12
|
import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
|
|
11
13
|
//#region extensions/signal/src/send.ts
|
|
14
|
+
var send_exports = /* @__PURE__ */ __exportAll({
|
|
15
|
+
sendMessageSignal: () => sendMessageSignal,
|
|
16
|
+
sendReadReceiptSignal: () => sendReadReceiptSignal,
|
|
17
|
+
sendTypingSignal: () => sendTypingSignal
|
|
18
|
+
});
|
|
12
19
|
function assertSignalRecipientDelivery(result, target) {
|
|
13
20
|
if (!Array.isArray(result?.results)) return;
|
|
14
21
|
const failures = [];
|
|
@@ -27,7 +34,6 @@ function assertSignalRecipientDelivery(result, target) {
|
|
|
27
34
|
throw new Error(`Signal send failed for ${failures.length} recipient${failures.length === 1 ? "" : "s"}: ${[...new Set(failures)].join(", ")}`);
|
|
28
35
|
}
|
|
29
36
|
async function resolveSignalRpcAccountInfo(opts) {
|
|
30
|
-
if (!opts.cfg) throw new Error("Signal RPC account resolution requires a resolved runtime config. Load and resolve config at the command or gateway boundary, then pass cfg through the runtime path.");
|
|
31
37
|
const cfg = requireRuntimeConfig(opts.cfg, "Signal RPC account resolution");
|
|
32
38
|
return resolveSignalAccount({
|
|
33
39
|
cfg,
|
|
@@ -51,20 +57,10 @@ function parseTarget(raw) {
|
|
|
51
57
|
recipient: value
|
|
52
58
|
};
|
|
53
59
|
}
|
|
54
|
-
function buildTargetParams(target
|
|
55
|
-
if (target.type === "recipient") {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
if (target.type === "group") {
|
|
60
|
-
if (!allow.group) return null;
|
|
61
|
-
return { groupId: target.groupId };
|
|
62
|
-
}
|
|
63
|
-
if (target.type === "username") {
|
|
64
|
-
if (!allow.username) return null;
|
|
65
|
-
return { username: [target.username] };
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
60
|
+
function buildTargetParams(target) {
|
|
61
|
+
if (target.type === "recipient") return { recipient: [target.recipient] };
|
|
62
|
+
if (target.type === "group") return { groupId: target.groupId };
|
|
63
|
+
return { username: [target.username] };
|
|
68
64
|
}
|
|
69
65
|
function createSignalSendReceipt(params) {
|
|
70
66
|
const messageId = params.messageId.trim();
|
|
@@ -94,9 +90,7 @@ function createSignalSendReceipt(params) {
|
|
|
94
90
|
function parseSignalReplyTimestamp(raw) {
|
|
95
91
|
const value = normalizeOptionalString(raw);
|
|
96
92
|
if (!value || !/^\d+$/.test(value)) return;
|
|
97
|
-
|
|
98
|
-
if (!Number.isSafeInteger(timestamp) || timestamp <= 0) return;
|
|
99
|
-
return timestamp;
|
|
93
|
+
return asPositiveSafeInteger(Number(value));
|
|
100
94
|
}
|
|
101
95
|
function resolveSignalQuoteParams(opts) {
|
|
102
96
|
const timestamp = parseSignalReplyTimestamp(opts.replyToId);
|
|
@@ -111,21 +105,6 @@ function resolveSignalQuoteParams(opts) {
|
|
|
111
105
|
}
|
|
112
106
|
};
|
|
113
107
|
}
|
|
114
|
-
function isSignalQuoteMetadataRejection(error) {
|
|
115
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
116
|
-
const normalized = normalizeLowercaseStringOrEmpty(message);
|
|
117
|
-
const rpcCode = /^signal rpc (-?\d+):/u.exec(normalized)?.[1];
|
|
118
|
-
if (rpcCode !== void 0) {
|
|
119
|
-
if (rpcCode !== "-32602") return false;
|
|
120
|
-
} else {
|
|
121
|
-
const restStatusText = /^signal rest (\d{3}):/u.exec(normalized)?.[1];
|
|
122
|
-
if (!restStatusText) return false;
|
|
123
|
-
const restStatus = Number(restStatusText);
|
|
124
|
-
if (restStatus < 400 || restStatus >= 500 || restStatus === 408 || restStatus === 429) return false;
|
|
125
|
-
}
|
|
126
|
-
if (!normalized.includes("quote")) return false;
|
|
127
|
-
return normalized.includes("reject") || normalized.includes("invalid") || normalized.includes("unrecognized") || normalized.includes("unsupported") || normalized.includes("not found") || normalized.includes("no such") || normalized.includes("unknown");
|
|
128
|
-
}
|
|
129
108
|
async function sendMessageSignal(to, text, opts) {
|
|
130
109
|
const cfg = requireRuntimeConfig(opts.cfg, "Signal send");
|
|
131
110
|
const accountInfo = resolveSignalAccount({
|
|
@@ -177,13 +156,7 @@ async function sendMessageSignal(to, text, opts) {
|
|
|
177
156
|
if (textStyles.length > 0) params["text-style"] = textStyles.map((style) => `${style.start}:${style.length}:${style.style}`);
|
|
178
157
|
if (account) params.account = account;
|
|
179
158
|
if (attachments && attachments.length > 0) params.attachments = attachments;
|
|
180
|
-
|
|
181
|
-
recipient: true,
|
|
182
|
-
group: true,
|
|
183
|
-
username: true
|
|
184
|
-
});
|
|
185
|
-
if (!targetParams) throw new Error("Signal recipient is required");
|
|
186
|
-
Object.assign(params, targetParams);
|
|
159
|
+
Object.assign(params, buildTargetParams(target));
|
|
187
160
|
const quote = resolveSignalQuoteParams(opts);
|
|
188
161
|
const sendOpts = {
|
|
189
162
|
baseUrl,
|
|
@@ -237,12 +210,9 @@ async function sendMessageSignal(to, text, opts) {
|
|
|
237
210
|
async function sendTypingSignal(to, opts) {
|
|
238
211
|
const accountInfo = await resolveSignalRpcAccountInfo(opts);
|
|
239
212
|
const { baseUrl, account } = resolveSignalRpcContext(opts, accountInfo);
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
});
|
|
244
|
-
if (!targetParams) return false;
|
|
245
|
-
const params = { ...targetParams };
|
|
213
|
+
const target = parseTarget(to);
|
|
214
|
+
if (target.type === "username") return false;
|
|
215
|
+
const params = buildTargetParams(target);
|
|
246
216
|
if (account) params.account = account;
|
|
247
217
|
if (opts.stop) params.stop = true;
|
|
248
218
|
await signalRpcRequest("sendTyping", params, {
|
|
@@ -256,10 +226,10 @@ async function sendReadReceiptSignal(to, targetTimestamp, opts) {
|
|
|
256
226
|
if (!Number.isFinite(targetTimestamp) || targetTimestamp <= 0) return false;
|
|
257
227
|
const accountInfo = await resolveSignalRpcAccountInfo(opts);
|
|
258
228
|
const { baseUrl, account } = resolveSignalRpcContext(opts, accountInfo);
|
|
259
|
-
const
|
|
260
|
-
if (
|
|
229
|
+
const target = parseTarget(to);
|
|
230
|
+
if (target.type !== "recipient") return false;
|
|
261
231
|
const params = {
|
|
262
|
-
...
|
|
232
|
+
...buildTargetParams(target),
|
|
263
233
|
targetTimestamp,
|
|
264
234
|
type: opts.type ?? "read"
|
|
265
235
|
};
|
|
@@ -272,4 +242,4 @@ async function sendReadReceiptSignal(to, targetTimestamp, opts) {
|
|
|
272
242
|
return true;
|
|
273
243
|
}
|
|
274
244
|
//#endregion
|
|
275
|
-
export { sendReadReceiptSignal as n, sendTypingSignal as r, sendMessageSignal as t };
|
|
245
|
+
export { send_exports as i, sendReadReceiptSignal as n, sendTypingSignal as r, sendMessageSignal as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as resolveSignalAccount, n as listSignalAccountIds } from "./accounts-
|
|
2
|
-
import { c as signalNumberTextInput, i as createSignalCliPathTextInput, o as signalCompletionNote, s as signalDmPolicy } from "./channel-
|
|
3
|
-
import { r as installSignalCli } from "./install-signal-cli-
|
|
1
|
+
import { i as resolveSignalAccount, n as listSignalAccountIds } from "./accounts-DMtj2E-4.mjs";
|
|
2
|
+
import { c as signalNumberTextInput, i as createSignalCliPathTextInput, o as signalCompletionNote, s as signalDmPolicy } from "./channel-DrUxv5cf.mjs";
|
|
3
|
+
import { r as installSignalCli } from "./install-signal-cli-ChvjzM6X.mjs";
|
|
4
4
|
import { createDetectedBinaryStatus, createSetupTranslator, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
|
|
5
5
|
import { detectBinary } from "openclaw/plugin-sdk/setup-tools";
|
|
6
6
|
//#region extensions/signal/src/setup-surface.ts
|
|
@@ -33,8 +33,6 @@ const managedStatus = createDetectedBinaryStatus({
|
|
|
33
33
|
},
|
|
34
34
|
detectBinary
|
|
35
35
|
});
|
|
36
|
-
//#endregion
|
|
37
|
-
//#region extensions/signal/src/channel.runtime.ts
|
|
38
36
|
const signalSetupWizard = {
|
|
39
37
|
channel,
|
|
40
38
|
status: {
|
|
@@ -59,7 +57,7 @@ const signalSetupWizard = {
|
|
|
59
57
|
accountId
|
|
60
58
|
}).transport;
|
|
61
59
|
if (transport.kind !== "managed-native") return;
|
|
62
|
-
const currentCliPath = (typeof credentialValues.cliPath === "string" ? credentialValues.cliPath : void 0) ??
|
|
60
|
+
const currentCliPath = (typeof credentialValues.cliPath === "string" ? credentialValues.cliPath : void 0) ?? transport.cliPath;
|
|
63
61
|
const cliDetected = await detectBinary(currentCliPath);
|
|
64
62
|
if (!await prompter.confirm({
|
|
65
63
|
message: cliDetected ? t("wizard.signal.reinstallPrompt") : t("wizard.signal.installPrompt"),
|