github backnotprop/plannotator v0.17.7

7 hours ago

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.6 Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix
v0.17.5 Fix VCS detection crash when p4 not installed, install script cache path fix
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset

What's New in v0.17.7

v0.17.7 fixes the "fetch(req) did not return a Response object" error that affected OpenCode users running opencode web, opencode serve, or any mode that starts the HTTP server (including --port or --hostname flags).

Fix: OpenCode Web/Serve Mode Compatibility

OpenCode recently added Node.js support alongside Bun. To bridge its Hono app to Node's HTTP server, OpenCode uses @hono/node-server, which includes a createAdaptorServer function. That function unconditionally patches global.Response with a polyfill class — a necessary step for Node.js, which lacks native web API globals.

The problem: in opencode web and opencode serve modes, this patch runs before plugins load. When the plannotator plugin calls Bun.serve() and the fetch handler returns new Response(...), it's constructing the hono polyfill, not Bun's native Response. Bun validates return types using internal type tags, not instanceof, so it rejects the polyfill and shows its default error page. The error() handler added in v0.17.6 also uses new Response(...), which is why it didn't fire either — the error handler's own response was also a polyfill.

Plain opencode TUI without --port or server config was never affected. In that mode, OpenCode routes requests through an internal RPC bridge instead of starting an HTTP server, so createAdaptorServer never runs and global.Response stays native.

The fix detects the polyfill by walking the prototype chain. Hono sets up Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype), so the parent prototype's constructor is the original native Response. The plugin recovers it and restores globalThis.Response before any server code runs. When Response hasn't been patched, the detection check fails safely and the fix is a no-op.


Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows PowerShell:

irm https://plannotator.ai/install.ps1 | iex

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.7

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands.

OpenCode: Clear cache and restart:

rm -rf ~/.cache/opencode/packages/@plannotator ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace.


What's Changed

  • fix: recover native Response when patched by hono node-server adapter by @backnotprop

Community

@Zengwenj reported the original issue in #528. @xxJava provided the p4 stack trace and confirmed cross-platform reproduction. @boris-gorbylev and @chocochu confirmed on macOS. @jehu-rodriguez confirmed 0.17.6's error handler didn't fire, which was the key clue that the issue was a non-Response return rather than an exception. The latest reporter confirmed opencode web as the specific trigger, which led directly to identifying the hono adapter's global.Response patch as the root cause.

Full Changelog: v0.17.6...v0.17.7

Don't miss a new plannotator release

NewReleases is sending notifications on new releases.