Testing the pi-gui desktop app on Windows
Setup
- Ensure pnpm is available:
corepack enablethencorepack prepare pnpm@<version from package.json> --activate. - Install:
pnpm install(repo root). - Launch the app for GUI testing:
pnpm --filter @pi-gui/desktop dev. Optionally setPI_APP_USER_DATA_DIRto an isolated temp dir. - A working launch prints
starting electron app...and the renderer dev server (http://localhost:5173) and must NOT printspawn pnpm ENOENT.
What renders where
- Empty state: sidebar (New thread / Threads / Skills / Extensions / Settings) + "Open a folder to start".
- Navigation (Settings / Skills / Threads) is a good cheap proof the renderer is interactive.
Integrated terminal (node-pty / ConPTY) — IMPORTANT gotcha
- The top-bar terminal toggle is
disableduntil there is an active session:terminalAvailable={Boolean(selectedSessionKey)}inapps/desktop/src/App.tsx. - Creating a session through the live UI requires a connected provider/model. Without provider credentials you CANNOT reach the terminal via the GUI ("No models available" blocks send).
- Workaround that needs no credentials: run a headless Playwright spec in background test mode. Use helpers from
apps/desktop/tests/helpers/electron-app.ts:launchDesktop(userDataDir, { initialWorkspaces, testMode: "background" })->createNamedThread(window, ...)-> clickToggle terminal-> type a command -> assert.xterm-rowstext. - Use a cross-platform command:
echo <marker>works in bothcmd.exe(Windows default shell viadefaultShellForPlatform()) and POSIX shells. The existingtests/core/integrated-terminal.spec.tsusesprintf/pwd, which do NOT exist incmd.exe— that lane runs on macOS CI only, so don't expect it to pass as-is on Windows. - Run a single spec:
pnpm --filter @pi-gui/desktop run test:e2e:runner -- apps/desktop/tests/core/<spec>.spec.ts. Delete any temporary spec you add after the run.
Native Windows folder picker
- "Open first folder" opens the real Windows folder dialog (itself a Windows-compat proof).
- Computer-use
typeaction may DROP uppercase letters and:in the dialog's path field (e.g.C:\Users\Administratorbecomes\sers\dministrator). Workaround: put the path on the clipboard (Set-Clipboard -Value "<path>") andCtrl+Vinto the Folder field, then Select Folder.
Known preexisting failures (verify against base before blaming your change)
tests/core/context-rail.spec.tsassertstranscript.clientWidth === 768but may render761(scrollbar/runner rendering). This has reproduced onorigin/mainand macOS CI. If you see it, confirm it exists on the base branch — it is likely NOT caused by your change.
Cosmetic (not functional) macOS-centric labels on Windows
- Settings shortcut hints may show
Cmd+…and the integrated-terminal shell field placeholder may read/bin/zsh. Display-only; the actual default shell resolves tocmd.exe.
Reporting
- Record GUI interactions with annotations (setup / test_start / assertion). Do not record shell-only runs.
- Mark the live-UI terminal test
untested(not failed) when blocked by missing provider credentials, and note the headless spec result separately.
Devin Secrets Needed
- None required for launch / navigation / folder picker / headless terminal test.
- A provider API key (e.g. an LLM provider configured under Settings > Providers) is required only to create a session through the live UI and thus exercise the terminal through the GUI.