feat(channels): add neverReply config for group message suppression#42400
feat(channels): add neverReply config for group message suppression#42400cayde-6 wants to merge 15 commits intoopenclaw:mainfrom
Conversation
…ssion Add resolveNeverReply() helper with account > channel > defaults cascade. Add neverReply to config schema, types, Zod validation, help text, and labels. Export resolveNeverReply from all per-channel plugin SDK subpaths. Discussion: https://github.com/openclaw/openclaw/discussions/42396
Wire resolveNeverReply into group message handlers for Telegram, Discord, Slack, Signal, WhatsApp, and iMessage. Dropped messages are recorded as pending history entries so context is preserved for future replies.
Wire resolveNeverReply into group message handlers for Matrix, MS Teams, Mattermost, Google Chat, BlueBubbles, Zalo, and ZaloUser extensions.
Add 20 new tests covering config resolution (account/channel/defaults cascade), message drop, history recording with content verification, and DM passthrough for Telegram, Discord, Slack, Signal, WhatsApp, and iMessage.
Add neverReply to the group policy flow diagram, quick-start table, and a dedicated section explaining behavior, config examples, and relationship to requireMention.
Greptile SummaryThis PR adds a All issues flagged in previous review rounds (history not recorded in 6 channels, Line and IRC missing implementations, MSTeams/WhatsApp Confidence Score: 5/5
Last reviewed commit: fe0af6d |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1f77feb06a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- Pass accountId to resolveNeverReply in Discord, MSTeams, and WhatsApp so account-level overrides work correctly - Add recordPendingHistoryEntryIfEnabled calls in BlueBubbles, Mattermost, GoogleChat, Matrix, Zalo, and ZaloUser before early return - Add neverReply implementation to Line monitor (was config-only stub) - Export history helpers from googlechat, matrix, and zalo plugin SDK
|
All review findings from Greptile and Codex have been addressed in commit 54a04e1: 1. History recording added to 6 extension channels (BlueBubbles, Mattermost, GoogleChat, Matrix, Zalo, ZaloUser)
2. Line monitor implementation added
3.
All 14 channels now consistently: pass Full test suite passes: 873 files, 7113 tests, 0 failures. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 54a04e1365
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@greptile review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 54a04e1365
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…d add IRC implementation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ed8b90a551
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f150a378c9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@greptile-apps review All review comments have been addressed:
|
|
@chatgpt-codex-connector review All review comments have been addressed — see replies on each thread. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f150a378c9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…e event time in GoogleChat
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a5404302f3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@steipete @joshp123 This PR is ready for review. What it does: Adds Status:
Happy to address any feedback! |
|
@greptile-apps review IRC neverReply history recording was added in a540430 — |
|
@greptileai review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 87be133f2d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… and empty-body guard (MSTeams)
…fore audio preflight, fix key mismatches
|
@greptileai review All issues from previous review addressed in 88800bd:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 88800bd205
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@greptileai review Line historyKey now uses |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fe0af6d129
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Great work on this – the 14-channel coverage is impressive, and the platform-specific edge cases you found (IRC historyLimit asymmetry, Matrix pending-history-clearing, Mattermost session key mismatches) are the kind of thing that only surfaces through thorough cross-platform testing. We explored the same problem from a different angle. We noticed that the On top of the silence, we added an L0/L1 memory pipeline: raw message logging (no LLM cost) + periodic Haiku summaries. This covers the "context over time" problem that One architectural difference worth noting: Your platform-specific fixes are genuinely valuable though – the hook-broadcast approach solves the architecture, but it doesn't automatically surface IRC or Mattermost edge cases. Would be great to discuss whether a combined path makes sense: hook-broadcast for the infrastructure, your channel-level fixes where needed, and L0/L1 for long-term context. |
Note
AI-assisted PR (Claude Opus 4.6). Fully tested via automated suite (873 files, 7113 tests, 0 failures). Author understands all changes and has resolved all bot review conversations.
Summary
requireMention: true, NO_REPLY system prompt, log scraping) are either too restrictive, waste tokens, or are fragile.neverReplyboolean config option across all 14 channels (7 built-in + 7 extensions). When enabled, group messages pass access control, get recorded into pending history, but no LLM call or reply is dispatched. DMs are unaffected.requireMention,groupPolicy, or existing message flow.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
User-visible / Behavior Changes
channels.<channel>.neverReply: true(andchannels.defaults.neverReply)Quick start
Security Impact (required)
NoNoNoNoNoNo new attack surface.
neverReplyonly suppresses outbound replies; it does not expand which groups or senders are accepted (that's controlled bygroupPolicyand allowlists as before).Repro + Verification
Environment
Steps
channels.telegram.neverReply: truein configExpected
Actual
Evidence
Human Verification (required)
Review Conversations
All 23 bot review threads (Greptile + Codex) addressed and resolved across 4 review rounds.
Compatibility / Migration
Yes—neverReplydefaults toundefined/false, preserving existing behaviorYes— new optionalneverReplyfield in channel config schemasNoFailure Recovery (if this breaks)
neverReplyfrom config; bot reverts to normal reply behavior immediatelyneverReplyis setRisks and Mitigations
neverReplyat defaults level and forgets, causing all channels to go silent in groupsneverReplydefaults tofalse; help text inschema.help.tsexplains the option; config showsneverReply: trueexplicitly when set