Repository navigation
Description
opencode-pty still fails under OpenCode Node plugin runtime after PR #38: bun-pty resolves to TypeScript source under node_modules
Summary
I am trying to use opencode-pty with OpenCode running as a systemd service on Ubuntu. The plugin appears to install / show in OpenCode status, but the PTY slash commands and tools do not appear in opencode attach.
After testing both the published npm package and the current GitHub main build, it looks like there are still Node-runtime compatibility problems.
The original npm package failed because it still imported Bun-specific modules such as bun. After building current main, that part appears improved, but the plugin still fails under Node because bun-pty resolves to a .ts entry inside node_modules, which Node refuses to type-strip.
Environment
OS: Ubuntu 24.04
OpenCode: 1.17.9
Node: v22.23.0
Previous Node: v18.19.1
Bun: 1.3.14
GLIBC: 2.39
Service user: root
OpenCode service command:
/root/.opencode/bin/opencode serve --hostname 0.0.0.0 --port 4096 --print-logs
My systemd service includes:
[Service]
Type=simple
User=root
WorkingDirectory=/root/projects
ExecStart=/root/.opencode/bin/opencode serve --hostname 0.0.0.0 --port 4096 --print-logs
Restart=always
RestartSec=5
Environment=HOME=/root
Environment=PATH=/root/.bun/bin:/root/.opencode/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binConfig used
Global config:
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
"oh-my-opencode-slim",
"opencode-pty"
]
}I also tested with project-level config including opencode-pty.
Behavior
Expected:
opencode-ptyshould load normally.- Slash commands such as
/pty-show-server-urlshould be available. - PTY tools such as
pty_spawn,pty_read,pty_write,pty_list, etc. should be available.
Actual:
- The plugin appears installed or visible in status.
- The slash commands/tools do not show up in
opencode attach. - The plugin does not seem to fully load.
Published npm package test
Installed package:
/root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty
Package version:
{
"name": "opencode-pty",
"version": "0.3.4",
"main": "dist/index.js",
"type": "module"
}I checked the built output:
PKG=/root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty
grep -RInE "from ['\"]bun['\"]|bun:semver|from ['\"]bun-pty|bun-pty/package.json" "$PKG/dist" | head -50Output:
/root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/src/plugin/pty/session-lifecycle.js:1:import { spawn } from 'bun-pty';
/root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/src/plugin/pty/manager.js:1:import { semver } from 'bun';
/root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/src/plugin/pty/manager.js:2:import { Terminal } from 'bun-pty';
/root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/src/plugin/pty/manager.js:3:import { version as bunPtyVersion } from 'bun-pty/package.json';
Node import test:
node -e "import('file:///root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/index.js').then(()=>console.log('NODE OK')).catch(e=>console.error('NODE FAIL:', e.message))"Output:
NODE FAIL: Cannot find package 'bun' imported from /root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty/dist/src/plugin/pty/manager.js
So npm 0.3.4 still appears to contain the old Bun-specific import.
Testing current GitHub main
I then cloned and built from source:
mkdir -p /root/src
rm -rf /root/src/opencode-pty
git clone https://github.com/shekohex/opencode-pty.git /root/src/opencode-pty
cd /root/src/opencode-pty
bun install
bun run build:prodInitially this failed on Node 18 because Vite requires newer Node:
You are using Node.js 18.19.1. Vite requires Node.js version 20.19+ or 22.12+.
error during build:
[vite:build-html] crypto.hash is not a function
After upgrading Node, the build succeeded:
vite v7.3.1 building client environment for production...
✓ 40 modules transformed.
✓ built in 1.22s
Then I tested the built plugin under Node:
node -e "import('file:///root/src/opencode-pty/dist/index.js').then(()=>console.log('NODE OK')).catch(e=>console.error('NODE FAIL:', e.message))"Output:
NODE FAIL: Stripping types is currently unsupported for files under node_modules, for "file:///root/src/opencode-pty/node_modules/bun-pty/src/index.ts"
So current main no longer fails at import { semver } from 'bun', but still fails because bun-pty resolves to a TypeScript source entry inside node_modules.
bun-pty package details
Inside:
/root/src/opencode-pty/node_modules/bun-pty
The package.json shows:
{
"name": "bun-pty",
"version": "0.4.8",
"main": "./src/index.ts",
"types": "./dist/index.d.ts",
"type": "module",
"engines": {
"bun": ">=1.0.0"
}
}There is no compiled JS entry in dist, only declarations:
dist:
index.d.ts
index.d.ts.map
interfaces.d.ts
interfaces.d.ts.map
terminal.d.ts
terminal.d.ts.map
I tried building bun-pty:
cd /root/src/opencode-pty/node_modules/bun-pty
bun run build || truebut it failed because cargo was missing:
$ cd rust-pty && cargo build --release
/usr/bin/bash: line 1: cargo: command not found
error: script "build:rust" exited with code 127
However, even if Rust/cargo is installed, the package’s JS entry still points to ./src/index.ts, which Node does not support inside node_modules.
I also tried temporarily patching bun-pty’s package.json to point to ./dist/index.js, but that failed because no such JS file exists:
NODE FAIL: Error: Cannot find package '/root/src/opencode-pty/node_modules/bun-pty/dist/index.js' imported from /root/src/opencode-pty/dist/src/plugin/pty/manager.js
Related logs from OpenCode
OpenCode also repeatedly logged dependency install problems inside the project config directory:
message="background dependency install failed" dir=/root/projects/Raindropticon/.opencode error="Cause([Fail(NpmInstallFailedError (cause: RangeError: Invalid Date))])"
I am not sure if that is directly caused by this plugin, but the plugin’s direct Node import failure is reproducible independently with the commands above.
What seems to be happening
It looks like there are two separate compatibility layers:
-
npm
opencode-pty@0.3.4still contains old Bun-specific imports:import { semver } from 'bun'import { Terminal } from 'bun-pty'
-
GitHub
mainappears to fix the directbunimport issue, butbun-ptyitself still resolves to:bun-pty/src/index.ts
Node then fails with:
Stripping types is currently unsupported for files under node_modules
Since OpenCode’s plugin host appears to load plugins through Node ESM, opencode-pty still cannot fully load unless bun-pty becomes Node-compatible or the plugin switches to a Node-compatible PTY dependency.
Request
Could you confirm whether opencode-pty is expected to work under OpenCode’s current Node-based plugin runtime?
If yes, would it be possible to either:
- publish a new npm release after PR bun-pty pull 37 is merged #38,
- replace
bun-ptywith a Node-compatible PTY package, - bundle/compile the plugin so Node does not need to import
bun-pty/src/index.tsdirectly, - or document that the plugin currently requires a Bun-based plugin runtime and will not work under OpenCode’s Node plugin loader?
Reproduction commands
opencode --version
node --version
bun --version
ldd --version | head -1PKG=/root/.cache/opencode/packages/opencode-pty@latest/node_modules/opencode-pty
grep -RInE "from ['\"]bun['\"]|bun:semver|from ['\"]bun-pty|bun-pty/package.json" "$PKG/dist" | head -50
node -e "import('file://$PKG/dist/index.js').then(()=>console.log('NODE OK')).catch(e=>console.error('NODE FAIL:', e.message))"For GitHub main:
mkdir -p /root/src
rm -rf /root/src/opencode-pty
git clone https://github.com/shekohex/opencode-pty.git /root/src/opencode-pty
cd /root/src/opencode-pty
bun install
bun run build:prod
node -e "import('file:///root/src/opencode-pty/dist/index.js').then(()=>console.log('NODE OK')).catch(e=>console.error('NODE FAIL:', e.message))"Current result from GitHub main:
NODE FAIL: Stripping types is currently unsupported for files under node_modules, for "file:///root/src/opencode-pty/node_modules/bun-pty/src/index.ts"
Activity
mormubis commentedon Jul 1, 2026
Same issue here -- macOS arm64, OpenCode 1.17.x (native binary), Node v25.9.0.
Plugin installs fine under
~/.cache/opencode/packages/pty@npm:opencode-pty/but no tools or commands appear. No error in OpenCode logs either -- it fails silently.npm
0.3.4still ships withimport { semver } from 'bun'inmanager.js.senaev commentedon Jul 4, 2026
Environment: macOS arm64, opencode CLI 1.17.11, no standalone
bunin PATH.Symptom: Plugin installs but fails completely silently — no errors, no logs, tools never appear.
Two root causes:
Module resolution — opencode installs to
~/.cache/opencode/packages/but Bun doesn't look there when loading plugins. Result:Cannot find package 'opencode-pty'.bun-ptyversion guard — once resolution is fixed,npm installpullsbun-pty@0.4.10(via^0.4.8), which hits the hardcoded guard inmanager.jsand throws:bun-pty version 0.4.10 is too new for patching.Workaround — local directory plugin with pinned
bun-pty@0.4.8:package.json:{ "dependencies": { "opencode-pty": "latest" }, "overrides": { "bun-pty": "0.4.8" }, "exports": { "./server": "./src/index.ts" } }src/index.ts:bun:ffiworks fine inside opencode's embedded Bun runtime — the pre-built dylibs are already inbun-pty@0.4.8.upd: I see that fix already merged, but not published yet:
#44
@shekohex could you please release a new version