diff --git a/ui/src/e2e/config-safe-write.e2e.test.ts b/ui/src/e2e/config-safe-write.e2e.test.ts index 71713cd9feb6..654e53564017 100644 --- a/ui/src/e2e/config-safe-write.e2e.test.ts +++ b/ui/src/e2e/config-safe-write.e2e.test.ts @@ -132,12 +132,13 @@ suite.define(() => { const labsLink = page.locator('.settings-sidebar__item[href="/settings/labs"]'); await expect.poll(() => labsLink.getAttribute("aria-current")).toBe("page"); const codeModeRow = settingsRow(page, "Code Mode"); - await codeModeRow.getByRole("switch", { name: "Code Mode", exact: true }).waitFor(); + const codeModeSwitch = codeModeRow.getByRole("switch", { name: "Code Mode", exact: true }); + await codeModeSwitch.waitFor(); await expect.poll(() => codeModeRow.textContent()).toContain("Default: Enabled"); const configGetsBeforePatch = (await gateway.getRequests("config.get")).length; await gateway.deferNext("config.patch"); - await codeModeRow.getByRole("button", { name: "Reset to default" }).click(); + await codeModeRow.locator("wa-switch").click(); const patchParams = mutationParams(await gateway.waitForRequest("config.patch")); expect(patchParams.baseHash).toBe("snapshot-1"); expect(patchParams.sessionKey).toBe("main"); diff --git a/ui/src/e2e/curated-settings-defaults.e2e.test.ts b/ui/src/e2e/curated-settings-defaults.e2e.test.ts index 542e0d35ca2e..65f196c61d7b 100644 --- a/ui/src/e2e/curated-settings-defaults.e2e.test.ts +++ b/ui/src/e2e/curated-settings-defaults.e2e.test.ts @@ -120,7 +120,7 @@ suite.define(() => { const configGetsBeforeLabsReset = (await gateway.getRequests("config.get")).length; await gateway.deferNext("config.patch"); - await codeModeRow.getByRole("button", { name: "Reset to default" }).click(); + await codeModeRow.locator("wa-switch").click(); const labsPatch = requestRaw(await gateway.waitForRequest("config.patch")); expect(labsPatch).toEqual({ tools: { codeMode: { enabled: null } } }); diff --git a/ui/src/pages/labs/labs-page.test.ts b/ui/src/pages/labs/labs-page.test.ts index 5ee74d9022d6..b0cdf324831a 100644 --- a/ui/src/pages/labs/labs-page.test.ts +++ b/ui/src/pages/labs/labs-page.test.ts @@ -266,7 +266,7 @@ describe("LabsPage", () => { ); }); - it("shows default provenance and reset actions only for overrides", async () => { + it("shows default provenance without reset actions", async () => { const inherited = await mountPage({}); expect(labRow(inherited.page, "Code Mode").textContent).toContain("Using default: Enabled"); expect(labRow(inherited.page, "Swarm").textContent).toContain("Using default: Disabled"); @@ -284,7 +284,7 @@ describe("LabsPage", () => { expect(labRow(overridden.page, "Code Mode").textContent).toContain("Default: Enabled"); expect(labRow(overridden.page, "Swarm").textContent).toContain("Default: Disabled"); expect(overridden.page.querySelectorAll("button[aria-label='Reset to default']")).toHaveLength( - 2, + 0, ); }); @@ -343,9 +343,9 @@ describe("LabsPage", () => { }, }); - labRow(page, "Lean tools for local models") - .querySelector("button[aria-label='Reset to default']") - ?.click(); + const toggle = labToggle(page, "Lean tools for local models"); + toggle.checked = false; + toggle.dispatchEvent(new Event("change", { bubbles: true, composed: true })); await vi.waitFor(() => expect(runtimeConfig.patch).toHaveBeenCalledOnce()); expect(runtimeConfig.patch).toHaveBeenCalledWith({ @@ -356,36 +356,6 @@ describe("LabsPage", () => { note: "labs: update localModelLean", }); }); - - it("restores an object gate without deleting sibling settings", async () => { - const { page, runtimeConfig } = await mountPage({ - tools: { loopDetection: { enabled: true, warningThreshold: 12 } }, - }); - - labRow(page, "Tool-loop detection") - .querySelector("button[aria-label='Reset to default']") - ?.click(); - - await vi.waitFor(() => expect(runtimeConfig.patch).toHaveBeenCalledOnce()); - expect(runtimeConfig.patch).toHaveBeenCalledWith({ - raw: { tools: { loopDetection: { enabled: null } } }, - note: "labs: update loopDetection", - }); - }); - - it("restores a shorthand gate at its owning parent path", async () => { - const { page, runtimeConfig } = await mountPage({ tools: { codeMode: "auto" } }); - - labRow(page, "Code Mode") - .querySelector("button[aria-label='Reset to default']") - ?.click(); - - await vi.waitFor(() => expect(runtimeConfig.patch).toHaveBeenCalledOnce()); - expect(runtimeConfig.patch).toHaveBeenCalledWith({ - raw: { tools: { codeMode: null } }, - note: "labs: update codeMode", - }); - }); }); describe("LabsPage code mode enablement", () => { @@ -507,22 +477,6 @@ describe("LabsPage tool search enablement", () => { note: "labs: update toolSearch", }); }); - - it("resets an explicit enabled override as a Tool Search unit", async () => { - const { page, runtimeConfig } = await mountPage({ - tools: { toolSearch: { enabled: true } }, - }); - - labRow(page, "Tool Search") - .querySelector("button[aria-label='Reset to default']") - ?.click(); - - await vi.waitFor(() => expect(runtimeConfig.patch).toHaveBeenCalledOnce()); - expect(runtimeConfig.patch).toHaveBeenCalledWith({ - raw: { tools: { toolSearch: null } }, - note: "labs: update toolSearch", - }); - }); }); describe("LabsPage tool loop detection enablement", () => { diff --git a/ui/src/pages/labs/labs-page.ts b/ui/src/pages/labs/labs-page.ts index 9339ff079a41..3c626dfb5d4a 100644 --- a/ui/src/pages/labs/labs-page.ts +++ b/ui/src/pages/labs/labs-page.ts @@ -5,7 +5,6 @@ import { titleForRoute } from "../../app-navigation.ts"; import { applicationContext, type ApplicationContext } from "../../app/context.ts"; import { renderDocsLink, - renderSettingsDefaultState, renderSettingsPage, renderSettingsRow, renderSettingsSection, @@ -113,39 +112,26 @@ class LabsPage extends OpenClawLightDomElement { ); } - private resetFeature(feature: LabFeature) { - const config = this.editableConfig(); - const featureState = resolveLabFeatureState(config, feature); - const resetPatch = labFeatureResetPatch(config, feature); - if (!resetPatch) { - return; - } - void this.updateFeature(feature, featureState.defaultEnabled, resetPatch); - } - private renderFeature(feature: LabFeature) { const title = feature.title(); const featureState = resolveLabFeatureState(this.editableConfig(), feature); const canToggle = this.canToggle(); - const defaultState = renderSettingsDefaultState({ - value: featureState.defaultEnabled ? t("common.enabled") : t("common.disabled"), - overridden: featureState.overridden, - disabled: !canToggle, - onReset: () => this.resetFeature(feature), - }); + const defaultDescription = t( + featureState.overridden ? "configForm.defaultValue" : "configForm.usingDefault", + { value: featureState.defaultEnabled ? t("common.enabled") : t("common.disabled") }, + ); const description = html` ${feature.description()} ${t("labsPage.documentation")}${feature.restartHint ? html` ${feature.restartHint()}` : nothing} - ${defaultState.description} + ${defaultDescription} `; return renderSettingsToggleRow({ title, description, checked: this.featureEnabled(feature), disabled: !canToggle, - actions: defaultState.action, onChange: (enabled) => this.setFeatureEnabled(feature, enabled), }); }