openclaw - ✅(Solved) Fix 2026.4.7: Telegram plugin broken — setup-entry.js references missing src/ directory [1 pull requests, 4 comments, 5 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#62886Fetched 2026-04-09 08:01:13
View on GitHub
Comments
4
Participants
5
Timeline
6
Reactions
8
Author
Timeline (top)
commented ×4closed ×1cross-referenced ×1

After upgrading from 2026.4.5 to 2026.4.7, the gateway fails to start with:

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

Root Cause

setup-entry.js in the Telegram extension references:

  • ./src/channel.setup.js (export: telegramSetupPlugin)
  • ./src/secret-contract.js (export: channelSecrets)

But in the 2026.4.7 dist, there is no src/ subdirectory. The actual files are in the extension root:

  • channel-plugin-api.js (contains telegramSetupPlugin)
  • secret-contract-api.js (contains channelSecrets)

Looks like a build/bundling regression — the specifier paths in setup-entry.js weren't updated to match the flat output layout.

Fix Action

Workaround

Creating symlinks from the expected paths to the actual files:

mkdir -p .../dist/extensions/telegram/src
ln -s ../channel-plugin-api.js .../dist/extensions/telegram/src/channel.setup.js
ln -s ../secret-contract-api.js .../dist/extensions/telegram/src/secret-contract.js

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

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

---

mkdir -p .../dist/extensions/telegram/src
ln -s ../channel-plugin-api.js .../dist/extensions/telegram/src/channel.setup.js
ln -s ../secret-contract-api.js .../dist/extensions/telegram/src/secret-contract.js
RAW_BUFFERClick to expand / collapse

Description

After upgrading from 2026.4.5 to 2026.4.7, the gateway fails to start with:

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

Root Cause

setup-entry.js in the Telegram extension references:

  • ./src/channel.setup.js (export: telegramSetupPlugin)
  • ./src/secret-contract.js (export: channelSecrets)

But in the 2026.4.7 dist, there is no src/ subdirectory. The actual files are in the extension root:

  • channel-plugin-api.js (contains telegramSetupPlugin)
  • secret-contract-api.js (contains channelSecrets)

Looks like a build/bundling regression — the specifier paths in setup-entry.js weren't updated to match the flat output layout.

Workaround

Creating symlinks from the expected paths to the actual files:

mkdir -p .../dist/extensions/telegram/src
ln -s ../channel-plugin-api.js .../dist/extensions/telegram/src/channel.setup.js
ln -s ../secret-contract-api.js .../dist/extensions/telegram/src/secret-contract.js

Environment

  • macOS 26.2 (arm64)
  • Node 25.8.0
  • Installed via npm global
  • 2026.4.5 works fine, 2026.4.7 is broken

extent analysis

TL;DR

Creating symlinks from the expected paths to the actual files in the dist/extensions/telegram directory may resolve the issue with the gateway failing to start after upgrading to 2026.4.7.

Guidance

  • Verify that the setup-entry.js file is referencing the correct paths to channel.setup.js and secret-contract.js after the upgrade to 2026.4.7.
  • Check the file structure in the dist/extensions/telegram directory to confirm that the files are indeed in the root and not in a src subdirectory.
  • Apply the provided workaround by creating symlinks from the expected paths to the actual files using the given bash commands.
  • Test the gateway startup after applying the workaround to ensure it resolves the issue.

Example

The following bash commands can be used to create the necessary symlinks:

mkdir -p .../dist/extensions/telegram/src
ln -s ../channel-plugin-api.js .../dist/extensions/telegram/src/channel.setup.js
ln -s ../secret-contract-api.js .../dist/extensions/telegram/src/secret-contract.js

Notes

This workaround assumes that the issue is indeed caused by the build/bundling regression and that the specifier paths in setup-entry.js need to be updated to match the flat output layout.

Recommendation

Apply the workaround by creating symlinks, as it is a temporary solution to mitigate the issue until a proper fix is available.

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