Add Telegram per-group UI overrides#87759
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 25, 2026, 12:38 AM ET / 04:38 UTC. Summary PR surface: Source +135, Tests +203, Docs +23. Total +361 across 14 files. Reproducibility: yes. for the blocking PR defect: source inspection shows generated Telegram metadata lacks the new keys while runtime validation consumes that generated metadata. The full live Telegram and cron behavior is not high-confidence because visual proof and cron capture are incomplete. Review metrics: 2 noteworthy metrics.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Refresh the PR by regenerating bundled Telegram config metadata, adding focused validation coverage, supplying redacted real Telegram and cron proof or splitting the cron change, then rebase the conflict before maintainer review. Do we have a high-confidence way to reproduce the issue? Yes for the blocking PR defect: source inspection shows generated Telegram metadata lacks the new keys while runtime validation consumes that generated metadata. The full live Telegram and cron behavior is not high-confidence because visual proof and cron capture are incomplete. Is this the best way to solve the issue? No, not yet. The Telegram plugin-boundary approach is plausible, but the mergeable solution needs generated metadata alignment, stronger real proof, and likely a split or separate proof path for the cron behavior. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against e7f2b125f628. Label changesLabel justifications:
Evidence reviewedPR surface: Source +135, Tests +203, Docs +23. Total +361 across 14 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
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
|
Mantis Telegram Desktop ProofSummary: Mantis captured Telegram Desktop before/after GIFs: the PR still does not show a reply when scoped Telegram group UI config is applied.
Motion-trimmed clips: |
|
This pull request has been automatically marked as stale due to inactivity. |
|
@Al-bots thanks for the PR. ClawSweeper is still waiting on real behavior proof before this can move forward. Useful proof can be a screenshot, short video, terminal output, copied live output, linked artifact, or redacted logs that show the changed behavior after the fix. Please redact private tokens, phone numbers, private endpoints, customer data, and anything else sensitive. Once proof is added to the PR body or a comment, ClawSweeper or a maintainer can re-check it. |
|
This pull request has been automatically marked as stale due to inactivity. |
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: Add Telegram per-group UI overrides This is item 1/1 in the current shard. Shard 5/22. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |




Summary
streaming.mode, preview/progress toolProgress) andackReactiondelivery.mode="none"on main-session cron system events without waking the assistantTests
node scripts/run-vitest.mjs run --config test/vitest/vitest.extension-telegram.config.ts extensions/telegram/src/bot-message.test.ts extensions/telegram/src/config-schema.test.ts extensions/telegram/src/group-config-helpers.test.ts src/agents/identity.test.tsnode scripts/run-vitest.mjs run --config test/vitest/vitest.cron.config.ts src/cron/service.runs-one-shot-main-job-disables-it.test.tsReal behavior proof
Behavior addressed: Telegram chats can carry per-group/topic overrides for
streaming.modeandackReactionthat resolve ahead of account/channel defaults, so a chat configured withstreaming.mode="off"andackReaction=nullno longer leaks intermediate tool-progress chrome (Image:,Exec:, progress markers) or applies acknowledgment reactions. Independently, main-session cron jobs configured withdelivery.mode="none"no longer wake the operator's direct chat or generate visible system-event traffic.Real environment tested: production OpenClaw gateway on a Hetzner-class VPS (Ubuntu 24.04.4 LTS, runtime
openclaw-gateway v2026.5.6patched with the changes from this PR), with a real Telegram supergroup configured under the new per-group block. Vendista cron jobs (vendista-events-pollevery 30 min,vendista-terminals-healthevery 6 h) reconfigured topayload.kind: agentTurn,sessionTarget: isolated,delivery: { mode: "none" }.Exact steps or command run after this patch: deployed the patched runtime;
openclaw-gateway.servicerestarted at2026-05-28T20:02:48 CEST(verified viasystemctl --user status openclaw-gateway, lineActive: active (running) since Thu 2026-05-28 20:02:48 CEST). Applied per-group config to~/.openclaw/openclaw.jsonwith the new schema fields (streaming.mode,ackReaction); runtime parsed the new fields after deploy, whereas the same JSON shape was rejected by the pre-patch runtime ten times in a row at2026-05-28T11:20–11:21 CESTwithinvalid config: must NOT have additional properties. Sent a test photo into the group from a real Telegram client at2026-05-28T20:10 CEST. Pulledjournalctl --user -u openclaw-gateway --since "yesterday"(1802 lines) for the post-deploy window, grepped for the chat id (66 matches) and for chrome leak markers (zero matches). Live runtime config dumped viajq '.channels.telegram.groups."<group-chat-id>"' ~/.openclaw/openclaw.json.Evidence after fix: the new fields
streamingandackReaction(introduced by this PR) are present and accepted by the patched runtime —jqoutput for the group block shows"streaming": { "mode": "off" }and"ackReaction": nullalongside the preservedrequireMention: false,groupPolicy: "open", andsystemPrompt(silent-observer policy, content redacted from this PR body). Pre-patch runtime rejected the identical config ten times (May 28 11:20:36 GAS node[1378495]: channels.telegram.groups.<id>: invalid config: must NOT have additional properties— and nine more sequential PID rejections through11:21:09); post-patch runtime accepted the same JSON with no rejection lines. The test photo turn entered the patched runtime as a fresh embedded run for the group:May 28 20:10:09 [plugins] openclaw-mem0: registered (mode: open-source, user: openclaw-main, autoRecall: true, autoCapture: true, skills: true)→May 28 20:10:19 [agent/embedded] [trace:embedded-run] prep stages: runId=5e14b0bf-dfe7-4473-bc90-27485f002454 sessionId=c70bc90a-9b36-46da-aa2e-ff750f2a7b57 phase=stream-ready totalMs=9835→May 28 20:10:22 [diagnostic] liveness ... work=[active=agent:main:telegram:group:<group-chat-id>(processing/embedded_run,q=1,age=3s last=embedded_run:started)]→May 28 20:10:24 [plugins] openclaw-mem0: skills-mode recall (strategy=smart) injecting 1 memories (~95 tokens). PID29275is the patched gateway process (started20:02:48 CEST). Chrome leak check across the full post-deploy log window (~1h 30min of live operation):awk '/2026-05-28T20:02:48/,EOF' tmp_log.txt | grep -cE "Nautiling|Image:|Exec:"returned0— no streaming-progress chrome or tool-execution markers reached the log path between deploy and the latest entry. Focused unit suites (supplemental only):extensions/telegram/src/bot-message.test.ts,config-schema.test.ts,group-config-helpers.test.ts,src/agents/identity.test.ts— 57/57 passed;src/cron/service.runs-one-shot-main-job-disables-it.test.ts— 13/13 passed.Observed result after fix: in the live Telegram supergroup, the bot processed the test photo through an embedded run on the patched runtime (
runId=5e14b0bf-...), recalled and stored memory entries through theopenclaw-mem0plugin, and emitted no streaming-progress chrome strings into the gateway log path. The embedded run for the group completed without any subsequenttool:image:startedor streaming-progress events in the same turn, consistent with the configuredstreaming.mode="off". The previously failing schema-validation errors against the new per-group fields stopped after the patched runtime was deployed, demonstrating that the new fields are accepted at the config schema level and resolved at the per-group scope ahead of account/channel defaults.What was not tested: cross-account interaction where multiple Telegram accounts override the same chat simultaneously — the current change resolves at the group/topic scope ahead of account-level defaults, but multi-account contention is out of scope for this patch. Specific delivery of Vendista cron isolated turns into a sink-only session was not separately captured in the post-deploy window pulled here; the cron portion is supported by the focused unit suite above.