Skip to content

Commit d6c22b3

Browse files
usrnk1Hona
andauthored
feat(desktop): consolidate status into session summary (#48103)
Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com>
1 parent bbf4cd4 commit d6c22b3

49 files changed

Lines changed: 2665 additions & 981 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎packages/app/e2e/regression/mcp-workspace-toggle.spec.ts‎

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ for (const shared of [true, false]) {
5959
await page.goto(`/server/${base64Encode(server)}/session/${sessionID}`)
6060
await expectSessionTitle(page, title)
6161
await expect(page.getByRole("textbox", { name: "Prompt", exact: true })).toBeEditable()
62-
await page.keyboard.press("ControlOrMeta+;")
63-
const dialog = page.getByRole("dialog", { name: "MCPs", exact: true })
62+
await page.getByRole("button", { name: "Session details", exact: true }).click()
63+
await page.getByRole("button", { name: "MCP", exact: true }).click()
64+
const dialog = page.getByRole("dialog", { name: "MCP", exact: true })
6465
await expect(dialog.getByText("figma-desktop", { exact: true })).toBeVisible()
6566
const toggle = dialog.getByRole("switch")
6667
await expect(toggle).not.toBeChecked()
@@ -92,7 +93,7 @@ for (const surface of ["popover", "dialog"] as const) {
9293
const state = { fail: true, status: surface === "popover" ? "failed" : "disabled" }
9394
const requests: { path: string; directory: string }[] = []
9495
await page.addInitScript(() => {
95-
localStorage.setItem("settings.v3", JSON.stringify({ general: { showStatus: true } }))
96+
localStorage.setItem("settings.v3", JSON.stringify({ keybinds: { "mcp.toggle": "ctrl+;" } }))
9697
})
9798
await mockOpenCodeServer(page, {
9899
directory,
@@ -113,6 +114,10 @@ for (const surface of ["popover", "dialog"] as const) {
113114
const url = new URL(route.request().url())
114115
const target = url.searchParams.get("location[directory]") ?? directory
115116
requests.push({ path: url.pathname, directory: target })
117+
if (url.pathname === "/api/mcp/figma-desktop/disconnect") {
118+
state.status = "disabled"
119+
return route.fulfill({ status: 204 })
120+
}
116121
if (url.pathname === "/api/mcp/figma-desktop/connect") {
117122
state.status = state.fail ? "failed" : "connected"
118123
// Connection failures are reported by the refreshed status, not the HTTP response.
@@ -137,12 +142,19 @@ for (const surface of ["popover", "dialog"] as const) {
137142
await page.goto(`/server/${base64Encode(server)}/session/${sessionID}`)
138143
await expectSessionTitle(page, title)
139144
await expect(page.getByRole("textbox", { name: "Prompt", exact: true })).toBeEditable()
140-
if (surface === "popover") await page.getByRole("button", { name: "Status", exact: true }).click()
141-
if (surface === "dialog") await page.keyboard.press("ControlOrMeta+;")
142-
const panel =
143-
surface === "popover" ? page.getByRole("tabpanel") : page.getByRole("dialog", { name: "MCPs", exact: true })
145+
if (surface === "popover") {
146+
await page.getByRole("button", { name: "Session details", exact: true }).click()
147+
await page.getByRole("button", { name: "MCP", exact: true }).click()
148+
}
149+
if (surface === "dialog") await page.keyboard.press("Control+;")
150+
const panel = page.getByRole("dialog", { name: surface === "popover" ? "MCP" : "MCPs", exact: true })
144151
const toggle = panel.getByRole("switch")
145152
await expect(panel.getByText("figma-desktop", { exact: true })).toBeVisible()
153+
await expect(toggle).toBeEnabled()
154+
if (surface === "popover") {
155+
await expect(toggle).toBeChecked()
156+
await panel.getByText("figma-desktop", { exact: true }).click()
157+
}
146158
await expect(toggle).not.toBeChecked()
147159
await expect(toggle).toBeEnabled()
148160
requests.length = 0
@@ -152,7 +164,7 @@ for (const surface of ["popover", "dialog"] as const) {
152164
.getByRole("listitem", { includeHidden: true })
153165
.filter({ has: page.getByText("Request failed", { exact: true }) })
154166
await expect(toast.getByText(`figma-desktop: ${error}`, { exact: true })).toBeVisible()
155-
await expect(toggle).not.toBeChecked()
167+
await expect(toggle).toBeChecked({ checked: surface === "popover" })
156168
await expect(toggle).toBeEnabled()
157169
expect(requests.filter((request) => request.path.endsWith("/connect"))).toEqual([
158170
{ path: "/api/mcp/figma-desktop/connect", directory: workspace },
@@ -167,9 +179,18 @@ for (const surface of ["popover", "dialog"] as const) {
167179
await toast.getByRole("button", { name: "Dismiss", exact: true }).click()
168180
await expect(toast).toBeHidden()
169181
state.fail = false
170-
if (surface === "popover") await page.getByRole("button", { name: "Status", exact: true }).click()
171-
if (surface === "dialog") await page.keyboard.press("ControlOrMeta+;")
182+
if (surface === "popover") {
183+
await expect(page.getByRole("dialog", { name: "Session details", exact: true })).toBeHidden()
184+
await page.getByRole("button", { name: "Session details", exact: true }).click()
185+
await page.getByRole("button", { name: "MCP", exact: true }).click()
186+
}
187+
if (surface === "dialog") await page.keyboard.press("Control+;")
172188
await expect(toggle).toBeEnabled()
189+
if (surface === "popover") {
190+
await panel.getByText("figma-desktop", { exact: true }).click()
191+
await expect(toggle).not.toBeChecked()
192+
await expect(toggle).toBeEnabled()
193+
}
173194
await panel.locator('[data-slot="switch-control"]').click()
174195
await expect(toggle).toBeChecked()
175196
await expect(toggle).toBeEnabled()

‎packages/app/e2e/regression/mobile-session-views.spec.ts‎

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,12 @@ for (const position of ["top", "bottom"] as const) {
104104
await expect(composer).toBeHidden()
105105

106106
await more.click()
107-
await page.getByRole("menuitem", { name: "Status", exact: true }).click()
108-
const status = page.getByRole("dialog", { name: "Status", exact: true })
109-
await expect(status.getByRole("tab", { name: "MCP", exact: true })).toBeVisible()
110-
await status.getByRole("button", { name: "Close", exact: true }).click()
111-
await expect(status).toBeHidden()
112-
await expect(more).toBeFocused()
113-
114-
await more.click()
107+
await expect(page.getByRole("menuitem", { name: "Status", exact: true })).toHaveCount(0)
115108
await page.getByRole("menuitem", { name: "Session details", exact: true }).click()
116109
const details = page.getByRole("dialog", { name: "Session details", exact: true })
117110
await expect(details.getByText(fixture.project.name, { exact: true })).toBeVisible()
118111
await expect(details.getByRole("button", { name: "No changes", exact: true })).toBeVisible()
112+
await expect(details.getByRole("button", { name: "MCP", exact: true })).toBeVisible()
119113
await details.getByRole("button", { name: "Close", exact: true }).click()
120114
await expect(details).toBeHidden()
121115
await expect(more).toBeFocused()

packages/app/e2e/regression/mobile-status-drawer.spec.ts renamed to packages/app/e2e/regression/mobile-summary-drawer.spec.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@ import { expect, test } from "@playwright/test"
22
import { fixture } from "../performance/timeline/session-timeline-stress.fixture"
33
import { mockStressTimeline, stressSessionHref } from "../performance/timeline/timeline-test-helpers"
44

5-
test("status drawer dismisses and reopens after button, backdrop, Escape, and drag", async ({ page }) => {
5+
test("summary drawer dismisses and reopens after button, backdrop, Escape, and drag", async ({ page }) => {
66
await page.setViewportSize({ width: 390, height: 844 })
77
await mockStressTimeline(page)
88
await page.goto(stressSessionHref(fixture.targetID))
99
const more = page
1010
.locator('[data-slot="session-mobile-view-navigation"]')
1111
.getByRole("button", { name: "More options", exact: true })
12-
const drawer = page.getByRole("dialog", { name: "Status", exact: true })
12+
const drawer = page.getByRole("dialog", { name: "Session details", exact: true })
1313
const overlay = page.locator('[data-slot="mobile-drawer-overlay"]')
1414

1515
for (const dismissal of ["button", "backdrop", "escape", "drag", "button"] as const) {
1616
await more.click()
17-
await page.getByRole("menuitem", { name: "Status", exact: true }).click()
18-
await expect(drawer.getByRole("tab", { name: "MCP", exact: true })).toBeVisible()
17+
await expect(page.getByRole("menuitem", { name: "Status", exact: true })).toHaveCount(0)
18+
await page.getByRole("menuitem", { name: "Session details", exact: true }).click()
19+
await expect(drawer.getByRole("button", { name: "MCP", exact: true })).toBeVisible()
1920
// Corvu starts opening after paint; the transition flag is also absent
2021
// before that callback. Wait for the open position before dismissing.
2122
await expect

0 commit comments

Comments
 (0)