@muggleai/works 4.12.1 → 4.12.2

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,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.12.1",
4
+ "version": "4.12.2",
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.12.1",
5
+ "version": "4.12.2",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"
@@ -27,10 +27,11 @@ The skill recognizes two modes by inspecting `$ARGUMENTS` and falling back to on
27
27
  | `<pr-number>` alone | zero or multiple matches | **error:** ambiguous; list candidates and exit |
28
28
  | empty / `help` / `?` | — | **help:** list active loops per [`output-templates/help.md`](output-templates/help.md) |
29
29
 
30
- Bootstrap accepts two optional trailing flags:
30
+ Bootstrap accepts three optional trailing flags:
31
31
 
32
32
  - `--slug=<name>` — override the default `<repo>-pr<n>` slug
33
33
  - `--resume` — opt in to reusing an existing session slot (default is refuse on conflict)
34
+ - `--forward-only` — pin cursor past existing reviews (skip history). Default is cursor 0, which processes prior submitted reviews on the first tick.
34
35
 
35
36
  ## Folder TOC
36
37
 
@@ -12,11 +12,12 @@ Bootstrap is **non-interactive**: it runs straight through, prompts the user for
12
12
 
13
13
  ## Input
14
14
 
15
- `$ARGUMENTS = <pr-url> [--slug=<name>] [--resume]`
15
+ `$ARGUMENTS = <pr-url> [--slug=<name>] [--resume] [--forward-only]`
16
16
 
17
17
  - `<pr-url>` matches `https?://github\.com/[^/]+/[^/]+/pull/\d+` — required.
18
18
  - `--slug=<name>` overrides the default `<repo>-pr<n>` slug.
19
19
  - `--resume` opts into refreshing an existing slot instead of refusing on conflict.
20
+ - `--forward-only` pins the cursor past existing reviews (skip history). Default is cursor 0 — the watcher will pick up prior submitted reviews on its first tick.
20
21
 
21
22
  ## Procedure
22
23
 
@@ -47,7 +48,8 @@ If `.muggle-do/sessions/<slug>/` exists:
47
48
 
48
49
  ### Step 6 — Resolve the initial cursor
49
50
 
50
- Fetch reviews per [`../_shared/github-cli-recipes/submitted-reviews.md`](../_shared/github-cli-recipes/submitted-reviews.md) with cursor 0, then take `max(id)`. If none, the cursor is 0. The watcher only acts on `id > cursor`, so this pins forward-only.
51
+ - **Default (no `--forward-only`):** cursor is `0`. The watcher will pick up every existing submitted review on its first tick. This matches the common case where the user opened the PR, left review comments they want addressed, and is now running bootstrap.
52
+ - **With `--forward-only`:** fetch reviews per [`../_shared/github-cli-recipes/submitted-reviews.md`](../_shared/github-cli-recipes/submitted-reviews.md), then take `max(id)`. The watcher only acts on later submissions. Use when bootstrapping a PR with stale/already-handled prior reviews you don't want re-processed.
51
53
 
52
54
  ### Step 7 — Seed state files
53
55
 
@@ -5,7 +5,7 @@
5
5
  ```
6
6
  Bootstrapped PR follow-up for <owner>/<repo>#<n>
7
7
  Slug: <slug>
8
- Cursor: review #<id> (forward-only) | empty (no prior reviews)
8
+ Cursor: 0 (will process <N> existing review(s) on first tick) | review #<id> (forward-only) | empty (no prior reviews)
9
9
  Working tree: <toplevel>
10
10
  Dispatching: /loop 1m /muggle:muggle-pr-followup <slug> <n>
11
11
  ```
@@ -54,19 +54,19 @@ Gates run per `preference-gates/README.md`.
54
54
 
55
55
  Parse the user's query and explicitly confirm their expectation. There are exactly two modes:
56
56
 
57
- ### Mode A: Local Test Generation
57
+ ### Mode A: Local Test Generation (default for PRs)
58
58
  > Test impacted use cases/test cases against **localhost** using the Electron browser.
59
59
  >
60
60
  > Execution tool: `muggle-local-execute-test-generation`
61
61
 
62
- Signs the user wants this: mentions "localhost", "local", "my machine", "dev server", "my changes locally", or just "test my changes" in a repo context.
62
+ Signs the user wants this: mentions "localhost", "local", "my machine", "dev server", "my changes locally", or just "test my changes" in a repo context. **Also: passing a GitHub PR/issue/repo URL (`github.com/<org>/<repo>/pull/<n>`) defaults to Local mode** — PR review almost always means checking out the branch and validating against the dev server, not testing the PR's preview deployment.
63
63
 
64
64
  ### Mode B: Remote Test Generation
65
65
  > Ask Muggle Test's cloud to generate test scripts against a **preview/staging URL**.
66
66
  >
67
67
  > Execution tool: `muggle-remote-workflow-start-test-script-generation`
68
68
 
69
- Signs the user wants this: mentions "preview", "staging", "deployed", "preview URL", "test on preview", "test the deployment", or provides a non-localhost URL.
69
+ Signs the user wants this: mentions "preview", "staging", "deployed", "preview URL", "test on preview", "test the deployment", or provides an actual **deployed** preview/staging URL (e.g. `*.vercel.app`, `staging.foo.com`, custom preview domains). GitHub PR URLs do **not** count — see Mode A.
70
70
 
71
71
  ### Confirming (gated by `defaultExecutionMode`)
72
72
 
@@ -87,15 +87,23 @@ Gate `autoDetectChanges` (per `preference-gates/README.md`):
87
87
 
88
88
  ### Analysis (when scan is enabled)
89
89
 
90
- Analyze the working directory to understand what changed.
90
+ Analyze the changes to understand what's impacted. Two sources, picked by what the user passed:
91
91
 
92
+ **Working directory** (default):
92
93
  1. Run `git status` and `git diff --stat` for an overview
93
94
  2. Run `git diff` (or `git diff --cached` if staged) to read actual diffs
94
- 3. Identify impacted feature areas:
95
+
96
+ **PR URL** (user passed `github.com/<org>/<repo>/pull/<n>`):
97
+ 1. `gh pr diff <n> --repo <org>/<repo> --name-only` for the changed file list
98
+ 2. `gh pr diff <n> --repo <org>/<repo>` for the actual diff
99
+ 3. The repo lives at a sibling path (e.g. `C:\Users\stan4\Github\<repo>`) — `cd` into it and verify the PR branch is checked out before running tests; if not, ask the user to check it out (or offer to do it).
100
+
101
+ Either way:
102
+ 1. Identify impacted feature areas:
95
103
  - Changed UI components, pages, routes
96
104
  - Modified API endpoints or data flows
97
105
  - Updated form fields, validation, user interactions
98
- 4. Produce a concise **change summary** — a list of impacted features
106
+ 2. Produce a concise **change summary** — a list of impacted features
99
107
 
100
108
  Present:
101
109
  > "Here's what changed: [list]. I'll scope E2E acceptance testing to these areas."
@@ -1,7 +1,7 @@
1
1
  {
2
- "release": "4.12.1",
3
- "buildId": "run-39-1",
4
- "commitSha": "e69fef56f40ab4b9c47ea9fa90c2237ab9ca62eb",
5
- "buildTime": "2026-05-21T22:26:42Z",
2
+ "release": "4.12.2",
3
+ "buildId": "run-40-1",
4
+ "commitSha": "9039582dcc85172dff58bcebc185d8aaa495f947",
5
+ "buildTime": "2026-05-22T04:16:07Z",
6
6
  "serviceName": "muggle-ai-works-mcp"
7
7
  }
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.12.1",
4
+ "version": "4.12.2",
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.92",
44
+ "electronAppVersion": "1.0.93",
45
45
  "downloadBaseUrl": "https://github.com/multiplex-ai/muggle-ai-works/releases/download",
46
46
  "runtimeTargetDefault": "production",
47
47
  "checksums": {
48
- "darwin-arm64": "26fbcadb2e43a708fc424cf85c30dad99d9dff4b1013c6101de6f9c8233fc928",
49
- "darwin-x64": "80fa0d2f00ce2f1209c5d9ba421d6c9fe39baba97aa1390a4d04616302fed693",
50
- "linux-x64": "9898c5df678d19a2fcf07733caccd26b35953286b43d722f3bf7d8bafda21a51",
51
- "win32-x64": "994c637547f12d1e9c57acba324946b54f1c36631fe314e6f8e1043e1c1afedf"
48
+ "darwin-arm64": "79edb82904ff247a3176d7f25e6aea879bde0befe9f50ae1c977f9de01e09278",
49
+ "darwin-x64": "2b13541aee90eec7cff3e0d92a963fa2508f91a195aee3774edd851f69a45442",
50
+ "linux-x64": "438d8c80602c6c9746a2b5a11c9236d11997827ca74376e0e0fef1952f38640c",
51
+ "win32-x64": "6ccac8d05d40ce6d6b976f3079cbc7ca4bb3714d3d5b67776a72cd9bbf324f53"
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.12.1",
4
+ "version": "4.12.2",
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.12.1",
5
+ "version": "4.12.2",
6
6
  "author": {
7
7
  "name": "Muggle AI",
8
8
  "email": "support@muggle-ai.com"
@@ -27,10 +27,11 @@ The skill recognizes two modes by inspecting `$ARGUMENTS` and falling back to on
27
27
  | `<pr-number>` alone | zero or multiple matches | **error:** ambiguous; list candidates and exit |
28
28
  | empty / `help` / `?` | — | **help:** list active loops per [`output-templates/help.md`](output-templates/help.md) |
29
29
 
30
- Bootstrap accepts two optional trailing flags:
30
+ Bootstrap accepts three optional trailing flags:
31
31
 
32
32
  - `--slug=<name>` — override the default `<repo>-pr<n>` slug
33
33
  - `--resume` — opt in to reusing an existing session slot (default is refuse on conflict)
34
+ - `--forward-only` — pin cursor past existing reviews (skip history). Default is cursor 0, which processes prior submitted reviews on the first tick.
34
35
 
35
36
  ## Folder TOC
36
37
 
@@ -12,11 +12,12 @@ Bootstrap is **non-interactive**: it runs straight through, prompts the user for
12
12
 
13
13
  ## Input
14
14
 
15
- `$ARGUMENTS = <pr-url> [--slug=<name>] [--resume]`
15
+ `$ARGUMENTS = <pr-url> [--slug=<name>] [--resume] [--forward-only]`
16
16
 
17
17
  - `<pr-url>` matches `https?://github\.com/[^/]+/[^/]+/pull/\d+` — required.
18
18
  - `--slug=<name>` overrides the default `<repo>-pr<n>` slug.
19
19
  - `--resume` opts into refreshing an existing slot instead of refusing on conflict.
20
+ - `--forward-only` pins the cursor past existing reviews (skip history). Default is cursor 0 — the watcher will pick up prior submitted reviews on its first tick.
20
21
 
21
22
  ## Procedure
22
23
 
@@ -47,7 +48,8 @@ If `.muggle-do/sessions/<slug>/` exists:
47
48
 
48
49
  ### Step 6 — Resolve the initial cursor
49
50
 
50
- Fetch reviews per [`../_shared/github-cli-recipes/submitted-reviews.md`](../_shared/github-cli-recipes/submitted-reviews.md) with cursor 0, then take `max(id)`. If none, the cursor is 0. The watcher only acts on `id > cursor`, so this pins forward-only.
51
+ - **Default (no `--forward-only`):** cursor is `0`. The watcher will pick up every existing submitted review on its first tick. This matches the common case where the user opened the PR, left review comments they want addressed, and is now running bootstrap.
52
+ - **With `--forward-only`:** fetch reviews per [`../_shared/github-cli-recipes/submitted-reviews.md`](../_shared/github-cli-recipes/submitted-reviews.md), then take `max(id)`. The watcher only acts on later submissions. Use when bootstrapping a PR with stale/already-handled prior reviews you don't want re-processed.
51
53
 
52
54
  ### Step 7 — Seed state files
53
55
 
@@ -5,7 +5,7 @@
5
5
  ```
6
6
  Bootstrapped PR follow-up for <owner>/<repo>#<n>
7
7
  Slug: <slug>
8
- Cursor: review #<id> (forward-only) | empty (no prior reviews)
8
+ Cursor: 0 (will process <N> existing review(s) on first tick) | review #<id> (forward-only) | empty (no prior reviews)
9
9
  Working tree: <toplevel>
10
10
  Dispatching: /loop 1m /muggle:muggle-pr-followup <slug> <n>
11
11
  ```
@@ -54,19 +54,19 @@ Gates run per `preference-gates/README.md`.
54
54
 
55
55
  Parse the user's query and explicitly confirm their expectation. There are exactly two modes:
56
56
 
57
- ### Mode A: Local Test Generation
57
+ ### Mode A: Local Test Generation (default for PRs)
58
58
  > Test impacted use cases/test cases against **localhost** using the Electron browser.
59
59
  >
60
60
  > Execution tool: `muggle-local-execute-test-generation`
61
61
 
62
- Signs the user wants this: mentions "localhost", "local", "my machine", "dev server", "my changes locally", or just "test my changes" in a repo context.
62
+ Signs the user wants this: mentions "localhost", "local", "my machine", "dev server", "my changes locally", or just "test my changes" in a repo context. **Also: passing a GitHub PR/issue/repo URL (`github.com/<org>/<repo>/pull/<n>`) defaults to Local mode** — PR review almost always means checking out the branch and validating against the dev server, not testing the PR's preview deployment.
63
63
 
64
64
  ### Mode B: Remote Test Generation
65
65
  > Ask Muggle Test's cloud to generate test scripts against a **preview/staging URL**.
66
66
  >
67
67
  > Execution tool: `muggle-remote-workflow-start-test-script-generation`
68
68
 
69
- Signs the user wants this: mentions "preview", "staging", "deployed", "preview URL", "test on preview", "test the deployment", or provides a non-localhost URL.
69
+ Signs the user wants this: mentions "preview", "staging", "deployed", "preview URL", "test on preview", "test the deployment", or provides an actual **deployed** preview/staging URL (e.g. `*.vercel.app`, `staging.foo.com`, custom preview domains). GitHub PR URLs do **not** count — see Mode A.
70
70
 
71
71
  ### Confirming (gated by `defaultExecutionMode`)
72
72
 
@@ -87,15 +87,23 @@ Gate `autoDetectChanges` (per `preference-gates/README.md`):
87
87
 
88
88
  ### Analysis (when scan is enabled)
89
89
 
90
- Analyze the working directory to understand what changed.
90
+ Analyze the changes to understand what's impacted. Two sources, picked by what the user passed:
91
91
 
92
+ **Working directory** (default):
92
93
  1. Run `git status` and `git diff --stat` for an overview
93
94
  2. Run `git diff` (or `git diff --cached` if staged) to read actual diffs
94
- 3. Identify impacted feature areas:
95
+
96
+ **PR URL** (user passed `github.com/<org>/<repo>/pull/<n>`):
97
+ 1. `gh pr diff <n> --repo <org>/<repo> --name-only` for the changed file list
98
+ 2. `gh pr diff <n> --repo <org>/<repo>` for the actual diff
99
+ 3. The repo lives at a sibling path (e.g. `C:\Users\stan4\Github\<repo>`) — `cd` into it and verify the PR branch is checked out before running tests; if not, ask the user to check it out (or offer to do it).
100
+
101
+ Either way:
102
+ 1. Identify impacted feature areas:
95
103
  - Changed UI components, pages, routes
96
104
  - Modified API endpoints or data flows
97
105
  - Updated form fields, validation, user interactions
98
- 4. Produce a concise **change summary** — a list of impacted features
106
+ 2. Produce a concise **change summary** — a list of impacted features
99
107
 
100
108
  Present:
101
109
  > "Here's what changed: [list]. I'll scope E2E acceptance testing to these areas."