openclaw - ✅(Solved) Fix 2026.4.7: Bundled Telegram plugin fails to start — missing src/channel.setup.js [1 pull requests, 3 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#62905Fetched 2026-04-09 08:00:57
View on GitHub
Comments
3
Participants
2
Timeline
5
Reactions
1
Author
Participants
Timeline (top)
commented ×3closed ×1cross-referenced ×1

Error Message

Config invalid

  • <root>: read failed: 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", plugin root ".../dist/extensions/telegram", reason "path"): ENOENT: no such file or directory

Root Cause

setup-entry.js in the bundled Telegram plugin references ./src/channel.setup.js, but the build output places the actual file at the dist root as channel.setup-DnkdT607.js (hashed filename). The src/ directory does not exist inside dist/extensions/telegram/.

Fix Action

Workaround

Downgraded to 2026.4.5 which works correctly.

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

Config invalid
  - <root>: read failed: 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", 
    plugin root ".../dist/extensions/telegram", reason "path"): 
    ENOENT: no such file or directory
RAW_BUFFERClick to expand / collapse

Environment

  • OpenClaw: 2026.4.7 (5050017)
  • Platform: macOS (Darwin 25.3.0, arm64)
  • Install method: npm install -g openclaw

Problem

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

Config invalid
  - <root>: read failed: 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", 
    plugin root ".../dist/extensions/telegram", reason "path"): 
    ENOENT: no such file or directory

Root Cause

setup-entry.js in the bundled Telegram plugin references ./src/channel.setup.js, but the build output places the actual file at the dist root as channel.setup-DnkdT607.js (hashed filename). The src/ directory does not exist inside dist/extensions/telegram/.

Attempted Workarounds

  1. Symlink src/channel.setup.js../../channel.setup-DnkdT607.js
    → Rejected: "Symlink escapes plugin root"

  2. Copy channel.setup-DnkdT607.jssrc/channel.setup.js
    → Fails: copied file has relative imports (./errors-CGMew-1w.js) that don't resolve from the new location

Workaround

Downgraded to 2026.4.5 which works correctly.

Expected Behavior

The Telegram plugin should resolve its channel.setup.js entry point correctly in the published npm package.

extent analysis

TL;DR

Update the setup-entry.js file in the Telegram plugin to reference the hashed filename of channel.setup.js directly.

Guidance

  • Verify the actual filename of channel.setup.js in the dist directory to determine the correct hashed filename.
  • Consider updating the build process to maintain a consistent filename for channel.setup.js or to update the reference in setup-entry.js dynamically.
  • Check if there are any existing configuration options in OpenClaw or the Telegram plugin to handle hashed filenames or to specify the entry point explicitly.
  • Test the updated setup-entry.js file with the hashed filename to ensure the Telegram plugin resolves its entry point correctly.

Example

No explicit code example is provided due to the lack of specific details about the build process or the setup-entry.js file. However, the general approach would involve updating the reference in setup-entry.js to point to the hashed filename, such as channel.setup-DnkdT607.js.

Notes

The provided workaround of downgrading to version 2026.4.5 suggests that the issue is specific to version 2026.4.7. The solution may involve updating the Telegram plugin or the OpenClaw configuration to handle the hashed filenames correctly.

Recommendation

Apply a workaround by updating the setup-entry.js file to reference the hashed filename of channel.setup.js directly, as this approach addresses the root cause of the issue without requiring a version downgrade.

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