Skip to content

fix(telegram): audit follow-ups β€” block-mode chunk config, dedupe bucket cleanup, grammy contract trust#91915

Merged
obviyus merged 5 commits into
mainfrom
codex/telegram-audit-followups
Jun 10, 2026
Merged

fix(telegram): audit follow-ups β€” block-mode chunk config, dedupe bucket cleanup, grammy contract trust#91915
obviyus merged 5 commits into
mainfrom
codex/telegram-audit-followups

Conversation

@obviyus

@obviyus obviyus commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Follow-ups from the telegram audit series (#91871, #91874, #91876, #91904):

  • Wire streaming.preview.chunk into telegram block mode. channels.telegram.streaming.preview.chunk.maxChars now sizes preview rotation steps when streaming.mode: "block", matching how Discord consults the chunk config only for its block chunker. Other modes keep one growing preview at Telegram's 4096 edit cap, so default (partial) behavior is unchanged. Behavior note: block mode without explicit config moves from 4096 to the shared 800-char default, aligning telegram with Discord/SDK block chunk sizing. Doctor already migrates legacy draftChunk keys into this config for telegram, so it is no longer a silent no-op.
  • Delete retired dispatch dedupe buckets after doctor import. Adds an optional removeSource hook to plugin-state-import migration plans (invoked only once every legacy entry is covered) and telegram now deletes the retired telegram.message-dispatch-dedupe bucket rows, including :lock rows, after importing into the SDK dedupe namespace from fix(telegram): use SDK dispatch dedupeΒ #91904. The plan keeps emitting while any legacy rows remain (even TTL-expired), so previously-imported installs get swept on their next doctor --fix, after which detection goes quiet. This also deletes the hasCurrentMessageDispatchDedupeTargets gate.
  • Trust grammy's API contract in handler seams. buildSyntheticContext requires getFile (drops the async () => ({}) fallback) and getChat binds bot.api.getChat directly β€” grammy's Api declares it concretely. Removes the NO_REPLY pre-count debug block in delivery (the SDK payload projection already normalizes NO_REPLY).

Verification

Regression proof β€” the new tests fail on main's production code and pass with this branch:

  • sizes block-mode preview chunks from streaming.preview.chunk βœ— on main (got 4096, config ignored) β†’ βœ“
  • uses the shared block chunk default when block mode has no chunk config βœ— on main β†’ βœ“
  • removes plugin-state legacy sources through removeSource once covered βœ— on main (hook missing) β†’ βœ“
  • migrates shipped Telegram message dispatch plugin-state buckets lifecycle βœ— on main (legacy rows linger, plan never re-emitted for cleanup) β†’ βœ“

Local (worktree, node scripts/run-vitest.mjs): bot-message-dispatch (124), state-migrations (8), doctor-state-migrations (46), bot.test (147), bot/delivery + helpers + media-dedup suites β€” all green.

Remote: blacksmith testbox run --id tbx_01ktrf67rfpa02v4xd82bjv7jv β†’ pnpm check:changed green (tsgo core/test/extensions lanes, oxlint, import cycles, guards). An earlier run caught a Pick<TelegramContext, ...> mismatch at bot-handlers.runtime.ts:473; fixed by tightening buildCallbackSyntheticTextContext and re-run green.

Not tested: live Telegram block-mode streaming against a real bot.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: telegram Channel integration: telegram commands Command implementations size: M maintainer Maintainer-authored PR labels Jun 10, 2026
@clawsweeper

clawsweeper Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed June 10, 2026, 6:24 AM ET / 10:24 UTC.

Summary
The branch wires Telegram block-mode preview sizing to streaming.preview.chunk, adds a doctor cleanup hook for legacy plugin-state dedupe buckets, removes grammy duck-typing fallbacks, and documents the Telegram block-mode behavior.

PR surface: Source -10, Tests +130, Docs +1. Total +121 across 10 files.

Reproducibility: yes. Current main hard-caps Telegram draft previews at 4096 characters, so block mode ignores streaming.preview.chunk; I confirmed the source path and the PR adds focused before/after tests, though I did not run them.

Review metrics: 2 noteworthy metrics.

  • Telegram block-mode default: 1 default changed: 4096 cap to 800 shared maxChars when no chunk config is set. Existing Telegram block-mode users may see more preview rotations after upgrade.
  • Plugin SDK contract surface: 1 optional migration-plan hook added. The exported channel-contract type change needs baseline and compatibility review before merge.

Merge readiness
Overall: πŸ§‚ unranked krab
Proof: πŸ§‚ unranked krab
Patch quality: 🦐 gold shrimp
Result: blocked until real behavior proof from a real setup is added.

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

Rank-up moves:

  • Commit the regenerated Plugin SDK API baseline hash for the new channel-contract type field.
  • [P1] Add live Telegram proof for block-mode preview chunk sizing and final delivery, with private details redacted.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR provides focused tests and a remote changed gate, but no live Telegram proof; the body explicitly says live Telegram block-mode streaming was not tested. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Mantis proof suggestion
A native Telegram Desktop recording would directly show whether block-mode preview rotation honors streaming.preview.chunk.maxChars and still finalizes cleanly. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

telegram desktop proof: verify Telegram block-mode preview rotation honors streaming.preview.chunk.maxChars and final delivery remains one coherent answer.

Risk before merge

  • [P1] Telegram block mode without explicit chunk config intentionally changes from one growing 4096-character preview to the shared 800-character preview rotation default, which is user-visible for existing block-mode users.
  • [P1] No real Telegram proof is included; the PR body explicitly says live Telegram block-mode streaming was not tested.
  • [P1] The PR changes an exported Plugin SDK channel-contract type without updating the tracked SDK API baseline hash.

Maintainer options:

  1. Refresh contract artifact and prove Telegram live (recommended)
    Regenerate the Plugin SDK API baseline and add a live Telegram block-mode proof showing chunk sizing and final delivery before merge.
  2. Accept the block-mode default change
    Maintainers can intentionally accept the 4096-to-800 default behavior change, but should make that upgrade impact explicit before landing.
  3. Pause if the default is not settled
    If maintainers are not ready to change existing block-mode preview cadence, hold this PR and split the doctor cleanup from the streaming behavior.

Next step before merge

  • [P1] Protected-label handling and live Telegram proof require maintainer/contributor action; the SDK baseline repair is mechanical but not enough to make automation merge this PR.

Security
Cleared: The diff does not add dependencies, secret handling, workflow permissions, downloads, or new code-execution paths; the state cleanup is doctor-time only.

Review findings

  • [P2] Regenerate the SDK API baseline β€” src/channels/plugins/legacy-state-migration.types.ts:22
Review details

Best possible solution:

Update the SDK API baseline, then land only after maintainers accept the block-mode default change and there is live Telegram proof for the visible streaming path.

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

Yes. Current main hard-caps Telegram draft previews at 4096 characters, so block mode ignores streaming.preview.chunk; I confirmed the source path and the PR adds focused before/after tests, though I did not run them.

Is this the best way to solve the issue?

Mostly yes. The fix stays in the Telegram plugin and doctor migration boundaries and the grammy simplification matches the pinned dependency types, but the PR must refresh SDK baseline artifacts and add live Telegram proof before it is the best mergeable form.

Full review comments:

  • [P2] Regenerate the SDK API baseline β€” src/channels/plugins/legacy-state-migration.types.ts:22
    Adding removeSource changes ChannelLegacyStateMigrationPlan, which is exported through openclaw/plugin-sdk/channel-contract, but the tracked docs/.generated/plugin-sdk-api-baseline.sha256 is unchanged between base and this head. The plugin SDK API check hashes exported type aliases, so this public contract addition needs the generated baseline hash committed before the PR can pass the SDK surface guard.
    Confidence: 0.86

Overall correctness: patch is incorrect
Overall confidence: 0.82

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add P2: This is a normal-priority Telegram bugfix/cleanup PR with limited blast radius but real merge gates.
  • add merge-risk: 🚨 compatibility: The PR changes existing Telegram block-mode default preview sizing and adds an exported SDK type field.
  • add merge-risk: 🚨 message-delivery: The Telegram preview rotation change affects visible message delivery cadence in block-mode chats.
  • add merge-risk: 🚨 automation: The public SDK type changes without the tracked API baseline hash update required by repository automation.
  • add rating: πŸ§‚ unranked krab: Overall readiness is πŸ§‚ unranked krab; proof is πŸ§‚ unranked krab and patch quality is 🦐 gold shrimp.
  • add status: πŸ“£ needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR provides focused tests and a remote changed gate, but no live Telegram proof; the body explicitly says live Telegram block-mode streaming was not tested. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
  • add mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram block-mode preview rotation behavior that can be demonstrated in a short Telegram Desktop proof.

Label justifications:

  • P2: This is a normal-priority Telegram bugfix/cleanup PR with limited blast radius but real merge gates.
  • merge-risk: 🚨 compatibility: The PR changes existing Telegram block-mode default preview sizing and adds an exported SDK type field.
  • merge-risk: 🚨 message-delivery: The Telegram preview rotation change affects visible message delivery cadence in block-mode chats.
  • merge-risk: 🚨 automation: The public SDK type changes without the tracked API baseline hash update required by repository automation.
  • rating: πŸ§‚ unranked krab: Overall readiness is πŸ§‚ unranked krab; proof is πŸ§‚ unranked krab and patch quality is 🦐 gold shrimp.
  • status: πŸ“£ needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR provides focused tests and a remote changed gate, but no live Telegram proof; the body explicitly says live Telegram block-mode streaming was not tested. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram block-mode preview rotation behavior that can be demonstrated in a short Telegram Desktop proof.
Evidence reviewed

PR surface:

Source -10, Tests +130, Docs +1. Total +121 across 10 files.

View PR surface stats
Area Files Added Removed Net
Source 6 67 77 -10
Tests 3 130 0 +130
Docs 1 1 0 +1
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 10 198 77 +121

What I checked:

Likely related people:

  • obviyus: Provided related PR context shows obviyus authored the recently merged Telegram audit/dedupe/chunking PRs that this follow-up builds on. (role: recent Telegram audit contributor; confidence: high; commits: b9095bf70d81, 049c3c487789, 9c6186de436c; files: extensions/telegram/src/bot-message-dispatch.ts, extensions/telegram/src/state-migrations.ts, extensions/telegram/src/bot-handlers.runtime.ts)
  • Vincent Koc: Local history shows recent work on the shared state migration runner touched by this PR. (role: recent adjacent state migration contributor; confidence: medium; commits: 7f1d82ab2518; files: src/infra/state-migrations.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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P2 Normal backlog priority with limited blast radius. 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. merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. labels Jun 10, 2026
@obviyus obviyus self-assigned this Jun 10, 2026
@obviyus

obviyus commented Jun 10, 2026

Copy link
Copy Markdown
Contributor Author

Land verification:

  • Local: node scripts/run-vitest.mjs over bot-message-dispatch (124), state-migrations (8), doctor-state-migrations (46), bot.test (147), bot/delivery (229 incl. shared files), media-dedup + bot/helpers (91) β€” green.
  • Regression proof: the four new tests fail with main's production files swapped in (config ignored at 4096; removeSource never invoked; legacy buckets linger) and pass on this branch.
  • Remote: Blacksmith Testbox tbx_01ktrf67rfpa02v4xd82bjv7jv, pnpm check:changed green (tsgo core/test/extensions, oxlint, import cycles, guards). First run caught a Pick<TelegramContext> mismatch at bot-handlers.runtime.ts:473; fixed and re-run green.

Known failing checks, both dispositioned:

  • build-artifacts: test/scripts/check-deadcode-unused-files.test.ts β€Ί "falls back to bare pnpm when no managed pnpm runner is available" fails identically on plain latest origin/main (reproduced locally on an untouched main checkout) β€” pre-existing main breakage, unrelated to this diff.
  • Run agentic native Telegram proof: Mantis reports both baseline and candidate captures skipped ("capture path cannot start Telegram in block preview mode"), artifacts: [] β€” no comparison was performed; harness capability gap, not a behavior mismatch. Behavior is covered by the regression tests above.

Proof gap: no live Telegram block-mode streaming session against a real bot.

@obviyus obviyus merged commit 050c081 into main Jun 10, 2026
243 of 256 checks passed
@obviyus obviyus deleted the codex/telegram-audit-followups branch June 10, 2026 11:00
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 12, 2026
…26.6.6) (#1040)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.6.5` β†’ `2026.6.6` |

---

### Release Notes

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

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

[Compare Source](openclaw/openclaw@v2026.6.5...v2026.6.6)

##### Highlights

- Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; exec approvals now fail closed on timeout. ([#&#8203;91529](openclaw/openclaw#91529), [#&#8203;91618](openclaw/openclaw#91618), [#&#8203;91615](openclaw/openclaw#91615), [#&#8203;91619](openclaw/openclaw#91619), [#&#8203;91741](openclaw/openclaw#91741), [#&#8203;91745](openclaw/openclaw#91745), [#&#8203;91746](openclaw/openclaw#91746), [#&#8203;91748](openclaw/openclaw#91748), [#&#8203;91749](openclaw/openclaw#91749), [#&#8203;91750](openclaw/openclaw#91750), [#&#8203;91751](openclaw/openclaw#91751), [#&#8203;91752](openclaw/openclaw#91752), [#&#8203;91763](openclaw/openclaw#91763), [#&#8203;89938](openclaw/openclaw#89938)) Thanks [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;shakkernerd](https://github.com/shakkernerd), and [@&#8203;drobison00](https://github.com/drobison00).
- Telegram delivery is safer and more coherent: account-scoped topics route to the right agent, streamed text survives tool calls, `/compact` works on generic ingress, callback handling uses concrete APIs, draft chunking is shared, durable dispatch dedupe moved into the SDK, and unauthorized DM text stays out of cache and prompt context. ([#&#8203;91189](openclaw/openclaw#91189), [#&#8203;88682](openclaw/openclaw#88682), [#&#8203;89588](openclaw/openclaw#89588), [#&#8203;90212](openclaw/openclaw#90212), [#&#8203;91876](openclaw/openclaw#91876), [#&#8203;91874](openclaw/openclaw#91874), [#&#8203;91904](openclaw/openclaw#91904), [#&#8203;91478](openclaw/openclaw#91478), [#&#8203;91915](openclaw/openclaw#91915)) Thanks [@&#8203;codysai001](https://github.com/codysai001), [@&#8203;alexzhu0](https://github.com/alexzhu0), [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;snowzlm](https://github.com/snowzlm), [@&#8203;obviyus](https://github.com/obviyus), and [@&#8203;sallyom](https://github.com/sallyom).
- iMessage recovery and delivery now cover always-on inbound restart, durable echo markers, block streaming, idle approval discovery, hardened outbound transport, and actionable inbound startup diagnostics. ([#&#8203;91335](openclaw/openclaw#91335), [#&#8203;91449](openclaw/openclaw#91449), [#&#8203;88969](openclaw/openclaw#88969), [#&#8203;88530](openclaw/openclaw#88530), [#&#8203;91783](openclaw/openclaw#91783), [#&#8203;91785](openclaw/openclaw#91785)) Thanks [@&#8203;omarshahine](https://github.com/omarshahine), [@&#8203;jmissig](https://github.com/jmissig), and [@&#8203;colmbrogan](https://github.com/colmbrogan).
- Browser and MCP connectivity gained existing-session CDP support, discovered WebSocket validation, default-profile `cdpUrl` handling, safer browser-output boundaries, Streamable HTTP loopback transport, corrected OAuth/SSE authorization handling, and broader schema compatibility. ([#&#8203;91422](openclaw/openclaw#91422), [#&#8203;89851](openclaw/openclaw#89851), [#&#8203;91736](openclaw/openclaw#91736), [#&#8203;91747](openclaw/openclaw#91747), [#&#8203;91451](openclaw/openclaw#91451), [#&#8203;80143](openclaw/openclaw#80143)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia), [@&#8203;lifuyue](https://github.com/lifuyue), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;LiuwqGit](https://github.com/LiuwqGit), and [@&#8203;HemantSudarshan](https://github.com/HemantSudarshan).
- Control UI startup and first-reply latency are lower through cached model metadata, removal of the startup catalog wait, lazy slash-command loading, and first-event tracing with slow-reply diagnostics. ([#&#8203;91531](openclaw/openclaw#91531), [#&#8203;91538](openclaw/openclaw#91538), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583), [#&#8203;91598](openclaw/openclaw#91598))
- Provider support expands with OpenRouter OAuth onboarding and Claude Fable 5 adaptive thinking, while Codex sessions keep correct compaction ownership, local models skip guardian review, dynamic tool progress normalizes cleanly, and Gemma 4 reasoning replay is preserved. ([#&#8203;91830](openclaw/openclaw#91830), [#&#8203;91882](openclaw/openclaw#91882), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;88768](openclaw/openclaw#88768), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;bdjben](https://github.com/bdjben), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).

##### Changes

- CLI progress: emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. ([#&#8203;89834](openclaw/openclaw#89834), [#&#8203;90883](openclaw/openclaw#90883)) Thanks [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia).
- Observability: allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. ([#&#8203;91256](openclaw/openclaw#91256), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583)) Thanks [@&#8203;amknight](https://github.com/amknight).
- Plugins/ClawHub: dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. ([#&#8203;91574](openclaw/openclaw#91574), [#&#8203;91591](openclaw/openclaw#91591), [#&#8203;90004](openclaw/openclaw#90004), [#&#8203;90927](openclaw/openclaw#90927), [#&#8203;90838](openclaw/openclaw#90838)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;brokemac79](https://github.com/brokemac79), and [@&#8203;lonexreb](https://github.com/lonexreb).
- Memory/providers: move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. ([#&#8203;91324](openclaw/openclaw#91324), [#&#8203;89138](openclaw/openclaw#89138), [#&#8203;90457](openclaw/openclaw#90457), [#&#8203;91837](openclaw/openclaw#91837), [#&#8203;91851](openclaw/openclaw#91851)) Thanks [@&#8203;osolmaz](https://github.com/osolmaz), [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;ai-hpc](https://github.com/ai-hpc), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Channels/mobile: add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. ([#&#8203;91423](openclaw/openclaw#91423), [#&#8203;91557](openclaw/openclaw#91557), [#&#8203;89909](openclaw/openclaw#89909)) Thanks [@&#8203;cxyhhhhh](https://github.com/cxyhhhhh), [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin), and [@&#8203;baskduf](https://github.com/baskduf).
- Performance: prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. ([#&#8203;90782](openclaw/openclaw#90782), [#&#8203;89978](openclaw/openclaw#89978), [#&#8203;91580](openclaw/openclaw#91580), [#&#8203;91531](openclaw/openclaw#91531)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa) and [@&#8203;ai-hpc](https://github.com/ai-hpc).

##### Fixes

- Agent/session recovery: drop stale approval follow-ups after session rebind, remove drained reply-queue items by identity, recover stale main and visible replies, preserve Codex context-engine compaction ownership, lower the default compaction timeout to 180 seconds while respecting explicit configuration, and keep provider-failure terminal lifecycle state correct. ([#&#8203;85679](openclaw/openclaw#85679), [#&#8203;91450](openclaw/openclaw#91450), [#&#8203;91566](openclaw/openclaw#91566), [#&#8203;91840](openclaw/openclaw#91840), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;91361](openclaw/openclaw#91361), [#&#8203;91895](openclaw/openclaw#91895)) Thanks [@&#8203;openperf](https://github.com/openperf), [@&#8203;yetval](https://github.com/yetval), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;wangmiao0668000666](https://github.com/wangmiao0668000666), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- User-visible content boundaries: suppress Codex/Harmony protocol artifacts, neutralize browser and LanceDB memory media directives, redact transcript images, and preserve native `/compact` replies through source suppression. ([#&#8203;89151](openclaw/openclaw#89151), [#&#8203;91422](openclaw/openclaw#91422), [#&#8203;91425](openclaw/openclaw#91425), [#&#8203;91529](openclaw/openclaw#91529), [#&#8203;90212](openclaw/openclaw#90212)) Thanks [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;snowzlm](https://github.com/snowzlm).
- Channel delivery: keep WhatsApp captured replies attached to the successor controller after restart, retry Feishu rate limits, preserve Mattermost thread replies, canonicalize LINE webhook paths, restore Discord reply hydration and runtime timeout exports, and show OpenAI Realtime WebRTC assistant transcripts. ([#&#8203;85823](openclaw/openclaw#85823), [#&#8203;89659](openclaw/openclaw#89659), [#&#8203;91684](openclaw/openclaw#91684), [#&#8203;91649](openclaw/openclaw#91649), [#&#8203;90263](openclaw/openclaw#90263), [#&#8203;91686](openclaw/openclaw#91686), [#&#8203;90426](openclaw/openclaw#90426)) Thanks [@&#8203;itsuzef](https://github.com/itsuzef), [@&#8203;ladygege](https://github.com/ladygege), [@&#8203;jacobtomlinson](https://github.com/jacobtomlinson), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), and [@&#8203;shushushv](https://github.com/shushushv).
- Cron: cancel active task runs cleanly, preserve terminal timeout/cancel state, and recover no-deliver tool warnings instead of silently losing the outcome. ([#&#8203;90666](openclaw/openclaw#90666), [#&#8203;90678](openclaw/openclaw#90678)) Thanks [@&#8203;ai-hpc](https://github.com/ai-hpc).
- Gateway/config/auth: share the approval runtime socket token, replace arrays explicitly in `config.patch`, skip the deleted-agent guard only for valid ACP harness sessions, surface headless LaunchAgent state, verify SQLite auth migration before cleanup, and arm QMD startup maintenance. ([#&#8203;87105](openclaw/openclaw#87105), [#&#8203;91551](openclaw/openclaw#91551), [#&#8203;91219](openclaw/openclaw#91219), [#&#8203;91614](openclaw/openclaw#91614), [#&#8203;91740](openclaw/openclaw#91740), [#&#8203;91978](openclaw/openclaw#91978)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev) and [@&#8203;scotthuang](https://github.com/scotthuang).
- Providers/Codex: clarify quota errors, restore the Codex synthetic usage line, canonicalize Codex protocol assets, require API-key auth for realtime voice, normalize ACP model refs, preserve Gemma 4 `reasoning_content`, and avoid guardian review for local models. ([#&#8203;91390](openclaw/openclaw#91390), [#&#8203;91709](openclaw/openclaw#91709), [#&#8203;91507](openclaw/openclaw#91507), [#&#8203;91567](openclaw/openclaw#91567), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;hxy91819](https://github.com/hxy91819), [@&#8203;brokemac79](https://github.com/brokemac79), [@&#8203;RomneyDa](https://github.com/RomneyDa), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).
- Updates/builds: recover package Gateway restarts after refresh failure, expose plugin convergence repair, fall back to Corepack in PATH-less pnpm environments, seed the correct Docker store packages, and keep ClawHub dry-run and publish paths reusable. ([#&#8203;91581](openclaw/openclaw#91581), [#&#8203;91599](openclaw/openclaw#91599), [#&#8203;91547](openclaw/openclaw#91547), [#&#8203;91591](openclaw/openclaw#91591)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;sallyom](https://github.com/sallyom), and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- UI: require explicit user intent before opening chat sessions and drain restored chat queues after session switches. ([#&#8203;91480](openclaw/openclaw#91480)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Android: avoid the `dataSync` foreground-service type for persistent nodes. ([#&#8203;80082](openclaw/openclaw#80082)) Thanks [@&#8203;davelutztx](https://github.com/davelutztx).
- Native hooks: bound relay lifetimes so abandoned native hook connections cannot linger indefinitely. ([#&#8203;91550](openclaw/openclaw#91550)) Thanks [@&#8203;joshavant](https://github.com/joshavant).

</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/1040
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: telegram Channel integration: telegram commands Command implementations docs Improvements or additions to documentation maintainer Maintainer-authored PR mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. 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. rating: πŸ§‚ unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: M status: πŸ“£ needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant