@muggleai/works 4.13.1 → 4.14.0
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/README.md +3 -3
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/.cursor-plugin/plugin.json +1 -1
- package/dist/plugin/README.md +1 -1
- package/dist/plugin/commands/mprfollowup.md +7 -0
- package/dist/plugin/skills/_aliases.json +1 -1
- package/dist/plugin/skills/_shared/resolve-e2e-validation-context.md +1 -1
- package/dist/plugin/skills/do/address-reviews.md +1 -1
- package/dist/plugin/skills/do/build.md +2 -1
- package/dist/plugin/skills/do/open-prs/forward.md +2 -2
- package/dist/plugin/skills/do/open-prs/update.md +1 -1
- package/dist/plugin/skills/mprfollowup/SKILL.md +8 -0
- package/dist/plugin/skills/muggle/SKILL.md +1 -0
- package/dist/plugin/skills/muggle-do/SKILL.md +26 -1
- package/dist/plugin/skills/muggle-feedback/SKILL.md +1 -1
- package/dist/plugin/skills/muggle-pr-followup/SKILL.md +1 -2
- package/dist/plugin/skills/muggle-pr-followup/bootstrap.md +5 -3
- package/dist/plugin/skills/muggle-pr-followup/contract.md +1 -1
- package/dist/plugin/skills/muggle-pr-followup/state-schemas.md +5 -1
- package/dist/plugin/skills/muggle-preferences/ops/configure.md +2 -1
- package/dist/plugin/skills/muggle-preferences/preference-gates/autoWatchPR.md +13 -0
- package/dist/plugin/skills/muggle-preferences/preference-gates/reusePreparePlan.md +11 -0
- package/dist/plugin/skills/muggle-status/SKILL.md +1 -1
- package/dist/plugin/skills/muggle-test/SKILL.md +16 -3
- package/dist/plugin/skills/muggle-test-feature-local/SKILL.md +15 -2
- package/dist/plugin/skills/muggle-test-prepare/SKILL.md +5 -1
- package/dist/plugin/skills/muggle-test-prepare/steps/check-running.md +7 -5
- package/dist/plugin/skills/muggle-test-prepare/steps/identify-services.md +2 -0
- package/dist/plugin/skills/muggle-test-prepare/steps/readiness-report.md +30 -0
- package/dist/plugin/skills/muggle-test-prepare/steps/reuse-plan.md +44 -0
- package/dist/release-manifest.json +4 -4
- package/package.json +7 -6
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.cursor-plugin/plugin.json +1 -1
- package/plugin/README.md +1 -1
- package/plugin/commands/mprfollowup.md +7 -0
- package/plugin/skills/_aliases.json +1 -1
- package/plugin/skills/_shared/resolve-e2e-validation-context.md +1 -1
- package/plugin/skills/do/address-reviews.md +1 -1
- package/plugin/skills/do/build.md +2 -1
- package/plugin/skills/do/open-prs/forward.md +2 -2
- package/plugin/skills/do/open-prs/update.md +1 -1
- package/plugin/skills/mprfollowup/SKILL.md +8 -0
- package/plugin/skills/muggle/SKILL.md +1 -0
- package/plugin/skills/muggle-do/SKILL.md +26 -1
- package/plugin/skills/muggle-feedback/SKILL.md +1 -1
- package/plugin/skills/muggle-pr-followup/SKILL.md +1 -2
- package/plugin/skills/muggle-pr-followup/bootstrap.md +5 -3
- package/plugin/skills/muggle-pr-followup/contract.md +1 -1
- package/plugin/skills/muggle-pr-followup/state-schemas.md +5 -1
- package/plugin/skills/muggle-preferences/ops/configure.md +2 -1
- package/plugin/skills/muggle-preferences/preference-gates/autoWatchPR.md +13 -0
- package/plugin/skills/muggle-preferences/preference-gates/reusePreparePlan.md +11 -0
- package/plugin/skills/muggle-status/SKILL.md +1 -1
- package/plugin/skills/muggle-test/SKILL.md +16 -3
- package/plugin/skills/muggle-test-feature-local/SKILL.md +15 -2
- package/plugin/skills/muggle-test-prepare/SKILL.md +5 -1
- package/plugin/skills/muggle-test-prepare/steps/check-running.md +7 -5
- package/plugin/skills/muggle-test-prepare/steps/identify-services.md +2 -0
- package/plugin/skills/muggle-test-prepare/steps/readiness-report.md +30 -0
- package/plugin/skills/muggle-test-prepare/steps/reuse-plan.md +44 -0
- package/dist/plugin/commands/mrelease.md +0 -7
- package/dist/plugin/skills/mrelease/SKILL.md +0 -8
- package/dist/plugin/skills/muggle-works-npm-release/SKILL.md +0 -200
- package/plugin/commands/mrelease.md +0 -7
- package/plugin/skills/mrelease/SKILL.md +0 -8
- package/plugin/skills/muggle-works-npm-release/SKILL.md +0 -200
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: muggle-works-npm-release
|
|
3
|
-
description: >-
|
|
4
|
-
Cut @muggleai/works release: AskUserQuestion (major/minor/patch), sync master, stop if
|
|
5
|
-
nothing ships, semver baseline + Electron from GitHub, confirm plan, bump
|
|
6
|
-
package.json + sync:versions, full local verify, chore(release) PR, merge via gh,
|
|
7
|
-
dispatch publish-works-to-npm.yml—no local npm publish.
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Muggle Test Works — npm release (single playbook)
|
|
11
|
-
|
|
12
|
-
> Telemetry first step: see [`_shared/telemetry-emit.md`](../_shared/telemetry-emit.md). Use `skillName: "muggle-works-npm-release"`.
|
|
13
|
-
|
|
14
|
-
Repo: **`multiplex-ai/muggle-ai-works`**. Workflow: **`.github/workflows/publish-works-to-npm.yml`** (“Publish Works to npm”). **Never** run local **`npm publish`** (OIDC trusted publishing in CI).
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Phase 1 — Ask bump type (do this first)
|
|
19
|
-
|
|
20
|
-
**Stop until the user answers.**
|
|
21
|
-
|
|
22
|
-
**Prefer `AskUserQuestion`** with exactly these three options: **major**, **minor**, **patch** (fix). If the environment has no structured question tool, ask the same in plain text:
|
|
23
|
-
|
|
24
|
-
> Is this release a **major**, **minor**, or **patch** (fix)?
|
|
25
|
-
|
|
26
|
-
You may **recommend** a bump from commit subjects (e.g. `feat!` / breaking → major, `feat` → minor, `fix` / `chore` → patch) but **do not** choose for them. **Do not** edit files yet.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Phase 2 — Sync, surface state, empty-release gate
|
|
31
|
-
|
|
32
|
-
Run from **`muggle-ai-works`**:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
git checkout master && git pull --ff-only && git fetch --tags
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Show what is shipping:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
node -e 'console.log("master package.json:", require("./package.json").version)'
|
|
42
|
-
npm view @muggleai/works version 2>&1 | sed 's/^/npm latest: /'
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**Commits since the last release commit** (stop if there is nothing to ship):
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
LAST_RELEASE_SHA=$(git log --grep='chore(release)' --format='%H' -1)
|
|
49
|
-
git log --oneline "$LAST_RELEASE_SHA..HEAD"
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
- If the log is **empty**, tell the user there is **nothing to ship** and **stop** (no branch, no bump, no PR).
|
|
53
|
-
- If non-empty, present commits as a short table (subject; PR number from title/body if present).
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Phase 3 — Version baseline, Electron, print summary, confirm
|
|
58
|
-
|
|
59
|
-
### npm version (`nextNpmVersion`)
|
|
60
|
-
|
|
61
|
-
1. **`npm view @muggleai/works version`** — last published on npm.
|
|
62
|
-
2. Root **`package.json` → `version`** on current **`master`** checkout.
|
|
63
|
-
3. **Baseline** = **semver-higher** of those two (never target below repo or npm).
|
|
64
|
-
4. Apply the user’s **major / minor / patch** to that baseline → **`nextNpmVersion`** (semver-correct).
|
|
65
|
-
|
|
66
|
-
### Electron (`muggleConfig`)
|
|
67
|
-
|
|
68
|
-
1. Read **`package.json` → `muggleConfig.electronAppVersion`**.
|
|
69
|
-
2. **Latest desktop on GitHub:**
|
|
70
|
-
`https://api.github.com/repos/multiplex-ai/muggle-ai-works/releases?per_page=30`
|
|
71
|
-
→ newest **`tag_name`** matching **`electron-app-v*`** → strip prefix → **`latestElectronVersion`** (semver only).
|
|
72
|
-
|
|
73
|
-
### Print (always)
|
|
74
|
-
|
|
75
|
-
| Item | Value |
|
|
76
|
-
| :--- | :---- |
|
|
77
|
-
| Last **@muggleai/works** on npm | … |
|
|
78
|
-
| **Baseline** for bump | … |
|
|
79
|
-
| **`nextNpmVersion`** (to publish) | … |
|
|
80
|
-
| Current **`electronAppVersion`** | … |
|
|
81
|
-
| Latest **`electron-app-v…`** on GitHub | … |
|
|
82
|
-
|
|
83
|
-
### Electron bump decision
|
|
84
|
-
|
|
85
|
-
If **`latestElectronVersion`** ≠ current **`electronAppVersion`**, ask: **bump** Electron + all four **`muggleConfig.checksums`** to **`latestElectronVersion`**, or **keep** current.
|
|
86
|
-
|
|
87
|
-
If bumping, checksums from:
|
|
88
|
-
|
|
89
|
-
`https://github.com/multiplex-ai/muggle-ai-works/releases/download/electron-app-vVERSION/checksums.txt`
|
|
90
|
-
|
|
91
|
-
Map zip artifacts → **`darwin-arm64`**, **`darwin-x64`**, **`win32-x64`**, **`linux-x64`** (same mapping rules as today).
|
|
92
|
-
|
|
93
|
-
**Stop again:** user must **confirm** the full plan (**`nextNpmVersion`** + Electron choice). If they cancel, **do not** branch, merge, or dispatch CI.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Phase 4 — After explicit confirmation only
|
|
98
|
-
|
|
99
|
-
### 1. Branch and bump
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
git checkout -b "chore/release-<VERSION>"
|
|
103
|
-
npm version "<VERSION>" --no-git-tag-version
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Replace **`<VERSION>`** with **`nextNpmVersion`** (dots in the branch name are fine, e.g. `chore/release-4.8.0`).
|
|
107
|
-
|
|
108
|
-
- If Electron bump agreed: set **`muggleConfig.electronAppVersion`** and all four **`muggleConfig.checksums`** in **`package.json`**.
|
|
109
|
-
|
|
110
|
-
### 2. Propagate versions (do not hand-edit manifests)
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
pnpm run sync:versions
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Never hand-edit **`.claude-plugin/marketplace.json`**, **`.cursor-plugin/marketplace.json`**, **`plugin/.claude-plugin/plugin.json`**, **`plugin/.cursor-plugin/plugin.json`**, or **`server.json`** — **`sync-versions`** (and **`build`**) owns them.
|
|
117
|
-
|
|
118
|
-
If you changed Electron after the first sync, run **`pnpm run sync:versions`** again.
|
|
119
|
-
|
|
120
|
-
### 3. Full local verify (before push)
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
pnpm run lint:check && pnpm run typecheck && pnpm test && pnpm run build && pnpm run verify:plugin && pnpm run verify:contracts && pnpm run verify:electron-release-checksums
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
- **`pnpm run build`** is required before **`verify:plugin`** — the verifier reads the **built** plugin under **`dist/plugin/`**, not source under **`plugin/`**.
|
|
127
|
-
- If **anything** fails, **stop** and surface the error; **do not** push a broken release.
|
|
128
|
-
|
|
129
|
-
### 4. Commit (**`chore(release)`**)
|
|
130
|
-
|
|
131
|
-
Stage version-touched files (at minimum **`package.json`** plus whatever **`sync:versions`** changed — typically the marketplace/plugin **`server.json`** paths above).
|
|
132
|
-
|
|
133
|
-
**Subject:** `chore(release): @muggleai/works <VERSION>`
|
|
134
|
-
|
|
135
|
-
**Body:** one bullet per shipping PR / theme, note **Electron** bump or unchanged, and any coordinated follow-ups in sibling repos (e.g. teaching-service, UI). Use a **heredoc** for `git commit` so newlines are preserved.
|
|
136
|
-
|
|
137
|
-
### 5. PR, merge, update local **`master`**
|
|
138
|
-
|
|
139
|
-
```bash
|
|
140
|
-
git push -u origin HEAD
|
|
141
|
-
gh pr create --repo multiplex-ai/muggle-ai-works --base master --head <branch> \
|
|
142
|
-
--title "chore(release): @muggleai/works <VERSION>" \
|
|
143
|
-
--body "<PR body: version delta, bump rationale, shipping list, Electron status, manifests touched by sync:versions, short test plan checklist>"
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
**Merge:** when the human has approved the release in this session, run **`gh pr merge`** (squash is fine unless the repo prefers merge commits), then:
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
git checkout master && git pull --ff-only
|
|
150
|
-
node -e 'console.log("master now:", require("./package.json").version)'
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Confirm **`package.json`** on **`master`** matches **`nextNpmVersion`** before publishing.
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Phase 5 — Trigger publish (CI only)
|
|
158
|
-
|
|
159
|
-
Prefer **explicit version** (not “auto bump”):
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
gh workflow run publish-works-to-npm.yml --repo multiplex-ai/muggle-ai-works --ref master \
|
|
163
|
-
--field "version=<VERSION>" --field "bump=patch"
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
The `bump=patch` field is a harmless placeholder when `version` is set; the workflow prefers the explicit `version` input.
|
|
167
|
-
|
|
168
|
-
**Or** **`git tag "v<VERSION>"`** && **`git push origin "v<VERSION>"`** only if that tag **does not** already exist on the remote; if the tag exists, use **`workflow_dispatch`** with **`version`**.
|
|
169
|
-
|
|
170
|
-
Watch the run and confirm jobs succeed:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
gh run list --repo multiplex-ai/muggle-ai-works --workflow=publish-works-to-npm.yml --limit 1
|
|
174
|
-
gh run watch <RUN_ID> --repo multiplex-ai/muggle-ai-works --exit-status
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Verify the registry:
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
npm view @muggleai/works version
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
Give the user the **Actions run URL**. If npm lags, wait ~60s and retry.
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## Rules
|
|
188
|
-
|
|
189
|
-
- **No local `npm publish`.**
|
|
190
|
-
- **Phase 1:** use **`AskUserQuestion`** for major / minor / patch when available (see Phase 1).
|
|
191
|
-
- Phases 1–3: keep chat concise; Phase 4–5 can be terse status lines.
|
|
192
|
-
- If the user cancels after Phase 3, **do not** merge or dispatch CI.
|
|
193
|
-
- **Tag vs npm:** **`v*`** tags are for the **npm** package; **`electron-app-v*`** is separate — **`electronAppVersion`** can move independently of **`version`**.
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## Notes (troubleshooting)
|
|
198
|
-
|
|
199
|
-
- Workflow **`name:`** / filename is tied to npm **Trusted Publishing** — see the comment block at the top of **`publish-works-to-npm.yml`** if auth fails.
|
|
200
|
-
- If commits land on **`master`** between opening the PR and merging, re-check **`git log`** vs the last **`chore(release)`** before merging; rebasing the release branch may be needed so **`master`** still matches what you intend to ship.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Cut a @muggleai/works npm release (alias for /muggle-works-npm-release)
|
|
3
|
-
argument-hint: [major|minor|patch]
|
|
4
|
-
allowed-tools: [Skill]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Invoke the `muggle-works-npm-release` skill via the Skill tool. Forward `$ARGUMENTS` as the skill's `args`.
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mrelease
|
|
3
|
-
description: Explicit short alias for the `muggle-works-npm-release` skill. ONLY invoke when the user explicitly types `mrelease` or `/mrelease` — never auto-trigger from any other phrasing.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# mrelease — alias for muggle-works-npm-release
|
|
7
|
-
|
|
8
|
-
Invoke the `muggle-works-npm-release` skill via the Skill tool. Forward any user-provided arguments unchanged.
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: muggle-works-npm-release
|
|
3
|
-
description: >-
|
|
4
|
-
Cut @muggleai/works release: AskUserQuestion (major/minor/patch), sync master, stop if
|
|
5
|
-
nothing ships, semver baseline + Electron from GitHub, confirm plan, bump
|
|
6
|
-
package.json + sync:versions, full local verify, chore(release) PR, merge via gh,
|
|
7
|
-
dispatch publish-works-to-npm.yml—no local npm publish.
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Muggle Test Works — npm release (single playbook)
|
|
11
|
-
|
|
12
|
-
> Telemetry first step: see [`_shared/telemetry-emit.md`](../_shared/telemetry-emit.md). Use `skillName: "muggle-works-npm-release"`.
|
|
13
|
-
|
|
14
|
-
Repo: **`multiplex-ai/muggle-ai-works`**. Workflow: **`.github/workflows/publish-works-to-npm.yml`** (“Publish Works to npm”). **Never** run local **`npm publish`** (OIDC trusted publishing in CI).
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Phase 1 — Ask bump type (do this first)
|
|
19
|
-
|
|
20
|
-
**Stop until the user answers.**
|
|
21
|
-
|
|
22
|
-
**Prefer `AskUserQuestion`** with exactly these three options: **major**, **minor**, **patch** (fix). If the environment has no structured question tool, ask the same in plain text:
|
|
23
|
-
|
|
24
|
-
> Is this release a **major**, **minor**, or **patch** (fix)?
|
|
25
|
-
|
|
26
|
-
You may **recommend** a bump from commit subjects (e.g. `feat!` / breaking → major, `feat` → minor, `fix` / `chore` → patch) but **do not** choose for them. **Do not** edit files yet.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Phase 2 — Sync, surface state, empty-release gate
|
|
31
|
-
|
|
32
|
-
Run from **`muggle-ai-works`**:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
git checkout master && git pull --ff-only && git fetch --tags
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Show what is shipping:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
node -e 'console.log("master package.json:", require("./package.json").version)'
|
|
42
|
-
npm view @muggleai/works version 2>&1 | sed 's/^/npm latest: /'
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**Commits since the last release commit** (stop if there is nothing to ship):
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
LAST_RELEASE_SHA=$(git log --grep='chore(release)' --format='%H' -1)
|
|
49
|
-
git log --oneline "$LAST_RELEASE_SHA..HEAD"
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
- If the log is **empty**, tell the user there is **nothing to ship** and **stop** (no branch, no bump, no PR).
|
|
53
|
-
- If non-empty, present commits as a short table (subject; PR number from title/body if present).
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Phase 3 — Version baseline, Electron, print summary, confirm
|
|
58
|
-
|
|
59
|
-
### npm version (`nextNpmVersion`)
|
|
60
|
-
|
|
61
|
-
1. **`npm view @muggleai/works version`** — last published on npm.
|
|
62
|
-
2. Root **`package.json` → `version`** on current **`master`** checkout.
|
|
63
|
-
3. **Baseline** = **semver-higher** of those two (never target below repo or npm).
|
|
64
|
-
4. Apply the user’s **major / minor / patch** to that baseline → **`nextNpmVersion`** (semver-correct).
|
|
65
|
-
|
|
66
|
-
### Electron (`muggleConfig`)
|
|
67
|
-
|
|
68
|
-
1. Read **`package.json` → `muggleConfig.electronAppVersion`**.
|
|
69
|
-
2. **Latest desktop on GitHub:**
|
|
70
|
-
`https://api.github.com/repos/multiplex-ai/muggle-ai-works/releases?per_page=30`
|
|
71
|
-
→ newest **`tag_name`** matching **`electron-app-v*`** → strip prefix → **`latestElectronVersion`** (semver only).
|
|
72
|
-
|
|
73
|
-
### Print (always)
|
|
74
|
-
|
|
75
|
-
| Item | Value |
|
|
76
|
-
| :--- | :---- |
|
|
77
|
-
| Last **@muggleai/works** on npm | … |
|
|
78
|
-
| **Baseline** for bump | … |
|
|
79
|
-
| **`nextNpmVersion`** (to publish) | … |
|
|
80
|
-
| Current **`electronAppVersion`** | … |
|
|
81
|
-
| Latest **`electron-app-v…`** on GitHub | … |
|
|
82
|
-
|
|
83
|
-
### Electron bump decision
|
|
84
|
-
|
|
85
|
-
If **`latestElectronVersion`** ≠ current **`electronAppVersion`**, ask: **bump** Electron + all four **`muggleConfig.checksums`** to **`latestElectronVersion`**, or **keep** current.
|
|
86
|
-
|
|
87
|
-
If bumping, checksums from:
|
|
88
|
-
|
|
89
|
-
`https://github.com/multiplex-ai/muggle-ai-works/releases/download/electron-app-vVERSION/checksums.txt`
|
|
90
|
-
|
|
91
|
-
Map zip artifacts → **`darwin-arm64`**, **`darwin-x64`**, **`win32-x64`**, **`linux-x64`** (same mapping rules as today).
|
|
92
|
-
|
|
93
|
-
**Stop again:** user must **confirm** the full plan (**`nextNpmVersion`** + Electron choice). If they cancel, **do not** branch, merge, or dispatch CI.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Phase 4 — After explicit confirmation only
|
|
98
|
-
|
|
99
|
-
### 1. Branch and bump
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
git checkout -b "chore/release-<VERSION>"
|
|
103
|
-
npm version "<VERSION>" --no-git-tag-version
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Replace **`<VERSION>`** with **`nextNpmVersion`** (dots in the branch name are fine, e.g. `chore/release-4.8.0`).
|
|
107
|
-
|
|
108
|
-
- If Electron bump agreed: set **`muggleConfig.electronAppVersion`** and all four **`muggleConfig.checksums`** in **`package.json`**.
|
|
109
|
-
|
|
110
|
-
### 2. Propagate versions (do not hand-edit manifests)
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
pnpm run sync:versions
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Never hand-edit **`.claude-plugin/marketplace.json`**, **`.cursor-plugin/marketplace.json`**, **`plugin/.claude-plugin/plugin.json`**, **`plugin/.cursor-plugin/plugin.json`**, or **`server.json`** — **`sync-versions`** (and **`build`**) owns them.
|
|
117
|
-
|
|
118
|
-
If you changed Electron after the first sync, run **`pnpm run sync:versions`** again.
|
|
119
|
-
|
|
120
|
-
### 3. Full local verify (before push)
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
pnpm run lint:check && pnpm run typecheck && pnpm test && pnpm run build && pnpm run verify:plugin && pnpm run verify:contracts && pnpm run verify:electron-release-checksums
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
- **`pnpm run build`** is required before **`verify:plugin`** — the verifier reads the **built** plugin under **`dist/plugin/`**, not source under **`plugin/`**.
|
|
127
|
-
- If **anything** fails, **stop** and surface the error; **do not** push a broken release.
|
|
128
|
-
|
|
129
|
-
### 4. Commit (**`chore(release)`**)
|
|
130
|
-
|
|
131
|
-
Stage version-touched files (at minimum **`package.json`** plus whatever **`sync:versions`** changed — typically the marketplace/plugin **`server.json`** paths above).
|
|
132
|
-
|
|
133
|
-
**Subject:** `chore(release): @muggleai/works <VERSION>`
|
|
134
|
-
|
|
135
|
-
**Body:** one bullet per shipping PR / theme, note **Electron** bump or unchanged, and any coordinated follow-ups in sibling repos (e.g. teaching-service, UI). Use a **heredoc** for `git commit` so newlines are preserved.
|
|
136
|
-
|
|
137
|
-
### 5. PR, merge, update local **`master`**
|
|
138
|
-
|
|
139
|
-
```bash
|
|
140
|
-
git push -u origin HEAD
|
|
141
|
-
gh pr create --repo multiplex-ai/muggle-ai-works --base master --head <branch> \
|
|
142
|
-
--title "chore(release): @muggleai/works <VERSION>" \
|
|
143
|
-
--body "<PR body: version delta, bump rationale, shipping list, Electron status, manifests touched by sync:versions, short test plan checklist>"
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
**Merge:** when the human has approved the release in this session, run **`gh pr merge`** (squash is fine unless the repo prefers merge commits), then:
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
git checkout master && git pull --ff-only
|
|
150
|
-
node -e 'console.log("master now:", require("./package.json").version)'
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Confirm **`package.json`** on **`master`** matches **`nextNpmVersion`** before publishing.
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Phase 5 — Trigger publish (CI only)
|
|
158
|
-
|
|
159
|
-
Prefer **explicit version** (not “auto bump”):
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
gh workflow run publish-works-to-npm.yml --repo multiplex-ai/muggle-ai-works --ref master \
|
|
163
|
-
--field "version=<VERSION>" --field "bump=patch"
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
The `bump=patch` field is a harmless placeholder when `version` is set; the workflow prefers the explicit `version` input.
|
|
167
|
-
|
|
168
|
-
**Or** **`git tag "v<VERSION>"`** && **`git push origin "v<VERSION>"`** only if that tag **does not** already exist on the remote; if the tag exists, use **`workflow_dispatch`** with **`version`**.
|
|
169
|
-
|
|
170
|
-
Watch the run and confirm jobs succeed:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
gh run list --repo multiplex-ai/muggle-ai-works --workflow=publish-works-to-npm.yml --limit 1
|
|
174
|
-
gh run watch <RUN_ID> --repo multiplex-ai/muggle-ai-works --exit-status
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Verify the registry:
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
npm view @muggleai/works version
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
Give the user the **Actions run URL**. If npm lags, wait ~60s and retry.
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## Rules
|
|
188
|
-
|
|
189
|
-
- **No local `npm publish`.**
|
|
190
|
-
- **Phase 1:** use **`AskUserQuestion`** for major / minor / patch when available (see Phase 1).
|
|
191
|
-
- Phases 1–3: keep chat concise; Phase 4–5 can be terse status lines.
|
|
192
|
-
- If the user cancels after Phase 3, **do not** merge or dispatch CI.
|
|
193
|
-
- **Tag vs npm:** **`v*`** tags are for the **npm** package; **`electron-app-v*`** is separate — **`electronAppVersion`** can move independently of **`version`**.
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## Notes (troubleshooting)
|
|
198
|
-
|
|
199
|
-
- Workflow **`name:`** / filename is tied to npm **Trusted Publishing** — see the comment block at the top of **`publish-works-to-npm.yml`** if auth fails.
|
|
200
|
-
- If commits land on **`master`** between opening the PR and merging, re-check **`git log`** vs the last **`chore(release)`** before merging; rebasing the release branch may be needed so **`master`** still matches what you intend to ship.
|