openclaw - ✅(Solved) Fix 2026.4.7: telegram extension missing src/ directory causes config load failure [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#62904Fetched 2026-04-09 08:00:58
View on GitHub
Comments
1
Participants
2
Timeline
3
Reactions
0
Timeline (top)
closed ×1commented ×1cross-referenced ×1

After updating to 2026.4.7, all openclaw commands fail with a config read error because the telegram extension's bundled entry points to files that don't exist in the package.

Error Message

Failed to read config at /Users/magpie/.openclaw/openclaw.json Error: bundled plugin entry "./src/channel.setup.js" failed to open from ".../dist/extensions/telegram/setup-entry.js" (resolved ".../dist/extensions/telegram/src/channel.setup.js", ...): ENOENT: no such file or directory, lstat '.../dist/extensions/telegram/src/channel.setup.js'

Root Cause

dist/extensions/telegram/setup-entry.js in 2026.4.7 references a new src/ subdirectory structure:

// 2026.4.7 (broken)
plugin: { specifier: "./src/channel.setup.js", exportName: "telegramSetupPlugin" },
secrets: { specifier: "./src/secret-contract.js", exportName: "channelSecrets" }

But dist/extensions/telegram/src/ does not exist in the published package — the directory only contains flat files.

In 2026.4.5 the entry points correctly at an existing file:

// 2026.4.5 (working)
plugin: { specifier: "./channel-plugin-api.js", exportName: "telegramSetupPlugin" }

Fix Action

Workaround

Roll back to 2026.4.5:

npm install -g [email protected]

PR fix notes

PR #62900: fix(telegram): stop setup entry from deep-importing src

Description (problem / solution / changelog)

Summary

  • point the bundled Telegram setup entry at packaged dist-facing sidecar modules instead of missing ./src/* files
  • add focused regression coverage for loading Telegram setup sidecars from a dist-only bundled plugin layout

Change Type

  • Bug fix
  • New feature
  • Breaking change
  • Refactor
  • Docs
  • Test-only

Scope

This PR is intentionally narrow.

It only changes the bundled Telegram setup entry specifiers and adds focused regression coverage around packaged bundled-entry loading.

It does not change:

  • bundled loader fallback semantics
  • non-Telegram bundled channel entries
  • plugin update flow
  • packaging behavior outside the Telegram setup entry metadata

Linked Issue/PR

  • Related #62867
  • Related #62868
  • Related #62875
  • Related #62880
  • Related #62886
  • Related #62904
  • Related #62905
  • Related #62898
  • Related #62903
  • This PR fixes a bug or regression

Root Cause / Regression History

The bundled Telegram setup-entry.ts still referenced ./src/channel.setup.js and ./src/secret-contract.js.

That works in the source tree, but the published npm package does not ship dist/extensions/telegram/src/**. It ships the dist-facing sidecar entry modules (./channel-plugin-api.js and ./secret-contract-api.js) instead.

After upgrading to 2026.4.7, bundled setup entry resolution could therefore fail during config load / gateway startup with ENOENT while trying to open the missing ./src/... files from dist/extensions/telegram.

Behavior Changes

Before:

  • the bundled Telegram setup entry tried to load ./src/channel.setup.js
  • the bundled Telegram setup entry tried to load ./src/secret-contract.js
  • packaged npm installs could fail config load or gateway startup with a bundled plugin entry ENOENT

After:

  • the bundled Telegram setup entry loads ./channel-plugin-api.js
  • the bundled Telegram setup entry loads ./secret-contract-api.js
  • setup plugin and setup secrets sidecars resolve correctly from a dist-only bundled plugin layout

Regression Test Plan

Updated:

  • src/plugin-sdk/channel-entry-contract.test.ts

Coverage:

  • creates a temporary dist-only dist/extensions/telegram plugin root
  • verifies ./channel-plugin-api.js resolves telegramSetupPlugin
  • verifies ./secret-contract-api.js resolves channelSecrets
  • keeps the contracts boundary lane green after narrowing the fix back down to Telegram only

Repro + Verification

Observed on an installed npm-global runtime:

  • config loading and plugin update were blocked by bundled plugin entry "./src/channel.setup.js" failed to open from dist/extensions/telegram/setup-entry.js

With this patch:

  • the focused contracts boundary test still passes
  • a dist-only runtime check using loadBundledEntryExportSync(...) successfully loads both Telegram setup sidecars through the new specifiers
  • the same specifier swap applied to the installed runtime unblocked config loading and let openclaw plugins update lossless-claw proceed normally

Tests

Passed locally:

  • node scripts/run-vitest.mjs run --config vitest.contracts.config.ts src/plugins/contracts/boundary-invariants.test.ts

Additional focused coverage added in this PR:

  • loads packaged telegram setup sidecars from dist-facing api modules

Did not run full repo pre-commit:

  • local git commit hooks were slow / stuck in the broader pnpm check -> tsgo chain, so I used focused validation for this narrow fix instead

Risks and Mitigations

Risk:

  • the Telegram bundled setup entry now depends on the dist-facing facade modules being the supported packaged contract

Mitigation:

  • those facade modules are already present in packaged installs
  • the new regression test exercises a dist-only bundled plugin layout directly
  • the change is limited to Telegram setup-entry metadata and does not alter shared loader behavior

AI assistance

AI-assisted: drafted and implemented with Codex, then locally reviewed and tested by me.

Changed files

  • src/plugin-sdk/channel-entry-contract.test.ts (modified, +19/-18)

Code Example

Failed to read config at /Users/magpie/.openclaw/openclaw.json Error: bundled plugin entry "./src/channel.setup.js" failed to open from ".../dist/extensions/telegram/setup-entry.js" (resolved ".../dist/extensions/telegram/src/channel.setup.js", ...): ENOENT: no such file or directory, lstat '.../dist/extensions/telegram/src/channel.setup.js'

---

// 2026.4.7 (broken)
plugin: { specifier: "./src/channel.setup.js", exportName: "telegramSetupPlugin" },
secrets: { specifier: "./src/secret-contract.js", exportName: "channelSecrets" }

---

// 2026.4.5 (working)
plugin: { specifier: "./channel-plugin-api.js", exportName: "telegramSetupPlugin" }

---

npm install -g openclaw@2026.4.5
RAW_BUFFERClick to expand / collapse

Description

After updating to 2026.4.7, all openclaw commands fail with a config read error because the telegram extension's bundled entry points to files that don't exist in the package.

Error

Failed to read config at /Users/magpie/.openclaw/openclaw.json Error: bundled plugin entry "./src/channel.setup.js" failed to open from ".../dist/extensions/telegram/setup-entry.js" (resolved ".../dist/extensions/telegram/src/channel.setup.js", ...): ENOENT: no such file or directory, lstat '.../dist/extensions/telegram/src/channel.setup.js'

Root Cause

dist/extensions/telegram/setup-entry.js in 2026.4.7 references a new src/ subdirectory structure:

// 2026.4.7 (broken)
plugin: { specifier: "./src/channel.setup.js", exportName: "telegramSetupPlugin" },
secrets: { specifier: "./src/secret-contract.js", exportName: "channelSecrets" }

But dist/extensions/telegram/src/ does not exist in the published package — the directory only contains flat files.

In 2026.4.5 the entry points correctly at an existing file:

// 2026.4.5 (working)
plugin: { specifier: "./channel-plugin-api.js", exportName: "telegramSetupPlugin" }

Steps to Reproduce

  1. npm install -g [email protected]
  2. Run any openclaw command with a config that has channels.telegram configured
  3. Config load fails — gateway/status/etc. all broken

Workaround

Roll back to 2026.4.5:

npm install -g [email protected]

Environment

  • OS: macOS 15 (Darwin 25.2.0)
  • Node: via Homebrew
  • openclaw: 2026.4.7 (5050017)

extent analysis

TL;DR

The most likely fix is to roll back to openclaw version 2026.4.5 due to incorrect entry points in version 2026.4.7.

Guidance

  • Verify the issue by checking the dist/extensions/telegram directory for the existence of a src subdirectory, which is expected by the 2026.4.7 version but does not exist.
  • Compare the entry points in 2026.4.7 with those in 2026.4.5 to understand the change that introduced the bug.
  • Consider reporting the issue to the openclaw maintainers, as the problem seems to be with the packaging of the telegram extension in version 2026.4.7.
  • If a rollback to 2026.4.5 is not feasible, investigate alternative configurations or workarounds that might bypass the incorrect entry points.

Example

No code snippet is provided as the issue is related to the packaging and configuration of the openclaw package rather than a code-level problem.

Notes

This solution assumes that rolling back to 2026.4.5 does not introduce other critical issues or incompatibilities. It's also important to monitor for updates to openclaw that may address this packaging error.

Recommendation

Apply the workaround by rolling back to openclaw version 2026.4.5, as it is a known stable version that does not exhibit the config read error due to incorrect entry points.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING