mirror of
https://github.com/backnotprop/plannotator.git
synced 2026-09-14 14:17:26 +08:00
fe5d377a4d
On OpenCode 2 a remote session's URL was invisible. runNativeCommand builds its bridge client with createV2BridgeClient, which deliberately has no tui domain, so toastPlannotatorUrl optional-chained to a no-op; both URL delivery paths (the CLI stderr forwarder and the ready-file poller) route through it. The V2 client's app.log is console.error, and OpenCode discards a server plugin's stderr under both default launch modes (packages/cli/src/services/ standalone.ts uses stderr: "ignore" unless OPENCODE_PRINT_LOGS=1). Remote mode also suppresses the browser, so /plannotator-review showed the user nothing at all and presented as a hang. Deliver the URL as a visible transcript notice instead. createSessionUrlNotifier duck-types ctx.session.synthetic and exposes it to cli-bridge as notifyUrl, a seam toastPlannotatorUrl prefers over the toast when present; OpenCode 1 clients carry no notifyUrl and keep their real toast unchanged. The notice is posted with resume: false, which upstream skips the wake for, so nothing starts a model turn, and it carries the URL in both text and description because the TUI drops a synthetic row whose description is empty and renders the description rather than the text. Everything is guarded: a host without session.synthetic, or a call with no session, gets no notifier and falls back to today's log-only behavior, and a rejecting synthetic is caught and leaves the URL retryable by the other delivery path. The README's remedy line claimed remote sessions should read the URL from the OpenCode log, which was never true; it now describes the transcript notice and names OPENCODE_PRINT_LOGS=1 for older hosts. Also fixes two bugs in the OpenCode 2 native-command smoke: - scripts/opencode2-native-commands-smoke.sh looked for a node_modules/.bin/ opencode binary. @opencode-ai/cli publishes opencode2 on every dist-tag, so the script failed before it started a server. It now tries both names and reports which it looked for. - The command-ownership check read /api/command once, immediately after activation, racing the reclaim schedule whose last tick lands about 15.5s later. Under PLANNOTATOR_SMOKE_EXPECT_NATIVE=1 that reported a shadowing bug the reclaim had simply not reached yet. It now polls to a 30s deadline (PLANNOTATOR_SMOKE_COMMAND_TIMEOUT_MS), still only after /api/plugin reports the plugin loaded. AI-assisted (Claude) under maintainer direction.