@josstei/maestro 1.6.4-rc.4 → 1.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/src/version.json +1 -1
- package/docs/cicd.md +1 -1
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/plugins/maestro/.codex-plugin/plugin.json +1 -1
- package/plugins/maestro/.mcp.json +1 -1
- package/plugins/maestro/src/version.json +1 -1
- package/qwen-extension.json +1 -1
- package/scripts/npm-publish-idempotent.js +45 -10
package/CHANGELOG.md
CHANGED
|
@@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
19
19
|
|
|
20
20
|
### Fixed
|
|
21
21
|
|
|
22
|
-
- **Stable npm release recovery**: Release now uses `NPM_TOKEN` for stable publishes, uses verified Git tag lookups, supports manual recovery from an existing `vX.Y.Z` tag and target SHA, and enforces a stable-only `latest` dist-tag through the idempotent npm publish helper.
|
|
22
|
+
- **Stable npm release recovery**: Release now uses `NPM_TOKEN` for stable publishes, uses verified Git tag lookups, supports manual recovery from an existing `vX.Y.Z` tag and target SHA, and enforces a stable-only `latest` dist-tag through the idempotent npm publish helper. Prerelease publishes defer stale `latest` repair when no stable version exists instead of attempting to delete npm's `latest` tag.
|
|
23
23
|
- **Codex plugin MCP server fails to start**: corrected `npx` args in `plugins/maestro/.mcp.json` — added `-p`/`--package` flag so `maestro-mcp-server` is resolved as the binary name rather than an argument to the package's default binary.
|
|
24
24
|
- **Release metadata drift**: runtime manifests, marketplace entries, detached payload versions, and Codex MCP package specs are now generated from `package.json` so stable and prerelease packages stay self-consistent.
|
|
25
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maestro",
|
|
3
|
-
"version": "1.6.4
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Multi-agent development orchestration platform — 39 specialists, 4-phase orchestration, native parallel subagents, persistent sessions, and standalone review/debug/security/perf/seo/a11y/compliance commands",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "josstei",
|
package/claude/src/version.json
CHANGED
package/docs/cicd.md
CHANGED
|
@@ -655,4 +655,4 @@ The `RELEASE_TOKEN` used by Prepare Release is a personal access token with elev
|
|
|
655
655
|
| `preview` | PR preview build | `X.Y.Z-preview.SHORT_SHA` | Preview Build |
|
|
656
656
|
| `nightly` | Daily main snapshot | `X.Y.Z-nightly.YYYYMMDD` | Nightly Build |
|
|
657
657
|
|
|
658
|
-
`latest` must never point at `rc`, `preview`, or `nightly`. If a prerelease publish or idempotent skip sees `latest` pointing to a prerelease, the helper repairs it by moving `latest` back to the highest published stable version
|
|
658
|
+
`latest` must never intentionally point at `rc`, `preview`, or `nightly`. If a prerelease publish or idempotent skip sees `latest` pointing to a prerelease and at least one stable version exists, the helper repairs it by moving `latest` back to the highest published stable version. If no stable version exists yet, the helper logs a warning and defers repair until the stable Release workflow publishes `X.Y.Z`; it does not delete `latest`.
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maestro",
|
|
3
|
-
"version": "1.6.4
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Multi-agent development orchestration platform — 39 specialists, 4-phase orchestration, native parallel subagents, persistent sessions, and standalone review/debug/security/perf/seo/a11y/compliance commands",
|
|
5
5
|
"contextFileName": "GEMINI.md",
|
|
6
6
|
"settings": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@josstei/maestro",
|
|
3
|
-
"version": "1.6.4
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Multi-agent development orchestration platform — 39 specialists, 4-phase workflows, 4 runtime targets (Gemini CLI, Claude Code, OpenAI Codex, Qwen Code)",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": {
|
package/qwen-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maestro",
|
|
3
|
-
"version": "1.6.4
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Multi-agent development orchestration platform — 39 specialists, 4-phase orchestration, native parallel subagents, persistent sessions, and standalone review/debug/security/perf/seo/a11y/compliance commands",
|
|
5
5
|
"contextFileName": "QWEN.md",
|
|
6
6
|
"settings": [
|
|
@@ -206,13 +206,20 @@ function validatePublishTag(pkg, tag) {
|
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
-
function ensureLatestTagPolicy(pkg, runner) {
|
|
209
|
+
function ensureLatestTagPolicy(pkg, runner, logger = console) {
|
|
210
210
|
const tags = getDistTags(pkg.name, runner);
|
|
211
|
-
const latest = tags.latest;
|
|
211
|
+
const latest = tags.latest || null;
|
|
212
212
|
|
|
213
213
|
if (isPrereleaseVersion(pkg.version)) {
|
|
214
214
|
if (!latest || !isPrereleaseVersion(latest)) {
|
|
215
|
-
return
|
|
215
|
+
return {
|
|
216
|
+
latest,
|
|
217
|
+
reason: latest
|
|
218
|
+
? `latest already points to stable version ${latest}.`
|
|
219
|
+
: 'latest dist-tag is not set.',
|
|
220
|
+
status: 'ok',
|
|
221
|
+
target: null,
|
|
222
|
+
};
|
|
216
223
|
}
|
|
217
224
|
|
|
218
225
|
const stableVersion = highestStableVersion(getPublishedVersions(pkg.name, runner));
|
|
@@ -220,31 +227,58 @@ function ensureLatestTagPolicy(pkg, runner) {
|
|
|
220
227
|
runner('npm', ['dist-tag', 'add', `${pkg.name}@${stableVersion}`, 'latest'], {
|
|
221
228
|
stdio: 'inherit',
|
|
222
229
|
});
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
230
|
+
logger.log(`Moved npm latest dist-tag from ${latest} to stable ${stableVersion}.`);
|
|
231
|
+
return {
|
|
232
|
+
latest,
|
|
233
|
+
reason: `latest pointed to prerelease ${latest}; moved it back to stable ${stableVersion}.`,
|
|
234
|
+
status: 'moved',
|
|
235
|
+
target: stableVersion,
|
|
236
|
+
};
|
|
227
237
|
}
|
|
228
|
-
|
|
238
|
+
|
|
239
|
+
const reason = `latest points to prerelease ${latest}, but no stable versions are published; stable release must move latest.`;
|
|
240
|
+
logger.warn(`Warning: ${reason}`);
|
|
241
|
+
return {
|
|
242
|
+
latest,
|
|
243
|
+
reason,
|
|
244
|
+
status: 'deferred',
|
|
245
|
+
target: null,
|
|
246
|
+
};
|
|
229
247
|
}
|
|
230
248
|
|
|
231
249
|
if (latest !== pkg.version) {
|
|
232
250
|
runner('npm', ['dist-tag', 'add', `${pkg.name}@${pkg.version}`, 'latest'], {
|
|
233
251
|
stdio: 'inherit',
|
|
234
252
|
});
|
|
253
|
+
logger.log(`Moved npm latest dist-tag from ${latest || '<unset>'} to stable ${pkg.version}.`);
|
|
254
|
+
return {
|
|
255
|
+
latest,
|
|
256
|
+
reason: `latest pointed to ${latest || '<unset>'}; moved it to stable ${pkg.version}.`,
|
|
257
|
+
status: 'moved',
|
|
258
|
+
target: pkg.version,
|
|
259
|
+
};
|
|
235
260
|
}
|
|
261
|
+
|
|
262
|
+
return {
|
|
263
|
+
latest,
|
|
264
|
+
reason: `latest already points to stable version ${pkg.version}.`,
|
|
265
|
+
status: 'ok',
|
|
266
|
+
target: pkg.version,
|
|
267
|
+
};
|
|
236
268
|
}
|
|
237
269
|
|
|
238
270
|
function publishIfNeeded(options = {}) {
|
|
239
271
|
const root = options.root || ROOT;
|
|
240
272
|
const runner = options.execFileSync || execFileSync;
|
|
273
|
+
const logger = options.logger || console;
|
|
241
274
|
const pkg = readPackage(root);
|
|
242
275
|
const packageSpec = `${pkg.name}@${pkg.version}`;
|
|
243
276
|
validatePublishTag(pkg, options.tag);
|
|
244
277
|
|
|
245
278
|
if (packageVersionExists(packageSpec, runner)) {
|
|
246
|
-
ensureLatestTagPolicy(pkg, runner);
|
|
279
|
+
const latestPolicy = ensureLatestTagPolicy(pkg, runner, logger);
|
|
247
280
|
return {
|
|
281
|
+
latestPolicy,
|
|
248
282
|
packageSpec,
|
|
249
283
|
published: false,
|
|
250
284
|
};
|
|
@@ -261,9 +295,10 @@ function publishIfNeeded(options = {}) {
|
|
|
261
295
|
stdio: 'inherit',
|
|
262
296
|
});
|
|
263
297
|
|
|
264
|
-
ensureLatestTagPolicy(pkg, runner);
|
|
298
|
+
const latestPolicy = ensureLatestTagPolicy(pkg, runner, logger);
|
|
265
299
|
|
|
266
300
|
return {
|
|
301
|
+
latestPolicy,
|
|
267
302
|
packageSpec,
|
|
268
303
|
published: true,
|
|
269
304
|
};
|