shekohex / shekohex/opencode-pty

[Bug]: `bun:semver` and `bun-pty` imports break plugin loading on OpenCode 1.14.x (Node ESM plugin host)

Open
#36 3 comments 0 reactions 1 assignee View on GitHub

@shekohex is already working on this.

Since May 5, 2026.

enhancement help wanted
Dominant language
TypeScript
Stars
582
Forks
59
Avg merge
13h 20m
Merged PRs (30d)
2

Description

Summary

opencode-pty@0.3.4 fails to load on OpenCode 1.14.x (and likely all OpenCode versions since ~1.4.x) because the compiled dist/src/plugin/pty/manager.js imports bun:semver and bun-pty/package.json. OpenCode's plugin host switched from Bun to Node ESM (anomalyco/opencode#18308, merged 2026-04-01), so these Bun-only imports now throw Cannot find package 'bun' at plugin load time.

This is related to but distinct from #7 (Windows + bun-pty GLIBC issue). On macOS the failure happens earlier — the plugin never gets past module resolution because bun:semver isn't a real npm package.

Error in OpenCode log

ERROR 2026-05-05T08:35:35 service=plugin path=opencode-pty@latest
  target=file:///Users/.../.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/index.js
  error=Cannot find package 'bun' imported from
        /Users/.../.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/src/plugin/pty/manager.js
  failed to load plugin

This fires on every workspace bootstrap — for users with multiple projects in the OpenCode sidebar, this means a stack of error toasts + chimes on every cold start.

Reproduction

npm pack opencode-pty@0.3.4
tar -xzf opencode-pty-0.3.4.tgz
head -5 package/dist/src/plugin/pty/manager.js
# import { semver } from 'bun';
# import { Terminal } from 'bun-pty';
# import { version as bunPtyVersion } from 'bun-pty/package.json';
# import { NotificationManager } from "./notification-manager.js";
# ...
node -e "import('./package/dist/index.js').catch(e=>console.error(e.message))"
# Cannot find package 'bun' imported from /.../dist/src/plugin/pty/manager.js

Why this is now broken

OpenCode 1.4.x+ replaced the BunProc plugin runtime with @npmcli/arborist + native Node import() (anomalyco/opencode#18308). The Node loader doesn't ship bun:* virtual modules and doesn't have a bun-pty peer package available.

PR #27 ("Ship pre-compiled JS to avoid transpilation cost") helped reduce on-the-fly Bun work but the runtime imports still target Bun's standard library and bun-pty's native .node bindings.

Suggested fix (high-level — likely needs a real refactor)

Replace Bun-specific dependencies with Node-compatible alternatives:

  1. bun:semversemver (npm). One-line swap.
  2. bun-pty@lydell/node-pty or the upstream node-pty. OpenCode itself already ships @lydell/node-pty-darwin-arm64 in its app bundle, so the Node ecosystem is the natural target.
  3. Either:
    • Maintain dual support (detect Bun vs Node at runtime and pick the impl), or
    • Drop Bun support and target Node ESM only — which is what OpenCode has effectively already done.

Open question: is there demand to keep Bun-only operation, or can the plugin become Node-first now that OpenCode is Node-based?

Environment

  • OpenCode: 1.14.37 (Electron 41 / Node 24, macOS arm64)
  • Plugin: opencode-pty@0.3.4 (latest)
  • macOS 26.4.1 arm64
  • Plugin declared globally in ~/.config/opencode/opencode.json "plugin" array; fails on every workspace bootstrap.

References

  • Related: shekohex/opencode-pty#7 (Windows startup crash, also bun-pty-driven)
  • Upstream loader change: anomalyco/opencode#18308 ("refactor: replace BunProc with Npm module using @npmcli/arborist")
  • Related upstream issues mentioning Bun-only plugins breaking: anomalyco/opencode#22045, anomalyco/opencode#13282

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.