diff --git a/frontend/app/onboarding/onboarding-common.tsx b/frontend/app/onboarding/onboarding-common.tsx
index 44001aca5d..60711746e1 100644
--- a/frontend/app/onboarding/onboarding-common.tsx
+++ b/frontend/app/onboarding/onboarding-common.tsx
@@ -1,7 +1,7 @@
// Copyright 2026, Command Line Inc.
// SPDX-License-Identifier: Apache-2.0
-export const CurrentOnboardingVersion = "v0.14.2";
+export const CurrentOnboardingVersion = "v0.14.3";
export function OnboardingGradientBg() {
return (
diff --git a/frontend/app/onboarding/onboarding-upgrade-patch.tsx b/frontend/app/onboarding/onboarding-upgrade-patch.tsx
index 60760ffea1..0eded88f12 100644
--- a/frontend/app/onboarding/onboarding-upgrade-patch.tsx
+++ b/frontend/app/onboarding/onboarding-upgrade-patch.tsx
@@ -133,10 +133,10 @@ export const UpgradeOnboardingVersions: VersionConfig[] = [
version: "v0.14.1",
content: () => ,
prevText: "Prev (v0.14.0)",
- nextText: "Next (v0.14.2)",
+ nextText: "Next (v0.14.3)",
},
{
- version: "v0.14.2",
+ version: "v0.14.3",
content: () => ,
prevText: "Prev (v0.14.1)",
},
diff --git a/frontend/app/onboarding/onboarding-upgrade-v0142.tsx b/frontend/app/onboarding/onboarding-upgrade-v0142.tsx
index 90ddb2cd69..2fb8c1bd82 100644
--- a/frontend/app/onboarding/onboarding-upgrade-v0142.tsx
+++ b/frontend/app/onboarding/onboarding-upgrade-v0142.tsx
@@ -10,7 +10,8 @@ const UpgradeOnboardingModal_v0_14_2_Content = () => {
Wave v0.14.2 introduces a new block badge system for at-a-glance status, along with directory
- preview improvements and bug fixes.
+ preview improvements and bug fixes. v0.14.3 is a patch release fixing a showstopper bug in
+ onboarding.
@@ -62,6 +63,9 @@ const UpgradeOnboardingModal_v0_14_2_Content = () => {
Other Changes
+ -
+ [v0.14.3] [bugfix] Fixed a showstopper onboarding bug
+
-
Directory Preview - Improved mod time formatting, zebra-striped rows,
better default sort, and YAML file support
diff --git a/frontend/app/onboarding/onboarding.tsx b/frontend/app/onboarding/onboarding.tsx
index 7c95ef27a6..ba139e81df 100644
--- a/frontend/app/onboarding/onboarding.tsx
+++ b/frontend/app/onboarding/onboarding.tsx
@@ -59,7 +59,7 @@ const InitPage = ({
const acceptTos = () => {
if (!clientData?.tosagreed) {
- fireAndForget(services.ClientService.AgreeTos);
+ fireAndForget(() => services.ClientService.AgreeTos());
}
if (telemetryEnabled) {
WorkspaceLayoutModel.getInstance().setAIPanelVisible(true);
@@ -325,7 +325,7 @@ const NewInstallOnboardingModal = () => {
let pageComp: React.JSX.Element = null;
switch (pageName) {
case "init":
- pageComp = ;
+ pageComp = services.ClientService.TelemetryUpdate(value)} />;
break;
case "notelemetrystar":
pageComp = ;
diff --git a/frontend/app/store/services.ts b/frontend/app/store/services.ts
index 3dad2a3e5c..035834672a 100644
--- a/frontend/app/store/services.ts
+++ b/frontend/app/store/services.ts
@@ -24,18 +24,18 @@ export class BlockServiceType {
// queue a layout action to cleanup orphaned blocks in the tab
// @returns object updates
CleanupOrphanedBlocks(tabId: string): Promise {
- return callBackendService(this.waveEnv, "block", "CleanupOrphanedBlocks", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "block", "CleanupOrphanedBlocks", Array.from(arguments))
}
GetControllerStatus(arg2: string): Promise {
- return callBackendService(this.waveEnv, "block", "GetControllerStatus", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "block", "GetControllerStatus", Array.from(arguments))
}
// save the terminal state to a blockfile
SaveTerminalState(blockId: string, state: string, stateType: string, ptyOffset: number, termSize: TermSize): Promise {
- return callBackendService(this.waveEnv, "block", "SaveTerminalState", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "block", "SaveTerminalState", Array.from(arguments))
}
SaveWaveAiData(arg2: string, arg3: WaveAIPromptMessageType[]): Promise {
- return callBackendService(this.waveEnv, "block", "SaveWaveAiData", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "block", "SaveWaveAiData", Array.from(arguments))
}
}
@@ -51,22 +51,22 @@ export class ClientServiceType {
// @returns object updates
AgreeTos(): Promise {
- return callBackendService(this.waveEnv, "client", "AgreeTos", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "client", "AgreeTos", Array.from(arguments))
}
FocusWindow(arg2: string): Promise {
- return callBackendService(this.waveEnv, "client", "FocusWindow", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "client", "FocusWindow", Array.from(arguments))
}
GetAllConnStatus(): Promise {
- return callBackendService(this.waveEnv, "client", "GetAllConnStatus", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "client", "GetAllConnStatus", Array.from(arguments))
}
GetClientData(): Promise {
- return callBackendService(this.waveEnv, "client", "GetClientData", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "client", "GetClientData", Array.from(arguments))
}
GetTab(arg1: string): Promise {
- return callBackendService(this.waveEnv, "client", "GetTab", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "client", "GetTab", Array.from(arguments))
}
TelemetryUpdate(arg2: boolean): Promise {
- return callBackendService(this.waveEnv, "client", "TelemetryUpdate", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "client", "TelemetryUpdate", Array.from(arguments))
}
}
@@ -82,32 +82,32 @@ export class ObjectServiceType {
// @returns blockId (and object updates)
CreateBlock(blockDef: BlockDef, rtOpts: RuntimeOpts): Promise {
- return callBackendService(this.waveEnv, "object", "CreateBlock", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "object", "CreateBlock", Array.from(arguments))
}
// @returns object updates
DeleteBlock(blockId: string): Promise {
- return callBackendService(this.waveEnv, "object", "DeleteBlock", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "object", "DeleteBlock", Array.from(arguments))
}
// get wave object by oref
GetObject(oref: string): Promise {
- return callBackendService(this.waveEnv, "object", "GetObject", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "object", "GetObject", Array.from(arguments))
}
// @returns objects
GetObjects(orefs: string[]): Promise {
- return callBackendService(this.waveEnv, "object", "GetObjects", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "object", "GetObjects", Array.from(arguments))
}
// @returns object updates
UpdateObject(waveObj: WaveObj, returnUpdates: boolean): Promise {
- return callBackendService(this.waveEnv, "object", "UpdateObject", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "object", "UpdateObject", Array.from(arguments))
}
// @returns object updates
UpdateObjectMeta(oref: string, meta: MetaType): Promise {
- return callBackendService(this.waveEnv, "object", "UpdateObjectMeta", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "object", "UpdateObjectMeta", Array.from(arguments))
}
}
@@ -122,7 +122,7 @@ export class UserInputServiceType {
}
SendUserInputResponse(arg1: UserInputResponse): Promise {
- return callBackendService(this.waveEnv, "userinput", "SendUserInputResponse", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "userinput", "SendUserInputResponse", Array.from(arguments))
}
}
@@ -137,22 +137,22 @@ export class WindowServiceType {
}
CloseWindow(windowId: string, fromElectron: boolean): Promise {
- return callBackendService(this.waveEnv, "window", "CloseWindow", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "window", "CloseWindow", Array.from(arguments))
}
CreateWindow(winSize: WinSize, workspaceId: string): Promise {
- return callBackendService(this.waveEnv, "window", "CreateWindow", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "window", "CreateWindow", Array.from(arguments))
}
GetWindow(windowId: string): Promise {
- return callBackendService(this.waveEnv, "window", "GetWindow", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "window", "GetWindow", Array.from(arguments))
}
// set window position and size
// @returns object updates
SetWindowPosAndSize(windowId: string, pos: Point, size: WinSize): Promise {
- return callBackendService(this.waveEnv, "window", "SetWindowPosAndSize", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "window", "SetWindowPosAndSize", Array.from(arguments))
}
SwitchWorkspace(windowId: string, workspaceId: string): Promise {
- return callBackendService(this.waveEnv, "window", "SwitchWorkspace", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "window", "SwitchWorkspace", Array.from(arguments))
}
}
@@ -168,50 +168,50 @@ export class WorkspaceServiceType {
// @returns CloseTabRtn (and object updates)
CloseTab(workspaceId: string, tabId: string, fromElectron: boolean): Promise {
- return callBackendService(this.waveEnv, "workspace", "CloseTab", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "CloseTab", Array.from(arguments))
}
// @returns tabId (and object updates)
CreateTab(workspaceId: string, tabName: string, activateTab: boolean): Promise {
- return callBackendService(this.waveEnv, "workspace", "CreateTab", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "CreateTab", Array.from(arguments))
}
// @returns workspaceId
CreateWorkspace(name: string, icon: string, color: string, applyDefaults: boolean): Promise {
- return callBackendService(this.waveEnv, "workspace", "CreateWorkspace", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "CreateWorkspace", Array.from(arguments))
}
// @returns object updates
DeleteWorkspace(workspaceId: string): Promise {
- return callBackendService(this.waveEnv, "workspace", "DeleteWorkspace", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "DeleteWorkspace", Array.from(arguments))
}
// @returns colors
GetColors(): Promise {
- return callBackendService(this.waveEnv, "workspace", "GetColors", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "GetColors", Array.from(arguments))
}
// @returns icons
GetIcons(): Promise {
- return callBackendService(this.waveEnv, "workspace", "GetIcons", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "GetIcons", Array.from(arguments))
}
// @returns workspace
GetWorkspace(workspaceId: string): Promise {
- return callBackendService(this.waveEnv, "workspace", "GetWorkspace", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "GetWorkspace", Array.from(arguments))
}
ListWorkspaces(): Promise {
- return callBackendService(this.waveEnv, "workspace", "ListWorkspaces", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "ListWorkspaces", Array.from(arguments))
}
// @returns object updates
SetActiveTab(workspaceId: string, tabId: string): Promise {
- return callBackendService(this.waveEnv, "workspace", "SetActiveTab", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "SetActiveTab", Array.from(arguments))
}
// @returns object updates
UpdateWorkspace(workspaceId: string, name: string, icon: string, color: string, applyDefaults: boolean): Promise {
- return callBackendService(this.waveEnv, "workspace", "UpdateWorkspace", Array.from(arguments))
+ return callBackendService(this?.waveEnv, "workspace", "UpdateWorkspace", Array.from(arguments))
}
}
diff --git a/pkg/tsgen/tsgen.go b/pkg/tsgen/tsgen.go
index 8d92893afc..89c782c595 100644
--- a/pkg/tsgen/tsgen.go
+++ b/pkg/tsgen/tsgen.go
@@ -412,7 +412,7 @@ func GenerateMethodSignature(serviceName string, method reflect.Method, meta tsg
}
func GenerateMethodBody(serviceName string, method reflect.Method, meta tsgenmeta.MethodMeta) string {
- return fmt.Sprintf(" return callBackendService(this.waveEnv, %q, %q, Array.from(arguments))\n", serviceName, method.Name)
+ return fmt.Sprintf(" return callBackendService(this?.waveEnv, %q, %q, Array.from(arguments))\n", serviceName, method.Name)
}
func GenerateServiceClass(serviceName string, serviceObj any, tsTypesMap map[reflect.Type]string) string {