* fix(mattermost): record pending history for non-allowlisted group senders
When `groupPolicy` is `"allowlist"`, messages from senders not in
`groupAllowFrom` were silently dropped before reaching
`recordPendingHistoryEntryIfEnabled()`. This meant the bot had no
context of what non-allowlisted users said, breaking use cases like
conversation summarization.
This change introduces a `senderBlockedByGroupAllowlist` flag so that
non-allowlisted messages continue through the history-recording code
path before returning without generating a response.
Changes:
1. Add `senderBlockedByGroupAllowlist` flag before access check
2. `GROUP_POLICY_NOT_ALLOWLISTED` sets flag instead of returning
3. Skip `commandGate` check for blocked senders
4. Call `recordPendingHistory()` then return before response processing
Fixesopenclaw/openclaw#57607
* test(mattermost): verify denied history over real transport
Co-authored-by: Jason Wang <jasonwang@barkingdog.ai>
---------
Co-authored-by: Jason Wang <jasonwang@barkingdog.ai>
* fix(msteams): honor group conversation allowlists
Fixes#95737. Preserve opaque Teams conversation identities, the documented group fallback, personal-DM isolation, and display-name spoof protection.
Based on the original contributor fix in #95764.
Co-authored-by: 周鹤0668001310 <zhou.he3@xydigit.com>
* test(msteams): isolate conversation allowlist regression proof
Co-authored-by: 周鹤0668001310 <zhou.he3@xydigit.com>
---------
Co-authored-by: 周鹤0668001310 <zhou.he3@xydigit.com>
Make the subprocess timeout opt-in so long-running setup steps (brew
install, service restart, sudo writes) keep their unbounded wait, and
apply a 15s SIGKILL-backed deadline only to the fast brew --prefix probe
so a signal-resistant hung shim cannot block dns setup.
Also fix the regression test on Linux CI: stub process.platform via
withMockedPlatform (the action does not consult os.platform()) and point
the mocked brew prefix at a real temp dir so un-mocked fs writes succeed
without sudo. Add focused coverage that non-probe subprocesses stay
unbounded.
(cherry picked from commit 469ae1db40)
Co-authored-by: thomas.szbay <thomas.szbay@example.com>
Sanitize both Nostr delivery paths with the shared assistant-visible text contract. Preserve ordinary replies and suppress internal-only messages before Markdown conversion.
Related: #90684
Co-authored-by: liyuanbin <li.yuanbin1@xydigit.com>
Qualify non-shared sandbox identities by resolved workspace while preserving shared runtime names. Existing non-shared runtimes reset once under the new identity.
Related: #51363
Co-authored-by: Tayoun <39609208+tayoun@users.noreply.github.com>
* fix(telegram): suppress message-tool-only reply fallbacks
Honor message-tool-only delivery when a non-silent Telegram reply is skipped in both ordinary group dispatch and native slash-command turns. Keep the existing visible fallback for genuinely empty native replies and cover both dispatch surfaces with regression tests.
Fixes#90091
* fix(telegram): preserve genuine delivery failure fallbacks
Suppress only non-silent skips owned by message-tool-only delivery. Preserve visible fallbacks when the same turn also encounters a real dispatch or final-delivery failure, with an explicit regression for the mixed failure path.
* fix(telegram): preserve native message-tool delivery errors
Track genuine native slash delivery failures so message-tool-only skip suppression never hides a failed response. Cover the exact mixed empty-skip and real-error path with a regression while preserving true-empty and intentionally cancelled fallbacks.
* test(telegram): preserve synchronous native delivery callbacks
* feat(agents): persist last-used session model as the agent default
* fix(agents): gate sticky model persistence on admin authority and make it best-effort
* fix(agents): keep sticky model helper internal
* fix(agents): satisfy sticky model lint rules
* style(agents): format sticky model gateway test