From 09d410f6fcfc99b6e1c619ccd269255462342ea9 Mon Sep 17 00:00:00 2001 From: Ryan Vogel Date: Thu, 5 Feb 2026 05:30:20 -0500 Subject: [PATCH 1/3] tui: show discord link for bug reports in preview sessions --- .../src/cli/cmd/tui/routes/session/index.tsx | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 8a38d9e6f1..3d48deb914 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -78,6 +78,7 @@ import { QuestionPrompt } from "./question" import { DialogExportOptions } from "../../ui/dialog-export-options" import { formatTranscript } from "../../util/transcript" import { UI } from "@/cli/ui.ts" +import { Installation } from "@/installation" addDefaultParsers(parsers.parsers) @@ -226,14 +227,19 @@ export function Session() { createEffect(() => { const title = Locale.truncate(session()?.title ?? "", 50) - return exit.message.set( - [ - ``, - ` █▀▀█ ${UI.Style.TEXT_DIM}${title}${UI.Style.TEXT_NORMAL}`, - ` █ █ ${UI.Style.TEXT_DIM}opencode -s ${session()?.id}${UI.Style.TEXT_NORMAL}`, - ` ▀▀▀▀ `, - ].join("\n"), - ) + const lines = [ + ``, + ` █▀▀█ ${UI.Style.TEXT_DIM}${title}${UI.Style.TEXT_NORMAL}`, + ` █ █ ${UI.Style.TEXT_DIM}opencode -s ${session()?.id}${UI.Style.TEXT_NORMAL}`, + ] + if (Installation.isPreview()) { + lines.push( + ` ▀▀▀▀ ${UI.Style.TEXT_DIM}found a bug? report it on discord at https://opencode.ai/discord${UI.Style.TEXT_NORMAL}`, + ) + } else { + lines.push(` ▀▀▀▀ `) + } + return exit.message.set(lines.join("\n")) }) useKeyboard((evt) => { From 39845695bac41c1f5a046e49eae40d8afa74e6bd Mon Sep 17 00:00:00 2001 From: Ryan Vogel Date: Thu, 5 Feb 2026 08:02:23 -0500 Subject: [PATCH 2/3] tui: show Discord bug report banner only for beta channel users The Discord bug report banner in the session header now only appears for beta channel installations instead of all preview channels. This ensures only beta testers see the bug report prompt, making it more targeted and relevant to users actively testing pre-release builds. --- packages/opencode/src/cli/cmd/tui/routes/session/index.tsx | 2 +- packages/opencode/src/installation/index.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 3d48deb914..c2e338e03e 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -232,7 +232,7 @@ export function Session() { ` █▀▀█ ${UI.Style.TEXT_DIM}${title}${UI.Style.TEXT_NORMAL}`, ` █ █ ${UI.Style.TEXT_DIM}opencode -s ${session()?.id}${UI.Style.TEXT_NORMAL}`, ] - if (Installation.isPreview()) { + if (Installation.CHANNEL === "beta") { lines.push( ` ▀▀▀▀ ${UI.Style.TEXT_DIM}found a bug? report it on discord at https://opencode.ai/discord${UI.Style.TEXT_NORMAL}`, ) diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index d18c9e31a1..9b9b74f4f4 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -53,6 +53,10 @@ export namespace Installation { return CHANNEL !== "latest" } + export function isBeta() { + return CHANNEL === "beta" + } + export function isLocal() { return CHANNEL === "local" } From d7766bc6eb5b52b09b0241ee0ea48cbf48c5d2e8 Mon Sep 17 00:00:00 2001 From: Ryan Vogel Date: Thu, 5 Feb 2026 08:05:20 -0500 Subject: [PATCH 3/3] core: remove unused isBeta() function from installation module --- packages/opencode/src/installation/index.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index 9b9b74f4f4..d18c9e31a1 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -53,10 +53,6 @@ export namespace Installation { return CHANNEL !== "latest" } - export function isBeta() { - return CHANNEL === "beta" - } - export function isLocal() { return CHANNEL === "local" }