Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,26 @@

All notable changes to this project will be documented in this file.

## [1.8.0] - 2026-07-19

### Changed

- Raised the minimum supported OpenClaw version to `2026.7.1` and aligned package compatibility metadata with the current plugin SDK surfaces.
- Version floors now carry an explicit `-0` prerelease suffix (`>=2026.7.1-0`). npm's `latest` tag resolves to `2026.7.1-2`, which sorts below `2026.7.1` under semver, so a plain floor would have rejected the version a default `npm install openclaw` produces.
- Zod schemas are now built with OpenClaw's own zod instance from `openclaw/plugin-sdk/zod` instead of a plugin-owned `zod` dependency, and `zod` was dropped from runtime dependencies.
- Replaced the duplicated hand-rolled positive-integer parsers in the gateway methods and plugin CLI with a shared `readRequiredPositiveInteger` helper backed by the SDK's `readPositiveIntegerParam`.
- Added an optional `mentionPatterns` account policy (`mode`/`allowIn`/`denyIn`) so agent name patterns can be scoped to specific SimpleX groups, and passed SimpleX provider/conversation context into OpenClaw's mention-regex builder, which previously ignored per-conversation mention policy.
- Added optional `draftChunk` live-draft chunking (`minChars`/`maxChars`/`breakPreference`) using OpenClaw's canonical config shape. Live drafts can now trim to paragraph, newline, or sentence boundaries and cap their length; the final reply is never truncated. This is dual-read and additive: when `draftChunk` is unset, the existing `streaming.minChars`/`streaming.wordBoundary` behavior and defaults are unchanged. `streaming.throttleMs` and `streaming.nativeTransport` remain plugin-owned because the host chunking model has no equivalent.
- Poll duration is now validated as a positive integer through the shared SDK schema helper instead of an unbounded integer.

### Fixed

- Fixed SimpleX channel config schema construction against OpenClaw `2026.7.x`, which inlines zod's types into its own bundled declarations. A plugin-owned zod no longer shares declaration identity with the host, so `buildCatchallMultiAccountChannelSchema` and `buildChannelConfigSchema` rejected the account schema and collapsed the inferred config type, breaking account-scoped policy fields in the runtime doctor and account resolution.
- Fixed protocol id parsing so unsafe integers beyond `Number.MAX_SAFE_INTEGER` are rejected instead of being silently rounded to a different id.
- Fixed inbound events being marked as seen before dispatch, which permanently dropped a message if the process stopped between the two. Dedupe is now recorded after the inbound turn is durably registered, so an interrupted turn replays instead of disappearing.
- Fixed oversized inbound attachments being dropped together with their caption. The message is now delivered with an explicit notice that the attachment exceeded the account limit.
- Fixed inbound attachments that time out or complete without a usable path arriving as an ordinary message with no indication that a file was missing.

## [1.7.3] - 2026-06-07

### Added
Expand Down
180 changes: 180 additions & 0 deletions openclaw.plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,26 @@
},
"additionalProperties": false
},
"draftChunk": {
"type": "object",
"properties": {
"minChars": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"maxChars": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"breakPreference": {
"type": "string",
"enum": ["paragraph", "newline", "sentence"]
}
},
"additionalProperties": false
},
"messageTtlSeconds": {
"type": "integer",
"exclusiveMinimum": 0,
Expand Down Expand Up @@ -182,6 +202,36 @@
"type": "string"
}
},
"mentionPatterns": {
"type": "object",
"properties": {
"mode": {
"anyOf": [
{
"type": "string",
"const": "allow"
},
{
"type": "string",
"const": "deny"
}
]
},
"allowIn": {
"type": "array",
"items": {
"type": "string"
}
},
"denyIn": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"groups": {
"type": "object",
"properties": {},
Expand Down Expand Up @@ -399,6 +449,26 @@
},
"additionalProperties": false
},
"draftChunk": {
"type": "object",
"properties": {
"minChars": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"maxChars": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"breakPreference": {
"type": "string",
"enum": ["paragraph", "newline", "sentence"]
}
},
"additionalProperties": false
},
"messageTtlSeconds": {
"type": "integer",
"exclusiveMinimum": 0,
Expand Down Expand Up @@ -431,6 +501,36 @@
"type": "string"
}
},
"mentionPatterns": {
"type": "object",
"properties": {
"mode": {
"anyOf": [
{
"type": "string",
"const": "allow"
},
{
"type": "string",
"const": "deny"
}
]
},
"allowIn": {
"type": "array",
"items": {
"type": "string"
}
},
"denyIn": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"groups": {
"type": "object",
"properties": {},
Expand Down Expand Up @@ -963,6 +1063,86 @@
"help": "Allowed SimpleX senders for groups when groupPolicy is allowlist.",
"tags": ["security"]
},
"draftChunk": {
"label": "Live Draft Chunking",
"help": "Optional OpenClaw-standard live-draft chunking. When set, it overrides streaming.minChars and streaming.wordBoundary.",
"advanced": true
},
"accounts.*.draftChunk": {
"label": "Live Draft Chunking",
"help": "Optional OpenClaw-standard live-draft chunking. When set, it overrides streaming.minChars and streaming.wordBoundary.",
"advanced": true
},
"draftChunk.minChars": {
"label": "Draft Min Characters",
"help": "Minimum characters before the live draft updates.",
"advanced": true
},
"accounts.*.draftChunk.minChars": {
"label": "Draft Min Characters",
"help": "Minimum characters before the live draft updates.",
"advanced": true
},
"draftChunk.maxChars": {
"label": "Draft Max Characters",
"help": "Maximum characters shown in the live draft; the final reply is never truncated.",
"advanced": true
},
"accounts.*.draftChunk.maxChars": {
"label": "Draft Max Characters",
"help": "Maximum characters shown in the live draft; the final reply is never truncated.",
"advanced": true
},
"draftChunk.breakPreference": {
"label": "Draft Break Preference",
"help": "Where the live draft trims back to: paragraph, newline, or sentence.",
"advanced": true
},
"accounts.*.draftChunk.breakPreference": {
"label": "Draft Break Preference",
"help": "Where the live draft trims back to: paragraph, newline, or sentence.",
"advanced": true
},
"mentionPatterns": {
"label": "Mention Patterns",
"help": "Restrict where agent name patterns count as a mention. Use allowIn/denyIn with SimpleX group ids.",
"advanced": true
},
"accounts.*.mentionPatterns": {
"label": "Mention Patterns",
"help": "Restrict where agent name patterns count as a mention. Use allowIn/denyIn with SimpleX group ids.",
"advanced": true
},
"mentionPatterns.mode": {
"label": "Mention Pattern Mode",
"help": "\"allow\" limits pattern matching to allowIn conversations; \"deny\" disables it in denyIn conversations.",
"advanced": true
},
"accounts.*.mentionPatterns.mode": {
"label": "Mention Pattern Mode",
"help": "\"allow\" limits pattern matching to allowIn conversations; \"deny\" disables it in denyIn conversations.",
"advanced": true
},
"mentionPatterns.allowIn": {
"label": "Mention Patterns Allowed In",
"help": "SimpleX group ids where agent name patterns count as a mention.",
"advanced": true
},
"accounts.*.mentionPatterns.allowIn": {
"label": "Mention Patterns Allowed In",
"help": "SimpleX group ids where agent name patterns count as a mention.",
"advanced": true
},
"mentionPatterns.denyIn": {
"label": "Mention Patterns Denied In",
"help": "SimpleX group ids where agent name patterns must not count as a mention.",
"advanced": true
},
"accounts.*.mentionPatterns.denyIn": {
"label": "Mention Patterns Denied In",
"help": "SimpleX group ids where agent name patterns must not count as a mention.",
"advanced": true
},
"groups": {
"label": "Group Overrides",
"help": "Optional per-group overrides for mention and tool policy behavior.",
Expand Down
19 changes: 9 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dangoldbj/openclaw-simplex",
"version": "1.7.3",
"version": "1.8.0",
"description": "SimpleX channel plugin for OpenClaw using an external WebSocket runtime",
"homepage": "https://openclaw-simplex.mintlify.app/",
"repository": {
Expand Down Expand Up @@ -51,19 +51,18 @@
"dependencies": {
"@sinclair/typebox": "^0.34.49",
"qrcode": "^1.5.4",
"ws": "^8.21.0",
"zod": "^4.4.3"
"ws": "^8.21.0"
},
"peerDependencies": {
"openclaw": ">=2026.5.27"
"openclaw": ">=2026.7.1-0"
},
"devDependencies": {
"@biomejs/biome": "^2.4.13",
"@mintlify/cli": "^4.0.1146",
"@types/node": "^25.6.0",
"@types/qrcode": "^1.5.5",
"@types/ws": "^8.18.1",
"openclaw": "2026.5.27",
"openclaw": "2026.7.1",
"tsup": "^8.5.1",
"typescript": "^6.0.3",
"vitest": "^4.1.5"
Expand All @@ -73,12 +72,12 @@
"./dist/index.js"
],
"compat": {
"pluginApi": ">=2026.5.27",
"minGatewayVersion": "2026.5.27"
"pluginApi": ">=2026.7.1-0",
"minGatewayVersion": "2026.7.1-0"
},
"build": {
"openclawVersion": "2026.5.27",
"pluginSdkVersion": "2026.5.27"
"openclawVersion": "2026.7.1",
"pluginSdkVersion": "2026.7.1"
},
"channel": {
"id": "openclaw-simplex",
Expand Down Expand Up @@ -109,7 +108,7 @@
"install": {
"npmSpec": "@dangoldbj/openclaw-simplex",
"defaultChoice": "npm",
"minHostVersion": ">=2026.5.27"
"minHostVersion": ">=2026.7.1-0"
}
}
}
Loading
Loading