@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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mmi",
3
3
  "displayName": "MMI",
4
- "version": "4.5.118",
4
+ "version": "4.5.120",
5
5
  "mmiCompat": "4.x",
6
6
  "description": "MMI workflow skills and org gates delivery.",
7
7
  "author": {
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
- return canonicalPathFor(head) ?? head;
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.118",
18089
- tag: "v4.5.118",
18090
- commit: "4dc2fb2beb2b",
18091
- npm: "@mutmutco/cli@4.5.118"
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.118"
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.118 and redeploy the Hub Lambda from tag v4.5.118 (4dc2fb2beb2b); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
18115
- v3Target: "v4.5.118 (@mutmutco/cli@4.5.118, tag commit 4dc2fb2beb2b \u2014 last known-good release carrying the repo-index v4-only contract)"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.118",
3
+ "version": "4.5.120",
4
4
  "description": "MMI Future CLI — the org dev toolbox and shared cross-IDE engine for every registry-declared MMI coding surface.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/claude-plugin",
3
- "version": "4.5.118",
3
+ "version": "4.5.120",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -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