chore(channels): remove bluebubbles hangover

This commit is contained in:
Vincent Koc
2026-05-10 13:48:33 +08:00
parent 681b56fc0a
commit a31b75f543
7 changed files with 11 additions and 16 deletions

View File

@@ -16,7 +16,6 @@ enum GatewayAgentChannel: String, Codable, CaseIterable {
case signal
case imessage
case msteams
case bluebubbles
case webchat
init(raw: String?) {

View File

@@ -12,7 +12,7 @@ struct GatewayAgentChannelTests {
#expect(GatewayAgentChannel.whatsapp.shouldDeliver(true) == true)
#expect(GatewayAgentChannel.telegram.shouldDeliver(true) == true)
#expect(GatewayAgentChannel.googlechat.shouldDeliver(true) == true)
#expect(GatewayAgentChannel.bluebubbles.shouldDeliver(true) == true)
#expect(GatewayAgentChannel.imessage.shouldDeliver(true) == true)
#expect(GatewayAgentChannel.last.shouldDeliver(false) == false)
}
@@ -21,7 +21,7 @@ struct GatewayAgentChannelTests {
#expect(GatewayAgentChannel(raw: " ") == .last)
#expect(GatewayAgentChannel(raw: "WEBCHAT") == .webchat)
#expect(GatewayAgentChannel(raw: "googlechat") == .googlechat)
#expect(GatewayAgentChannel(raw: "BLUEBUBBLES") == .bluebubbles)
#expect(GatewayAgentChannel(raw: "IMESSAGE") == .imessage)
#expect(GatewayAgentChannel(raw: "unknown") == .last)
}
}

View File

@@ -27,7 +27,6 @@ enum ChatMarkdownPreprocessor {
"Matrix",
"Zalo",
"Zalo Personal",
"BlueBubbles",
]
private static let markdownImagePattern = #"!\[([^\]]*)\]\(([^)]+)\)"#

View File

@@ -125,7 +125,7 @@ Access groups are available in shared message-channel authorization paths, inclu
- channel-specific per-room sender allowlists that use the same sender matching rules
- command authorization paths that reuse message-channel sender allowlists
Channel support depends on whether that channel is wired through the shared OpenClaw sender-authorization helpers. Current bundled support includes BlueBubbles, Discord, Feishu, Google Chat, iMessage, LINE, Mattermost, Microsoft Teams, Nextcloud Talk, Nostr, QQBot, Signal, WhatsApp, Zalo, and Zalo Personal. Static `message.senders` groups are designed to be channel-agnostic, so new message channels should support them by using the shared plugin SDK helpers instead of custom allowlist expansion.
Channel support depends on whether that channel is wired through the shared OpenClaw sender-authorization helpers. Current bundled support includes Discord, Feishu, Google Chat, iMessage, LINE, Mattermost, Microsoft Teams, Nextcloud Talk, Nostr, QQBot, Signal, WhatsApp, Zalo, and Zalo Personal. Static `message.senders` groups are designed to be channel-agnostic, so new message channels should support them by using the shared plugin SDK helpers instead of custom allowlist expansion.
## Plugin diagnostics

View File

@@ -9,12 +9,10 @@ import { resolvePreferredOpenClawTmpDir } from "openclaw/plugin-sdk/temp-path";
// anything that landed in chat.db while the bridge was disconnected.
// Without a recovery pass, those messages are permanently lost.
//
// This module mirrors the design of the retired BlueBubbles catchup
// (`extensions/bluebubbles/src/catchup.ts` in commit 07bf572f35^), adapted
// for the imsg JSON-RPC `messages.history` fetch path. The replay loop is
// pluggable via the `dispatch` callback so the same `evaluateIMessageInbound`
// + `dispatchInboundMessage` path used by the live `imsg watch` loop runs
// unchanged on replayed rows.
// This module keeps catchup on the same inbound evaluation and dispatch path
// as live `imsg watch` notifications. The replay loop is pluggable via the
// `dispatch` callback so `evaluateIMessageInbound` + `dispatchInboundMessage`
// runs unchanged on replayed rows.
//
// See https://github.com/openclaw/openclaw/issues/78649 for design discussion.

View File

@@ -869,9 +869,8 @@ export async function monitorIMessageProvider(opts: MonitorIMessageOpts = {}): P
// Catchup bypasses the inbound debouncer so each row is awaited
// serially and dispatch failure can hold the cursor. Split-sends
// from before the gateway gap therefore arrive as separate turns
// rather than coalesced — same behavior the retired BlueBubbles
// catchup had. Live notifications continue to flow through the
// debouncer.
// rather than coalesced. Live notifications continue to flow through
// the debouncer.
dispatchPayload: (message) => handleMessageNow(message),
runtime,
});

View File

@@ -4072,7 +4072,7 @@ rules:
detector-bucket: precise
source-run: 2026-04-17T07-37-10Z
source-rule-id: unresolved-discovery-routing-from-txt-hints
- id: ghsa-rwj8-p9vq-25gv.bluebubbles-media-read-without-root-allowlist
- id: ghsa-rwj8-p9vq-25gv.local-media-read-without-root-allowlist
languages:
- typescript
- javascript
@@ -4086,7 +4086,7 @@ rules:
advisory-url: https://github.com/openclaw/openclaw/security/advisories/GHSA-RWJ8-P9VQ-25GV
detector-bucket: precise
source-run: 2026-04-17T07-37-10Z
source-rule-id: bluebubbles-media-read-without-root-allowlist
source-rule-id: local-media-read-without-root-allowlist
patterns:
- pattern: |
const $LOCAL = resolveLocalMediaPath(...);