@mutmutco/claude-plugin 4.5.118 → 4.5.120
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/.claude-plugin/plugin.json +1 -1
- package/cli/dist/main.cjs +26 -10
- package/cli/package.json +1 -1
- package/package.json +1 -1
- package/skills/release/SKILL.md +1 -1
package/cli/dist/main.cjs
CHANGED
|
@@ -1178,7 +1178,9 @@ function commandFromFailMessage(msg) {
|
|
|
1178
1178
|
const head = msg.split(":", 1)[0].trim();
|
|
1179
1179
|
if (!head || head.startsWith("-")) return "mmi-cli";
|
|
1180
1180
|
if (!/^[a-z][a-z0-9-]*(?: [a-z][a-z0-9-]*){0,5}$/.test(head)) return "mmi-cli";
|
|
1181
|
-
|
|
1181
|
+
const canonical = canonicalPathFor(head);
|
|
1182
|
+
if (canonical) return canonical;
|
|
1183
|
+
return HOUSE_ROOTS.includes(head.split(" ")[0]) ? head : "mmi-cli";
|
|
1182
1184
|
}
|
|
1183
1185
|
function canonicalFailMessage(msg) {
|
|
1184
1186
|
const colon = msg.indexOf(":");
|
|
@@ -5846,6 +5848,10 @@ var activeQuotaScope;
|
|
|
5846
5848
|
function activeAppQuotaScope() {
|
|
5847
5849
|
return activeQuotaScope;
|
|
5848
5850
|
}
|
|
5851
|
+
var activeToken;
|
|
5852
|
+
function activeAppToken() {
|
|
5853
|
+
return activeToken;
|
|
5854
|
+
}
|
|
5849
5855
|
async function readAppVaultSecret(read) {
|
|
5850
5856
|
try {
|
|
5851
5857
|
return await read();
|
|
@@ -5917,6 +5923,7 @@ var notedIneligibleCommand = false;
|
|
|
5917
5923
|
async function activateAppActor(commandPath3, env, mint, note = (line) => process.stderr.write(`${line}
|
|
5918
5924
|
`)) {
|
|
5919
5925
|
activeQuotaScope = void 0;
|
|
5926
|
+
activeToken = void 0;
|
|
5920
5927
|
const requested = (env[APP_ACTOR_ENV] ?? "").trim();
|
|
5921
5928
|
if (!requested) return "personal";
|
|
5922
5929
|
if (requested !== "app") {
|
|
@@ -5934,6 +5941,7 @@ async function activateAppActor(commandPath3, env, mint, note = (line) => proces
|
|
|
5934
5941
|
const minted = await mint();
|
|
5935
5942
|
env.GH_TOKEN = minted.token;
|
|
5936
5943
|
activeQuotaScope = minted.quotaScope;
|
|
5944
|
+
activeToken = minted.token;
|
|
5937
5945
|
return "app";
|
|
5938
5946
|
}
|
|
5939
5947
|
|
|
@@ -18085,10 +18093,10 @@ var rollout_plan_default = {
|
|
|
18085
18093
|
note: "The v4.0.0 stamp happens at cut time (D6e #4463); until then the candidate is the origin/development head artifacts (built cli/dist + npm pack), identity proven by dist content hash (D6a)."
|
|
18086
18094
|
},
|
|
18087
18095
|
baseline: {
|
|
18088
|
-
version: "4.5.
|
|
18089
|
-
tag: "v4.5.
|
|
18090
|
-
commit: "
|
|
18091
|
-
npm: "@mutmutco/cli@4.5.
|
|
18096
|
+
version: "4.5.120",
|
|
18097
|
+
tag: "v4.5.120",
|
|
18098
|
+
commit: "535bdf82416b",
|
|
18099
|
+
npm: "@mutmutco/cli@4.5.120"
|
|
18092
18100
|
},
|
|
18093
18101
|
exitCriterion: "fleet-n-of-n",
|
|
18094
18102
|
hubOnlyShortcut: "forbidden",
|
|
@@ -18105,14 +18113,14 @@ var rollout_plan_default = {
|
|
|
18105
18113
|
repo: "mutmutco/mmi-hub",
|
|
18106
18114
|
role: "canary",
|
|
18107
18115
|
schedule: "train",
|
|
18108
|
-
v3Target: "v4.5.
|
|
18116
|
+
v3Target: "v4.5.120"
|
|
18109
18117
|
}
|
|
18110
18118
|
],
|
|
18111
18119
|
rollbackTrigger: "Any red inside the post-contract soak window: `devops train gate` FAIL attributable to the v4 doors, Hub endpoint health probe failure, a pre-v4 client admitted instead of receiving actionable HTTP 426, or npm consumer install/doctor failure on the v4-only dist.",
|
|
18112
18120
|
rollback: {
|
|
18113
18121
|
independent: true,
|
|
18114
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
18115
|
-
v3Target: "v4.5.
|
|
18122
|
+
mechanism: "npm dist-tag latest -> 4.5.120 and redeploy the Hub Lambda from tag v4.5.120 (535bdf82416b); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
18123
|
+
v3Target: "v4.5.120 (@mutmutco/cli@4.5.120, tag commit 535bdf82416b \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
18116
18124
|
}
|
|
18117
18125
|
},
|
|
18118
18126
|
{
|
|
@@ -52090,6 +52098,12 @@ function buildRunViewSpec(id, o) {
|
|
|
52090
52098
|
if (o.exitStatus) args.push("--exit-status");
|
|
52091
52099
|
return { program: "gh", args, timeoutMs: SINGLE_SHOT_TIMEOUT_MS };
|
|
52092
52100
|
}
|
|
52101
|
+
var CREATED_RE = /^(?:(?:>=|<=|>|<)?\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}(?::\d{2})?Z)?|\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}(?::\d{2})?Z)?\.\.\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}(?::\d{2})?Z)?)$/;
|
|
52102
|
+
function parseBrokerCreated(v) {
|
|
52103
|
+
if (v === void 0) return void 0;
|
|
52104
|
+
if (!CREATED_RE.test(v)) throw new Error(`--created must be a GitHub created filter like ">=2026-10-11T00:30:00Z" (got ${JSON.stringify(v)})`);
|
|
52105
|
+
return v;
|
|
52106
|
+
}
|
|
52093
52107
|
function buildRunListSpec(o) {
|
|
52094
52108
|
const args = withJson(withRepo(["run", "list"], parseBrokerRepo(o.repo, "--repo")), parseBrokerJsonFields(o.json), o.json);
|
|
52095
52109
|
const workflow = parseBrokerWorkflow(o.workflow);
|
|
@@ -52098,6 +52112,8 @@ function buildRunListSpec(o) {
|
|
|
52098
52112
|
if (branch) args.push("--branch", branch);
|
|
52099
52113
|
const status = parseBrokerRunStatus(o.status);
|
|
52100
52114
|
if (status) args.push("--status", status);
|
|
52115
|
+
const created = parseBrokerCreated(o.created);
|
|
52116
|
+
if (created) args.push("--created", created);
|
|
52101
52117
|
if (o.limit !== void 0) args.push("--limit", String(parseBrokerInt(o.limit, "--limit", 1, 100)));
|
|
52102
52118
|
return { program: "gh", args, timeoutMs: SINGLE_SHOT_TIMEOUT_MS };
|
|
52103
52119
|
}
|
|
@@ -52295,7 +52311,7 @@ function registerAppReadBrokerCommands(program3, resolveRepo2, overrides) {
|
|
|
52295
52311
|
}
|
|
52296
52312
|
await dispatchGh(spec, "read run view");
|
|
52297
52313
|
});
|
|
52298
|
-
run.command("list").description("list workflow runs (workflow/branch/status/limit/json; formatters refused)").option("--repo <owner/repo>", "target repo (defaults to the current repo)", repoOpt).option("--json [fields]", "machine-readable output (comma-separated gh fields)", jsonOpt).option("--workflow <name>", "filter by workflow name or file", workflowOpt).option("--branch <name>", "filter by branch", branchOpt).option("--status <status>", "filter by run status", runStatusOpt).option("--limit <n>", "maximum runs to fetch (1-100)", intOpt("--limit", 1, 100)).action(async (o) => {
|
|
52314
|
+
run.command("list").description("list workflow runs (workflow/branch/status/created/limit/json; formatters refused)").option("--repo <owner/repo>", "target repo (defaults to the current repo)", repoOpt).option("--json [fields]", "machine-readable output (comma-separated gh fields)", jsonOpt).option("--workflow <name>", "filter by workflow name or file", workflowOpt).option("--branch <name>", "filter by branch", branchOpt).option("--status <status>", "filter by run status", runStatusOpt).option("--created <filter>", 'only runs created in this window, e.g. ">=2026-10-11T00:30:00Z" (#8096)', (v) => parseBrokerCreated(v)).option("--limit <n>", "maximum runs to fetch (1-100)", intOpt("--limit", 1, 100)).action(async (o) => {
|
|
52299
52315
|
let spec;
|
|
52300
52316
|
try {
|
|
52301
52317
|
spec = buildRunListSpec(o);
|
|
@@ -55387,7 +55403,7 @@ function appActorDeps() {
|
|
|
55387
55403
|
fetch: (url, init) => fetch(url, init)
|
|
55388
55404
|
};
|
|
55389
55405
|
}
|
|
55390
|
-
setPollTokenProvider(() => pollTokenOrUndefined(appActorDeps()));
|
|
55406
|
+
setPollTokenProvider(async () => activeAppToken() ?? pollTokenOrUndefined(appActorDeps()));
|
|
55391
55407
|
var registerPreAction = Reflect.get(program2, ["h", "ook"].join(""));
|
|
55392
55408
|
registerPreAction.call(program2, "preAction", async (_thisCommand, actionCommand) => {
|
|
55393
55409
|
const commandPath3 = commandPathOf(actionCommand);
|
package/cli/package.json
CHANGED
package/package.json
CHANGED
package/skills/release/SKILL.md
CHANGED
|
@@ -90,7 +90,7 @@ Read the saved result, never the exit code (exit `1` = a follow-up failed after
|
|
|
90
90
|
|
|
91
91
|
Then verify Latest with this bounded one-row read; require `isLatest: true` and `tagName` equal to the resolved tag: `gh release list --repo {owner}/{repo} --limit 1 --json tagName,isLatest,publishedAt`.
|
|
92
92
|
|
|
93
|
-
For the independent run recheck, run `gh run list --repo {owner}/{repo} --limit 100 --json databaseId,headSha,workflowName,status,conclusion,url > .jerv/tmp/release-runs.json`, then filter locally by the exact SHA from the saved receipt with `node -e 'const rows = require("./.jerv/tmp/release-runs.json"); const sha = process.argv[1]; const matches = rows.filter((run) => run.headSha === sha); if (rows.length >= 100 || !matches.length) throw new Error("release run set is incomplete or absent"); console.log(JSON.stringify(matches, null, 2));' "<release-sha>"`.
|
|
93
|
+
For the independent run recheck, scope the read to the release window, so a busy repo's unrelated runs cannot fill the cap: note the UTC instant you started `--apply` (`date -u +%Y-%m-%dT%H:%M:%SZ`), then run `gh run list --repo {owner}/{repo} --created ">=<apply-start-utc>" --limit 100 --json databaseId,headSha,workflowName,status,conclusion,url > .jerv/tmp/release-runs.json`, then filter locally by the exact SHA from the saved receipt with `node -e 'const rows = require("./.jerv/tmp/release-runs.json"); const sha = process.argv[1]; const matches = rows.filter((run) => run.headSha === sha); if (rows.length >= 100 || !matches.length) throw new Error("release run set is incomplete or absent"); console.log(JSON.stringify(matches, null, 2));' "<release-sha>"`.
|
|
94
94
|
|
|
95
95
|
Do not use the raw `releases/latest` API route, a `--jq` formatter, or `gh run list --commit`; if the bounded list reaches 100 rows or has no SHA match, the run set is unverified and must not be called green.
|
|
96
96
|
|