From ec2c1c0882d53021b767d16e8fc2e35a9c41b452 Mon Sep 17 00:00:00 2001 From: Jochen Delabie Date: Tue, 22 Sep 2026 15:07:30 +0200 Subject: [PATCH] =?UTF-8?q?Release=201.1.5=20=E2=80=94=20setupTestingBot?= =?UTF-8?q?=20Playwright=20snippet=20names=20platform,=20not=20os?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Playwright config snippet emitted `os: 'WIN11'` into the wss://cloud.testingbot.com/playwright query string. The hub only maps `platform` or `platformName` onto the session platform (ws-hub src/utils.ts, Utils.generateCapabilities); `os` falls into the catch-all loop that copies every param into desiredCapabilities, so Capabilities.platform stays undefined and toDesiredCaps() omits platform entirely. Anyone pasting the snippet got the default OS with no error rather than Windows 11. cdp.ts and the selenium/wdio snippets already use platform/platformName — the Playwright one was the outlier. Regression test asserts the snippet contains `platform: 'WIN11'` and no `os: 'WIN11'`. --- manifest.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/tools/project.ts | 2 +- tests/tools/project.test.ts | 12 ++++++++++++ 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/manifest.json b/manifest.json index bc746c7..b47ee6b 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": "0.2", "name": "@testingbot/mcp-server", - "version": "1.1.4", + "version": "1.1.5", "description": "TestingBot's official MCP Server for AI-powered testing automation. Manage browsers, tests, builds, screenshots, storage, team members, and tunnels through conversational interfaces.", "icon": "icon.png", "homepage": "https://github.com/testingbot/mcp-server", diff --git a/package-lock.json b/package-lock.json index 9e5c229..b5fc2c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@testingbot/mcp-server", - "version": "1.1.4", + "version": "1.1.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@testingbot/mcp-server", - "version": "1.1.4", + "version": "1.1.5", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.0.4", diff --git a/package.json b/package.json index aa5b8ea..69ba309 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@testingbot/mcp-server", - "version": "1.1.4", + "version": "1.1.5", "main": "dist/index.js", "type": "module", "mcpName": "com.testingbot/mcp-server", diff --git a/server.json b/server.json index ae3ce28..76b97d3 100644 --- a/server.json +++ b/server.json @@ -2,12 +2,12 @@ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "com.testingbot/mcp-server", "description": "TestingBot's Official MCP Server for AI-powered testing automation", - "version": "1.1.4", + "version": "1.1.5", "packages": [ { "registryType": "npm", "identifier": "@testingbot/mcp-server", - "version": "1.1.4", + "version": "1.1.5", "transport": { "type": "stdio" }, diff --git a/src/tools/project.ts b/src/tools/project.ts index f188c28..09ec1de 100644 --- a/src/tools/project.ts +++ b/src/tools/project.ts @@ -395,7 +395,7 @@ function configSnippet(framework: Framework, language: Language): string { " secret: process.env.TESTINGBOT_SECRET!,", " browserName: 'chrome',", " browserVersion: 'latest',", - " os: 'WIN11',", + " platform: 'WIN11',", "}).toString();", "", "export default defineConfig({", diff --git a/tests/tools/project.test.ts b/tests/tools/project.test.ts index fc452cf..6c16a34 100644 --- a/tests/tools/project.test.ts +++ b/tests/tools/project.test.ts @@ -223,6 +223,18 @@ describe("Project Tools", () => { expect(result.content[0].text).toContain("TESTINGBOT_SECRET"); }); + it("names the OS capability `platform`, the only key the hub reads", async () => { + writeFile("package.json", JSON.stringify({ devDependencies: { "@playwright/test": "^1" } })); + + const tools = addProjectTools(serverMock, testingBotApiMock, configMock); + const result = await tools.setupTestingBot.handler({ projectRoot: tmpDir }); + + // The hub only maps `platform`/`platformName` onto the session platform; an + // `os` key is silently dropped and the session lands on the default OS. + expect(result.content[0].text).toContain("platform: 'WIN11'"); + expect(result.content[0].text).not.toContain("os: 'WIN11'"); + }); + it("returns a WebdriverIO config + install command", async () => { writeFile( "package.json",