Skip to content

fix(cli): preserve Discord voice outbound helper#85529

Merged
giodl73-repo merged 2 commits into
openclaw:mainfrom
giodl73-repo:fix-84952-discord-cron-tts
May 28, 2026
Merged

fix(cli): preserve Discord voice outbound helper#85529
giodl73-repo merged 2 commits into
openclaw:mainfrom
giodl73-repo:fix-84952-discord-cron-tts

Conversation

@giodl73-repo

@giodl73-repo giodl73-repo commented May 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Verification

  • node scripts/run-vitest.mjs src/cli/deps.test.ts src/cli/outbound-send-mapping.test.ts extensions/discord/src/outbound-adapter.test.ts src/cron/isolated-agent/delivery-dispatch.double-announce.test.ts --reporter=dot -> 4 files, 109 tests passed
  • ./node_modules/.bin/oxfmt --check src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts
  • ./node_modules/.bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts
  • git diff --check FETCH_HEAD...HEAD
  • git diff --check

Signed head: c122749f86a53c1b720167a443b976b59991f403.

Behavior addressed: Discord cron announces with messages.tts.auto="always" could fail before the Discord voice-message helper ran because the CLI outbound deps proxy manufactured a fake channel adapter for the discordVoice helper lookup.

Review feedback addressed: ClawSweeper's maintainer option suggested replacing the helper-specific deny list with a generic known-channel-id guard. This head now uses the channel registry normalizer before resolving lazy outbound factories, so helper-like non-channel keys stay unresolved without embedding Discord-specific helper literals in core CLI routing.

Real environment tested: WSL2 Ubuntu source checkout on Node v22.22.3 with focused CLI, Discord outbound adapter, and cron double-announce regression tests. Crabbox/live Discord delivery was not rerun for this refresh.

Exact steps or command run after this patch: node scripts/run-vitest.mjs src/cli/deps.test.ts src/cli/outbound-send-mapping.test.ts extensions/discord/src/outbound-adapter.test.ts src/cron/isolated-agent/delivery-dispatch.double-announce.test.ts --reporter=dot

Evidence after fix: The CLI deps regression asserts createDefaultDeps().discordVoice and createDefaultDeps().sendDiscordVoice remain undefined instead of becoming unavailable channel adapters, and the outbound mapping regression asserts lazy channel factories are not called for those helper keys while explicit helpers are still preserved. The implementation achieves that through known channel ID resolution rather than a Discord-specific deny list.

Observed result after fix: Focused regression suite passed: 4 files, 109 tests passed. Formatting, lint, diff checks, and the branch has an SSH-signed head commit.

What was not tested: A fresh live Discord cron announce with generated TTS audio was not run in this refresh; the existing live Discord proof remains in #85529 (comment).

Fixes #84952

@openclaw-barnacle openclaw-barnacle Bot added cli CLI command changes size: XS maintainer Maintainer-authored PR labels May 22, 2026
@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed May 28, 2026, 7:18 PM ET / 23:18 UTC.

Summary
The PR gates CLI lazy outbound dependency factories on normalized channel IDs, preserves explicit Discord voice helper deps, and adds focused regression tests for the helper lookup path.

PR surface: Source +15, Tests +31. Total +46 across 4 files.

Reproducibility: yes. The related bug has concrete Discord cron TTS repro steps and the PR discussion includes live Discord proof; source inspection also shows current main can synthesize a fake discordVoice helper through the lazy CLI proxy.

Review metrics: 1 noteworthy metric.

  • Lazy outbound factory gates: 2 changed. Both createDefaultDeps and createOutboundSendDepsFromCliSource now decide which channel keys can manufacture lazy senders, so the normalization contract matters before merge.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🐚 platinum hermit
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Use a registry-aware normalizer for both lazy factory gates.
  • [P2] Add a focused regression proving a registered plugin channel ID still reaches the CLI outbound factory.

Mantis proof suggestion
A real Discord cron TTS delivery proof would materially help after the registry-aware repair because the affected behavior is transport-visible message delivery. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

visual task: verify Discord cron announce with messages.tts.auto="always" posts a voice attachment and does not hit the discordVoice unavailable error.

Risk before merge

  • [P1] As written, merging can make registered plugin channel deliveries lose the lazy CLI send helper because the guard accepts bundled chat IDs but not active plugin registry IDs.
  • [P1] The PR carries a protected maintainer label and changes shared outbound message-delivery routing, so it needs human landing review after the narrow repair.

Maintainer options:

  1. Use registry-aware channel normalization (recommended)
    Update both lazy factory gates to accept registered channel plugin IDs and aliases while continuing to leave helper keys such as discordVoice unresolved unless explicitly provided.
  2. Accept a bundled-only CLI gate
    Maintainers could intentionally limit this helper to bundled chat channels, but that should be an explicit compatibility decision because plugin channel sends may stop using the lazy helper path.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Update the lazy outbound factory guard in src/cli/deps.ts and src/cli/outbound-send-mapping.ts to use registered-channel-aware normalization rather than chat-only normalization, preserve the Discord voice helper behavior, and add a focused registered plugin channel regression for factory resolution.

Next step before merge

  • [P2] A narrow automated repair can replace the chat-only guard with a registry-aware channel check and add the missing plugin-channel regression before maintainer landing review.

Security
Cleared: The diff does not change dependency sources, workflows, permissions, secrets handling, lockfiles, or package execution paths.

Review findings

  • [P1] Keep registered plugin channels in the factory gate — src/cli/deps.ts:108-110
Review details

Best possible solution:

Keep the generic helper-key guard, but make it registry-aware for bundled and registered plugin channels, then land with the Discord helper and plugin-channel regressions green.

Do we have a high-confidence way to reproduce the issue?

Yes. The related bug has concrete Discord cron TTS repro steps and the PR discussion includes live Discord proof; source inspection also shows current main can synthesize a fake discordVoice helper through the lazy CLI proxy.

Is this the best way to solve the issue?

No. The Discord helper direction is right, but the current implementation should use a registry-aware known-channel check so it does not drop non-bundled registered plugin channel sends.

Full review comments:

  • [P1] Keep registered plugin channels in the factory gate — src/cli/deps.ts:108-110
    This guard uses normalizeChannelId, which only accepts bundled chat-channel IDs. Current main has a separate normalizeAnyChannelId path for registered channel plugins, and loadChannelOutboundAdapter can deliver through active registry entries such as the demo-loader contract case. With this change, a registered plugin channel key stays unresolved by the CLI lazy factory, so outbound delivery for installed channel plugins can lose its send helper. Please gate on the registry-aware channel normalizer and add a regression for a registered non-bundled channel.
    Confidence: 0.88

Overall correctness: patch is incorrect
Overall confidence: 0.86

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 361753908e19.

Label changes

Label changes:

  • add merge-risk: 🚨 compatibility: Existing installed or registered channel plugin setups may rely on lazy CLI send helpers that the new chat-only guard would no longer expose.
  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🐚 platinum hermit and patch quality is 🦐 gold shrimp.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (live_output): The discussion includes redacted live Discord output for the cron TTS path plus current focused regression results; private identifiers were redacted.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: ⏳ waiting on author.

Label justifications:

  • P2: This is a normal-priority Discord cron delivery bugfix with a bounded shared outbound-routing concern before merge.
  • merge-risk: 🚨 message-delivery: The diff changes shared lazy sender selection and can prevent registered plugin channel outbound messages from resolving a send helper.
  • merge-risk: 🚨 compatibility: Existing installed or registered channel plugin setups may rely on lazy CLI send helpers that the new chat-only guard would no longer expose.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🐚 platinum hermit and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (live_output): The discussion includes redacted live Discord output for the cron TTS path plus current focused regression results; private identifiers were redacted.
  • proof: sufficient: Contributor real behavior proof is sufficient. The discussion includes redacted live Discord output for the cron TTS path plus current focused regression results; private identifiers were redacted.
Evidence reviewed

PR surface:

Source +15, Tests +31. Total +46 across 4 files.

View PR surface stats
Area Files Added Removed Net
Source 2 17 2 +15
Tests 2 32 1 +31
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 4 49 3 +46

Acceptance criteria:

  • [P1] node scripts/run-vitest.mjs src/cli/deps.test.ts src/cli/outbound-send-mapping.test.ts src/channels/plugins/contracts/plugins-core.loader.contract.test.ts extensions/discord/src/outbound-adapter.test.ts src/cron/isolated-agent/delivery-dispatch.double-announce.test.ts --reporter=dot.
  • [P1] ./node_modules/.bin/oxfmt --check src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts.
  • [P1] ./node_modules/.bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts.
  • [P1] git diff --check.

What I checked:

  • Repository policy applied: Read the full root AGENTS.md and scoped channel/outbound/extension guides; the shared channel guidance affected this review because the diff changes a cross-channel outbound lazy-loading path. (AGENTS.md:18, 361753908e19)
  • PR changes the CLI proxy gate: The proposed head gates createDefaultDeps lazy sender creation through resolveKnownChannelId before resolving a sender. (src/cli/deps.ts:108, c3048fd88afe)
  • PR changes outbound factory mapping: The proposed head also gates CLI_OUTBOUND_SEND_FACTORY through resolveKnownChannelId in createOutboundSendDepsFromCliSource. (src/cli/outbound-send-mapping.ts:92, c3048fd88afe)
  • Current normalizer distinction: On current main, normalizeChannelId only delegates to normalizeChatChannelId, while normalizeAnyChannelId is the registered-channel normalizer for bundled or external channel plugins. (src/channels/registry.ts:20, 361753908e19)
  • Registered plugin outbound contract: The current loader resolves outbound adapters from the active plugin channel registry, and the contract test covers a registered demo-loader outbound adapter. (src/channels/plugins/registry-loader.ts:16, 361753908e19)
  • Discord helper root path: Discord media delivery intentionally resolves a discordVoice helper before falling back to the Discord voice runtime, so preventing fake helper synthesis is the right bug boundary. (extensions/discord/src/outbound-adapter.ts:232, 361753908e19)

Likely related people:

  • steipete: Current-main blame on the relevant CLI proxy and Discord outbound adapter lines points to Peter Steinberger in the grafted snapshot; the shallow history limits deeper provenance. (role: recent area contributor; confidence: medium; commits: 4dbe2a3d2bcb; files: src/cli/deps.ts, src/cli/outbound-send-mapping.ts, extensions/discord/src/outbound-adapter.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels May 22, 2026
@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Mossy Test Hopper

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: purrs at green checks.
Image traits: location branch lighthouse; accessory CI status badge; palette violet, aqua, and starlight; mood determined; pose holding its accessory up for inspection; shell smooth pearl shell; lighting subtle sparkle highlights; background smooth stones and checkmarks.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Mossy Test Hopper in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from 28fa68f to d8fbe9b Compare May 23, 2026 15:14
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Current-head refresh/proof:

  • Rebases giodl73-repo:fix-84952-discord-cron-tts onto current origin/main; new head d8fbe9b450.
  • Local focused proof in the WSL checkout passed: node scripts/run-vitest.mjs src/cli/deps.test.ts src/cli/outbound-send-mapping.test.ts --reporter=verbose.
  • git diff --check origin/main...HEAD passed.

The previous red check-lint run failed before checkout with fatal: could not read Username for 'https://github.com', so this fresh head should get a real CI attempt.

@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Live Discord proof for the requested messages.tts.auto="always" path:

  • branch: fix-84952-discord-cron-tts at bda7d03f9dc
  • command: node --import tsx .crabbox/proof/discord-cron-tts-voice-proof.ts
  • environment: Windows checkout, Node v24.14.0, local ffmpeg/ffprobe, live Discord QA bot/channel credentials loaded from local env (not committed)
  • path exercised: cron dispatchCronDelivery -> maybeApplyTtsToPayload with ttsAuto: "always" -> generated proof WAV from in-process proof-tts provider -> Discord outbound audioAsVoice media path
  • CLI proxy assertion: discordVoice and sendDiscordVoice remained unresolved; lazy factory was not allowed to synthesize those helper keys, so the Discord runtime voice helper handled the delivery
  • result: Discord delivery succeeded, produced one bot-authored attachment message, and the proof script deleted the proof message afterward

Redacted proof output:

{
  "proof": "discord-cron-tts-auto-always-runtime-voice-helper",
  "branch": "fix-84952-discord-cron-tts",
  "botId": "<redacted>",
  "channelId": "<redacted>",
  "guildId": "<redacted>",
  "cliProxy": {
    "discordVoiceSynthesized": false,
    "sendDiscordVoiceSynthesized": false,
    "factoryRequests": ["discord", "discord"]
  },
  "tts": {
    "auto": "always",
    "provider": "proof-tts",
    "generated": "wav-buffer"
  },
  "delivery": {
    "delivered": true,
    "deliveryAttempted": true,
    "messageId": "<redacted>",
    "flags": 4,
    "attachmentCount": 1,
    "cleanup": "deleted-voice-proof-message"
  }
}

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 24, 2026
@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from bda7d03 to 99d318f Compare May 24, 2026 23:02

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Current-head refresh for #85529:

  • Rebases giodl73-repo:fix-84952-discord-cron-tts onto current upstream main; new head 99d318f46fa.
  • Resolved the rebase conflict only in CHANGELOG.md by keeping both the current-main Telegram entry and this Discord/cron fix entry.
  • Focused WSL validation passed:
    • node scripts/run-vitest.mjs src/cli/deps.test.ts src/cli/outbound-send-mapping.test.ts extensions/discord/src/outbound-adapter.test.ts src/cron/isolated-agent/delivery-dispatch.double-announce.test.ts -> 4 files, 106 tests passed
    • pnpm exec oxfmt --check src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts
    • pnpm exec oxlint src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts
    • git diff --check FETCH_HEAD...HEAD

No live Discord rerun was performed in this refresh; the existing live Discord proof remains in #85529 (comment).

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels May 24, 2026
@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from 99d318f to 29c3fc3 Compare May 25, 2026 00:36
@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: L and removed size: XS labels May 25, 2026
@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from 29c3fc3 to c11501c Compare May 25, 2026 00:38
@openclaw-barnacle openclaw-barnacle Bot removed the agents Agent runtime and tooling label May 25, 2026
@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from c122749 to 087cbf0 Compare May 26, 2026 04:45
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Refreshed #85529 onto current upstream \main; new signed head is \

@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from 087cbf0 to 0e47871 Compare May 26, 2026 05:23
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Refreshed #85529 onto current upstream \main\; new signed head is \

@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from 0e47871 to 38bcc0f Compare May 26, 2026 17:39
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Refreshed #85529 onto current upstream \main\; new signed head is \38bcc0f49d6e097295bccd5218f4b423dba2bb39\.

Focused WSL validation after the refresh passed:

  • \
    ode scripts/run-vitest.mjs src/cli/deps.test.ts src/cli/outbound-send-mapping.test.ts extensions/discord/src/outbound-adapter.test.ts src/cron/isolated-agent/delivery-dispatch.double-announce.test.ts --reporter=dot\ -> 4 files, 109 tests passed
  • \./node_modules/.bin/oxfmt --check src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts\
  • \./node_modules/.bin/oxlint --tsconfig config/tsconfig/oxlint.core.json src/cli/deps.ts src/cli/deps.test.ts src/cli/outbound-send-mapping.ts src/cli/outbound-send-mapping.test.ts\
  • \git diff --check origin/main...HEAD\
  • \git diff --check\

Existing Discord outbound helper proof remains in the PR body. No merge performed.

@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from 38bcc0f to c3048fd Compare May 28, 2026 23:09
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 28, 2026
@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch 3 times, most recently from 1f7b282 to 9a64fef Compare May 28, 2026 23:27
@giodl73-repo giodl73-repo force-pushed the fix-84952-discord-cron-tts branch from 9a64fef to e5f5e3d Compare May 28, 2026 23:28
@giodl73-repo giodl73-repo merged commit 82cb02a into openclaw:main May 28, 2026
34 checks passed
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Merged via squash.

Thanks @giodl73-repo!

@giodl73-repo giodl73-repo deleted the fix-84952-discord-cron-tts branch May 28, 2026 23:29
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 29, 2026
Merged via squash.

Prepared head SHA: e5f5e3d
Co-authored-by: giodl73-repo <giodl73-repo@users.noreply.github.com>
Co-authored-by: giodl73-repo <235387111+giodl73-repo@users.noreply.github.com>
Reviewed-by: @giodl73-repo
steipete pushed a commit that referenced this pull request May 29, 2026
Merged via squash.

Prepared head SHA: e5f5e3d
Co-authored-by: giodl73-repo <giodl73-repo@users.noreply.github.com>
Co-authored-by: giodl73-repo <235387111+giodl73-repo@users.noreply.github.com>
Reviewed-by: @giodl73-repo
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 31, 2026
…026.5.28) (#759)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.5.27` → `2026.5.28` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.5.28`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#2026528)

[Compare Source](openclaw/openclaw@v2026.5.27...v2026.5.28)

##### Highlights

- Agent and Codex runtime recovery is steadier: subagents keep cwd/workspace separation, hook context stays prompt-local, session locks release on timeout abort while live OpenClaw locks survive cleanup, stale restart continuations are avoided, and Codex app-server/helper failures no longer tear down shared runtime state. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;87409](openclaw/openclaw#87409), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;88129](openclaw/openclaw#88129))
- Channel delivery and session identity got safer across outbound plugin hooks, Matrix room ids, iMessage reactions/approvals, Slack final replies, Discord recovered tool warnings, runtime-config message actions, WhatsApp profile auth roots, Telegram polling, and Microsoft Teams service URL trust checks. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;87160](openclaw/openclaw#87160))
- Mobile and chat surfaces got a broader refresh: the iOS Pro UI, hosted push relay default, realtime Talk tab playback, Gateway chat transport, onboarding, Talk permissions, WebChat reconnect delivery, and session picker behavior now preserve more state across reconnects and empty searches. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;87531](openclaw/openclaw#87531), [#&#8203;87682](openclaw/openclaw#87682), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;ngutman](https://github.com/ngutman) and [@&#8203;BunsDev](https://github.com/BunsDev).
- Browser, channel, and automation inputs are stricter: Browser tool timeouts, viewport/tab indices, Gateway ports, cron retry handling, Discord component ids, schema array refs, Telegram callback pages, and channel progress callbacks now reject malformed values earlier and preserve the intended delivery context. ([#&#8203;82887](openclaw/openclaw#82887))
- Provider, media, and document coverage expands with Claude Opus 4.8, Fal Krea image schemas, NVIDIA featured models, MiniMax streaming music responses, encrypted PDF extraction, voice model catalogs, GitHub Copilot agent runtime support, and a Codex Supervisor plugin path for delegated Codex workflows. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87751](openclaw/openclaw#87751), [#&#8203;87794](openclaw/openclaw#87794))
- CLI, auth, doctor, and provider paths fail faster and recover more clearly: malformed numeric/version options are rejected, workspace dotenv provider credentials are ignored, heartbeat defaults, OAuth/token lifetimes, and local service startup requests are bounded, agent auth health labels are clearer, legacy `api_key` auth profiles migrate to canonical form, and restart guidance is actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924)) Thanks [@&#8203;vincentkoc](https://github.com/vincentkoc) and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Plugin and Gateway hot paths do less repeated work while preserving cache correctness for install records, config JSON parsing, tool search catalogs, session stores, manifest model rows, auto-enabled plugin config, browser tokens, viewer assets, and release-split external plugin packages. ([#&#8203;86699](openclaw/openclaw#86699))
- Release, QA, and E2E validation now bound more log, artifact, harness, and cross-OS waits so failing lanes produce proof instead of hanging or false-greening.

##### Changes

- Status: show active subagent details in status output.
- Diffs: split the default language pack and expand default Diffs language coverage while keeping the host floor aligned. ([#&#8203;87370](openclaw/openclaw#87370), [#&#8203;87372](openclaw/openclaw#87372)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa).
- ClawHub: add plugin display names plus skill verification and trust surfaces. ([#&#8203;87354](openclaw/openclaw#87354), [#&#8203;86699](openclaw/openclaw#86699)) Thanks [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow) and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- iOS: refresh the dev app with Pro Command, Chat, Agents, Settings, hosted push relay defaults, and realtime Talk playback wired to gateway sessions, diagnostics, chat, and realtime Talk. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin) and [@&#8203;ngutman](https://github.com/ngutman).
- Docs: clarify Codex computer-use setup, paste-token stdin auth setup, macOS gateway sleep troubleshooting, native Codex hook relay recovery, container model auth, install deployment cards, device-token admin gating, CLI setup flow compatibility, Notte cloud browser CDP setup, and backport targets. ([#&#8203;87313](openclaw/openclaw#87313), [#&#8203;63050](openclaw/openclaw#63050), [#&#8203;87685](openclaw/openclaw#87685)) Thanks [@&#8203;bdjben](https://github.com/bdjben), [@&#8203;liaoandi](https://github.com/liaoandi), and [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow).
- PDF/tools: use ClawPDF for PDF extraction, support encrypted PDF extraction, and surface MCP structured content in agent tool results. ([#&#8203;87670](openclaw/openclaw#87670), [#&#8203;87751](openclaw/openclaw#87751))
- Providers: add Claude Opus 4.8 support, Fal Krea image model schemas, NVIDIA featured model catalogs, MiniMax streaming music responses, and provider-backed voice model catalogs. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87794](openclaw/openclaw#87794)) Thanks [@&#8203;eleqtrizit](https://github.com/eleqtrizit) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Codex/GitHub: add the GitHub Copilot agent runtime and the Codex Supervisor plugin package.
- Plugins: externalize GitHub Copilot and Tokenjuice as official install-on-demand plugins with npm and ClawHub publish metadata.
- Workboard: add agent coordination tools for tracking and handing off active agent work.
- Discord: show commentary in progress drafts so live Discord runs expose useful in-progress context. ([#&#8203;85200](openclaw/openclaw#85200))
- Plugin SDK: add a reply payload sending hook for plugins that need to deliver channel-owned replies and flatten package types for SDK declarations. ([#&#8203;82823](openclaw/openclaw#82823), [#&#8203;87165](openclaw/openclaw#87165)) Thanks [@&#8203;piersonr](https://github.com/piersonr) and [@&#8203;RomneyDa](https://github.com/RomneyDa).
- Policy: add policy comparison, ingress-channel conformance, and sandbox-posture conformance checks. ([#&#8203;85572](openclaw/openclaw#85572), [#&#8203;85744](openclaw/openclaw#85744), [#&#8203;86768](openclaw/openclaw#86768))

##### Fixes

- Agents: fall back to local config pruning when the optional `agents delete` Gateway probe cannot authenticate, so offline installs can still delete agents without removing shared workspaces.
- Tighten phone-control mutation authorization \[AI]. ([#&#8203;87150](openclaw/openclaw#87150)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Clarify directive persistence authorization policy \[AI]. ([#&#8203;86369](openclaw/openclaw#86369)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Agents/Codex: keep spawned agent cwd/workspace state separated, forward ACP spawn attachments, keep hook context prompt-local, release session locks on timeout abort and runtime teardown without deleting live OpenClaw-owned locks during cleanup, avoid session event queue self-wait, clean up exec abort listeners, stream assistant deltas incrementally, recover raw missing-thread compaction failures, preserve rotated compaction session identity, keep compaction-timeout snapshots continuable, preserve shared app-server state across startup or helper failures, keep native hook relay alive across restarts and prune stale bridge files, close native hook relay replacement races, keep Claude live tool progress visible for watchdog recovery, suppress abandoned requester completion handoff, route workspace memory through tools, resolve Codex runtime models first, report quarantined dynamic tools, format `skills` command output, bind node auto-review to prepared plans, retry Claude CLI transcript probes, and bound compaction/steering retries. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;86123](openclaw/openclaw#86123), [#&#8203;88129](openclaw/openclaw#88129), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;72574](openclaw/openclaw#72574), [#&#8203;87383](openclaw/openclaw#87383), [#&#8203;87400](openclaw/openclaw#87400), [#&#8203;83022](openclaw/openclaw#83022), [#&#8203;87671](openclaw/openclaw#87671), [#&#8203;87738](openclaw/openclaw#87738), [#&#8203;87747](openclaw/openclaw#87747), [#&#8203;87706](openclaw/openclaw#87706), [#&#8203;87546](openclaw/openclaw#87546), [#&#8203;87541](openclaw/openclaw#87541), [#&#8203;81048](openclaw/openclaw#81048)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky), [@&#8203;Alix-007](https://github.com/Alix-007), [@&#8203;luoyanglang](https://github.com/luoyanglang), [@&#8203;yetval](https://github.com/yetval), [@&#8203;sjf](https://github.com/sjf), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;benjamin1492](https://github.com/benjamin1492), [@&#8203;c19354837](https://github.com/c19354837), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;pfrederiksen](https://github.com/pfrederiksen), and [@&#8203;dodge1218](https://github.com/dodge1218).
- Codex Supervisor: keep real-home app-server MCP session listing on the loaded state path, bound stored history scans, and close WebSocket probes cleanly.
- Channels: thread canonical session keys into outbound hooks, preserve Matrix room-id case, keep fallback tool warnings mention-inert, retain delivered Slack final replies during late cleanup, continue iMessage polling after denied reactions, suppress duplicate native exec approvals, resolve Gateway message actions against the active runtime config, preserve Telegram SecretRef prompt config and polling keepalives, preserve WhatsApp profile auth roots, QR display, document filenames, and plugin hook config, suppress Discord recovered tool warnings, preserve the Discord voice outbound helper, cap Discord/Signal/Zalo channel request and container timeouts, and block untrusted Teams service URLs while keeping TeamsSDK patterns aligned. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87465](openclaw/openclaw#87465), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;76262](openclaw/openclaw#76262), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;87581](openclaw/openclaw#87581), [#&#8203;77114](openclaw/openclaw#77114), [#&#8203;86426](openclaw/openclaw#86426), [#&#8203;85529](openclaw/openclaw#85529), [#&#8203;87160](openclaw/openclaw#87160)) Thanks [@&#8203;zeroaltitude](https://github.com/zeroaltitude), [@&#8203;lukeboyett](https://github.com/lukeboyett), [@&#8203;jarvis-mns1](https://github.com/jarvis-mns1), [@&#8203;xiaotian](https://github.com/xiaotian), [@&#8203;funmerlin](https://github.com/funmerlin), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;heyitsaamir](https://github.com/heyitsaamir), [@&#8203;amittell](https://github.com/amittell), [@&#8203;lidge-jun](https://github.com/lidge-jun), [@&#8203;liorb-mountapps](https://github.com/liorb-mountapps), [@&#8203;masatohoshino](https://github.com/masatohoshino), [@&#8203;bladin](https://github.com/bladin), and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/auth/doctor/providers: reject malformed numeric/timeout/subcommand-version inputs, ignore workspace dotenv provider credentials, wait for respawn child shutdown, bound heartbeat defaults plus Codex, GitHub Copilot, OpenAI, Anthropic, Google, Feishu, LM Studio, MiniMax, Xiaomi TTS, and local-provider OAuth/token/model requests, harden Codex auth probes, label auth health by agent, preserve explicit agentRuntime pins during Codex model migration, warm provider auth off the main thread, honor Codex response timeouts, stop migrating current Claude Haiku 4.5 profiles to Sonnet, bound local service startup, resolve GPT-5.5 without cached catalog, migrate legacy memory auto-provider config, rewrite non-canonical `api_key` auth profiles, and make doctor restart follow-ups actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;87719](openclaw/openclaw#87719), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924), [#&#8203;84362](openclaw/openclaw#84362)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;samzong](https://github.com/samzong), [@&#8203;giodl73-repo](https://github.com/giodl73-repo), [@&#8203;alkor2000](https://github.com/alkor2000), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;nxmxbbd](https://github.com/nxmxbbd), and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Gateway/security/session state: expire browser tokens after auth rotation, scope assistant idempotency dedupe, drain probe client closes, avoid stale restart continuation reuse, preserve retry-after fallbacks and stale rate-limit cooldown probes, bound webchat image and artifact transcript scans, include seconds in inbound metadata timestamps, clear completed session active runs, clear stale chat stream buffers, and evict current plugin-state namespaces at row caps. ([#&#8203;87810](openclaw/openclaw#87810), [#&#8203;87833](openclaw/openclaw#87833), [#&#8203;75089](openclaw/openclaw#75089)) Thanks [@&#8203;joshavant](https://github.com/joshavant) and [@&#8203;litang9](https://github.com/litang9).
- Config/parsing/network: reject partial numeric parsing, parse provider/Discord retry headers and dates strictly, honor IPv6 and bare IPv6 `no_proxy` entries, preserve empty plugin allowlists, canonicalize secret target array indexes, and reject malformed media content lengths, inspected TCP ports, marketplace content lengths, cron epochs, sandbox stat fields, unsafe duration values, empty config path segments, noncanonical schema array refs, unsafe Telegram callback pages, and invalid Teams attachment-fetch DNS targets. ([#&#8203;87883](openclaw/openclaw#87883)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Browser/input hardening: reject invalid tab indexes, excessive viewport resizes, explicit zero CDP ports, malformed geolocation options, unsafe screenshot or permission-grant timeouts, loose response-body limits, invalid cookie expiries, and non-finite Browser tool delays/timeouts.
- Cron/automation: retry recurring jobs after transient model rate limits before waiting for the next scheduled slot, and preflight model fallbacks before skipping scheduled work. ([#&#8203;82887](openclaw/openclaw#82887)) Thanks [@&#8203;chen-zhang-cs-code](https://github.com/chen-zhang-cs-code).
- Auto-reply/directives: respect provider and relayed channel metadata during directive persistence so channel-originated decisions keep their intended context. ([#&#8203;87683](openclaw/openclaw#87683))
- WhatsApp: resolve the auth directory from the active profile so profile-scoped WhatsApp installs do not drift to the wrong credential root. ([#&#8203;82492](openclaw/openclaw#82492)) Thanks [@&#8203;lidge-jun](https://github.com/lidge-jun).
- Gateway/session state: clear completed session active runs, avoid cold-loading providers for MCP inventory, cache single-session child indexes, cap handshake timers, and bound preauth, auth-guard, media, transcript, readiness, and port options.
- Channels/replies: preserve channel-owned progress callbacks when verbose output is off, keep group-room progress suppression intact, prefer external session delivery context, escape Discord component id delimiters, force final TUI chat repaints, show Slack reasoning previews, and normalize Discord/Matrix/Mattermost channel numeric options. ([#&#8203;87476](openclaw/openclaw#87476), [#&#8203;87423](openclaw/openclaw#87423))
- Agents/tool args: harden smart-quoted argument repair for edit arrays and exact escaped arguments so model-produced tool calls recover without corrupting valid input. ([#&#8203;86611](openclaw/openclaw#86611)) Thanks [@&#8203;ferminquant](https://github.com/ferminquant).
- Providers/agents: preserve seeded Anthropic signatures, preserve signed thinking payloads, concatenate signature-delta chunks, preserve DeepSeek `reasoning_content` replay across tier suffixes, apply OpenRouter strict9 ids to Mistral routes, promote Ollama plain-text tool calls, load NVIDIA featured model catalogs, stream MiniMax music generation responses, and recover empty preflight compaction. ([#&#8203;87593](openclaw/openclaw#87593), [#&#8203;87493](openclaw/openclaw#87493), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764)) Thanks [@&#8203;Pluviobyte](https://github.com/Pluviobyte) and [@&#8203;eleqtrizit](https://github.com/eleqtrizit).
- Media/images: skip CLI image cache refs when resolving generated images, allow trusted generated HTML attachments, and bound generated video downloads so stale refs and slow providers fail cleanly. ([#&#8203;87523](openclaw/openclaw#87523), [#&#8203;87982](openclaw/openclaw#87982))
- File transfer: handle late tar stdin pipe errors after archive validation or unpacking has already settled.
- Performance: trust install-record caches between reloads, prefer native JSON parsing, reuse unchanged tool-search catalogs, reuse gateway session and plugin metadata paths, skip unchanged store serialization, patch single-entry session writes, add precomputed session patch writers, reduce store clone allocations, cache manifest model catalog rows and auto-enabled plugin config, avoid full session snapshots for entry reads, defer configured Slack full startup, prefer bundled plugin dist entries, and slim current metadata identity caches. ([#&#8203;87760](openclaw/openclaw#87760))
- Docker/release/QA: package runtime workspace templates, stream cross-OS served artifacts, preserve sparse Crabbox run artifacts, isolate npm plugin installs per package, reject incompatible package plugin API installs, drop the leftover root Sharp dependency from package manifests after the Rastermill migration, bound OpenClaw instance logs, plugin gauntlet relay logs, MCP channel buffers, kitchen-sink scans, agent-turn assertions, QA-Lab credential broker calls, QA Matrix substrate requests, and release scenario logs, and keep release/google live guards current. ([#&#8203;87647](openclaw/openclaw#87647), [#&#8203;87477](openclaw/openclaw#87477)) Thanks [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Release/CI: bound manual git fetches, ClawHub verifier responses, ClawHub owner metadata, dependency-guard error bodies, Parallels limits, startup/test/memory budget parsing, and diffs viewer build warnings so release lanes fail with useful proof instead of hanging. ([#&#8203;87839](openclaw/openclaw#87839))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/759
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
Merged via squash.

Prepared head SHA: e5f5e3d
Co-authored-by: giodl73-repo <giodl73-repo@users.noreply.github.com>
Co-authored-by: giodl73-repo <235387111+giodl73-repo@users.noreply.github.com>
Reviewed-by: @giodl73-repo
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
Merged via squash.

Prepared head SHA: e5f5e3d
Co-authored-by: giodl73-repo <giodl73-repo@users.noreply.github.com>
Co-authored-by: giodl73-repo <235387111+giodl73-repo@users.noreply.github.com>
Reviewed-by: @giodl73-repo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. size: S status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Cron announce to Discord fails with discordVoice outbound adapter is unavailable when messages.tts.auto="always"

1 participant