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 {