connection.allowUnsafeRemoteWs
- connection.connectTimeoutMs
- connection.autoAcceptFiles
+- connection.filesFolder
- streaming.nativeTransport and related live-reply throttling fields
- messageTtlSeconds and filePolicy
- dmPolicy, allowFrom, groupPolicy
@@ -59,6 +60,33 @@ Runtime-side startup flags:
- local storage/layout: --database, --files-folder, --temp-folder, --log-file
- runtime process behavior: --device-name, --maintenance, --mute, --mark-read
+### Locating received files (`connection.filesFolder`)
+
+connection.filesFolder is the path where OpenClaw reads files the runtime received. When the runtime is started with --files-folder, it reports received files by name only (not a full path), and the plugin joins that name to connection.filesFolder (default ~/.simplex/files) to read the bytes. Without --files-folder the runtime reports absolute paths and this setting is unused.
+connection.filesFolder depends on the topology:
+
+- Shared filesystem (both processes on one host or in one container): set connection.filesFolder to the same path as --files-folder.
+- Separate containers with a shared volume: each container usually mounts the volume at a different path, and that is fine — set --files-folder to the sidecar's mount and connection.filesFolder to OpenClaw's mount of the same volume. An absolute path would break here, because the sidecar's directory does not exist inside the OpenClaw container; the name-only reporting is exactly what bridges the two mounts.
+
+```yaml
+services:
+ simplex-chat:
+ volumes:
+ - simplex-files:/data/files
+ command: ["...", "--files-folder", "/data/files"]
+ openclaw:
+ volumes:
+ - simplex-files:/shared/simplex
+ # channels.openclaw-simplex.connection.filesFolder = /shared/simplex
+volumes:
+ simplex-files:
+```
+
+The sidecar writes `/data/files/photo.jpg` and reports `photo.jpg`; OpenClaw reads it from `/shared/simplex/photo.jpg` — same volume, different mount paths, bridged by the file name.
+
### Manual service files
The CLI helper above is the preferred path. These examples show what it writes and are useful when you want to manage the service definition yourself.
diff --git a/docs/reference/config.mdx b/docs/reference/config.mdx
index 8b7b210..bedde1e 100644
--- a/docs/reference/config.mdx
+++ b/docs/reference/config.mdx
@@ -128,6 +128,7 @@ If accounts is set, each account entry can override the shared root
| `connection.wsPort` | Optional port fallback when `wsUrl` is not set. Default: `5225`. |
| `connection.allowUnsafeRemoteWs` | Allow plaintext remote WebSocket endpoints. Keep this false unless the endpoint is protected by a private network, firewall, or authenticated TLS proxy. |
| `connection.autoAcceptFiles` | Whether incoming file transfers should be auto-accepted by the SimpleX runtime. |
+| `connection.filesFolder` | Path where OpenClaw reads files the external runtime received. Only used when the runtime runs with `--files-folder` (it then reports file names only, and the plugin joins them to this path). Set it to OpenClaw's view of the runtime's files folder — the same path on a shared filesystem, or OpenClaw's mount of the shared volume across containers. Default: `~/.simplex/files`. Ignored in native mode (the core reports absolute paths). |
| `connection.connectTimeoutMs` | WebSocket connection timeout in milliseconds. |
| `connection.commandTimeoutMs` | Default SimpleX WebSocket command timeout in milliseconds. |
| `connection.directoryTimeoutMs` | Shorter timeout for advisory contact and group directory lookups. |
diff --git a/openclaw.plugin.json b/openclaw.plugin.json
index e3b8c04..5f1bfb9 100644
--- a/openclaw.plugin.json
+++ b/openclaw.plugin.json
@@ -224,7 +224,7 @@
"properties": {
"mode": {
"type": "string",
- "const": "external"
+ "enum": ["external", "native"]
},
"wsUrl": {
"type": "string",
@@ -244,6 +244,10 @@
"autoAcceptFiles": {
"type": "boolean"
},
+ "filesFolder": {
+ "type": "string",
+ "minLength": 1
+ },
"connectTimeoutMs": {
"type": "integer",
"exclusiveMinimum": 0,
@@ -258,6 +262,79 @@
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
+ },
+ "db": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "sqlite"
+ },
+ "filePrefix": {
+ "type": "string",
+ "minLength": 1
+ },
+ "encryptionKey": {
+ "type": "string"
+ }
+ },
+ "required": ["filePrefix"],
+ "additionalProperties": false
+ },
+ "profile": {
+ "type": "object",
+ "properties": {
+ "displayName": {
+ "type": "string",
+ "minLength": 1
+ },
+ "fullName": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "peerType": {
+ "type": "string",
+ "enum": ["bot", "human"]
+ }
+ },
+ "additionalProperties": false
+ },
+ "addressSettings": {
+ "type": "object",
+ "properties": {
+ "autoAccept": {
+ "type": "boolean"
+ },
+ "welcomeMessage": {
+ "type": "string"
+ },
+ "businessAddress": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "servers": {
+ "type": "object",
+ "properties": {
+ "smp": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "xftp": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ }
+ },
+ "additionalProperties": false
}
},
"additionalProperties": false
@@ -461,7 +538,7 @@
"properties": {
"mode": {
"type": "string",
- "const": "external"
+ "enum": ["external", "native"]
},
"wsUrl": {
"type": "string",
@@ -481,6 +558,10 @@
"autoAcceptFiles": {
"type": "boolean"
},
+ "filesFolder": {
+ "type": "string",
+ "minLength": 1
+ },
"connectTimeoutMs": {
"type": "integer",
"exclusiveMinimum": 0,
@@ -495,6 +576,79 @@
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
+ },
+ "db": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "sqlite"
+ },
+ "filePrefix": {
+ "type": "string",
+ "minLength": 1
+ },
+ "encryptionKey": {
+ "type": "string"
+ }
+ },
+ "required": ["filePrefix"],
+ "additionalProperties": false
+ },
+ "profile": {
+ "type": "object",
+ "properties": {
+ "displayName": {
+ "type": "string",
+ "minLength": 1
+ },
+ "fullName": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "peerType": {
+ "type": "string",
+ "enum": ["bot", "human"]
+ }
+ },
+ "additionalProperties": false
+ },
+ "addressSettings": {
+ "type": "object",
+ "properties": {
+ "autoAccept": {
+ "type": "boolean"
+ },
+ "welcomeMessage": {
+ "type": "string"
+ },
+ "businessAddress": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "servers": {
+ "type": "object",
+ "properties": {
+ "smp": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "xftp": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ }
+ },
+ "additionalProperties": false
}
},
"additionalProperties": false
diff --git a/package.json b/package.json
index db29633..dfdabf8 100644
--- a/package.json
+++ b/package.json
@@ -51,9 +51,14 @@
"dependencies": {
"@sinclair/typebox": "^0.34.49",
"qrcode": "^1.5.4",
- "ws": "^8.20.0",
+ "ws": "^8.21.0",
"zod": "^4.4.3"
},
+ "pnpm": {
+ "onlyBuiltDependencies": [
+ "simplex-chat"
+ ]
+ },
"peerDependencies": {
"openclaw": ">=2026.5.27"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d18f701..2d03599 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,8 +15,8 @@ importers:
specifier: ^1.5.4
version: 1.5.4
ws:
- specifier: ^8.20.0
- version: 8.20.0
+ specifier: ^8.21.0
+ version: 8.21.0
zod:
specifier: ^4.4.3
version: 4.4.3
@@ -1319,126 +1319,251 @@ packages:
cpu: [arm]
os: [android]
+ '@rollup/rollup-android-arm-eabi@4.62.2':
+ resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==}
+ cpu: [arm]
+ os: [android]
+
'@rollup/rollup-android-arm64@4.60.2':
resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==}
cpu: [arm64]
os: [android]
+ '@rollup/rollup-android-arm64@4.62.2':
+ resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==}
+ cpu: [arm64]
+ os: [android]
+
'@rollup/rollup-darwin-arm64@4.60.2':
resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==}
cpu: [arm64]
os: [darwin]
+ '@rollup/rollup-darwin-arm64@4.62.2':
+ resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==}
+ cpu: [arm64]
+ os: [darwin]
+
'@rollup/rollup-darwin-x64@4.60.2':
resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==}
cpu: [x64]
os: [darwin]
+ '@rollup/rollup-darwin-x64@4.62.2':
+ resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==}
+ cpu: [x64]
+ os: [darwin]
+
'@rollup/rollup-freebsd-arm64@4.60.2':
resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==}
cpu: [arm64]
os: [freebsd]
+ '@rollup/rollup-freebsd-arm64@4.62.2':
+ resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==}
+ cpu: [arm64]
+ os: [freebsd]
+
'@rollup/rollup-freebsd-x64@4.60.2':
resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==}
cpu: [x64]
os: [freebsd]
+ '@rollup/rollup-freebsd-x64@4.62.2':
+ resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==}
+ cpu: [x64]
+ os: [freebsd]
+
'@rollup/rollup-linux-arm-gnueabihf@4.60.2':
resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==}
cpu: [arm]
os: [linux]
+ '@rollup/rollup-linux-arm-gnueabihf@4.62.2':
+ resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==}
+ cpu: [arm]
+ os: [linux]
+
'@rollup/rollup-linux-arm-musleabihf@4.60.2':
resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==}
cpu: [arm]
os: [linux]
+ '@rollup/rollup-linux-arm-musleabihf@4.62.2':
+ resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==}
+ cpu: [arm]
+ os: [linux]
+
'@rollup/rollup-linux-arm64-gnu@4.60.2':
resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==}
cpu: [arm64]
os: [linux]
+ '@rollup/rollup-linux-arm64-gnu@4.62.2':
+ resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==}
+ cpu: [arm64]
+ os: [linux]
+
'@rollup/rollup-linux-arm64-musl@4.60.2':
resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==}
cpu: [arm64]
os: [linux]
+ '@rollup/rollup-linux-arm64-musl@4.62.2':
+ resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==}
+ cpu: [arm64]
+ os: [linux]
+
'@rollup/rollup-linux-loong64-gnu@4.60.2':
resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==}
cpu: [loong64]
os: [linux]
+ '@rollup/rollup-linux-loong64-gnu@4.62.2':
+ resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==}
+ cpu: [loong64]
+ os: [linux]
+
'@rollup/rollup-linux-loong64-musl@4.60.2':
resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==}
cpu: [loong64]
os: [linux]
+ '@rollup/rollup-linux-loong64-musl@4.62.2':
+ resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==}
+ cpu: [loong64]
+ os: [linux]
+
'@rollup/rollup-linux-ppc64-gnu@4.60.2':
resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==}
cpu: [ppc64]
os: [linux]
+ '@rollup/rollup-linux-ppc64-gnu@4.62.2':
+ resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==}
+ cpu: [ppc64]
+ os: [linux]
+
'@rollup/rollup-linux-ppc64-musl@4.60.2':
resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==}
cpu: [ppc64]
os: [linux]
+ '@rollup/rollup-linux-ppc64-musl@4.62.2':
+ resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==}
+ cpu: [ppc64]
+ os: [linux]
+
'@rollup/rollup-linux-riscv64-gnu@4.60.2':
resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==}
cpu: [riscv64]
os: [linux]
+ '@rollup/rollup-linux-riscv64-gnu@4.62.2':
+ resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==}
+ cpu: [riscv64]
+ os: [linux]
+
'@rollup/rollup-linux-riscv64-musl@4.60.2':
resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==}
cpu: [riscv64]
os: [linux]
+ '@rollup/rollup-linux-riscv64-musl@4.62.2':
+ resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==}
+ cpu: [riscv64]
+ os: [linux]
+
'@rollup/rollup-linux-s390x-gnu@4.60.2':
resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==}
cpu: [s390x]
os: [linux]
+ '@rollup/rollup-linux-s390x-gnu@4.62.2':
+ resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==}
+ cpu: [s390x]
+ os: [linux]
+
'@rollup/rollup-linux-x64-gnu@4.60.2':
resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==}
cpu: [x64]
os: [linux]
+ '@rollup/rollup-linux-x64-gnu@4.62.2':
+ resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==}
+ cpu: [x64]
+ os: [linux]
+
'@rollup/rollup-linux-x64-musl@4.60.2':
resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==}
cpu: [x64]
os: [linux]
+ '@rollup/rollup-linux-x64-musl@4.62.2':
+ resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==}
+ cpu: [x64]
+ os: [linux]
+
'@rollup/rollup-openbsd-x64@4.60.2':
resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==}
cpu: [x64]
os: [openbsd]
+ '@rollup/rollup-openbsd-x64@4.62.2':
+ resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==}
+ cpu: [x64]
+ os: [openbsd]
+
'@rollup/rollup-openharmony-arm64@4.60.2':
resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==}
cpu: [arm64]
os: [openharmony]
+ '@rollup/rollup-openharmony-arm64@4.62.2':
+ resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==}
+ cpu: [arm64]
+ os: [openharmony]
+
'@rollup/rollup-win32-arm64-msvc@4.60.2':
resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==}
cpu: [arm64]
os: [win32]
+ '@rollup/rollup-win32-arm64-msvc@4.62.2':
+ resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==}
+ cpu: [arm64]
+ os: [win32]
+
'@rollup/rollup-win32-ia32-msvc@4.60.2':
resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==}
cpu: [ia32]
os: [win32]
+ '@rollup/rollup-win32-ia32-msvc@4.62.2':
+ resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==}
+ cpu: [ia32]
+ os: [win32]
+
'@rollup/rollup-win32-x64-gnu@4.60.2':
resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==}
cpu: [x64]
os: [win32]
+ '@rollup/rollup-win32-x64-gnu@4.62.2':
+ resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==}
+ cpu: [x64]
+ os: [win32]
+
'@rollup/rollup-win32-x64-msvc@4.60.2':
resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==}
cpu: [x64]
os: [win32]
+ '@rollup/rollup-win32-x64-msvc@4.62.2':
+ resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==}
+ cpu: [x64]
+ os: [win32]
+
'@shikijs/core@3.23.0':
resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==}
@@ -1643,6 +1768,9 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/estree@1.0.9':
+ resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -3828,6 +3956,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ nanoid@3.3.15:
+ resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
napi-build-utils@2.0.0:
resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
@@ -4212,8 +4345,8 @@ packages:
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss@8.5.13:
- resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==}
+ postcss@8.5.16:
+ resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==}
engines: {node: ^10 || ^12 || >=14}
postcss@8.5.6:
@@ -4551,6 +4684,11 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ rollup@4.62.2:
+ resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
router@2.2.0:
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
engines: {node: '>= 18'}
@@ -4935,6 +5073,10 @@ packages:
resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
engines: {node: '>=12.0.0'}
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
+
tinyrainbow@3.1.0:
resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
engines: {node: '>=14.0.0'}
@@ -5381,18 +5523,6 @@ packages:
utf-8-validate:
optional: true
- ws@8.20.0:
- resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
ws@8.21.0:
resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==}
engines: {node: '>=10.0.0'}
@@ -7173,78 +7303,153 @@ snapshots:
'@rollup/rollup-android-arm-eabi@4.60.2':
optional: true
+ '@rollup/rollup-android-arm-eabi@4.62.2':
+ optional: true
+
'@rollup/rollup-android-arm64@4.60.2':
optional: true
+ '@rollup/rollup-android-arm64@4.62.2':
+ optional: true
+
'@rollup/rollup-darwin-arm64@4.60.2':
optional: true
+ '@rollup/rollup-darwin-arm64@4.62.2':
+ optional: true
+
'@rollup/rollup-darwin-x64@4.60.2':
optional: true
+ '@rollup/rollup-darwin-x64@4.62.2':
+ optional: true
+
'@rollup/rollup-freebsd-arm64@4.60.2':
optional: true
+ '@rollup/rollup-freebsd-arm64@4.62.2':
+ optional: true
+
'@rollup/rollup-freebsd-x64@4.60.2':
optional: true
+ '@rollup/rollup-freebsd-x64@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-arm-gnueabihf@4.60.2':
optional: true
+ '@rollup/rollup-linux-arm-gnueabihf@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-arm-musleabihf@4.60.2':
optional: true
+ '@rollup/rollup-linux-arm-musleabihf@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-arm64-gnu@4.60.2':
optional: true
+ '@rollup/rollup-linux-arm64-gnu@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-arm64-musl@4.60.2':
optional: true
+ '@rollup/rollup-linux-arm64-musl@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-loong64-gnu@4.60.2':
optional: true
+ '@rollup/rollup-linux-loong64-gnu@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-loong64-musl@4.60.2':
optional: true
+ '@rollup/rollup-linux-loong64-musl@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-ppc64-gnu@4.60.2':
optional: true
+ '@rollup/rollup-linux-ppc64-gnu@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-ppc64-musl@4.60.2':
optional: true
+ '@rollup/rollup-linux-ppc64-musl@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-riscv64-gnu@4.60.2':
optional: true
+ '@rollup/rollup-linux-riscv64-gnu@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-riscv64-musl@4.60.2':
optional: true
+ '@rollup/rollup-linux-riscv64-musl@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-s390x-gnu@4.60.2':
optional: true
+ '@rollup/rollup-linux-s390x-gnu@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-x64-gnu@4.60.2':
optional: true
+ '@rollup/rollup-linux-x64-gnu@4.62.2':
+ optional: true
+
'@rollup/rollup-linux-x64-musl@4.60.2':
optional: true
+ '@rollup/rollup-linux-x64-musl@4.62.2':
+ optional: true
+
'@rollup/rollup-openbsd-x64@4.60.2':
optional: true
+ '@rollup/rollup-openbsd-x64@4.62.2':
+ optional: true
+
'@rollup/rollup-openharmony-arm64@4.60.2':
optional: true
+ '@rollup/rollup-openharmony-arm64@4.62.2':
+ optional: true
+
'@rollup/rollup-win32-arm64-msvc@4.60.2':
optional: true
+ '@rollup/rollup-win32-arm64-msvc@4.62.2':
+ optional: true
+
'@rollup/rollup-win32-ia32-msvc@4.60.2':
optional: true
+ '@rollup/rollup-win32-ia32-msvc@4.62.2':
+ optional: true
+
'@rollup/rollup-win32-x64-gnu@4.60.2':
optional: true
+ '@rollup/rollup-win32-x64-gnu@4.62.2':
+ optional: true
+
'@rollup/rollup-win32-x64-msvc@4.60.2':
optional: true
+ '@rollup/rollup-win32-x64-msvc@4.62.2':
+ optional: true
+
'@shikijs/core@3.23.0':
dependencies:
'@shikijs/types': 3.23.0
@@ -7556,6 +7761,8 @@ snapshots:
'@types/estree@1.0.8': {}
+ '@types/estree@1.0.9': {}
+
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
@@ -9332,7 +9539,7 @@ snapshots:
type-fest: 4.41.0
widest-line: 5.0.0
wrap-ansi: 9.0.2
- ws: 8.20.0
+ ws: 8.21.0
yoga-layout: 3.2.1
optionalDependencies:
'@types/react': 19.2.14
@@ -10310,6 +10517,8 @@ snapshots:
nanoid@3.3.12: {}
+ nanoid@3.3.15: {}
+
napi-build-utils@2.0.0:
optional: true
@@ -10711,9 +10920,9 @@ snapshots:
postcss-value-parser@4.2.0: {}
- postcss@8.5.13:
+ postcss@8.5.16:
dependencies:
- nanoid: 3.3.12
+ nanoid: 3.3.15
picocolors: 1.1.1
source-map-js: 1.2.1
@@ -10813,7 +11022,7 @@ snapshots:
chromium-bidi: 0.6.2(devtools-protocol@0.0.1312386)
debug: 4.4.3
devtools-protocol: 0.0.1312386
- ws: 8.20.0
+ ws: 8.21.0
transitivePeerDependencies:
- bare-abort-controller
- bare-buffer
@@ -11255,6 +11464,37 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.60.2
fsevents: 2.3.3
+ rollup@4.62.2:
+ dependencies:
+ '@types/estree': 1.0.9
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.62.2
+ '@rollup/rollup-android-arm64': 4.62.2
+ '@rollup/rollup-darwin-arm64': 4.62.2
+ '@rollup/rollup-darwin-x64': 4.62.2
+ '@rollup/rollup-freebsd-arm64': 4.62.2
+ '@rollup/rollup-freebsd-x64': 4.62.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.62.2
+ '@rollup/rollup-linux-arm-musleabihf': 4.62.2
+ '@rollup/rollup-linux-arm64-gnu': 4.62.2
+ '@rollup/rollup-linux-arm64-musl': 4.62.2
+ '@rollup/rollup-linux-loong64-gnu': 4.62.2
+ '@rollup/rollup-linux-loong64-musl': 4.62.2
+ '@rollup/rollup-linux-ppc64-gnu': 4.62.2
+ '@rollup/rollup-linux-ppc64-musl': 4.62.2
+ '@rollup/rollup-linux-riscv64-gnu': 4.62.2
+ '@rollup/rollup-linux-riscv64-musl': 4.62.2
+ '@rollup/rollup-linux-s390x-gnu': 4.62.2
+ '@rollup/rollup-linux-x64-gnu': 4.62.2
+ '@rollup/rollup-linux-x64-musl': 4.62.2
+ '@rollup/rollup-openbsd-x64': 4.62.2
+ '@rollup/rollup-openharmony-arm64': 4.62.2
+ '@rollup/rollup-win32-arm64-msvc': 4.62.2
+ '@rollup/rollup-win32-ia32-msvc': 4.62.2
+ '@rollup/rollup-win32-x64-gnu': 4.62.2
+ '@rollup/rollup-win32-x64-msvc': 4.62.2
+ fsevents: 2.3.3
+
router@2.2.0:
dependencies:
debug: 4.4.3
@@ -11857,6 +12097,11 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
+ tinyglobby@0.2.17:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
tinyrainbow@3.1.0: {}
to-data-view@1.1.0: {}
@@ -12171,9 +12416,9 @@ snapshots:
esbuild: 0.27.7
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
- postcss: 8.5.13
- rollup: 4.60.2
- tinyglobby: 0.2.16
+ postcss: 8.5.16
+ rollup: 4.62.2
+ tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 25.6.0
fsevents: 2.3.3
@@ -12308,8 +12553,6 @@ snapshots:
ws@8.18.3: {}
- ws@8.20.0: {}
-
ws@8.21.0: {}
xml-naming@0.1.0: {}
diff --git a/src/channel/diagnostics/simplex-status.ts b/src/channel/diagnostics/simplex-status.ts
index 38e9b71..b983343 100644
--- a/src/channel/diagnostics/simplex-status.ts
+++ b/src/channel/diagnostics/simplex-status.ts
@@ -9,6 +9,24 @@ import {
import type { ResolvedSimplexAccount } from "../../types/config.js";
import { resolveSimplexHealthState } from "../shared/simplex-common.js";
+/**
+ * WS endpoint security only applies to the external runtime. In native mode the
+ * core runs in-process (no network endpoint), so report no transport warnings.
+ */
+function resolveEndpointSecurity(account: ResolvedSimplexAccount) {
+ if (account.mode === "native") {
+ return {
+ valid: true,
+ redactedUrl: "",
+ warnings: [] as string[],
+ blockingWarnings: [] as string[],
+ };
+ }
+ return describeSimplexWsEndpointSecurity(account.wsUrl, {
+ allowUnsafeRemoteWs: account.config.connection?.allowUnsafeRemoteWs,
+ });
+}
+
export function buildSimplexStatus(): NonNullable<
ChannelPlugin(
+ local: (params: P) => Promise