github code-yeongyu/oh-my-openagent v3.17.15

9 hours ago

๐Ÿ–ฅ๏ธ OpenCode Desktop Now Loads OmO Cleanly

If you've been on OpenCode Desktop (Electron) since 1.14.34 and watched the agent switcher silently refuse to list any OmO agents, this release is for you. The plugin would die at module evaluation with Cannot destructure property 'spawn' of 'globalThis.Bun' as it is undefined. because bun build --target bun inlines 25 top-level var { spawn } = globalThis.Bun; statements that crash the moment Node runs them.

The fix replaces every from "bun" spawn import with a runtime shim that uses static node:child_process imports โ€” so the bundler never emits globalThis.Bun destructures in the first place. On real Bun it still goes straight to Bun.spawn for the fast path.

grep -c '} = globalThis.Bun;' dist/index.js โ†’ 0 (was 25).

All 7 OMO agents (atlas / explore / librarian / multimodal-looker / oracle / prometheus / sisyphus) now load cleanly on Desktop. Fixes #3797, closes the long tail from #3794 / #3721 / #3762.

๐Ÿ” Runtime Fallback No Longer Infinite-Loops On Itself

Thanks to @paolo-notaro โ€” when your fallback_models chain happened to include the same model that just failed, the runtime fallback hook would re-select it and spin forever. Now it correctly skips identity matches and walks to the next entry. (#3802)

๐Ÿ› ๏ธ Spawn Shim Parity Hardening

Cubic and Oracle review caught a few cross-runtime mismatches in the new shim that this release also fixes:

  • Default stdio matches Bun (["ignore", "pipe", "inherit"]) instead of Node's ["pipe", "pipe", "pipe"] โ€” prevents OpenClaw shell-command callers from hanging on cat-style processes that read stdin.
  • Spawn errors propagate โ€” proc.exited now rejects with the original ENOENT (etc.) on Node fallback instead of silently resolving to exit code 1.
  • spawnSync.pid returns the real PID instead of the placeholder -1.

Same defaults applied to spawn-with-windows-hide so the Windows path stays consistent.

๐Ÿงน Reliability Polish

  • session-notification-sender now tolerates shell promises that don't expose .nothrow (older Bun shells).
  • New regression tests cover default-agent sort ordering and the input-needed idle timer cleanup.

  • 1068485 Merge pull request #3798 from code-yeongyu/fix/node-runtime-compat
  • 9dd0e14 fix(bun-spawn-shim): match Bun.spawn semantics in Node fallback
  • 677b78f test(agents): cover default-agent sort shim ordering
  • 4c426a5 test(hooks): cancel idle notification timer in input-needed test
  • 46f6fa4 prevent infinite loop when fallback model equals current model
  • 953280e @paolo-notaro has signed the CLA in #3802
  • d800fec fix(runtime-fallback): prevent infinite loop when fallback model equals current model
  • e9d7dca fix(session-notification): tolerate shell promises without nothrow
  • f8defe2 fix(node-runtime-compat): harden Bun spawn shim
  • 3ddc757 fix(bun-spawn-shim): eliminate globalThis.Bun top-level destructures for Electron/Node compat
  • f178ea3 fix(electron-compat): prepend globalThis.Bun shim to prevent Electron/Node crash

Thank you to 1 community contributor:

  • @paolo-notaro:
    • fix(runtime-fallback): prevent infinite loop when fallback model equals current model

Don't miss a new oh-my-openagent release

NewReleases is sending notifications on new releases.