@muggleai/works 5.31.0-staging.272 → 5.31.0-staging.274

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.
@@ -9,7 +9,7 @@
9
9
  "name": "muggleai",
10
10
  "source": "./plugin",
11
11
  "description": "Real-browser E2E acceptance for your coding agent: test the flows you changed and open the PR with screenshots. Built for flows other tools can't reach: managed test identities with live inboxes (magic links, email OTP and 2FA, verification mail, password resets), an encrypted secret store for login and test credentials, and a test graph that runs prerequisite flows first. Plain-English tests become replayable scripts on localhost or preview URLs.",
12
- "version": "5.31.0-staging.272"
12
+ "version": "5.31.0-staging.274"
13
13
  }
14
14
  ]
15
15
  }
package/README.md CHANGED
@@ -273,11 +273,11 @@ so the result carries a viewUrl straight to the dashboard
273
273
 
274
274
  ## MCP tool reference
275
275
 
276
- 125 tools across authentication, projects, use cases, test cases, test states, scripts, workflows, local execution, reporting, secrets, billing, and administration. Call them directly from any MCP client to build your own pipeline.
276
+ 126 tools across authentication, projects, use cases, test cases, test states, scripts, workflows, local execution, reporting, secrets, billing, and administration. Call them directly from any MCP client to build your own pipeline.
277
277
 
278
278
  **Authentication** — `muggle-remote-auth-status`, `-login`, `-poll`, `-logout`, plus `-api-key-create`, `-list`, `-get`, `-revoke`.
279
279
 
280
- **Projects** — `muggle-remote-project-create`, `-list`, `-get`, `-update`, `-delete`, plus per-project rollups: `-test-results-summary-get`, `-test-runs-summary-get`, `-test-scripts-summary-get`.
280
+ **Projects** — `muggle-remote-project-create`, `-list`, `-get`, `-update`, `-delete`, plus per-project rollups: `-test-results-summary-get`, `-test-runs-summary-get`, `-test-scripts-summary-get`. Pass `primaryResolution`, `compatibleResolutions` and `runStrategy` (`primaryOnly`, the default, `primaryFirst` or `allAtOnce`) to `-create` or `-update` to verify every test case at more than one viewport; `muggle-remote-project-display-resolutions-get` reads a lane's primary, compatible and enabled resolutions and its run strategy.
281
281
 
282
282
  | Use cases | Purpose |
283
283
  | :-------- | :------ |
@@ -4703,7 +4703,7 @@ function resolveConnectionString(explicit) {
4703
4703
  return explicit;
4704
4704
  return process.env[ENV_CONNECTION_STRING] ?? process.env[ENV_VITE_CONNECTION_STRING] ?? void 0;
4705
4705
  }
4706
- function buildCommonProperties(serviceName, surface) {
4706
+ function buildCommonProperties(serviceName, surface, environment) {
4707
4707
  const manifest = readReleaseManifest2();
4708
4708
  const props = {
4709
4709
  source: "client",
@@ -4720,6 +4720,8 @@ function buildCommonProperties(serviceName, surface) {
4720
4720
  const userId = readUserId();
4721
4721
  if (userId !== void 0)
4722
4722
  props.userId = userId;
4723
+ if (environment !== void 0)
4724
+ props.environment = environment;
4723
4725
  return props;
4724
4726
  }
4725
4727
  function initTelemetry(options) {
@@ -4743,7 +4745,7 @@ function initTelemetry(options) {
4743
4745
  client.context.tags[client.context.keys.applicationVersion] = manifest.release;
4744
4746
  client.commonProperties = {
4745
4747
  ...client.commonProperties,
4746
- ...buildCommonProperties(options.serviceName, options.surface)
4748
+ ...buildCommonProperties(options.serviceName, options.surface, options.environment)
4747
4749
  };
4748
4750
  AppInsights.start();
4749
4751
  state = {
@@ -4862,6 +4864,12 @@ var Surface;
4862
4864
  Surface2["Skill"] = "skill";
4863
4865
  Surface2["Electron"] = "electron";
4864
4866
  })(Surface || (Surface = {}));
4867
+ var TelemetryEnvironment;
4868
+ (function(TelemetryEnvironment2) {
4869
+ TelemetryEnvironment2["Production"] = "production";
4870
+ TelemetryEnvironment2["Staging"] = "staging";
4871
+ TelemetryEnvironment2["Development"] = "development";
4872
+ })(TelemetryEnvironment || (TelemetryEnvironment = {}));
4865
4873
  var ServiceName;
4866
4874
  (function(ServiceName2) {
4867
4875
  ServiceName2["MuggleMcp"] = "muggle-mcp";
@@ -6388,6 +6396,55 @@ var FanOutChoiceInputSchema = z.enum(["followPolicy" /* FollowPolicy */, "primar
6388
6396
  "Optional: followPolicy (default) runs each test case's runSettings records per its lane's fan-out policy; primaryOnly runs only the primary record; allNow runs every record at once"
6389
6397
  );
6390
6398
 
6399
+ // packages/mcps/src/mcp/e2e/contracts/run-strategy-types.ts
6400
+ var RunStrategy = /* @__PURE__ */ ((RunStrategy2) => {
6401
+ RunStrategy2["PrimaryOnly"] = "primaryOnly";
6402
+ RunStrategy2["PrimaryFirst"] = "primaryFirst";
6403
+ RunStrategy2["AllAtOnce"] = "allAtOnce";
6404
+ return RunStrategy2;
6405
+ })(RunStrategy || {});
6406
+
6407
+ // packages/mcps/src/mcp/e2e/contracts/project-display-resolution-schemas.ts
6408
+ var ProjectResolutionSettingsInputSchema = z.object({
6409
+ primaryResolution: z.nativeEnum(DisplayResolution).optional().describe(
6410
+ 'Primary resolution: the viewport every test case in the project is generated and run at first, e.g. "R_1920x1080". Passed without compatibleResolutions, it also clears the compatible resolutions. Omit both to keep the current resolutions; a new project defaults to R_1920x1080 alone.'
6411
+ ),
6412
+ compatibleResolutions: z.array(z.nativeEnum(DisplayResolution)).optional().describe(
6413
+ 'Compatible resolutions: further viewports every test case also runs at, one run each, as runStrategy says, e.g. ["R_0390x0844"]. Replaces the whole list; [] clears it. Requires primaryResolution (read the current one with muggle-remote-project-display-resolutions-get) and must not include it; duplicates are dropped.'
6414
+ ),
6415
+ runStrategy: z.nativeEnum(RunStrategy).optional().describe(
6416
+ "Run strategy across the resolutions: primaryOnly runs the primary alone and reports the compatible resolutions as not run; primaryFirst runs the compatible resolutions only after the primary passes; allAtOnce runs every resolution at once. Omit to keep the current one; a project that never set one runs primaryOnly."
6417
+ )
6418
+ });
6419
+ var ProjectDisplayResolutionsGetInputSchema = z.object({
6420
+ projectId: MuggleEntityIdSchema.describe("Project ID (UUID)"),
6421
+ runEnvironmentType: RunEnvironmentSchema.optional().describe(
6422
+ "Lane to read: 'remote' (cloud runs, the default) or 'local' (developer localhost)."
6423
+ )
6424
+ });
6425
+
6426
+ // packages/mcps/src/mcp/e2e/contracts/project-resolution-settings-validation.ts
6427
+ function addProjectResolutionSettingsIssues(settings, refinementContext) {
6428
+ if (settings.compatibleResolutions === void 0) {
6429
+ return;
6430
+ }
6431
+ if (settings.primaryResolution === void 0) {
6432
+ refinementContext.addIssue({
6433
+ code: "custom",
6434
+ path: ["compatibleResolutions"],
6435
+ message: "compatibleResolutions requires primaryResolution: the project's resolutions are saved as one list, primary first. Pass the current primary (read it with muggle-remote-project-display-resolutions-get) or a new one."
6436
+ });
6437
+ return;
6438
+ }
6439
+ if (settings.compatibleResolutions.includes(settings.primaryResolution)) {
6440
+ refinementContext.addIssue({
6441
+ code: "custom",
6442
+ path: ["compatibleResolutions"],
6443
+ message: `compatibleResolutions must not include the primary resolution ${settings.primaryResolution}; it already runs as the primary.`
6444
+ });
6445
+ }
6446
+ }
6447
+
6391
6448
  // packages/mcps/src/mcp/e2e/contracts/secret-group-types.ts
6392
6449
  var SecretTypeEnum = /* @__PURE__ */ ((SecretTypeEnum2) => {
6393
6450
  SecretTypeEnum2["LOGIN_CREDENTIAL"] = "login_credential";
@@ -6574,7 +6631,7 @@ var ProjectCreateInputSchema = z.object({
6574
6631
  organizationId: IdSchema.optional().describe(
6575
6632
  "Organization (UUID) that owns the project; its runs are billed to that organization. Omit for a personal project. The caller must be an active member: list memberships with muggle-remote-organization-list."
6576
6633
  )
6577
- });
6634
+ }).extend(ProjectResolutionSettingsInputSchema.shape).superRefine(addProjectResolutionSettingsIssues);
6578
6635
  var ProjectGetInputSchema = z.object({
6579
6636
  projectId: IdSchema.describe("Project ID (UUID) to retrieve")
6580
6637
  });
@@ -6589,7 +6646,7 @@ var ProjectUpdateInputSchema = z.object({
6589
6646
  organizationId: IdSchema.optional().describe(
6590
6647
  "Move a personal project into this organization (UUID). One-way: an organization's project cannot move to another organization or back to personal. The caller must be an active member."
6591
6648
  )
6592
- });
6649
+ }).extend(ProjectResolutionSettingsInputSchema.shape).superRefine(addProjectResolutionSettingsIssues);
6593
6650
  var ProjectListInputSchema = PaginationInputSchema.extend({});
6594
6651
  var PrdFileUploadInputSchema = z.object({
6595
6652
  projectId: IdSchema.describe("Project ID (UUID) to associate the PRD file with"),
@@ -7517,6 +7574,57 @@ function mapOrganizationList(response) {
7517
7574
  };
7518
7575
  }
7519
7576
 
7577
+ // packages/mcps/src/mcp/tools/e2e/project-display-resolutions-constants.ts
7578
+ var KNOWN_DISPLAY_RESOLUTIONS = new Set(Object.values(DisplayResolution));
7579
+ var KNOWN_RUN_STRATEGIES = new Set(Object.values(RunStrategy));
7580
+ var DEFAULT_RUN_STRATEGY = "primaryOnly" /* PrimaryOnly */;
7581
+
7582
+ // packages/mcps/src/mcp/tools/e2e/project-display-resolutions-transform.ts
7583
+ function toProjectResolutionUpstreamFields(settings) {
7584
+ const upstreamFields = {};
7585
+ if (settings.primaryResolution !== void 0) {
7586
+ upstreamFields.displayOptions = [
7587
+ .../* @__PURE__ */ new Set([settings.primaryResolution, ...settings.compatibleResolutions ?? []])
7588
+ ];
7589
+ }
7590
+ if (settings.runStrategy !== void 0) {
7591
+ upstreamFields.fanOutPolicy = settings.runStrategy;
7592
+ }
7593
+ return upstreamFields;
7594
+ }
7595
+ function mapProjectDisplayResolutions(response, input) {
7596
+ const toolInput = input;
7597
+ const envelope = response.data;
7598
+ const displayResolutionAxis = envelope?.effectivePerAxis?.displayResolution ?? envelope?.projectTestSpec?.perAxis?.displayResolution;
7599
+ if (!displayResolutionAxis) {
7600
+ throw new GatewayError({
7601
+ code: "UPSTREAM_ERROR" /* UPSTREAM_ERROR */,
7602
+ message: "project test spec response carried no display resolutions: neither effectivePerAxis.displayResolution nor projectTestSpec.perAxis.displayResolution.",
7603
+ statusCode: response.statusCode
7604
+ });
7605
+ }
7606
+ const runEnvironmentType = toolInput.runEnvironmentType ?? "remote" /* Remote */;
7607
+ const runStrategy = toRunStrategy(envelope?.fanOutPolicy ?? envelope?.projectTestSpec?.fanOutPolicy);
7608
+ const [primaryOptionId, ...compatibleOptionIds] = displayResolutionAxis.default ?? [];
7609
+ return {
7610
+ projectId: toolInput.projectId,
7611
+ runEnvironmentType,
7612
+ primaryResolution: isKnownDisplayResolution(primaryOptionId) ? primaryOptionId : null,
7613
+ compatibleResolutions: toKnownDisplayResolutions(compatibleOptionIds),
7614
+ enabledResolutions: toKnownDisplayResolutions(displayResolutionAxis.enabledValues),
7615
+ runStrategy
7616
+ };
7617
+ }
7618
+ function isKnownDisplayResolution(optionId) {
7619
+ return optionId !== void 0 && KNOWN_DISPLAY_RESOLUTIONS.has(optionId);
7620
+ }
7621
+ function toKnownDisplayResolutions(optionIds) {
7622
+ return (optionIds ?? []).filter(isKnownDisplayResolution);
7623
+ }
7624
+ function toRunStrategy(fanOutPolicy) {
7625
+ return fanOutPolicy !== void 0 && KNOWN_RUN_STRATEGIES.has(fanOutPolicy) ? fanOutPolicy : DEFAULT_RUN_STRATEGY;
7626
+ }
7627
+
7520
7628
  // packages/mcps/src/mcp/tools/e2e/run-settings-list-transform.ts
7521
7629
  function mapRunSettingsList(response) {
7522
7630
  const envelope = response.data;
@@ -7726,7 +7834,7 @@ var getWorkflowTimeoutMs = () => getConfig().e2e.workflowTimeoutMs;
7726
7834
  var projectTools = [
7727
7835
  {
7728
7836
  name: "muggle-remote-project-create",
7729
- description: "Create an E2E acceptance testing project to organize browser tests for a web app. A project groups test scenarios (use cases), specific test steps (test cases), and replayable browser scripts (test scripts) for one application. Create a project first before generating or running any E2E tests. Pass organizationId to create it under an organization the caller belongs to; omit it for a personal project.",
7837
+ description: "Create an E2E acceptance testing project to organize browser tests for a web app. A project groups test scenarios (use cases), specific test steps (test cases), and replayable browser scripts (test scripts) for one application. Create a project first before generating or running any E2E tests. Pass organizationId to create it under an organization the caller belongs to; omit it for a personal project. Pass primaryResolution, compatibleResolutions and runStrategy to verify every test case at more than one viewport (e.g. desktop and phone); omit them for R_1920x1080 alone under primaryOnly.",
7730
7838
  inputSchema: ProjectCreateInputSchema,
7731
7839
  dashboardLink: linkToCreatedProject,
7732
7840
  mapToUpstream: (input) => {
@@ -7734,7 +7842,8 @@ var projectTools = [
7734
7842
  const body = {
7735
7843
  name: toolInput.projectName,
7736
7844
  description: toolInput.description,
7737
- url: toolInput.url
7845
+ url: toolInput.url,
7846
+ ...toProjectResolutionUpstreamFields(toolInput)
7738
7847
  };
7739
7848
  if (toolInput.organizationId !== void 0) body.organizationId = toolInput.organizationId;
7740
7849
  return {
@@ -7746,7 +7855,7 @@ var projectTools = [
7746
7855
  },
7747
7856
  {
7748
7857
  name: "muggle-remote-project-get",
7749
- description: "Get details of a specific project by ID.",
7858
+ description: "Get details of a specific project by ID. Its displayOptions is the resolution list last saved on the project, primary first; read the primary and compatible resolutions in effect, and the run strategy, with muggle-remote-project-display-resolutions-get.",
7750
7859
  inputSchema: ProjectGetInputSchema,
7751
7860
  dashboardLink: linkToInputProjectPage("project" /* Project */),
7752
7861
  mapToUpstream: (input) => {
@@ -7759,11 +7868,14 @@ var projectTools = [
7759
7868
  },
7760
7869
  {
7761
7870
  name: "muggle-remote-project-update",
7762
- description: "Update an existing project's details, or move a personal project into an organization the caller belongs to.",
7871
+ description: "Update an existing project's details, or move a personal project into an organization the caller belongs to. primaryResolution, compatibleResolutions and runStrategy change, on both lanes, the resolutions every test case is verified at and how its runs across them start. The resolutions save as one list: compatibleResolutions requires primaryResolution and replaces the whole compatible list, and primaryResolution alone clears it, so read the current ones with muggle-remote-project-display-resolutions-get and pass back those to keep. runStrategy alone leaves the resolutions unchanged.",
7763
7872
  inputSchema: ProjectUpdateInputSchema,
7764
7873
  mapToUpstream: (input) => {
7765
7874
  const toolInput = input;
7766
- const body = { id: toolInput.projectId };
7875
+ const body = {
7876
+ id: toolInput.projectId,
7877
+ ...toProjectResolutionUpstreamFields(toolInput)
7878
+ };
7767
7879
  if (toolInput.projectName !== void 0) body.name = toolInput.projectName;
7768
7880
  if (toolInput.description !== void 0) body.description = toolInput.description;
7769
7881
  if (toolInput.url !== void 0) body.url = toolInput.url;
@@ -7775,6 +7887,20 @@ var projectTools = [
7775
7887
  };
7776
7888
  }
7777
7889
  },
7890
+ {
7891
+ name: "muggle-remote-project-display-resolutions-get",
7892
+ description: "Get a project lane's resolutions and run strategy: the resolutions every test case that picks none of its own is verified at, one run each, and how those runs start. Response shape: { projectId, runEnvironmentType, primaryResolution, compatibleResolutions, enabledResolutions, runStrategy }. runStrategy is primaryOnly (the primary runs alone; compatible resolutions are reported as not run), primaryFirst (compatible resolutions run once the primary passes) or allAtOnce (every resolution runs at once); a lane that never set one reports primaryOnly. enabledResolutions are those a test case on the lane may pick. Change them with primaryResolution, compatibleResolutions and runStrategy on muggle-remote-project-update.",
7893
+ inputSchema: ProjectDisplayResolutionsGetInputSchema,
7894
+ mapToUpstream: (input) => {
7895
+ const toolInput = input;
7896
+ return {
7897
+ method: "GET",
7898
+ path: `${MUGGLE_TEST_PREFIX}/projects/${toolInput.projectId}/project-test-spec`,
7899
+ queryParams: { type: toolInput.runEnvironmentType ?? "remote" /* Remote */ }
7900
+ };
7901
+ },
7902
+ mapFromUpstream: mapProjectDisplayResolutions
7903
+ },
7778
7904
  {
7779
7905
  name: "muggle-remote-project-list",
7780
7906
  description: "List projects accessible to the authenticated user: the projects they own plus the projects shared with them. Returns up to 10 items per page by default (max 100). Response includes pagination metadata (totalCount, totalPages, hasMore) \u2014 check `hasMore` to decide whether to fetch additional pages.",
@@ -8058,7 +8184,7 @@ var testCaseTools = [
8058
8184
  },
8059
8185
  {
8060
8186
  name: "muggle-remote-fan-out-plan",
8061
- description: "Plan a test case's fan-out across its runSettings records in one lane, for a caller that runs the records itself, such as a local run; it starts nothing and writes nothing. Response shape: { testCaseId, laneType, fanOutPolicy, fanOutChoice, isPrimaryKnownGood, isSecondaryGatedOnPrimary, records: [{ runSettingsId, resolutionLabel, displayResolution, isPrimary, testScriptId }], notRunRunSettingsIds }. `records` is in start order, primary first: run records[0] first. When isSecondaryGatedOnPrimary is true, run the rest only if that run passed, and otherwise report each as skipped because the primary failed; when false, run them all. A record's testScriptId is its script on the lane, absent when it has none: replay that script, or generate with the record's runSettingsId and displayResolution. Empty records means the lane has no records for the test case. notRunRunSettingsIds lists the records primaryOnly leaves unrun. Omit fanOutChoice to follow the lane's policy.",
8187
+ description: "Plan a test case's fan-out across its runSettings records in one lane, for a caller that runs the records itself, such as a local run; it starts nothing and writes nothing. Response shape: { testCaseId, laneType, fanOutPolicy, fanOutChoice, isPrimaryKnownGood, isSecondaryGatedOnPrimary, records: [{ runSettingsId, resolutionLabel, displayResolution, isPrimary, testScriptId }], notRunRunSettingsIds }. `records` is in start order, primary first: run records[0] first. When isSecondaryGatedOnPrimary is true, run the rest only if that run passed, and otherwise report each as skipped because the primary failed; when false, run them all. A record's testScriptId is its script on the lane, absent when it has none: replay that script, or generate with the record's runSettingsId and displayResolution. Empty records means the lane has no records for the test case. notRunRunSettingsIds lists the records left unrun because fanOutChoice or the lane's fanOutPolicy is primaryOnly. Omit fanOutChoice to follow the lane's policy.",
8062
8188
  inputSchema: FanOutPlanInputSchema,
8063
8189
  mapToUpstream: (input) => {
8064
8190
  const toolInput = input;
@@ -10922,8 +11048,10 @@ __export(e2e_exports2, {
10922
11048
  PrdFileUploadInputSchema: () => PrdFileUploadInputSchema,
10923
11049
  ProjectCreateInputSchema: () => ProjectCreateInputSchema,
10924
11050
  ProjectDeleteInputSchema: () => ProjectDeleteInputSchema,
11051
+ ProjectDisplayResolutionsGetInputSchema: () => ProjectDisplayResolutionsGetInputSchema,
10925
11052
  ProjectGetInputSchema: () => ProjectGetInputSchema,
10926
11053
  ProjectListInputSchema: () => ProjectListInputSchema,
11054
+ ProjectResolutionSettingsInputSchema: () => ProjectResolutionSettingsInputSchema,
10927
11055
  ProjectTestResultsSummaryInputSchema: () => ProjectTestResultsSummaryInputSchema,
10928
11056
  ProjectTestRunsSummaryInputSchema: () => ProjectTestRunsSummaryInputSchema,
10929
11057
  ProjectTestScriptsSummaryInputSchema: () => ProjectTestScriptsSummaryInputSchema,
@@ -10940,6 +11068,7 @@ __export(e2e_exports2, {
10940
11068
  RunEnvironmentInputSchema: () => RunEnvironmentInputSchema,
10941
11069
  RunEnvironmentSchema: () => RunEnvironmentSchema,
10942
11070
  RunSettingsListInputSchema: () => RunSettingsListInputSchema,
11071
+ RunStrategy: () => RunStrategy,
10943
11072
  SecretCreateInputSchema: () => SecretCreateInputSchema,
10944
11073
  SecretDeleteInputSchema: () => SecretDeleteInputSchema,
10945
11074
  SecretFieldEnum: () => SecretFieldEnum,
@@ -11586,4 +11715,4 @@ function applyLlmSourceSelection(selection, dataDirOverride2) {
11586
11715
  return resolveLlmSourceStatus(dataDirOverride2);
11587
11716
  }
11588
11717
 
11589
- export { ACTION_SCRIPT_FILE_NAME, BASE_REMOTE_NAME, BLOCKING_FRESHNESS_VERDICTS, BRANCH_CREATION_REFLOG_PREFIX, BUSY_EXIT_CODE, CLAUDE_CODE_AUTH_STATUS_ARGS, CLAUDE_CODE_CHECK_TIMEOUT_MS, CLAUDE_CODE_EXECUTABLE, CLAUDE_CODE_EXECUTABLE_NOT_FOUND_CODE, CLAUDE_CODE_SESSION_LINK_ENV_VARS, CLAUDE_CODE_VERSION_ARGS, CheckoutFreshnessVerdict, ClaudeCodeReadiness, DEFAULT_LOCAL_LLM_BASE_URL, DEFAULT_PREFERENCES, ELECTRON_APP_EXECUTABLE_PATH_SEGMENTS, ElectronAppPlatform, ElectronAppReleaseStream, EventName, HTML_VIEW_OFFER_LINE, LLM_CREDENTIALS_FILE_MODE, LLM_CREDENTIALS_FILE_NAME, LLM_SOURCE_HEADER, LLM_SOURCE_OPTIONS, LLM_SOURCE_OWNED_ENV_NAMES, LLM_SOURCE_PROMPT, LLM_SOURCE_SCOPE_NOTE, LlmSource, MASKED_API_KEY_PREFIX, MASKED_API_KEY_VISIBLE_CHARS, MAX_LISTED_INHERITED_COMMITS, ONBOARDING_BLANKET_OPTIONS, ONBOARDING_CHOICE_GROUPS, ONBOARDING_MAX_OFFERS, ONBOARDING_PRIMER_BULLETS, ONBOARDING_PRIMER_HEADLINE, ONBOARDING_TOGGLE_GROUPS, ONBOARDING_TOGGLE_PROMPT, ONBOARDING_UNSELECTED_TOGGLE_VALUE, OnboardingBlanketChoice, OnboardingGroupKind, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, ProjectPreferencesReconcileOutcome, RUN_SESSIONS_DIR_NAME, RUN_VIEW_DASHBOARD_LINK_LABEL, RunViewError, RuntimeTarget, SCREENSHOT_DIR_RELATIVE_PATH, SCREENSHOT_FILE_EXTENSION, ServiceName, StackCheckVerdict, StackClaimVerdict, StackLeaseEndReason, StackMismatchKind, StackPortAction, Surface, WATCHER_LIFETIME_SECONDS, WATCHER_LIFETIME_UNBOUNDED_SECONDS, __export, __require, applyLlmSourceSelection, applyOnboardingAnswers, assertDeviceCodeClientProvisioned, buildElectronAppChecksumsUrl, buildElectronAppDirName, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, buildLlmSourcePlan, buildOnboardingPlan, buildToolInputJsonSchema, calculateFileChecksum, checkServiceStack, claimServiceStack, compareQueuePlaces, completeOnboarding, createApiKeyWithToken, createChildLogger, decideStackClaim, decideStackReap, decideStackRelease, decideStackRunEnd, decideStackRunStart, deleteApiKeyData, deleteCredentials, describeLlmSourceStatus, describeStackMismatch, e2e_exports2 as e2e_exports, evaluateCheckoutFreshness, findVacatedNeeds, finishStackRun, formatPreferencesOneLiner, getActiveElectronAppReleaseStream, getActiveRuntimeTarget, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDashboardBaseUrl, getDataDir, getDataDir2, getDisclosureCopy, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppReleaseTagPrefix, getElectronAppSignedFromVersion, getElectronAppVersion, getElectronAppVersionSource, getLlmSourceOption, getLocalQaTools, getLogger, getOnboardingToggleKeys, getPlatformKey, getQaTools, getReleaseSignerIdentityUri, getRunSessionsDir, getValidApiKeyData, getValidCredentials, hasApiKey, hasShownDisclosure, initTelemetry, isElectronAppInstalled, isElectronAppPlatform, isFirstRun, isValidLocalBaseUrl, loadApiKeyData, loadCredentials, local_exports2 as local_exports, lookUpCheckoutPullRequest, markDisclosureShown, markOnboardingCompleted, maskLlmApiKey, mcp_exports, needsConflict, needsOnboarding, openBrowserUrl, parseElectronAppDirName, performLogin, performLogout, pollDeviceCode, portOfUrl, readPreferencesMetadata, readRunView, readServiceStackStatus, reapServiceStack, reconcileProjectPreferences, recordOnboardingSkip, releaseServiceStack, renderRunViewHtml, renderRunViewText, resetConfig, resetLogger, resetPreference, resolveActiveProfile, resolveActiveReleaseStream, resolveActiveReleaseTagPrefix, resolveBlanketPreferences, resolveElectronAppExecutablePath, resolveElectronAppPathOrNull, resolveLlmSourceStatus, resolveOnboardingAnswers, resolvePreferences, resolveRunSessionPath, resolveRuntimeTarget, resolveTogglePreferences, runGitCommand, saveApiKey, saveApiKeyData, saveCredentials, src_exports, startDeviceCodeFlow, startStackRun, stopVacatedServices, toDisplayRef, toolRequiresAuth, track, validatePreference, verifyFileChecksum, writeLlmEnvBlock, writePreferences, writePreferencesWithMetadata, writeRunViewHtml };
11718
+ export { ACTION_SCRIPT_FILE_NAME, BASE_REMOTE_NAME, BLOCKING_FRESHNESS_VERDICTS, BRANCH_CREATION_REFLOG_PREFIX, BUSY_EXIT_CODE, CLAUDE_CODE_AUTH_STATUS_ARGS, CLAUDE_CODE_CHECK_TIMEOUT_MS, CLAUDE_CODE_EXECUTABLE, CLAUDE_CODE_EXECUTABLE_NOT_FOUND_CODE, CLAUDE_CODE_SESSION_LINK_ENV_VARS, CLAUDE_CODE_VERSION_ARGS, CheckoutFreshnessVerdict, ClaudeCodeReadiness, DEFAULT_LOCAL_LLM_BASE_URL, DEFAULT_PREFERENCES, ELECTRON_APP_EXECUTABLE_PATH_SEGMENTS, ElectronAppPlatform, ElectronAppReleaseStream, EventName, HTML_VIEW_OFFER_LINE, LLM_CREDENTIALS_FILE_MODE, LLM_CREDENTIALS_FILE_NAME, LLM_SOURCE_HEADER, LLM_SOURCE_OPTIONS, LLM_SOURCE_OWNED_ENV_NAMES, LLM_SOURCE_PROMPT, LLM_SOURCE_SCOPE_NOTE, LlmSource, MASKED_API_KEY_PREFIX, MASKED_API_KEY_VISIBLE_CHARS, MAX_LISTED_INHERITED_COMMITS, ONBOARDING_BLANKET_OPTIONS, ONBOARDING_CHOICE_GROUPS, ONBOARDING_MAX_OFFERS, ONBOARDING_PRIMER_BULLETS, ONBOARDING_PRIMER_HEADLINE, ONBOARDING_TOGGLE_GROUPS, ONBOARDING_TOGGLE_PROMPT, ONBOARDING_UNSELECTED_TOGGLE_VALUE, OnboardingBlanketChoice, OnboardingGroupKind, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, ProjectPreferencesReconcileOutcome, RUN_SESSIONS_DIR_NAME, RUN_VIEW_DASHBOARD_LINK_LABEL, RunViewError, RuntimeTarget, SCREENSHOT_DIR_RELATIVE_PATH, SCREENSHOT_FILE_EXTENSION, ServiceName, StackCheckVerdict, StackClaimVerdict, StackLeaseEndReason, StackMismatchKind, StackPortAction, Surface, TelemetryEnvironment, WATCHER_LIFETIME_SECONDS, WATCHER_LIFETIME_UNBOUNDED_SECONDS, __export, __require, applyLlmSourceSelection, applyOnboardingAnswers, assertDeviceCodeClientProvisioned, buildElectronAppChecksumsUrl, buildElectronAppDirName, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, buildLlmSourcePlan, buildOnboardingPlan, buildToolInputJsonSchema, calculateFileChecksum, checkServiceStack, claimServiceStack, compareQueuePlaces, completeOnboarding, createApiKeyWithToken, createChildLogger, decideStackClaim, decideStackReap, decideStackRelease, decideStackRunEnd, decideStackRunStart, deleteApiKeyData, deleteCredentials, describeLlmSourceStatus, describeStackMismatch, e2e_exports2 as e2e_exports, evaluateCheckoutFreshness, findVacatedNeeds, finishStackRun, formatPreferencesOneLiner, getActiveElectronAppReleaseStream, getActiveRuntimeTarget, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDashboardBaseUrl, getDataDir, getDataDir2, getDisclosureCopy, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppReleaseTagPrefix, getElectronAppSignedFromVersion, getElectronAppVersion, getElectronAppVersionSource, getLlmSourceOption, getLocalQaTools, getLogger, getOnboardingToggleKeys, getPlatformKey, getQaTools, getReleaseSignerIdentityUri, getRunSessionsDir, getValidApiKeyData, getValidCredentials, hasApiKey, hasShownDisclosure, initTelemetry, isElectronAppInstalled, isElectronAppPlatform, isFirstRun, isValidLocalBaseUrl, loadApiKeyData, loadCredentials, local_exports2 as local_exports, lookUpCheckoutPullRequest, markDisclosureShown, markOnboardingCompleted, maskLlmApiKey, mcp_exports, needsConflict, needsOnboarding, openBrowserUrl, parseElectronAppDirName, performLogin, performLogout, pollDeviceCode, portOfUrl, readPreferencesMetadata, readRunView, readServiceStackStatus, reapServiceStack, reconcileProjectPreferences, recordOnboardingSkip, releaseServiceStack, renderRunViewHtml, renderRunViewText, resetConfig, resetLogger, resetPreference, resolveActiveProfile, resolveActiveReleaseStream, resolveActiveReleaseTagPrefix, resolveBlanketPreferences, resolveElectronAppExecutablePath, resolveElectronAppPathOrNull, resolveLlmSourceStatus, resolveOnboardingAnswers, resolvePreferences, resolveRunSessionPath, resolveRuntimeTarget, resolveTogglePreferences, runGitCommand, saveApiKey, saveApiKeyData, saveCredentials, src_exports, startDeviceCodeFlow, startStackRun, stopVacatedServices, toDisplayRef, toolRequiresAuth, track, validatePreference, verifyFileChecksum, writeLlmEnvBlock, writePreferences, writePreferencesWithMetadata, writeRunViewHtml };
@@ -1,4 +1,4 @@
1
- import { __export, getLogger, getConfig, createChildLogger, buildElectronAppReleaseAssetUrl, getActiveRuntimeTarget, getAuthService, hasApiKey, getElectronAppVersion, getElectronAppDir, getPlatformKey, reconcileProjectPreferences, getDataDir2, PREFERENCES_FILE_NAME, isFirstRun, writePreferences, DEFAULT_PREFERENCES, isElectronAppInstalled, getElectronAppChecksums, getChecksumForPlatform, getElectronAppSignedFromVersion, getReleaseSignerIdentityUri, verifyFileChecksum, resolveElectronAppExecutablePath, calculateFileChecksum, initTelemetry, Surface, ServiceName, track, EventName, getQaTools, getLocalQaTools, performLogout, assertDeviceCodeClientProvisioned, performLogin, getActiveElectronAppReleaseStream, buildToolInputJsonSchema, toolRequiresAuth, getCallerCredentials, parseElectronAppDirName, getElectronAppReleaseTagPrefix, hasShownDisclosure, markDisclosureShown, getBundledElectronAppVersion, getElectronAppVersionSource, getCredentialsFilePath, ElectronAppReleaseStream, buildElectronAppChecksumsUrl, __require, getDisclosureCopy, buildOnboardingPlan, applyOnboardingAnswers, needsOnboarding, buildLlmSourcePlan, describeLlmSourceStatus, resolveLlmSourceStatus, readRunView, RunViewError, renderRunViewText, writeRunViewHtml, openBrowserUrl, evaluateCheckoutFreshness, runGitCommand, BLOCKING_FRESHNESS_VERDICTS, claimServiceStack, BUSY_EXIT_CODE, checkServiceStack, releaseServiceStack, readServiceStackStatus, resolvePreferences, OnboardingBlanketChoice, PreferenceKey, LlmSource, applyLlmSourceSelection, describeStackMismatch, getDataDir, DEFAULT_LOCAL_LLM_BASE_URL, isValidLocalBaseUrl, local_exports } from './chunk-XUANXZ2O.js';
1
+ import { __export, getLogger, TelemetryEnvironment, getConfig, createChildLogger, buildElectronAppReleaseAssetUrl, getActiveRuntimeTarget, getAuthService, hasApiKey, getElectronAppVersion, getElectronAppDir, getPlatformKey, reconcileProjectPreferences, getDataDir2, PREFERENCES_FILE_NAME, isFirstRun, writePreferences, DEFAULT_PREFERENCES, isElectronAppInstalled, getElectronAppChecksums, getChecksumForPlatform, getElectronAppSignedFromVersion, getReleaseSignerIdentityUri, verifyFileChecksum, resolveElectronAppExecutablePath, calculateFileChecksum, initTelemetry, Surface, ServiceName, track, EventName, getQaTools, getLocalQaTools, performLogout, assertDeviceCodeClientProvisioned, performLogin, getActiveElectronAppReleaseStream, buildToolInputJsonSchema, toolRequiresAuth, getCallerCredentials, parseElectronAppDirName, getElectronAppReleaseTagPrefix, hasShownDisclosure, markDisclosureShown, getBundledElectronAppVersion, getElectronAppVersionSource, getCredentialsFilePath, ElectronAppReleaseStream, buildElectronAppChecksumsUrl, __require, getDisclosureCopy, buildOnboardingPlan, applyOnboardingAnswers, needsOnboarding, buildLlmSourcePlan, describeLlmSourceStatus, resolveLlmSourceStatus, readRunView, RunViewError, renderRunViewText, writeRunViewHtml, openBrowserUrl, evaluateCheckoutFreshness, runGitCommand, BLOCKING_FRESHNESS_VERDICTS, claimServiceStack, BUSY_EXIT_CODE, checkServiceStack, releaseServiceStack, readServiceStackStatus, resolvePreferences, OnboardingBlanketChoice, PreferenceKey, LlmSource, applyLlmSourceSelection, describeStackMismatch, getDataDir, DEFAULT_LOCAL_LLM_BASE_URL, isValidLocalBaseUrl, local_exports } from './chunk-7J7DS4SA.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';
@@ -1165,7 +1165,7 @@ async function resolveGsScreenshotUrls(report, opts) {
1165
1165
  if (gsUrls.length === 0) {
1166
1166
  return report;
1167
1167
  }
1168
- const mcps = await import('./src-J6AIYTLA.js');
1168
+ const mcps = await import('./src-QA7TWQ2M.js');
1169
1169
  const credentials = await mcps.getCallerCredentialsAsync();
1170
1170
  if (!credentials.bearerToken && !credentials.apiKey) {
1171
1171
  stderrWrite(
@@ -3979,6 +3979,13 @@ function resolveDisclosureCopy() {
3979
3979
  return `${upstream.slice(0, markerIndex)}${DISCLOSURE_OPT_OUT_COPY}`;
3980
3980
  }
3981
3981
 
3982
+ // src/cli/telemetry-environment-constants.ts
3983
+ var TELEMETRY_ENVIRONMENT_BY_RUNTIME_TARGET = {
3984
+ ["production" /* Production */]: TelemetryEnvironment.Production,
3985
+ ["staging" /* Staging */]: TelemetryEnvironment.Staging,
3986
+ ["dev" /* Dev */]: TelemetryEnvironment.Development
3987
+ };
3988
+
3982
3989
  // src/cli/serve.ts
3983
3990
  var APPLICATIONINSIGHTS_CONNECTION_STRING = "InstrumentationKey=0e28df42-b98e-4089-b3b5-6decefb99447;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com/;LiveEndpoint=https://westus3.livediagnostics.monitor.azure.com/;ApplicationId=b64a932f-85ec-40cd-a74b-e181a3660f6c";
3984
3991
  function showDisclosureIfNeeded() {
@@ -4005,7 +4012,8 @@ async function serveCommand(options) {
4005
4012
  initTelemetry({
4006
4013
  serviceName: ServiceName.MuggleMcp,
4007
4014
  surface: Surface.McpLocal,
4008
- connectionString: APPLICATIONINSIGHTS_CONNECTION_STRING
4015
+ connectionString: APPLICATIONINSIGHTS_CONNECTION_STRING,
4016
+ environment: TELEMETRY_ENVIRONMENT_BY_RUNTIME_TARGET[getActiveRuntimeTarget()]
4009
4017
  });
4010
4018
  track({ name: EventName.SystemStartup, props: { serviceName: ServiceName.MuggleMcp } });
4011
4019
  } catch (err) {
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { runCli } from './chunk-IZQGF3F2.js';
3
- import './chunk-XUANXZ2O.js';
2
+ import { runCli } from './chunk-7JQWRPFI.js';
3
+ import './chunk-7J7DS4SA.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-IZQGF3F2.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-XUANXZ2O.js';
1
+ export { src_exports as commands, createUnifiedMcpServer, server_exports as server } from './chunk-7JQWRPFI.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-7J7DS4SA.js';
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "muggle",
3
3
  "description": "Real-browser E2E acceptance for your coding agent: test the flows you changed and open the PR with screenshots. Built for flows other tools can't reach: managed test identities with live inboxes (magic links, email OTP and 2FA, verification mail, password resets), an encrypted secret store for login and test credentials, and a test graph that runs prerequisite flows first. Plain-English tests become replayable scripts on localhost or preview URLs.",
4
- "version": "5.31.0-staging.272",
4
+ "version": "5.31.0-staging.274",
5
5
  "author": {
6
6
  "name": "Muggle AI",
7
7
  "email": "support@muggle-ai.com"
@@ -4,7 +4,7 @@
4
4
  "command": "npx",
5
5
  "args": [
6
6
  "-y",
7
- "@muggleai/works@5.31.0-staging.272",
7
+ "@muggleai/works@5.31.0-staging.274",
8
8
  "serve"
9
9
  ],
10
10
  "env": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muggle",
3
- "version": "5.31.0-staging.272",
3
+ "version": "5.31.0-staging.274",
4
4
  "description": "Real-browser E2E acceptance for your coding agent: test the flows you changed and open the PR with screenshots. Built for flows other tools can't reach: managed test identities with live inboxes (magic links, email OTP and 2FA, verification mail, password resets), an encrypted secret store for login and test credentials, and a test graph that runs prerequisite flows first. Plain-English tests become replayable scripts on localhost or preview URLs.",
5
5
  "author": {
6
6
  "name": "Muggle AI",
@@ -2,7 +2,7 @@
2
2
  "name": "muggle",
3
3
  "displayName": "Muggle AI",
4
4
  "description": "Real-browser E2E acceptance for your coding agent: test the flows you changed and open the PR with screenshots. Built for flows other tools can't reach: managed test identities with live inboxes (magic links, email OTP and 2FA, verification mail, password resets), an encrypted secret store for login and test credentials, and a test graph that runs prerequisite flows first. Plain-English tests become replayable scripts on localhost or preview URLs.",
5
- "version": "5.31.0-staging.272",
5
+ "version": "5.31.0-staging.274",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"
@@ -4,7 +4,7 @@
4
4
  "command": "npx",
5
5
  "args": [
6
6
  "-y",
7
- "@muggleai/works@5.31.0-staging.272",
7
+ "@muggleai/works@5.31.0-staging.274",
8
8
  "serve"
9
9
  ]
10
10
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "release": "5.26.0",
3
- "buildId": "run-272-1",
4
- "commitSha": "76a7b1d3658b798a4b809e758e42e7128e23aba1",
5
- "buildTime": "2026-11-01T06:59:53Z",
3
+ "buildId": "run-274-1",
4
+ "commitSha": "79c091d63782313be3672ba64db5ae65c44e2c2b",
5
+ "buildTime": "2026-11-01T07:21:17Z",
6
6
  "serviceName": "muggle-ai-works-mcp"
7
7
  }
@@ -1 +1 @@
1
- export { ACTION_SCRIPT_FILE_NAME, BASE_REMOTE_NAME, BLOCKING_FRESHNESS_VERDICTS, BRANCH_CREATION_REFLOG_PREFIX, BUSY_EXIT_CODE, CLAUDE_CODE_AUTH_STATUS_ARGS, CLAUDE_CODE_CHECK_TIMEOUT_MS, CLAUDE_CODE_EXECUTABLE, CLAUDE_CODE_EXECUTABLE_NOT_FOUND_CODE, CLAUDE_CODE_SESSION_LINK_ENV_VARS, CLAUDE_CODE_VERSION_ARGS, CheckoutFreshnessVerdict, ClaudeCodeReadiness, DEFAULT_LOCAL_LLM_BASE_URL, DEFAULT_PREFERENCES, ELECTRON_APP_EXECUTABLE_PATH_SEGMENTS, ElectronAppPlatform, ElectronAppReleaseStream, HTML_VIEW_OFFER_LINE, LLM_CREDENTIALS_FILE_MODE, LLM_CREDENTIALS_FILE_NAME, LLM_SOURCE_HEADER, LLM_SOURCE_OPTIONS, LLM_SOURCE_OWNED_ENV_NAMES, LLM_SOURCE_PROMPT, LLM_SOURCE_SCOPE_NOTE, LlmSource, MASKED_API_KEY_PREFIX, MASKED_API_KEY_VISIBLE_CHARS, MAX_LISTED_INHERITED_COMMITS, ONBOARDING_BLANKET_OPTIONS, ONBOARDING_CHOICE_GROUPS, ONBOARDING_MAX_OFFERS, ONBOARDING_PRIMER_BULLETS, ONBOARDING_PRIMER_HEADLINE, ONBOARDING_TOGGLE_GROUPS, ONBOARDING_TOGGLE_PROMPT, ONBOARDING_UNSELECTED_TOGGLE_VALUE, OnboardingBlanketChoice, OnboardingGroupKind, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, ProjectPreferencesReconcileOutcome, RUN_SESSIONS_DIR_NAME, RUN_VIEW_DASHBOARD_LINK_LABEL, RunViewError, RuntimeTarget, SCREENSHOT_DIR_RELATIVE_PATH, SCREENSHOT_FILE_EXTENSION, StackCheckVerdict, StackClaimVerdict, StackLeaseEndReason, StackMismatchKind, StackPortAction, WATCHER_LIFETIME_SECONDS, WATCHER_LIFETIME_UNBOUNDED_SECONDS, applyLlmSourceSelection, applyOnboardingAnswers, assertDeviceCodeClientProvisioned, buildElectronAppChecksumsUrl, buildElectronAppDirName, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, buildLlmSourcePlan, buildOnboardingPlan, buildToolInputJsonSchema, calculateFileChecksum, checkServiceStack, claimServiceStack, compareQueuePlaces, completeOnboarding, createApiKeyWithToken, createChildLogger, decideStackClaim, decideStackReap, decideStackRelease, decideStackRunEnd, decideStackRunStart, deleteApiKeyData, deleteCredentials, describeLlmSourceStatus, describeStackMismatch, e2e_exports as e2e, evaluateCheckoutFreshness, findVacatedNeeds, finishStackRun, formatPreferencesOneLiner, getActiveElectronAppReleaseStream, getActiveRuntimeTarget, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDashboardBaseUrl, getDataDir2 as getDataDir, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppReleaseTagPrefix, getElectronAppSignedFromVersion, getElectronAppVersion, getElectronAppVersionSource, getLlmSourceOption, getLocalQaTools, getLogger, getOnboardingToggleKeys, getPlatformKey, getQaTools, getReleaseSignerIdentityUri, getRunSessionsDir, getValidApiKeyData, getValidCredentials, hasApiKey, isElectronAppInstalled, isElectronAppPlatform, isFirstRun, isValidLocalBaseUrl, loadApiKeyData, loadCredentials, local_exports as localQa, lookUpCheckoutPullRequest, markOnboardingCompleted, maskLlmApiKey, mcp_exports as mcp, needsConflict, needsOnboarding, openBrowserUrl, parseElectronAppDirName, performLogin, performLogout, pollDeviceCode, portOfUrl, e2e_exports as qa, readPreferencesMetadata, readRunView, readServiceStackStatus, reapServiceStack, reconcileProjectPreferences, recordOnboardingSkip, releaseServiceStack, renderRunViewHtml, renderRunViewText, resetConfig, resetLogger, resetPreference, resolveActiveProfile, resolveActiveReleaseStream, resolveActiveReleaseTagPrefix, resolveBlanketPreferences, resolveElectronAppExecutablePath, resolveElectronAppPathOrNull, resolveLlmSourceStatus, resolveOnboardingAnswers, resolvePreferences, resolveRunSessionPath, resolveRuntimeTarget, resolveTogglePreferences, runGitCommand, saveApiKey, saveApiKeyData, saveCredentials, startDeviceCodeFlow, startStackRun, stopVacatedServices, toDisplayRef, toolRequiresAuth, validatePreference, verifyFileChecksum, writeLlmEnvBlock, writePreferences, writePreferencesWithMetadata, writeRunViewHtml } from './chunk-XUANXZ2O.js';
1
+ export { ACTION_SCRIPT_FILE_NAME, BASE_REMOTE_NAME, BLOCKING_FRESHNESS_VERDICTS, BRANCH_CREATION_REFLOG_PREFIX, BUSY_EXIT_CODE, CLAUDE_CODE_AUTH_STATUS_ARGS, CLAUDE_CODE_CHECK_TIMEOUT_MS, CLAUDE_CODE_EXECUTABLE, CLAUDE_CODE_EXECUTABLE_NOT_FOUND_CODE, CLAUDE_CODE_SESSION_LINK_ENV_VARS, CLAUDE_CODE_VERSION_ARGS, CheckoutFreshnessVerdict, ClaudeCodeReadiness, DEFAULT_LOCAL_LLM_BASE_URL, DEFAULT_PREFERENCES, ELECTRON_APP_EXECUTABLE_PATH_SEGMENTS, ElectronAppPlatform, ElectronAppReleaseStream, HTML_VIEW_OFFER_LINE, LLM_CREDENTIALS_FILE_MODE, LLM_CREDENTIALS_FILE_NAME, LLM_SOURCE_HEADER, LLM_SOURCE_OPTIONS, LLM_SOURCE_OWNED_ENV_NAMES, LLM_SOURCE_PROMPT, LLM_SOURCE_SCOPE_NOTE, LlmSource, MASKED_API_KEY_PREFIX, MASKED_API_KEY_VISIBLE_CHARS, MAX_LISTED_INHERITED_COMMITS, ONBOARDING_BLANKET_OPTIONS, ONBOARDING_CHOICE_GROUPS, ONBOARDING_MAX_OFFERS, ONBOARDING_PRIMER_BULLETS, ONBOARDING_PRIMER_HEADLINE, ONBOARDING_TOGGLE_GROUPS, ONBOARDING_TOGGLE_PROMPT, ONBOARDING_UNSELECTED_TOGGLE_VALUE, OnboardingBlanketChoice, OnboardingGroupKind, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, ProjectPreferencesReconcileOutcome, RUN_SESSIONS_DIR_NAME, RUN_VIEW_DASHBOARD_LINK_LABEL, RunViewError, RuntimeTarget, SCREENSHOT_DIR_RELATIVE_PATH, SCREENSHOT_FILE_EXTENSION, StackCheckVerdict, StackClaimVerdict, StackLeaseEndReason, StackMismatchKind, StackPortAction, WATCHER_LIFETIME_SECONDS, WATCHER_LIFETIME_UNBOUNDED_SECONDS, applyLlmSourceSelection, applyOnboardingAnswers, assertDeviceCodeClientProvisioned, buildElectronAppChecksumsUrl, buildElectronAppDirName, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, buildLlmSourcePlan, buildOnboardingPlan, buildToolInputJsonSchema, calculateFileChecksum, checkServiceStack, claimServiceStack, compareQueuePlaces, completeOnboarding, createApiKeyWithToken, createChildLogger, decideStackClaim, decideStackReap, decideStackRelease, decideStackRunEnd, decideStackRunStart, deleteApiKeyData, deleteCredentials, describeLlmSourceStatus, describeStackMismatch, e2e_exports as e2e, evaluateCheckoutFreshness, findVacatedNeeds, finishStackRun, formatPreferencesOneLiner, getActiveElectronAppReleaseStream, getActiveRuntimeTarget, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDashboardBaseUrl, getDataDir2 as getDataDir, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppReleaseTagPrefix, getElectronAppSignedFromVersion, getElectronAppVersion, getElectronAppVersionSource, getLlmSourceOption, getLocalQaTools, getLogger, getOnboardingToggleKeys, getPlatformKey, getQaTools, getReleaseSignerIdentityUri, getRunSessionsDir, getValidApiKeyData, getValidCredentials, hasApiKey, isElectronAppInstalled, isElectronAppPlatform, isFirstRun, isValidLocalBaseUrl, loadApiKeyData, loadCredentials, local_exports as localQa, lookUpCheckoutPullRequest, markOnboardingCompleted, maskLlmApiKey, mcp_exports as mcp, needsConflict, needsOnboarding, openBrowserUrl, parseElectronAppDirName, performLogin, performLogout, pollDeviceCode, portOfUrl, e2e_exports as qa, readPreferencesMetadata, readRunView, readServiceStackStatus, reapServiceStack, reconcileProjectPreferences, recordOnboardingSkip, releaseServiceStack, renderRunViewHtml, renderRunViewText, resetConfig, resetLogger, resetPreference, resolveActiveProfile, resolveActiveReleaseStream, resolveActiveReleaseTagPrefix, resolveBlanketPreferences, resolveElectronAppExecutablePath, resolveElectronAppPathOrNull, resolveLlmSourceStatus, resolveOnboardingAnswers, resolvePreferences, resolveRunSessionPath, resolveRuntimeTarget, resolveTogglePreferences, runGitCommand, saveApiKey, saveApiKeyData, saveCredentials, startDeviceCodeFlow, startStackRun, stopVacatedServices, toDisplayRef, toolRequiresAuth, validatePreference, verifyFileChecksum, writeLlmEnvBlock, writePreferences, writePreferencesWithMetadata, writeRunViewHtml } from './chunk-7J7DS4SA.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": "5.31.0-staging.272",
4
+ "version": "5.31.0-staging.274",
5
5
  "description": "13 years of Microsoft hyperscale engineering, packaged as a harness for your AI coding agent.",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "muggle",
3
3
  "description": "Real-browser E2E acceptance for your coding agent: test the flows you changed and open the PR with screenshots. Built for flows other tools can't reach: managed test identities with live inboxes (magic links, email OTP and 2FA, verification mail, password resets), an encrypted secret store for login and test credentials, and a test graph that runs prerequisite flows first. Plain-English tests become replayable scripts on localhost or preview URLs.",
4
- "version": "5.31.0-staging.272",
4
+ "version": "5.31.0-staging.274",
5
5
  "author": {
6
6
  "name": "Muggle AI",
7
7
  "email": "support@muggle-ai.com"
@@ -4,7 +4,7 @@
4
4
  "command": "npx",
5
5
  "args": [
6
6
  "-y",
7
- "@muggleai/works@5.31.0-staging.272",
7
+ "@muggleai/works@5.31.0-staging.274",
8
8
  "serve"
9
9
  ],
10
10
  "env": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muggle",
3
- "version": "5.31.0-staging.272",
3
+ "version": "5.31.0-staging.274",
4
4
  "description": "Real-browser E2E acceptance for your coding agent: test the flows you changed and open the PR with screenshots. Built for flows other tools can't reach: managed test identities with live inboxes (magic links, email OTP and 2FA, verification mail, password resets), an encrypted secret store for login and test credentials, and a test graph that runs prerequisite flows first. Plain-English tests become replayable scripts on localhost or preview URLs.",
5
5
  "author": {
6
6
  "name": "Muggle AI",
@@ -2,7 +2,7 @@
2
2
  "name": "muggle",
3
3
  "displayName": "Muggle AI",
4
4
  "description": "Real-browser E2E acceptance for your coding agent: test the flows you changed and open the PR with screenshots. Built for flows other tools can't reach: managed test identities with live inboxes (magic links, email OTP and 2FA, verification mail, password resets), an encrypted secret store for login and test credentials, and a test graph that runs prerequisite flows first. Plain-English tests become replayable scripts on localhost or preview URLs.",
5
- "version": "5.31.0-staging.272",
5
+ "version": "5.31.0-staging.274",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"
package/plugin/.mcp.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "command": "npx",
5
5
  "args": [
6
6
  "-y",
7
- "@muggleai/works@5.31.0-staging.272",
7
+ "@muggleai/works@5.31.0-staging.274",
8
8
  "serve"
9
9
  ]
10
10
  }