From d4ae943686d9958a014fe7bc2239d46e26a6d1c3 Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 2 Mar 2026 16:00:10 -0800 Subject: [PATCH 1/8] first cut at v0.14.1 release notes --- docs/docs/releasenotes.mdx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/docs/releasenotes.mdx b/docs/docs/releasenotes.mdx index d2671ec3b5..fb71d99d64 100644 --- a/docs/docs/releasenotes.mdx +++ b/docs/docs/releasenotes.mdx @@ -6,6 +6,34 @@ sidebar_position: 200 # Release Notes +### v0.14.1 — Mar 3, 2026 + +Wave v0.14.1 fixes several high-impact terminal bugs (Claude Code scrolling, IME input) and adds new config options: focus-follows-cursor, cursor style customization, workspace-scoped widgets, and vim-style block navigation. + +**Terminal Improvements:** + +- **Claude Code Scroll Fix** - Fixed a long-standing bug that caused terminal windows to jump to the top unexpectedly, affecting many Claude Code users +- **IME Fix** - Fixed Korean/CJK input where characters were lost or stuck in composition and only committed on Space +- **Scroll Position Preserved on Resize** - Terminal now stays scrolled to the bottom across resizes when it was already at the bottom +- **Better Link Handling** - Terminal URLs now have improved context menus and tooltips for easier navigation +- **Terminal Scrollback Save** - New context menu item and `wsh` command to save terminal scrollback to a file + +**New Features:** + +- **Focus Follows Cursor** - New `app:focusfollowscursor` setting (off/on/term) for hover-based block focus +- **Terminal Cursor Style & Blink** - New settings for cursor style (block/bar/underline) and blink, configurable per-block +- **Tab Close Confirmation** - New `tab:confirmclose` setting to prompt before closing a tab +- **Workspace-Scoped Widgets** - New optional `workspaces` field in `widgets.json` to show/hide widgets per-workspace +- **Vim-Style Block Navigation** - Added Ctrl+Shift+H/J/K/L to navigate between blocks +- **New AI Providers** - Added Groq and NanoGPT as built-in AI provider presets + +**Other Changes:** + +- Fixed intermittant bugs with connection switching in terminal blocks +- Widgets.json schema improvements for better editor validation +- Package updates and dependency upgrades +- Internal code cleanup and refactoring + ### v0.14.0 — Feb 10, 2026 **Durable SSH Sessions and Enhanced Connection Monitoring** From 965808f13e648d9f2f06974d2c2fa434878db356 Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 2 Mar 2026 16:06:39 -0800 Subject: [PATCH 2/8] add v0.14.1 onboarding --- frontend/app/onboarding/onboarding-common.tsx | 2 +- .../onboarding/onboarding-upgrade-patch.tsx | 105 ++++++++++++------ .../onboarding/onboarding-upgrade-v0141.tsx | 72 ++++++++++++ .../preview/previews/onboarding.preview.tsx | 55 +++++---- 4 files changed, 181 insertions(+), 53 deletions(-) create mode 100644 frontend/app/onboarding/onboarding-upgrade-v0141.tsx diff --git a/frontend/app/onboarding/onboarding-common.tsx b/frontend/app/onboarding/onboarding-common.tsx index b91bf81fa8..e8f9b75170 100644 --- a/frontend/app/onboarding/onboarding-common.tsx +++ b/frontend/app/onboarding/onboarding-common.tsx @@ -1,4 +1,4 @@ // Copyright 2026, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 -export const CurrentOnboardingVersion = "v0.14.0"; +export const CurrentOnboardingVersion = "v0.14.1"; diff --git a/frontend/app/onboarding/onboarding-upgrade-patch.tsx b/frontend/app/onboarding/onboarding-upgrade-patch.tsx index a4e09945de..5278e6ceec 100644 --- a/frontend/app/onboarding/onboarding-upgrade-patch.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-patch.tsx @@ -21,6 +21,7 @@ import { UpgradeOnboardingModal_v0_12_3_Content } from "./onboarding-upgrade-v01 import { UpgradeOnboardingModal_v0_13_0_Content } from "./onboarding-upgrade-v0130"; import { UpgradeOnboardingModal_v0_13_1_Content } from "./onboarding-upgrade-v0131"; import { UpgradeOnboardingModal_v0_14_0_Content } from "./onboarding-upgrade-v0140"; +import { UpgradeOnboardingModal_v0_14_1_Content } from "./onboarding-upgrade-v0141"; interface VersionConfig { version: string; @@ -29,6 +30,62 @@ interface VersionConfig { nextText?: string; } +interface UpgradeOnboardingFooterProps { + hasPrev: boolean; + hasNext: boolean; + prevText?: string; + nextText?: string; + onPrev?: () => void; + onNext?: () => void; + onClose: () => void; +} + +export function UpgradeOnboardingFooter({ + hasPrev, + hasNext, + prevText, + nextText, + onPrev, + onNext, + onClose, +}: UpgradeOnboardingFooterProps) { + return ( +
+
+
+ {hasPrev && ( +
+ +
+ )} +
+
+ +
+
+ {hasNext && ( +
+ +
+ )} +
+
+
+ ); +} + export const UpgradeOnboardingVersions: VersionConfig[] = [ { version: "v0.12.1", @@ -63,6 +120,12 @@ export const UpgradeOnboardingVersions: VersionConfig[] = [ version: "v0.14.0", content: () => , prevText: "Prev (v0.13.1)", + nextText: "Next (v0.14.1)", + }, + { + version: "v0.14.1", + content: () => , + prevText: "Prev (v0.14.0)", }, ]; @@ -150,39 +213,15 @@ const UpgradeOnboardingPatch = () => { > {currentVersion.content()} -
-
-
- {hasPrev && ( -
- -
- )} -
-
- -
-
- {hasNext && ( -
- -
- )} -
-
-
+ diff --git a/frontend/app/onboarding/onboarding-upgrade-v0141.tsx b/frontend/app/onboarding/onboarding-upgrade-v0141.tsx new file mode 100644 index 0000000000..82b0b34aef --- /dev/null +++ b/frontend/app/onboarding/onboarding-upgrade-v0141.tsx @@ -0,0 +1,72 @@ +// Copyright 2026, Command Line Inc. +// SPDX-License-Identifier: Apache-2.0 + +const UpgradeOnboardingModal_v0_14_1_Content = () => { + return ( +
+
+

+ Wave v0.14.1 fixes several high-impact terminal bugs and adds new config options for focus, cursor + style, and block navigation. +

+
+ +
+
+ +
+
+
Terminal Fixes
+
+
    +
  • + Claude Code Scroll Fix - Fixed unexpected terminal scroll jumps +
  • +
  • + IME Fix - Fixed Korean/CJK input losing or sticking characters +
  • +
  • + Scroll Position on Resize - Terminal stays at bottom across resizes +
  • +
  • + Terminal Scrollback Save - New context menu item and{" "} + wsh command to save scrollback to a file +
  • +
+
+
+
+ +
+
+ +
+
+
New Config Options
+
+
    +
  • + Focus Follows Cursor - New app:focusfollowscursor setting + (off/on/term) +
  • +
  • + Terminal Cursor Style & Blink - Configure cursor shape and blink + per-block +
  • +
  • + Vim-Style Block Navigation - Ctrl+Shift+H/J/K/L to navigate blocks +
  • +
  • + New AI Providers - Added Groq and NanoGPT as built-in presets +
  • +
+
+
+
+
+ ); +}; + +UpgradeOnboardingModal_v0_14_1_Content.displayName = "UpgradeOnboardingModal_v0_14_1_Content"; + +export { UpgradeOnboardingModal_v0_14_1_Content }; diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx index 0cf0b91e43..769596b595 100644 --- a/frontend/preview/previews/onboarding.preview.tsx +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -5,7 +5,10 @@ import Logo from "@/app/asset/logo.svg"; import { InitPage, NoTelemetryStarPage } from "@/app/onboarding/onboarding"; import { DurableSessionPage } from "@/app/onboarding/onboarding-durable"; import { FilesPage, MagnifyBlocksPage, WaveAIPage } from "@/app/onboarding/onboarding-features"; -import { UpgradeOnboardingVersions } from "@/app/onboarding/onboarding-upgrade-patch"; +import { + UpgradeOnboardingFooter, + UpgradeOnboardingVersions, +} from "@/app/onboarding/onboarding-upgrade-patch"; function OnboardingFeaturesV() { const noop = () => {}; @@ -34,27 +37,41 @@ function OnboardingFeaturesV() { } function UpgradeOnboardingPatchV() { + const noop = () => {}; return (
- {UpgradeOnboardingVersions.map((version) => ( -
-
-
-
-
- -
-
- Wave {version.version} Update -
-
-
{version.content()}
+ {UpgradeOnboardingVersions.map((version, idx) => { + const hasPrev = idx > 0; + const hasNext = idx < UpgradeOnboardingVersions.length - 1; + return ( +
+
+
+
+
+ +
+
+ Wave {version.version} Update +
+
+
{version.content()}
+ +
-
- ))} + ); + })}
); } From fc65664cf605d1e6c2d2ef1b2a964cdf655358d2 Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 2 Mar 2026 16:15:44 -0800 Subject: [PATCH 3/8] use onboarding gradient --- frontend/app/onboarding/onboarding-common.tsx | 6 ++ .../onboarding/onboarding-upgrade-minor.tsx | 6 +- .../onboarding/onboarding-upgrade-patch.tsx | 4 +- frontend/app/onboarding/onboarding.tsx | 5 +- .../preview/previews/onboarding.preview.tsx | 80 ++++++++++--------- 5 files changed, 56 insertions(+), 45 deletions(-) diff --git a/frontend/app/onboarding/onboarding-common.tsx b/frontend/app/onboarding/onboarding-common.tsx index e8f9b75170..9a506b2567 100644 --- a/frontend/app/onboarding/onboarding-common.tsx +++ b/frontend/app/onboarding/onboarding-common.tsx @@ -2,3 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 export const CurrentOnboardingVersion = "v0.14.1"; + +export function OnboardingGradientBg() { + return ( +
+ ); +} diff --git a/frontend/app/onboarding/onboarding-upgrade-minor.tsx b/frontend/app/onboarding/onboarding-upgrade-minor.tsx index 58d80b5645..8448779a9b 100644 --- a/frontend/app/onboarding/onboarding-upgrade-minor.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-minor.tsx @@ -1,10 +1,10 @@ -// Copyright 2025, Command Line Inc. +// Copyright 2026, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 import Logo from "@/app/asset/logo.svg"; import { Button } from "@/app/element/button"; import { FlexiModal } from "@/app/modals/modal"; -import { CurrentOnboardingVersion } from "@/app/onboarding/onboarding-common"; +import { CurrentOnboardingVersion, OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; import { OnboardingFeatures } from "@/app/onboarding/onboarding-features"; import { ClientModel } from "@/app/store/client-model"; import { globalStore } from "@/app/store/global"; @@ -200,7 +200,7 @@ const UpgradeOnboardingMinor = () => { return ( -
+
{pageComp}
); diff --git a/frontend/app/onboarding/onboarding-upgrade-patch.tsx b/frontend/app/onboarding/onboarding-upgrade-patch.tsx index 5278e6ceec..0a3244ad74 100644 --- a/frontend/app/onboarding/onboarding-upgrade-patch.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-patch.tsx @@ -4,7 +4,7 @@ import Logo from "@/app/asset/logo.svg"; import { Button } from "@/app/element/button"; import { FlexiModal } from "@/app/modals/modal"; -import { CurrentOnboardingVersion } from "@/app/onboarding/onboarding-common"; +import { CurrentOnboardingVersion, OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; import { ClientModel } from "@/app/store/client-model"; import { globalStore } from "@/app/store/global"; import { disableGlobalKeybindings, enableGlobalKeybindings, globalRefocus } from "@/app/store/keymodel"; @@ -196,7 +196,7 @@ const UpgradeOnboardingPatch = () => { return ( -
+
diff --git a/frontend/app/onboarding/onboarding.tsx b/frontend/app/onboarding/onboarding.tsx index 381339e6f0..e549932cf0 100644 --- a/frontend/app/onboarding/onboarding.tsx +++ b/frontend/app/onboarding/onboarding.tsx @@ -1,10 +1,11 @@ -// Copyright 2025, Command Line Inc. +// Copyright 2026, Command Line Inc. // SPDX-License-Identifier: Apache-2.0 import Logo from "@/app/asset/logo.svg"; import { Button } from "@/app/element/button"; import { FlexiModal } from "@/app/modals/modal"; import { OnboardingFeatures } from "@/app/onboarding/onboarding-features"; +import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; import { ClientModel } from "@/app/store/client-model"; import { useSettingsKeyAtom } from "@/app/store/global"; import { disableGlobalKeybindings, enableGlobalKeybindings, globalRefocus } from "@/app/store/keymodel"; @@ -302,7 +303,7 @@ const NewInstallOnboardingModal = () => { return ( -
+
{pageComp}
); diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx index 769596b595..3deeca19a7 100644 --- a/frontend/preview/previews/onboarding.preview.tsx +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import Logo from "@/app/asset/logo.svg"; +import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; import { InitPage, NoTelemetryStarPage } from "@/app/onboarding/onboarding"; import { DurableSessionPage } from "@/app/onboarding/onboarding-durable"; import { FilesPage, MagnifyBlocksPage, WaveAIPage } from "@/app/onboarding/onboarding-features"; @@ -10,28 +11,37 @@ import { UpgradeOnboardingVersions, } from "@/app/onboarding/onboarding-upgrade-patch"; +function OnboardingModalWrapper({ width, children }: { width: string; children: React.ReactNode }) { + return ( +
+ +
{children}
+
+ ); +} + function OnboardingFeaturesV() { const noop = () => {}; return (
-
+ -
-
+ + -
-
+ + -
-
+ + -
-
+ + -
-
+ + -
+
); } @@ -44,32 +54,26 @@ function UpgradeOnboardingPatchV() { const hasPrev = idx > 0; const hasNext = idx < UpgradeOnboardingVersions.length - 1; return ( -
-
-
-
-
- -
-
- Wave {version.version} Update -
-
-
{version.content()}
- -
-
+ +
+
+ +
+
+ Wave {version.version} Update +
+
+
{version.content()}
+ +
); })}
From f851f9e12adfa88099a3fbf4df6851de29da8fab Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 2 Mar 2026 16:25:24 -0800 Subject: [PATCH 4/8] preview minor upgrade screen --- .../onboarding/onboarding-upgrade-minor.tsx | 154 ++++++++++-------- .../preview/previews/onboarding.preview.tsx | 19 ++- 2 files changed, 100 insertions(+), 73 deletions(-) diff --git a/frontend/app/onboarding/onboarding-upgrade-minor.tsx b/frontend/app/onboarding/onboarding-upgrade-minor.tsx index 8448779a9b..b019fa308e 100644 --- a/frontend/app/onboarding/onboarding-upgrade-minor.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-minor.tsx @@ -17,6 +17,86 @@ import { OverlayScrollbarsComponent } from "overlayscrollbars-react"; import { useEffect, useRef, useState } from "react"; import { debounce } from "throttle-debounce"; +type UpgradeMinorWelcomePageProps = { + onStarClick: () => void; + onAlreadyStarred: () => void; + onMaybeLater: () => void; +}; + +const UpgradeMinorWelcomePage = ({ onStarClick, onAlreadyStarred, onMaybeLater }: UpgradeMinorWelcomePageProps) => { + return ( +
+
+
+ +
+
Welcome to Wave v0.14!
+
+ +
+
+
+
+ + Wave AI +
+
+ + Durable SSH Sessions +
+
+
+

+ Wave AI is your terminal assistant with full context. It can read your terminal + output, analyze widgets, read and write files, and help you solve + problems faster. +

+

+ New in v0.13: Wave AI now + supports local models and bring-your-own-key! Use Ollama, LM Studio, vLLM, + OpenRouter, or any OpenAI-compatible provider. +

+

+ New in v0.14: Durable SSH + sessions survive network drops, laptop sleep, and restarts — all without tmux or + screen. +

+
+
+ +
+ +
+
Thanks for being an early Wave adopter! ⭐
+
+ A GitHub star shows your support for Wave (and open-source) and helps us reach more + developers. +
+
+
+
+
+
+ + + +
+
+
+ ); +}; + +UpgradeMinorWelcomePage.displayName = "UpgradeMinorWelcomePage"; + const UpgradeOnboardingMinor = () => { const modalRef = useRef(null); const [pageName, setPageName] = useState<"welcome" | "features">("welcome"); @@ -119,73 +199,11 @@ const UpgradeOnboardingMinor = () => { let pageComp: React.JSX.Element = null; if (pageName === "welcome") { pageComp = ( -
-
-
- -
-
Welcome to Wave v0.14!
-
- -
-
-
-
- - Wave AI -
-
- - Durable SSH Sessions -
-
-
-

- Wave AI is your terminal assistant with full context. It can read your terminal - output, analyze widgets, read and write files, and help you solve - problems faster. -

-

- New in v0.13: Wave AI now - supports local models and bring-your-own-key! Use Ollama, LM Studio, vLLM, - OpenRouter, or any OpenAI-compatible provider. -

-

- New in v0.14: Durable SSH - sessions survive network drops, laptop sleep, and restarts — all without tmux or - screen. -

-
-
- -
- -
-
Thanks for being an early Wave adopter! ⭐
-
- A GitHub star shows your support for Wave (and open-source) and helps us reach more - developers. -
-
-
-
-
-
- - - -
-
-
+ ); } else if (pageName === "features") { pageComp = ; @@ -208,4 +226,4 @@ const UpgradeOnboardingMinor = () => { UpgradeOnboardingMinor.displayName = "UpgradeOnboardingMinor"; -export { UpgradeOnboardingMinor }; +export { UpgradeMinorWelcomePage, UpgradeOnboardingMinor }; diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx index 3deeca19a7..8820c89b45 100644 --- a/frontend/preview/previews/onboarding.preview.tsx +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -2,14 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 import Logo from "@/app/asset/logo.svg"; -import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; import { InitPage, NoTelemetryStarPage } from "@/app/onboarding/onboarding"; +import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; import { DurableSessionPage } from "@/app/onboarding/onboarding-durable"; import { FilesPage, MagnifyBlocksPage, WaveAIPage } from "@/app/onboarding/onboarding-features"; -import { - UpgradeOnboardingFooter, - UpgradeOnboardingVersions, -} from "@/app/onboarding/onboarding-upgrade-patch"; +import { UpgradeMinorWelcomePage } from "@/app/onboarding/onboarding-upgrade-minor"; +import { UpgradeOnboardingFooter, UpgradeOnboardingVersions } from "@/app/onboarding/onboarding-upgrade-patch"; function OnboardingModalWrapper({ width, children }: { width: string; children: React.ReactNode }) { return ( @@ -80,11 +78,22 @@ function UpgradeOnboardingPatchV() { ); } +function UpgradeOnboardingMinorV() { + const noop = () => {}; + return ( + + + + ); +} + export function OnboardingPreview() { return (
Onboarding features
+
Onboarding minor upgrade
+
Onboarding patch updates
From 2d9c10abf09a3507e4f0c534d4aa55e56fa0049a Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 2 Mar 2026 16:41:13 -0800 Subject: [PATCH 5/8] working on star ask page --- .../app/onboarding/onboarding-starask.tsx | 64 +++++++++++++++++++ .../onboarding/onboarding-upgrade-minor.tsx | 18 +++--- frontend/app/onboarding/onboarding.tsx | 40 +++++++++++- .../preview/previews/onboarding.preview.tsx | 12 ++++ frontend/types/gotypes.d.ts | 2 + pkg/telemetry/telemetrydata/telemetrydata.go | 1 + 6 files changed, 124 insertions(+), 13 deletions(-) create mode 100644 frontend/app/onboarding/onboarding-starask.tsx diff --git a/frontend/app/onboarding/onboarding-starask.tsx b/frontend/app/onboarding/onboarding-starask.tsx new file mode 100644 index 0000000000..8b9f9a73de --- /dev/null +++ b/frontend/app/onboarding/onboarding-starask.tsx @@ -0,0 +1,64 @@ +// Copyright 2026, Command Line Inc. +// SPDX-License-Identifier: Apache-2.0 + +import Logo from "@/app/asset/logo.svg"; +import { Button } from "@/app/element/button"; +import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; + +type StarAskPageProps = { + onStarClick: () => void; + onAlreadyStarred: () => void; + onMaybeLater: () => void; +}; + +export function StarAskPage({ onStarClick, onAlreadyStarred, onMaybeLater }: StarAskPageProps) { + return ( +
+
+
+ +
+
Support Wave on GitHub ⭐
+
+
+
+
Thanks for being an early Wave adopter!
+
+ A GitHub star shows your support for Wave (and open-source) and helps us reach more developers. + It takes just one click and means a lot to the team. +
+
+ + wavetermdev/waveterm +
+
+
+
+
+ + + +
+
+
+ ); +} + +type StarAskModalInnerProps = StarAskPageProps; + +export function StarAskModalInner(props: StarAskModalInnerProps) { + return ( +
+ +
+ +
+
+ ); +} diff --git a/frontend/app/onboarding/onboarding-upgrade-minor.tsx b/frontend/app/onboarding/onboarding-upgrade-minor.tsx index b019fa308e..b165c0ce7f 100644 --- a/frontend/app/onboarding/onboarding-upgrade-minor.tsx +++ b/frontend/app/onboarding/onboarding-upgrade-minor.tsx @@ -50,19 +50,17 @@ const UpgradeMinorWelcomePage = ({ onStarClick, onAlreadyStarred, onMaybeLater }

- Wave AI is your terminal assistant with full context. It can read your terminal - output, analyze widgets, read and write files, and help you solve - problems faster. + Wave AI is your terminal assistant with full context. It can read your terminal output, + analyze widgets, read and write files, and help you solve problems faster.

New in v0.13: Wave AI now - supports local models and bring-your-own-key! Use Ollama, LM Studio, vLLM, - OpenRouter, or any OpenAI-compatible provider. + supports local models and bring-your-own-key! Use Ollama, LM Studio, vLLM, OpenRouter, + or any OpenAI-compatible provider.

New in v0.14: Durable SSH - sessions survive network drops, laptop sleep, and restarts — all without tmux or - screen. + sessions survive network drops, laptop sleep, and restarts — all without tmux or screen.

@@ -137,7 +135,7 @@ const UpgradeOnboardingMinor = () => { TabRpcClient, { event: "onboarding:githubstar", - props: { "onboarding:githubstar": "star" }, + props: { "onboarding:githubstar": "star", "onboarding:page": "minorupgrade" }, }, { noresponse: true } ); @@ -155,7 +153,7 @@ const UpgradeOnboardingMinor = () => { TabRpcClient, { event: "onboarding:githubstar", - props: { "onboarding:githubstar": "already" }, + props: { "onboarding:githubstar": "already", "onboarding:page": "minorupgrade" }, }, { noresponse: true } ); @@ -172,7 +170,7 @@ const UpgradeOnboardingMinor = () => { TabRpcClient, { event: "onboarding:githubstar", - props: { "onboarding:githubstar": "later" }, + props: { "onboarding:githubstar": "later", "onboarding:page": "minorupgrade" }, }, { noresponse: true } ); diff --git a/frontend/app/onboarding/onboarding.tsx b/frontend/app/onboarding/onboarding.tsx index e549932cf0..2755db002f 100644 --- a/frontend/app/onboarding/onboarding.tsx +++ b/frontend/app/onboarding/onboarding.tsx @@ -4,8 +4,8 @@ import Logo from "@/app/asset/logo.svg"; import { Button } from "@/app/element/button"; import { FlexiModal } from "@/app/modals/modal"; -import { OnboardingFeatures } from "@/app/onboarding/onboarding-features"; import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; +import { OnboardingFeatures } from "@/app/onboarding/onboarding-features"; import { ClientModel } from "@/app/store/client-model"; import { useSettingsKeyAtom } from "@/app/store/global"; import { disableGlobalKeybindings, enableGlobalKeybindings, globalRefocus } from "@/app/store/keymodel"; @@ -35,6 +35,22 @@ const InitPage = ({ isCompact }: { isCompact: boolean }) => { const [telemetryEnabled, setTelemetryEnabled] = useState(!!telemetrySetting); const setPageName = useSetAtom(pageNameAtom); + const handleStarClick = async () => { + RpcApi.RecordTEventCommand( + TabRpcClient, + { + event: "onboarding:githubstar", + props: { "onboarding:githubstar": "star", "onboarding:page": "init" }, + }, + { noresponse: true } + ); + const clientId = ClientModel.getInstance().clientId; + await RpcApi.SetMetaCommand(TabRpcClient, { + oref: WOS.makeORef("client", clientId), + meta: { "onboarding:githubstar": true }, + }); + }; + const acceptTos = () => { if (!clientData?.tosagreed) { fireAndForget(services.ClientService.AgreeTos); @@ -77,6 +93,7 @@ const InitPage = ({ isCompact }: { isCompact: boolean }) => { href="https://github.com/wavetermdev/waveterm?ref=install" rel="noopener" className="text-accent" + onClick={handleStarClick} > @@ -84,13 +101,14 @@ const InitPage = ({ isCompact }: { isCompact: boolean }) => {
Support us on GitHub
- We're open source and committed to providing a free terminal for individual - users. Please show your support by giving us a star on{" "} + We're open source, open-model, and committed to providing a free terminal + for individual users. Please show your support by giving us a star on{" "} Github (wavetermdev/waveterm) @@ -170,6 +188,14 @@ const NoTelemetryStarPage = ({ isCompact }: { isCompact: boolean }) => { const setPageName = useSetAtom(pageNameAtom); const handleStarClick = async () => { + RpcApi.RecordTEventCommand( + TabRpcClient, + { + event: "onboarding:githubstar", + props: { "onboarding:githubstar": "star", "onboarding:page": "notelemetry" }, + }, + { noresponse: true } + ); const clientId = ClientModel.getInstance().clientId; await RpcApi.SetMetaCommand(TabRpcClient, { oref: WOS.makeORef("client", clientId), @@ -180,6 +206,14 @@ const NoTelemetryStarPage = ({ isCompact }: { isCompact: boolean }) => { }; const handleMaybeLater = async () => { + RpcApi.RecordTEventCommand( + TabRpcClient, + { + event: "onboarding:githubstar", + props: { "onboarding:githubstar": "later", "onboarding:page": "notelemetry" }, + }, + { noresponse: true } + ); const clientId = ClientModel.getInstance().clientId; await RpcApi.SetMetaCommand(TabRpcClient, { oref: WOS.makeORef("client", clientId), diff --git a/frontend/preview/previews/onboarding.preview.tsx b/frontend/preview/previews/onboarding.preview.tsx index 8820c89b45..b47b21f3cd 100644 --- a/frontend/preview/previews/onboarding.preview.tsx +++ b/frontend/preview/previews/onboarding.preview.tsx @@ -6,6 +6,7 @@ import { InitPage, NoTelemetryStarPage } from "@/app/onboarding/onboarding"; import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; import { DurableSessionPage } from "@/app/onboarding/onboarding-durable"; import { FilesPage, MagnifyBlocksPage, WaveAIPage } from "@/app/onboarding/onboarding-features"; +import { StarAskPage } from "@/app/onboarding/onboarding-starask"; import { UpgradeMinorWelcomePage } from "@/app/onboarding/onboarding-upgrade-minor"; import { UpgradeOnboardingFooter, UpgradeOnboardingVersions } from "@/app/onboarding/onboarding-upgrade-patch"; @@ -87,6 +88,15 @@ function UpgradeOnboardingMinorV() { ); } +function StarAskV() { + const noop = () => {}; + return ( + + + + ); +} + export function OnboardingPreview() { return (
@@ -94,6 +104,8 @@ export function OnboardingPreview() {
Onboarding minor upgrade
+
Onboarding star ask
+
Onboarding patch updates
diff --git a/frontend/types/gotypes.d.ts b/frontend/types/gotypes.d.ts index 313f8dbdec..8b60d91dd2 100644 --- a/frontend/types/gotypes.d.ts +++ b/frontend/types/gotypes.d.ts @@ -25,6 +25,7 @@ declare global { "ai:thinkinglevel"?: string; "ai:verbosity"?: string; "ai:endpoint"?: string; + "ai:proxyurl"?: string; "ai:azureapiversion"?: string; "ai:apitoken"?: string; "ai:apitokensecretname"?: string; @@ -1483,6 +1484,7 @@ declare global { "onboarding:feature"?: "waveai" | "durable" | "magnify" | "wsh"; "onboarding:version"?: string; "onboarding:githubstar"?: "already" | "star" | "later"; + "onboarding:page"?: string; "display:height"?: number; "display:width"?: number; "display:dpr"?: number; diff --git a/pkg/telemetry/telemetrydata/telemetrydata.go b/pkg/telemetry/telemetrydata/telemetrydata.go index 30ff1db737..25484be982 100644 --- a/pkg/telemetry/telemetrydata/telemetrydata.go +++ b/pkg/telemetry/telemetrydata/telemetrydata.go @@ -135,6 +135,7 @@ type TEventProps struct { OnboardingFeature string `json:"onboarding:feature,omitempty" tstype:"\"waveai\" | \"durable\" | \"magnify\" | \"wsh\""` OnboardingVersion string `json:"onboarding:version,omitempty"` OnboardingGithubStar string `json:"onboarding:githubstar,omitempty" tstype:"\"already\" | \"star\" | \"later\""` + OnboardingPage string `json:"onboarding:page,omitempty"` DisplayHeight int `json:"display:height,omitempty"` DisplayWidth int `json:"display:width,omitempty"` From ae29f2e3785d8c6745af961aaebef5f31b0fe18f Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 2 Mar 2026 16:53:25 -0800 Subject: [PATCH 6/8] hook star ask to the upgrade patch flow --- .../app/onboarding/onboarding-starask.tsx | 69 +++++++++++++++++-- .../onboarding/onboarding-upgrade-patch.tsx | 29 ++++++-- .../preview/previews/onboarding.preview.tsx | 2 +- 3 files changed, 88 insertions(+), 12 deletions(-) diff --git a/frontend/app/onboarding/onboarding-starask.tsx b/frontend/app/onboarding/onboarding-starask.tsx index 8b9f9a73de..12786027c1 100644 --- a/frontend/app/onboarding/onboarding-starask.tsx +++ b/frontend/app/onboarding/onboarding-starask.tsx @@ -4,14 +4,69 @@ import Logo from "@/app/asset/logo.svg"; import { Button } from "@/app/element/button"; import { OnboardingGradientBg } from "@/app/onboarding/onboarding-common"; +import { ClientModel } from "@/app/store/client-model"; +import * as WOS from "@/app/store/wos"; +import { RpcApi } from "@/app/store/wshclientapi"; +import { TabRpcClient } from "@/app/store/wshrpcutil"; type StarAskPageProps = { - onStarClick: () => void; - onAlreadyStarred: () => void; - onMaybeLater: () => void; + onClose: () => void; + page?: string; }; -export function StarAskPage({ onStarClick, onAlreadyStarred, onMaybeLater }: StarAskPageProps) { +export function StarAskPage({ onClose, page = "upgrade" }: StarAskPageProps) { + const handleStarClick = async () => { + RpcApi.RecordTEventCommand( + TabRpcClient, + { + event: "onboarding:githubstar", + props: { "onboarding:githubstar": "star", "onboarding:page": page }, + }, + { noresponse: true } + ); + const clientId = ClientModel.getInstance().clientId; + await RpcApi.SetMetaCommand(TabRpcClient, { + oref: WOS.makeORef("client", clientId), + meta: { "onboarding:githubstar": true }, + }); + window.open(`https://github.com/wavetermdev/waveterm?ref=${page}`, "_blank"); + onClose(); + }; + + const handleAlreadyStarred = async () => { + RpcApi.RecordTEventCommand( + TabRpcClient, + { + event: "onboarding:githubstar", + props: { "onboarding:githubstar": "already", "onboarding:page": page }, + }, + { noresponse: true } + ); + const clientId = ClientModel.getInstance().clientId; + await RpcApi.SetMetaCommand(TabRpcClient, { + oref: WOS.makeORef("client", clientId), + meta: { "onboarding:githubstar": true }, + }); + onClose(); + }; + + const handleMaybeLater = async () => { + RpcApi.RecordTEventCommand( + TabRpcClient, + { + event: "onboarding:githubstar", + props: { "onboarding:githubstar": "later", "onboarding:page": page }, + }, + { noresponse: true } + ); + const clientId = ClientModel.getInstance().clientId; + await RpcApi.SetMetaCommand(TabRpcClient, { + oref: WOS.makeORef("client", clientId), + meta: { "onboarding:githubstar": false }, + }); + onClose(); + }; + return (
@@ -35,13 +90,13 @@ export function StarAskPage({ onStarClick, onAlreadyStarred, onMaybeLater }: Sta