Skip to content

fix(telegram): move network fallback to resolver-scoped dispatchers#40740

Merged
obviyus merged 22 commits intoopenclaw:mainfrom
sircrumpet:telegram/telegram-request-scoped-network-core-fix
Mar 10, 2026
Merged

fix(telegram): move network fallback to resolver-scoped dispatchers#40740
obviyus merged 22 commits intoopenclaw:mainfrom
sircrumpet:telegram/telegram-request-scoped-network-core-fix

Conversation

@sircrumpet
Copy link
Copy Markdown
Contributor

@sircrumpet sircrumpet commented Mar 9, 2026

Over the last week I saw a noticeable regression in Telegram reliability, with bot sends intermittently failing and logs filling up with Network request for 'sendMessage' failed and repeated fallback messages.

After digging into it, the core issue turned out not to be a single failing request path, but how Telegram networking state was being managed. Several parts of the Telegram stack could update shared network settings, which on my system led to autoSelectFamily repeatedly flipping between true and false and caused fallback behaviour to be retried far more often than expected.

That investigation surfaced three related problems:

  • Telegram networking depended on shared global dispatcher state for proxy handling, IPv4/IPv6 selection, and DNS order. When fallback occurred, that state was not effectively retained, so later requests could trigger the same fallback path again.
  • Telegram did not consistently use the same fetch path across sends, probes, and media, so behaviour varied across different parts of the integration.
  • I got my system up and running again with a narrow fix in fix(telegram): use sticky IPv4 fallback on dual-stack failures #40435, but that left the broader issue of shared mutable state and repeated reinitialisation, and the fallback during probes left more log messages than was desired.

This PR takes a more durable approach: it moves Telegram networking to resolver-scoped dispatchers, makes fallback behaviour consistent across all Telegram network paths, and adds a range of new tests to ensure consistent handling across Telegram network calls.

Summary

Describe the problem and fix in 2–5 bullets:

  • Problem: Telegram transport handling relied on process-global network state (autoSelectFamily, DNS order, and undici global dispatcher), which made transport behavior vulnerable to reapplication across unrelated Telegram flows.
  • Why it matters: Users could see flaky Telegram delivery (ETIMEDOUT, EHOSTUNREACH), repeated fallback warnings, and inconsistent behaviour between polling, sends, probes, audits, and media downloads.
  • What changed:
    • Reworked src/telegram/fetch.ts to build resolver-scoped undici dispatchers instead of mutating process-global Telegram network state
    • Routed polling/webhook bot clients, outbound sends, probes, group membership audits, and inbound media downloads through the same Telegram transport resolution path
    • Preserved caller-provided init.dispatcher across retries, and prevented caller-owned dispatcher failures from arming sticky IPv4 fallback
    • Added guarded fallback when env-proxy dispatcher initialisation fails, while keeping explicit proxy initialisation fail-closed
    • Added bounded in-memory transport caching for repeated send/probe resolution to reduce dispatcher churn and repeated probe-triggered fallback noise
    • Updated probe retries to respect a single overall timeoutMs budget
  • What did NOT change: no new config or env keys, no non-Telegram channel changes, and no auth, pairing, or routing policy changes.

History / Context

This section documents why this PR is a core transport fix

Previous Telegram network handling (before this PR)

From late January through early March 2026, Telegram fetch behavior evolved into a process-global transport model:

  1. 2026-01-26 (b861a0bd73): Telegram network hardening introduced process-level autoSelectFamily handling.
  2. 2026-02-16 (c762bf71f6): Node 22 default moved to autoSelectFamily=true.
  3. 2026-02-22 (53adae9cec): added default dnsResultOrder=ipv4first behavior on Node 22+.
  4. 2026-02-25 (0078070680): added global undici dispatcher refresh to align with autoSelectFamily.
  5. 2026-03-01 (e6049345db) and 2026-03-02 (666a4763ee): added proxy-preservation behavior around global dispatcher replacement.
  6. 2026-03-02 (9c03f8be08, then 493ebb915b): added retry path that forced IPv4 fallback on qualifying network errors.
  7. 2026-03-02 (c973b053a5): proxy-env plumbing refactor (same fallback semantics).
  8. 2026-03-05 (05fb16d151): global undici timeout hardening added another path that can reapply global dispatcher state.

Why this became a concern

  • Telegram network behaviour was being coordinated through process-global knobs.
  • In multi-account or mixed network conditions, that creates room for cross-flow contention and flip-flop behaviour.
  • The observed logs (autoSelectFamily=true (default-node22) interleaved with autoSelectFamily=false (config), plus repeated fallback warnings) were consistent with that shared-state contention pattern.

What this PR changes architecturally

  • Moves Telegram network handling from process-global mutation to resolver-scoped dispatchers.
  • Reuses resolved transport state across long-lived bot instances and bounded send/probe caches.
  • Keeps sticky IPv4 fallback local to the resolved transport instance instead of a process-global toggle.
  • Removes Telegram-path mutation of process-global net, dns, and undici dispatcher state.

This is intended to supersede symptom-level fallback tweaks by removing the underlying shared-global-state coupling in Telegram fetch handling.

Change Type (select all)

  • Bug fix
  • Refactor
  • Feature
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Integrations
  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

User-visible / Behavior Changes

  • Telegram transport no longer flips process-global network defaults during normal Telegram operation.
  • Direct Telegram traffic can switch to sticky IPv4 after qualifying connect failures and continue using that resolved transport state for subsequent requests in the same bot/fetcher lifetime.
  • Repeated sends and probes can reuse cached transport resolution, reducing repeated fallback-transition log noise.
  • Proxied Telegram accounts now use the same transport resolution path and configured network policy as other Telegram flows, but sticky IPv4 fallback remains limited to direct or NO_PROXY-bypassed traffic.
  • Caller-provided dispatchers are preserved on retry, and their failures no longer taint later Telegram transport state.
  • Telegram probe retries now honor timeoutMs as an overall budget.
  • No config/default changes required by users.

Security Impact (required)

  • New permissions/capabilities? (No)
  • Secrets/tokens handling changed? (No)
  • New/changed network calls? (No)
  • Command/tool execution surface changed? (No)
  • Data access scope changed? (No)
  • If any Yes, explain risk + mitigation: N/A

Repro + Verification

Environment

  • OS: macOS
  • Runtime/container: Node 25.x, pnpm, bun/vitest
  • Model/provider: N/A
  • Integration/channel (if any): Telegram
  • Relevant config (redacted): multi-account Telegram with mixed/default network settings; with and without proxy env present

Steps

  1. Start gateway with Telegram accounts in a dual-stack environment where IPv6 path is intermittently unreachable.
  2. Trigger Telegram API sends and observe network/fallback logs.
  3. Verify resolver behavior and retries via targeted tests.

Expected

  • Telegram send/poll transport remains stable per resolver and avoids global flip-flop behavior.
  • On qualifying connect failures, fallback switches to IPv4 and stays there for subsequent resolver requests.

Actual

  • Implemented resolver-scoped dispatcher policy achieves this behavior in tests and build/type checks.

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Before (production logs showing transport thrash):

autoSelectFamily=true (default-node22)
autoSelectFamily=false (config)
fetch fallback: forcing autoSelectFamily=false + dnsResultOrder=ipv4first
telegram sendMessage failed: Network request for 'sendMessage' failed!

After (this branch):

$ bunx vitest run src/telegram/fetch.test.ts
✓ Test Files 1 passed
✓ Tests 9 passed (9)

$ bunx vitest run src/telegram/probe.test.ts
✓ Test Files 1 passed
✓ Tests 8 passed (8)

$ bunx vitest run extensions/telegram/src/channel.test.ts
✓ Test Files 1 passed
✓ Tests 8 passed (8)

Focused regression checks (this branch):

$ bunx vitest run src/telegram/fetch.test.ts -t "retries once and then keeps sticky IPv4 dispatcher for subsequent requests"
✓ Tests 1 passed | 8 skipped

$ bunx vitest run src/telegram/fetch.test.ts -t "keeps per-resolver transport policy isolated across multiple accounts"
✓ Tests 1 passed | 8 skipped
  • Sticky IPv4 fallback works and remains resolver-local.
  • Per-resolver transport policy isolation works across conflicting account settings.
  • Telegram fetch path no longer relies on process-global network toggling behavior.

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios:
  • bunx vitest run src/telegram/fetch.test.ts src/telegram/send.proxy.test.ts src/telegram/proxy.test.ts src/telegram/network-config.test.ts passed.
  • pnpm tsgo passed.
  • pnpm format:check passed.
  • pnpm build passed.
  • Edge cases checked:
  • Explicit proxy fetch path remains caller-owned.
  • Env-proxy dispatcher path works and falls back to direct Agent if proxy agent init throws.
  • Retry preserves caller-provided init.dispatcher.
  • Multi-resolver conflicting network policies remain isolated.
  • Verified flaky Telegram delivery (ETIMEDOUT, EHOSTUNREACH) with repeated fallback warnings when not applied, and confirmed these were resolved once the patch was applied.
  • Verified Telegram appears as Enabled / On / OK in status/doctor
  • What you did not verify:
  • End-to-end validation on a TUN/VPN host in this branch.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.

Compatibility / Migration

  • Backward compatible? (Yes)
  • Config/env changes? (No)
  • Migration needed? (No)
  • If yes, exact upgrade steps: N/A

Failure Recovery (if this breaks)

  • How to disable/revert this change quickly: Revert the Telegram transport unification changes in src/telegram/fetch.ts, src/telegram/send.ts, src/telegram/probe.ts, src/telegram/bot.ts, src/telegram/bot-handlers.ts, src/telegram/bot/delivery.resolve-media.ts, src/telegram/audit-membership-runtime.ts, and extensions/telegram/src/channel.ts.
  • Files/config to restore: all of the above, plus their corresponding test files.
  • Known bad symptoms reviewers should watch for: Retries not activating on qualifying direct-connect failures, unexpected proxy routing behavior, or transport state persisting longer than intended across repeated sends/probes.

Risks and Mitigations

  • Risk: Sticky IPv4 mode can persist longer than a single request burst because resolved transport state is reused and cached.
  • Mitigation: Activation is still limited to qualifying network failures and remains scoped to the resolved Telegram transport instance rather than the process.
  • Risk: Env-proxy dispatcher creation can fail with malformed proxy config.
  • Mitigation: Direct-Agent fallback keeps Telegram functional.
  • Risk: Long-lived dispatchers are reused more aggressively than before.
  • Mitigation: Caches are bounded and transport state is isolated from other Telegram accounts and flows.

AI Assisted: yes, Codex investigation, root cause analysis, tests, review, edge-case discovery

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 9, 2026

Greptile Summary

This PR reworks Telegram networking from process-global mutation to resolver-scoped undici dispatchers, eliminating the shared-state contention that caused intermittent fallback thrash in multi-account or mixed-network setups. All Telegram send, probe, audit, bot polling, and media download paths now share the same transport resolution logic, and sticky IPv4 fallback is contained within each resolver's closure rather than affecting the whole process.

Key changes:

  • resolveTelegramFetch now builds per-call Agent / EnvHttpProxyAgent / ProxyAgent dispatchers and returns a typeof fetch (no longer | undefined), fixing a related shouldProvideFetch branch in bot.ts that could fall through to an absent global fetch.
  • probe.ts and send.ts each add a bounded 64-entry cache (FIFO eviction) around the resolver to reduce dispatcher churn; accountId is used as the stable cache identity so token rotation doesn't fragment the cache.
  • proxyFetch functions created via makeProxyFetch are now tagged with a Symbol metadata property so fetch.ts can inject resolver-scoped transport policy onto them, while untagged caller-owned fetch implementations are passed through unchanged.
  • Probe retries now honour a single overall timeoutMs budget instead of applying the timeout per attempt independently.
  • The custom shouldBypassEnvProxyForTelegramApi function re-implements undici's NO_PROXY host-matching to decide whether sticky IPv4 fallback can safely arm under an env-proxy configuration.

The architectural refactor is sound: resolver-scoped dispatchers correctly replace process-global mutation, and the sticky IPv4 fallback closure semantics are well-tested across multiple accounts and configurations.

Confidence Score: 5/5

  • This PR is safe to merge; the architectural refactor from process-global to resolver-scoped dispatchers is sound with no identified regressions in auth, routing, or non-Telegram paths.
  • The refactor is architecturally correct and well-tested. The resolver-scoped dispatcher approach eliminates the shared-state contention that caused the original issue. All test suites pass (9 tests in fetch.test.ts, 8 in probe.test.ts, 8 in channel.test.ts). Sticky IPv4 fallback semantics are properly isolated per resolver, caller-provided dispatchers are preserved on retry, env-proxy bypass detection works correctly, and explicit proxy fail-closed behavior is maintained. No blocking concerns identified.
  • No files require special attention.

Last reviewed commit: f8a8461

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a5913d5e5e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@sircrumpet
Copy link
Copy Markdown
Contributor Author

@greptile-apps Thanks for the review, this has been addressed. Please re-review.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 494207a9a3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8238157d0e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 930ea6bd36

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@sircrumpet
Copy link
Copy Markdown
Contributor Author

@greptile-apps @codex Updated based on comments, can you please re-review 🙂

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a3cc6d9c61

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@sircrumpet
Copy link
Copy Markdown
Contributor Author

@greptile-apps Thanks, those minor issues have been addressed. Please re-review?

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 99b6ce947b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@sircrumpet
Copy link
Copy Markdown
Contributor Author

@greptile-apps Reviewed and addressed. Please re-review?

For @codex reviews, our NO_PROXY implementation intentionally matches undici semantics and bypass logic.

  • EnvHttpProxyAgent matches both exact host and subdomains in #shouldProxy. Our shouldBypassEnvProxyForTelegramApi() mirrors that behaviour.
  • undici 7.22 treats wildcard bypass only when no_proxy/NO_PROXY equals '' exactly; '' inside a list is not global-bypass.

Preference is to match established undici behaviour here to avoid drift and unexpected handling.

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@sircrumpet
Copy link
Copy Markdown
Contributor Author

@greptile-apps Thanks - last (🤞🏼) minor style issue addressed. Can I get another review please? 😊

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e42f8aa31b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@sircrumpet
Copy link
Copy Markdown
Contributor Author

@greptile-app Thanks, cleared up those tests, are we looking good now? 🙂

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f3e11d4b37

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@sircrumpet
Copy link
Copy Markdown
Contributor Author

@greptile-app thanks for the thoughtful review. I'd appreciate a re-assessment.

We've aligned those cache keys. Regarding your concern on "manually replicating undici's NO_PROXY logic", we need a classification before dispatch to decide whether sticky IPv4 fallback can safely arm. EnvHttpProxyAgent does not expose route decisions (proxy vs direct NO_PROXY bypass), so this is something we need to determine, and undici's NO_PROXY logic is a logical source. This is less about "manually replicating" their implementation as it is using it as an established, proven solution. I do not believe this choice significantly increases the complexity, and there is not a significant risk posed by Undici's proxy bypass rules changing in future.

@obviyus obviyus self-assigned this Mar 10, 2026
@obviyus
Copy link
Copy Markdown
Contributor

obviyus commented Mar 10, 2026

Applied follow-up for the env-proxy review points.

  • pass Telegram network policy on proxyTls as well as connect for EnvHttpProxyAgent, so proxied HTTPS traffic actually inherits autoSelectFamily / dnsResultOrder
  • tighten fetch.test.ts to assert the effective env-proxy field
  • add a small runtime test against installed [email protected] so this can’t hide behind constructor mocks again

Verified with targeted Telegram tests plus pnpm tsgo.

@obviyus obviyus force-pushed the telegram/telegram-request-scoped-network-core-fix branch from ce7b17d to e47ef6d Compare March 10, 2026 05:54
@obviyus obviyus force-pushed the telegram/telegram-request-scoped-network-core-fix branch from e47ef6d to a4456d4 Compare March 10, 2026 05:57
@obviyus obviyus merged commit 45b74fb into openclaw:main Mar 10, 2026
26 checks passed
@obviyus
Copy link
Copy Markdown
Contributor

obviyus commented Mar 10, 2026

Merged via squash.

Thanks @sircrumpet!

mukhtharcm pushed a commit to hnykda/openclaw that referenced this pull request Mar 10, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
mrosmarin added a commit to mrosmarin/openclaw that referenced this pull request Mar 10, 2026
* main: (43 commits)
  docs: add openclaw#42173 to CHANGELOG — strip leaked model control tokens (openclaw#42216)
  Agents: align onPayload callback and OAuth imports
  docs: add Tengji (George) Zhang to maintainer table (openclaw#42190)
  fix: strip leaked model control tokens from user-facing text (openclaw#42173)
  Changelog: add unreleased March 9 entries
  chore: add .dev-state to .gitignore (openclaw#41848)
  fix(agents): avoid duplicate same-provider cooldown probes in fallback runs (openclaw#41711)
  fix(mattermost): preserve markdown formatting and native tables (openclaw#18655)
  feat(acp): add resumeSessionId to sessions_spawn for ACP session resume (openclaw#41847)
  ACPX: bump bundled acpx to 0.1.16 (openclaw#41975)
  mattermost: fix DM media upload for unprefixed user IDs (openclaw#29925)
  fix(msteams): use General channel conversation ID as team key for Bot Framework compatibility (openclaw#41838)
  fix(mattermost): read replyTo param in plugin handleAction send (openclaw#41176)
  fix(sandbox): pass real workspace to sessions_spawn when workspaceAccess is ro (openclaw#40757)
  fix(ui): replace Manual RPC text input with sorted method dropdown (openclaw#14967)
  CI: select Swift 6.2 toolchain for CodeQL (openclaw#41787)
  fix(agents): forward memory flush write path (openclaw#41761)
  fix(telegram): move network fallback to resolver-scoped dispatchers (openclaw#40740)
  fix(security): harden replaceMarkers() to catch space/underscore boundary marker variants (openclaw#35983)
  fix(web-search): recover OpenRouter Perplexity citations from message annotations (openclaw#40881)
  ...
aiwatching pushed a commit to aiwatching/openclaw that referenced this pull request Mar 10, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
Moshiii pushed a commit to Moshiii/openclaw that referenced this pull request Mar 11, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
Moshiii pushed a commit to Moshiii/openclaw that referenced this pull request Mar 11, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
frankekn pushed a commit to Effet/openclaw that referenced this pull request Mar 11, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
frankekn pushed a commit to ImLukeF/openclaw that referenced this pull request Mar 11, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
dominicnunez pushed a commit to dominicnunez/openclaw that referenced this pull request Mar 11, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
dhoman pushed a commit to dhoman/chrono-claw that referenced this pull request Mar 11, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
Ruijie-Ysp pushed a commit to Ruijie-Ysp/clawdbot that referenced this pull request Mar 12, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
qipyle pushed a commit to qipyle/openclaw that referenced this pull request Mar 12, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
senw-developers pushed a commit to senw-developers/va-openclaw that referenced this pull request Mar 17, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
V-Gutierrez pushed a commit to V-Gutierrez/openclaw-vendor that referenced this pull request Mar 17, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus
@PiiSmith
Copy link
Copy Markdown

I guess this pull request broke my bot on a Hetzer server. Telegram is super spotty since it and using an older version it works fine.

alexey-pelykh pushed a commit to remoteclaw/remoteclaw that referenced this pull request Mar 22, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus

(cherry picked from commit 45b74fb)
alexey-pelykh pushed a commit to remoteclaw/remoteclaw that referenced this pull request Mar 22, 2026
…penclaw#40740)

Merged via squash.

Prepared head SHA: a4456d4
Co-authored-by: sircrumpet <[email protected]>
Co-authored-by: obviyus <[email protected]>
Reviewed-by: @obviyus

(cherry picked from commit 45b74fb)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: telegram Channel integration: telegram size: XL

Projects

None yet

3 participants