@muggleai/works 4.11.3 → 4.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { __export, getLogger, getConfig, createChildLogger, buildElectronAppReleaseAssetUrl, getAuthService, hasApiKey, getElectronAppVersion, getElectronAppDir, getPlatformKey, isFirstRun, writePreferences, DEFAULT_PREFERENCES, getDataDir, PREFERENCES_FILE_NAME, isElectronAppInstalled, getElectronAppChecksums, getChecksumForPlatform, verifyFileChecksum, calculateFileChecksum, initTelemetry, Surface, ServiceName, track, EventName, getQaTools, getLocalQaTools, performLogout, performLogin, toolRequiresAuth, getCallerCredentials, hasShownDisclosure, getDisclosureCopy, markDisclosureShown, getBundledElectronAppVersion, getElectronAppVersionSource, getCredentialsFilePath, buildElectronAppChecksumsUrl, __require } from './chunk-AYWLYB3F.js';
1
+ import { __export, getLogger, getConfig, createChildLogger, buildElectronAppReleaseAssetUrl, getAuthService, hasApiKey, getElectronAppVersion, getElectronAppDir, getPlatformKey, isFirstRun, writePreferences, DEFAULT_PREFERENCES, getDataDir, PREFERENCES_FILE_NAME, isElectronAppInstalled, getElectronAppChecksums, getChecksumForPlatform, verifyFileChecksum, calculateFileChecksum, initTelemetry, Surface, ServiceName, track, EventName, getQaTools, getLocalQaTools, performLogout, performLogin, toolRequiresAuth, getCallerCredentials, hasShownDisclosure, getDisclosureCopy, markDisclosureShown, getBundledElectronAppVersion, getElectronAppVersionSource, getCredentialsFilePath, buildElectronAppChecksumsUrl, __require } from './chunk-I4VLYJ7M.js';
2
2
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
3
  import { ListToolsRequestSchema, CallToolRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js';
4
4
  import { v4 } from 'uuid';
@@ -731,7 +731,7 @@ async function resolveGsScreenshotUrls(report, opts) {
731
731
  if (gsUrls.length === 0) {
732
732
  return report;
733
733
  }
734
- const mcps = await import('./src-NJUUHKPW.js');
734
+ const mcps = await import('./src-ARTTHWNP.js');
735
735
  const credentials = await mcps.getCallerCredentialsAsync();
736
736
  if (!credentials.bearerToken && !credentials.apiKey) {
737
737
  stderrWrite(
@@ -1985,6 +1985,51 @@ function getRunResultStorageService() {
1985
1985
  function resetRunResultStorageService() {
1986
1986
  instance = null;
1987
1987
  }
1988
+
1989
+ // packages/mcps/src/mcp/local/services/replay-url-rewrite.ts
1990
+ function rewriteActionScriptUrls(params) {
1991
+ const { actionScript, originalUrl, localUrl } = params;
1992
+ if (!originalUrl) {
1993
+ return actionScript;
1994
+ }
1995
+ let originalHost;
1996
+ let localOrigin;
1997
+ try {
1998
+ originalHost = new URL(originalUrl).hostname;
1999
+ localOrigin = new URL(localUrl).origin;
2000
+ } catch {
2001
+ const serialized2 = JSON.stringify(actionScript);
2002
+ const rewritten2 = serialized2.replace(new RegExp(escapeRegex(originalUrl), "g"), localUrl);
2003
+ return JSON.parse(rewritten2);
2004
+ }
2005
+ const hostPattern = new RegExp(
2006
+ `https?://(?:[a-z0-9-]+\\.)*${escapeRegex(originalHost)}(?=[/?#:"'\\\\]|$)`,
2007
+ "gi"
2008
+ );
2009
+ const serialized = JSON.stringify(actionScript);
2010
+ const rewritten = serialized.replace(hostPattern, localOrigin);
2011
+ const result = JSON.parse(rewritten);
2012
+ forceFirstNavigateUrl({ steps: result, localUrl });
2013
+ return result;
2014
+ }
2015
+ function forceFirstNavigateUrl(params) {
2016
+ for (const step of params.steps) {
2017
+ if (!isPlainObject(step)) continue;
2018
+ const operation = step["operation"];
2019
+ if (!isPlainObject(operation)) continue;
2020
+ if (operation["action"] !== "navigate") continue;
2021
+ operation["url"] = params.localUrl;
2022
+ return;
2023
+ }
2024
+ }
2025
+ function isPlainObject(value) {
2026
+ return typeof value === "object" && value !== null && !Array.isArray(value);
2027
+ }
2028
+ function escapeRegex(str) {
2029
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2030
+ }
2031
+
2032
+ // packages/mcps/src/mcp/local/services/execution-service.ts
1988
2033
  var logger4 = getLogger();
1989
2034
  var activeProcesses = /* @__PURE__ */ new Map();
1990
2035
  function getAuthenticatedUserId() {
@@ -2606,18 +2651,6 @@ ${executionResult.stderr}`;
2606
2651
  };
2607
2652
  }
2608
2653
  }
2609
- function rewriteActionScriptUrls(params) {
2610
- const { actionScript, originalUrl, localUrl } = params;
2611
- if (!originalUrl) {
2612
- return actionScript;
2613
- }
2614
- const serialized = JSON.stringify(actionScript);
2615
- const rewritten = serialized.replace(new RegExp(escapeRegex(originalUrl), "g"), localUrl);
2616
- return JSON.parse(rewritten);
2617
- }
2618
- function escapeRegex(str) {
2619
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2620
- }
2621
2654
  function cancelExecution(params) {
2622
2655
  const process2 = activeProcesses.get(params.runId);
2623
2656
  if (!process2) {
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { runCli } from './chunk-7WRAMBOS.js';
3
- import './chunk-AYWLYB3F.js';
2
+ import { runCli } from './chunk-E52757MK.js';
3
+ import './chunk-I4VLYJ7M.js';
4
4
 
5
5
  // src/cli/main.ts
6
6
  runCli().catch((error) => {
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { src_exports as commands, createUnifiedMcpServer, server_exports as server } from './chunk-7WRAMBOS.js';
2
- export { createChildLogger, e2e_exports as e2e, getConfig, getLocalQaTools, getLogger, getQaTools, local_exports as localQa, mcp_exports as mcp, e2e_exports as qa, src_exports as shared } from './chunk-AYWLYB3F.js';
1
+ export { src_exports as commands, createUnifiedMcpServer, server_exports as server } from './chunk-E52757MK.js';
2
+ export { createChildLogger, e2e_exports as e2e, getConfig, getLocalQaTools, getLogger, getQaTools, local_exports as localQa, mcp_exports as mcp, e2e_exports as qa, src_exports as shared } from './chunk-I4VLYJ7M.js';
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "muggle",
3
3
  "description": "Run real-browser end-to-end (E2E) acceptance tests on your web app from any AI coding agent. Generate test scripts from plain English, replay them on localhost, capture screenshots, and validate user flows like signup, checkout, and dashboards. Works across Claude Code, Cursor, Codex, and Windsurf.",
4
- "version": "4.11.3",
4
+ "version": "4.11.4",
5
5
  "author": {
6
6
  "name": "Muggle AI",
7
7
  "email": "support@muggle-ai.com"
@@ -2,7 +2,7 @@
2
2
  "name": "muggle",
3
3
  "displayName": "Muggle AI",
4
4
  "description": "Ship quality products with AI-powered end-to-end (E2E) acceptance testing that validates your web app like a real user — from Claude Code and Cursor to PR.",
5
- "version": "4.11.3",
5
+ "version": "4.11.4",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"
@@ -1,7 +1,7 @@
1
1
  {
2
- "release": "4.11.3",
3
- "buildId": "run-36-1",
4
- "commitSha": "b2f2343428698517af23e12cbf2d3fe505f923fe",
5
- "buildTime": "2026-05-20T18:23:15Z",
2
+ "release": "4.11.4",
3
+ "buildId": "run-37-1",
4
+ "commitSha": "36a1f8499178f2361b5a683ddd5420de28558c23",
5
+ "buildTime": "2026-05-20T22:12:49Z",
6
6
  "serviceName": "muggle-ai-works-mcp"
7
7
  }
@@ -1 +1 @@
1
- export { DEFAULT_PREFERENCES, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, buildElectronAppChecksumsUrl, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, calculateFileChecksum, createApiKeyWithToken, createChildLogger, deleteApiKeyData, deleteCredentials, e2e_exports as e2e, formatPreferencesOneLiner, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDataDir, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppVersion, getElectronAppVersionSource, getLocalQaTools, getLogger, getPlatformKey, getQaTools, getValidApiKeyData, getValidCredentials, hasApiKey, isElectronAppInstalled, isFirstRun, loadApiKeyData, loadCredentials, local_exports as localQa, mcp_exports as mcp, openBrowserUrl, performLogin, performLogout, pollDeviceCode, e2e_exports as qa, readGlobalPreferences, readProjectPreferences, resetConfig, resetLogger, resetPreference, resolveElectronAppPathOrNull, resolvePreferences, saveApiKey, saveApiKeyData, saveCredentials, startDeviceCodeFlow, toolRequiresAuth, validatePreference, verifyFileChecksum, writePreferences } from './chunk-AYWLYB3F.js';
1
+ export { DEFAULT_PREFERENCES, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, buildElectronAppChecksumsUrl, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, calculateFileChecksum, createApiKeyWithToken, createChildLogger, deleteApiKeyData, deleteCredentials, e2e_exports as e2e, formatPreferencesOneLiner, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDataDir, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppVersion, getElectronAppVersionSource, getLocalQaTools, getLogger, getPlatformKey, getQaTools, getValidApiKeyData, getValidCredentials, hasApiKey, isElectronAppInstalled, isFirstRun, loadApiKeyData, loadCredentials, local_exports as localQa, mcp_exports as mcp, openBrowserUrl, performLogin, performLogout, pollDeviceCode, e2e_exports as qa, readGlobalPreferences, readProjectPreferences, resetConfig, resetLogger, resetPreference, resolveElectronAppPathOrNull, resolvePreferences, saveApiKey, saveApiKeyData, saveCredentials, startDeviceCodeFlow, toolRequiresAuth, validatePreference, verifyFileChecksum, writePreferences } from './chunk-I4VLYJ7M.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@muggleai/works",
3
3
  "mcpName": "io.github.multiplex-ai/muggle",
4
- "version": "4.11.3",
4
+ "version": "4.11.4",
5
5
  "description": "Ship quality products with AI-powered E2E acceptance testing that validates your web app like a real user — from Claude Code and Cursor to PR.",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -41,14 +41,14 @@
41
41
  "test:watch": "vitest"
42
42
  },
43
43
  "muggleConfig": {
44
- "electronAppVersion": "1.0.87",
44
+ "electronAppVersion": "1.0.88",
45
45
  "downloadBaseUrl": "https://github.com/multiplex-ai/muggle-ai-works/releases/download",
46
46
  "runtimeTargetDefault": "production",
47
47
  "checksums": {
48
- "darwin-arm64": "df04c98269e22ae427bb863956215b3f20cbf2ff0b51c037647d6e734a7b7502",
49
- "darwin-x64": "e9f5b8a61f4a9f47743aaabb27d6e4c462dca5aa922ba66ae04f0a0133b8a7eb",
50
- "win32-x64": "75e552672757d280259637bdcbe0aae0eecc2417ed9a6e5bd49f42d3466f66cf",
51
- "linux-x64": "2c8b64cf549f9a6682db959b17c5f04578d632d5bcdba1ac9efbb45d6a097802"
48
+ "darwin-arm64": "dbcefc10f2cdeabe8be74490354ed83f600eb18d8f411b3f1dec266e5eb2e95b",
49
+ "darwin-x64": "ac4430824e18d15476ed91a6bbe81d0880239b758006cbf721d8e7d58a0c3676",
50
+ "win32-x64": "16119743fb344990f2b67fa2a9844a50a46d70f6fbf3f72435b5ce1d7a635cd9",
51
+ "linux-x64": "4e43f3946c80918f972a4c587a5f83873ccaeb5338f6eb8b5296022ba096f059"
52
52
  }
53
53
  },
54
54
  "dependencies": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "muggle",
3
3
  "description": "Run real-browser end-to-end (E2E) acceptance tests on your web app from any AI coding agent. Generate test scripts from plain English, replay them on localhost, capture screenshots, and validate user flows like signup, checkout, and dashboards. Works across Claude Code, Cursor, Codex, and Windsurf.",
4
- "version": "4.11.3",
4
+ "version": "4.11.4",
5
5
  "author": {
6
6
  "name": "Muggle AI",
7
7
  "email": "support@muggle-ai.com"
@@ -2,7 +2,7 @@
2
2
  "name": "muggle",
3
3
  "displayName": "Muggle AI",
4
4
  "description": "Ship quality products with AI-powered end-to-end (E2E) acceptance testing that validates your web app like a real user — from Claude Code and Cursor to PR.",
5
- "version": "4.11.3",
5
+ "version": "4.11.4",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"