@clawling/clawchat-plugin-openclaw 2026.7.27-1 → 2026.7.28-1

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.
@@ -86,7 +86,15 @@ export function createGroupMessageCoalescer(params) {
86
86
  return;
87
87
  }
88
88
  const idleTimer = setTimeout(() => flush(chatId), idleMs);
89
- const maxWaitTimer = setTimeout(() => flush(chatId), params.maxWaitMs);
89
+ // maxWait bounds how long a chat that keeps talking can defer its batch;
90
+ // it is NOT a second, shorter deadline competing with the owner's chosen
91
+ // delay. Arming it from params.maxWaitMs alone silently truncated any
92
+ // longer idleMsOverride — a group set to batch_delay_seconds=300 still
93
+ // got a reply at 30s. Take whichever is larger so the ceiling can never
94
+ // undercut the delay, while the default shape (idle 10s / maxWait 30s)
95
+ // keeps its existing 30s cutoff.
96
+ const maxWaitMs = Math.max(params.maxWaitMs, idleMs);
97
+ const maxWaitTimer = setTimeout(() => flush(chatId), maxWaitMs);
90
98
  pending.set(chatId, { turns: [turn], idleTimer, maxWaitTimer });
91
99
  },
92
100
  flushNow(chatId) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawling/clawchat-plugin-openclaw",
3
- "version": "2026.7.27-1",
3
+ "version": "2026.7.28-1",
4
4
  "description": "OpenClaw ClawChat channel plugin",
5
5
  "license": "MIT",
6
6
  "author": "CLAWLING PTE. LTD.",
@@ -161,7 +161,15 @@ export function createGroupMessageCoalescer<T extends CoalescableGroupTurn>(para
161
161
  return;
162
162
  }
163
163
  const idleTimer = setTimeout(() => flush(chatId), idleMs);
164
- const maxWaitTimer = setTimeout(() => flush(chatId), params.maxWaitMs);
164
+ // maxWait bounds how long a chat that keeps talking can defer its batch;
165
+ // it is NOT a second, shorter deadline competing with the owner's chosen
166
+ // delay. Arming it from params.maxWaitMs alone silently truncated any
167
+ // longer idleMsOverride — a group set to batch_delay_seconds=300 still
168
+ // got a reply at 30s. Take whichever is larger so the ceiling can never
169
+ // undercut the delay, while the default shape (idle 10s / maxWait 30s)
170
+ // keeps its existing 30s cutoff.
171
+ const maxWaitMs = Math.max(params.maxWaitMs, idleMs);
172
+ const maxWaitTimer = setTimeout(() => flush(chatId), maxWaitMs);
165
173
  pending.set(chatId, { turns: [turn], idleTimer, maxWaitTimer });
166
174
  },
167
175
  flushNow(chatId: string): void {