mirror of
https://github.com/anthropics/claude-plugins-official.git
synced 2026-05-11 14:05:52 -03:00
fix(telegram): drop ppid watchdog check; redirect bun install stdout to stderr
Two v0.0.5/0.0.6 regressions causing the plugin to fail at startup: 1. The orphan watchdog's process.ppid !== bootPpid check false-fires when the bun-run/shell wrapper exits or execs during normal startup and we get reparented to init — plugin self-terminates ~5s after launch. Stdin-close alone is the correct signal: the kernel closes the MCP pipe on any CLI death regardless of intermediate wrappers, so the ppid check was both unnecessary and harmful. (#1467; also the actual cause of #1459 item 3 and likely #1425.) 2. 'bun install --no-summary' in the start script writes to stdout, which is the MCP JSON-RPC transport. The harness sees non-JSON bytes during the handshake and drops the connection ('Failed to connect'). Redirect install output to stderr. (#1470; also explains #1425 on Windows.)
This commit is contained in:
parent
6ceddea179
commit
1efdff09d7
@ -5,7 +5,7 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"bin": "./server.ts",
|
"bin": "./server.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "bun install --no-summary && bun server.ts"
|
"start": "bun install --no-summary 1>&2 && bun server.ts"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@modelcontextprotocol/sdk": "^1.0.0",
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
||||||
|
|||||||
@ -660,16 +660,14 @@ process.on('SIGTERM', shutdown)
|
|||||||
process.on('SIGINT', shutdown)
|
process.on('SIGINT', shutdown)
|
||||||
process.on('SIGHUP', shutdown)
|
process.on('SIGHUP', shutdown)
|
||||||
|
|
||||||
// Orphan watchdog: stdin events above don't reliably fire when the parent
|
// Orphan watchdog: belt-and-suspenders for the stdin 'end'/'close' handlers
|
||||||
// chain (`bun run` wrapper → shell → us) is severed by a crash. Poll for
|
// above. Stdin is the MCP transport pipe inherited straight from the CLI; the
|
||||||
// reparenting (POSIX) or a dead stdin pipe and self-terminate.
|
// kernel closes it on any CLI death (clean, crash, SIGKILL, OOM) regardless of
|
||||||
const bootPpid = process.ppid
|
// intermediate wrappers. A ppid-change check used to live here but it
|
||||||
|
// false-fires when the bun-run/shell wrapper exits or execs during normal
|
||||||
|
// startup and we get reparented to init.
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
const orphaned =
|
if (process.stdin.destroyed || process.stdin.readableEnded) shutdown()
|
||||||
(process.platform !== 'win32' && process.ppid !== bootPpid) ||
|
|
||||||
process.stdin.destroyed ||
|
|
||||||
process.stdin.readableEnded
|
|
||||||
if (orphaned) shutdown()
|
|
||||||
}, 5000).unref()
|
}, 5000).unref()
|
||||||
|
|
||||||
// Commands are DM-only. Responding in groups would: (1) leak pairing codes via
|
// Commands are DM-only. Responding in groups would: (1) leak pairing codes via
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user