@muggleai/works 5.14.0 → 5.15.0-staging.105
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.
- package/dist/{chunk-2YXBHSCP.js → chunk-GMNAD3B6.js} +3 -3
- package/dist/{chunk-H5UDFKG3.js → chunk-J6VC26BI.js} +16 -0
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/dist/plugin/skills/_shared/test-case-chain-readiness.md +1 -0
- package/dist/release-manifest.json +3 -3
- package/dist/{src-KNYT7EHP.js → src-HWRBSSUF.js} +1 -1
- package/package.json +2 -2
- package/plugin/skills/_shared/test-case-chain-readiness.md +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __export, getLogger, getConfig, createChildLogger, buildElectronAppReleaseAssetUrl, getActiveRuntimeTarget, getAuthService, hasApiKey, getElectronAppVersion, getElectronAppDir, getPlatformKey, reconcileProjectPreferences, getDataDir, PREFERENCES_FILE_NAME, isFirstRun, writePreferences, DEFAULT_PREFERENCES, isElectronAppInstalled, getElectronAppChecksums, getChecksumForPlatform, getElectronAppSignedFromVersion, getReleaseSignerIdentityUri, verifyFileChecksum, calculateFileChecksum, initTelemetry, Surface, ServiceName, track, EventName, getQaTools, getLocalQaTools, performLogout, assertDeviceCodeClientProvisioned, performLogin, toolRequiresAuth, getCallerCredentials, hasShownDisclosure, getDisclosureCopy, markDisclosureShown, getBundledElectronAppVersion, getElectronAppVersionSource, getCredentialsFilePath, buildElectronAppChecksumsUrl, __require } from './chunk-
|
|
1
|
+
import { __export, getLogger, getConfig, createChildLogger, buildElectronAppReleaseAssetUrl, getActiveRuntimeTarget, getAuthService, hasApiKey, getElectronAppVersion, getElectronAppDir, getPlatformKey, reconcileProjectPreferences, getDataDir, PREFERENCES_FILE_NAME, isFirstRun, writePreferences, DEFAULT_PREFERENCES, isElectronAppInstalled, getElectronAppChecksums, getChecksumForPlatform, getElectronAppSignedFromVersion, getReleaseSignerIdentityUri, verifyFileChecksum, calculateFileChecksum, initTelemetry, Surface, ServiceName, track, EventName, getQaTools, getLocalQaTools, performLogout, assertDeviceCodeClientProvisioned, performLogin, toolRequiresAuth, getCallerCredentials, hasShownDisclosure, getDisclosureCopy, markDisclosureShown, getBundledElectronAppVersion, getElectronAppVersionSource, getCredentialsFilePath, buildElectronAppChecksumsUrl, __require } from './chunk-J6VC26BI.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';
|
|
@@ -753,7 +753,7 @@ async function resolveGsScreenshotUrls(report, opts) {
|
|
|
753
753
|
if (gsUrls.length === 0) {
|
|
754
754
|
return report;
|
|
755
755
|
}
|
|
756
|
-
const mcps = await import('./src-
|
|
756
|
+
const mcps = await import('./src-HWRBSSUF.js');
|
|
757
757
|
const credentials = await mcps.getCallerCredentialsAsync();
|
|
758
758
|
if (!credentials.bearerToken && !credentials.apiKey) {
|
|
759
759
|
stderrWrite(
|
|
@@ -806,7 +806,7 @@ var withSentinel = (s) => s ? `${REPORT_SECTION_SENTINEL}
|
|
|
806
806
|
${s}` : s;
|
|
807
807
|
async function resolveDashboardBaseUrl(stderrWrite) {
|
|
808
808
|
try {
|
|
809
|
-
const mcps = await import('./src-
|
|
809
|
+
const mcps = await import('./src-HWRBSSUF.js');
|
|
810
810
|
return `${mcps.resolveActiveProfile().uiBaseUrl}/dashboard/projects`;
|
|
811
811
|
} catch (err) {
|
|
812
812
|
stderrWrite(
|
|
@@ -4324,6 +4324,9 @@ var TestCaseDeleteInputSchema = z.object({
|
|
|
4324
4324
|
var TestCaseAncestorsGetInputSchema = z.object({
|
|
4325
4325
|
testCaseId: IdSchema.describe("Test case ID (UUID) to resolve the test-plan-graph ancestor chain for")
|
|
4326
4326
|
});
|
|
4327
|
+
var TestPlanGraphRebuildInputSchema = z.object({
|
|
4328
|
+
projectId: IdSchema.describe("Project ID (UUID) whose test-plan graph should be rebuilt")
|
|
4329
|
+
});
|
|
4327
4330
|
var TestCaseListByUseCaseInputSchema = z.object({
|
|
4328
4331
|
useCaseId: IdSchema.describe("Use case ID (UUID) to list test cases for")
|
|
4329
4332
|
});
|
|
@@ -5249,6 +5252,18 @@ var testCaseTools = [
|
|
|
5249
5252
|
};
|
|
5250
5253
|
}
|
|
5251
5254
|
},
|
|
5255
|
+
{
|
|
5256
|
+
name: "muggle-remote-test-plan-graph-rebuild",
|
|
5257
|
+
description: "Queue a full rebuild of a project's test-plan dependency graph: every node is dropped and the dependency analysis runs again across the whole project. Needed because the incremental analysis only ever adds nodes for test cases that have none \u2014 a case already stored as a root stays a root even once a prerequisite for it exists, so a rebuild is the only way to re-derive those edges. Reach for this when muggle-remote-test-case-ancestors-get reports `orphan: true` across a project, which means nothing is ordering prerequisites and bulk replays are running cases that destroy each other's fixtures. Returns { projectId, workflowRuntimeId }: it resolves when the rebuild is QUEUED, not when it has finished, and it returns no graph \u2014 re-fetch the graph, or call muggle-remote-test-case-ancestors-get again, to observe the result.",
|
|
5258
|
+
inputSchema: TestPlanGraphRebuildInputSchema,
|
|
5259
|
+
mapToUpstream: (input) => {
|
|
5260
|
+
const toolInput = input;
|
|
5261
|
+
return {
|
|
5262
|
+
method: "POST",
|
|
5263
|
+
path: `${MUGGLE_TEST_PREFIX}/projects/${toolInput.projectId}/test-plan-graph/rebuild`
|
|
5264
|
+
};
|
|
5265
|
+
}
|
|
5266
|
+
},
|
|
5252
5267
|
{
|
|
5253
5268
|
name: "muggle-remote-test-case-list-by-use-case",
|
|
5254
5269
|
description: "List test cases for a specific use case.",
|
|
@@ -7703,6 +7718,7 @@ __export(e2e_exports2, {
|
|
|
7703
7718
|
TestCaseListByUseCaseInputSchema: () => TestCaseListByUseCaseInputSchema,
|
|
7704
7719
|
TestCaseListInputSchema: () => TestCaseListInputSchema,
|
|
7705
7720
|
TestCaseUpdateInputSchema: () => TestCaseUpdateInputSchema,
|
|
7721
|
+
TestPlanGraphRebuildInputSchema: () => TestPlanGraphRebuildInputSchema,
|
|
7706
7722
|
TestScriptDeleteInputSchema: () => TestScriptDeleteInputSchema,
|
|
7707
7723
|
TestScriptGetInputSchema: () => TestScriptGetInputSchema,
|
|
7708
7724
|
TestScriptListInputSchema: () => TestScriptListInputSchema,
|
package/dist/cli.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { src_exports as commands, createUnifiedMcpServer, server_exports as server } from './chunk-
|
|
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-
|
|
1
|
+
export { src_exports as commands, createUnifiedMcpServer, server_exports as server } from './chunk-GMNAD3B6.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-J6VC26BI.js';
|
|
@@ -12,6 +12,7 @@ Run once the target `testCaseId` is chosen and the local URL + services are conf
|
|
|
12
12
|
|
|
13
13
|
1. **Resolve the chain.** `muggle-remote-test-case-ancestors-get` with the target `testCaseId`. Response: `{ testCaseId, ancestors, orphan }`.
|
|
14
14
|
- `orphan: true` **or** empty `ancestors` → no prerequisites. Skip the rest; continue to Step 5.
|
|
15
|
+
One orphan is ordinary. **Every** case in a project reading `orphan: true` is not — it means the graph was never built, so nothing orders prerequisites and a bulk replay runs cases that destroy each other's fixtures (one empties a household another needs). Queue `muggle-remote-test-plan-graph-rebuild` for the project, then re-read the chain. It only queues the work, so the graph is not ready the moment it returns.
|
|
15
16
|
- Otherwise `ancestors` is ordered **immediate-parent → root**. Reverse it to **root-first** so prerequisites are satisfied bottom-up.
|
|
16
17
|
|
|
17
18
|
2. **For each ancestor, root-first:**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"release": "5.13.1",
|
|
3
|
-
"buildId": "run-
|
|
4
|
-
"commitSha": "
|
|
5
|
-
"buildTime": "2026-09-
|
|
3
|
+
"buildId": "run-105-1",
|
|
4
|
+
"commitSha": "a9e7e8cbb77fd8f9bb3f6c93f55a7b1509705c84",
|
|
5
|
+
"buildTime": "2026-09-08T23:57:01Z",
|
|
6
6
|
"serviceName": "muggle-ai-works-mcp"
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { DEFAULT_PREFERENCES, ElectronAppReleaseStream, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, ProjectPreferencesReconcileOutcome, RuntimeTarget, WATCHER_LIFETIME_SECONDS, WATCHER_LIFETIME_UNBOUNDED_SECONDS, assertDeviceCodeClientProvisioned, buildElectronAppChecksumsUrl, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, calculateFileChecksum, createApiKeyWithToken, createChildLogger, deleteApiKeyData, deleteCredentials, e2e_exports as e2e, formatPreferencesOneLiner, getActiveElectronAppReleaseStream, getActiveRuntimeTarget, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDataDir, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppReleaseTagPrefix, getElectronAppSignedFromVersion, getElectronAppVersion, getElectronAppVersionSource, getLocalQaTools, getLogger, getPlatformKey, getQaTools, getReleaseSignerIdentityUri, getValidApiKeyData, getValidCredentials, hasApiKey, isElectronAppInstalled, isFirstRun, loadApiKeyData, loadCredentials, local_exports as localQa, mcp_exports as mcp, openBrowserUrl, performLogin, performLogout, pollDeviceCode, e2e_exports as qa, reconcileProjectPreferences, resetConfig, resetLogger, resetPreference, resolveActiveProfile, resolveActiveReleaseStream, resolveActiveReleaseTagPrefix, resolveElectronAppPathOrNull, resolvePreferences, resolveRuntimeTarget, saveApiKey, saveApiKeyData, saveCredentials, startDeviceCodeFlow, toolRequiresAuth, validatePreference, verifyFileChecksum, writePreferences } from './chunk-
|
|
1
|
+
export { DEFAULT_PREFERENCES, ElectronAppReleaseStream, PREFERENCES_FILE_NAME, PREFERENCES_PROJECT_DIR_NAME, PREFERENCES_SCHEMA, PREFERENCES_VERSION, PREFERENCE_ALLOWED_VALUES, PreferenceKey, PreferenceValue, ProjectPreferencesReconcileOutcome, RuntimeTarget, WATCHER_LIFETIME_SECONDS, WATCHER_LIFETIME_UNBOUNDED_SECONDS, assertDeviceCodeClientProvisioned, buildElectronAppChecksumsUrl, buildElectronAppReleaseAssetUrl, buildElectronAppReleaseTag, calculateFileChecksum, createApiKeyWithToken, createChildLogger, deleteApiKeyData, deleteCredentials, e2e_exports as e2e, formatPreferencesOneLiner, getActiveElectronAppReleaseStream, getActiveRuntimeTarget, getApiKey, getApiKeyFilePath, getAuthService, getBundledElectronAppVersion, getCallerCredentials, getCallerCredentialsAsync, getChecksumForPlatform, getConfig, getCredentialsFilePath, getDataDir, getDownloadBaseUrl, getElectronAppChecksums, getElectronAppDir, getElectronAppReleaseTagPrefix, getElectronAppSignedFromVersion, getElectronAppVersion, getElectronAppVersionSource, getLocalQaTools, getLogger, getPlatformKey, getQaTools, getReleaseSignerIdentityUri, getValidApiKeyData, getValidCredentials, hasApiKey, isElectronAppInstalled, isFirstRun, loadApiKeyData, loadCredentials, local_exports as localQa, mcp_exports as mcp, openBrowserUrl, performLogin, performLogout, pollDeviceCode, e2e_exports as qa, reconcileProjectPreferences, resetConfig, resetLogger, resetPreference, resolveActiveProfile, resolveActiveReleaseStream, resolveActiveReleaseTagPrefix, resolveElectronAppPathOrNull, resolvePreferences, resolveRuntimeTarget, saveApiKey, saveApiKeyData, saveCredentials, startDeviceCodeFlow, toolRequiresAuth, validatePreference, verifyFileChecksum, writePreferences } from './chunk-J6VC26BI.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.
|
|
4
|
+
"version": "5.15.0-staging.105",
|
|
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",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"muggleConfig": {
|
|
54
54
|
"electronAppVersion": "1.10.3",
|
|
55
55
|
"downloadBaseUrl": "https://github.com/multiplex-ai/muggle-ai-works/releases/download",
|
|
56
|
-
"runtimeTargetDefault": "
|
|
56
|
+
"runtimeTargetDefault": "staging",
|
|
57
57
|
"checksumsByStream": {
|
|
58
58
|
"production": {
|
|
59
59
|
"win32-x64": "58e2238b1609ceff65b836b4b724b1c4c341d737a15debaa8a71af21b70bc436",
|
|
@@ -12,6 +12,7 @@ Run once the target `testCaseId` is chosen and the local URL + services are conf
|
|
|
12
12
|
|
|
13
13
|
1. **Resolve the chain.** `muggle-remote-test-case-ancestors-get` with the target `testCaseId`. Response: `{ testCaseId, ancestors, orphan }`.
|
|
14
14
|
- `orphan: true` **or** empty `ancestors` → no prerequisites. Skip the rest; continue to Step 5.
|
|
15
|
+
One orphan is ordinary. **Every** case in a project reading `orphan: true` is not — it means the graph was never built, so nothing orders prerequisites and a bulk replay runs cases that destroy each other's fixtures (one empties a household another needs). Queue `muggle-remote-test-plan-graph-rebuild` for the project, then re-read the chain. It only queues the work, so the graph is not ready the moment it returns.
|
|
15
16
|
- Otherwise `ancestors` is ordered **immediate-parent → root**. Reverse it to **root-first** so prerequisites are satisfied bottom-up.
|
|
16
17
|
|
|
17
18
|
2. **For each ancestor, root-first:**
|