@mutmutco/cli 4.3.63 → 4.3.65

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.
Files changed (2) hide show
  1. package/dist/main.cjs +63 -16
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -13772,7 +13772,7 @@ function walk(dir, root, out) {
13772
13772
  return out;
13773
13773
  }
13774
13774
  function defaultListDocs(root) {
13775
- const docs = ["docs", "skills/org-guide", "skills/mmi-help"].flatMap((path2) => {
13775
+ const docs = ["docs", "skills/org-guide", "skills/mmi-help", "skills/brand"].flatMap((path2) => {
13776
13776
  const directory = (0, import_node_path12.join)(root, path2);
13777
13777
  return (0, import_node_fs14.existsSync)(directory) ? walk(directory, root, []) : [];
13778
13778
  }).filter(
@@ -15801,10 +15801,10 @@ var rollout_plan_default = {
15801
15801
  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)."
15802
15802
  },
15803
15803
  baseline: {
15804
- version: "4.3.63",
15805
- tag: "v4.3.63",
15806
- commit: "23180ae03611",
15807
- npm: "@mutmutco/cli@4.3.63"
15804
+ version: "4.3.65",
15805
+ tag: "v4.3.65",
15806
+ commit: "6f1cb5bc31b9",
15807
+ npm: "@mutmutco/cli@4.3.65"
15808
15808
  },
15809
15809
  exitCriterion: "fleet-n-of-n",
15810
15810
  hubOnlyShortcut: "forbidden",
@@ -15821,14 +15821,14 @@ var rollout_plan_default = {
15821
15821
  repo: "mutmutco/mmi-hub",
15822
15822
  role: "canary",
15823
15823
  schedule: "train",
15824
- v3Target: "v4.3.63"
15824
+ v3Target: "v4.3.65"
15825
15825
  }
15826
15826
  ],
15827
15827
  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.",
15828
15828
  rollback: {
15829
15829
  independent: true,
15830
- mechanism: "npm dist-tag latest -> 4.3.63 and redeploy the Hub Lambda from tag v4.3.63 (23180ae03611); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
15831
- v3Target: "v4.3.63 (@mutmutco/cli@4.3.63, tag commit 23180ae03611 \u2014 last known-good release carrying the repo-index v4-only contract)"
15830
+ mechanism: "npm dist-tag latest -> 4.3.65 and redeploy the Hub Lambda from tag v4.3.65 (6f1cb5bc31b9); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
15831
+ v3Target: "v4.3.65 (@mutmutco/cli@4.3.65, tag commit 6f1cb5bc31b9 \u2014 last known-good release carrying the repo-index v4-only contract)"
15832
15832
  }
15833
15833
  },
15834
15834
  {
@@ -19606,12 +19606,21 @@ function readHermesPluginEvidence(env = process.env) {
19606
19606
  skills = (0, import_node_fs19.existsSync)((0, import_node_path17.join)(root, "skills")) && (0, import_node_fs19.statSync)((0, import_node_path17.join)(root, "skills")).isDirectory();
19607
19607
  } catch {
19608
19608
  }
19609
+ let provisioned = false;
19610
+ const provisionedRoot = (0, import_node_path17.join)(host, "skills", "mmi");
19611
+ try {
19612
+ provisioned = (0, import_node_fs19.existsSync)(provisionedRoot) && (0, import_node_fs19.statSync)(provisionedRoot).isDirectory();
19613
+ } catch {
19614
+ }
19615
+ const treeOk = (0, import_node_fs19.existsSync)((0, import_node_path17.join)(root, "__init__.py")) && skills && manifest === "valid";
19616
+ const receipt = treeOk && !provisioned ? `hermes-skills-unprovisioned:${provisionedRoot}` : void 0;
19609
19617
  return {
19610
19618
  hostPresent: (0, import_node_fs19.existsSync)(host),
19611
19619
  installRecordPresent,
19612
19620
  manifest,
19613
- payloadPresent: (0, import_node_fs19.existsSync)((0, import_node_path17.join)(root, "__init__.py")) && skills && manifest === "valid",
19614
- ...installedVersion ? { installedVersion } : {}
19621
+ payloadPresent: treeOk && provisioned,
19622
+ ...installedVersion ? { installedVersion } : {},
19623
+ ...receipt ? { receipt } : {}
19615
19624
  };
19616
19625
  }
19617
19626
  function installedSurfacePluginVersion(surface) {
@@ -21505,9 +21514,45 @@ async function supersedeContentCausedPublishLeg(deps, cwd) {
21505
21514
  throw new Error(`release --supersede-publish: could not prove ${prior.tag} live on origin (${e instanceof Error ? e.message : String(e)}) \u2014 refusing to close the leg on an unproven state; retry when origin answers (#6638)`);
21506
21515
  }
21507
21516
  if (liveSha.toLowerCase() !== prior.tagSha.toLowerCase()) {
21508
- throw new Error(
21509
- `release --supersede-publish: origin reports ${prior.tag} at ${liveSha.slice(0, 12) || "no tag"} but the ledger anchors ${prior.tagSha.slice(0, 12)} \u2014 an absent or divergent release is NOT supersedeable (release --abort --apply is the unpublished candidate's own exit); nothing was written (#6638)`
21510
- );
21517
+ if (liveSha) {
21518
+ throw new Error(
21519
+ `release --supersede-publish: origin reports ${prior.tag} at ${liveSha.slice(0, 12)} but the ledger anchors ${prior.tagSha.slice(0, 12)} \u2014 a divergent release is NOT supersedeable; nothing was written (#6638)`
21520
+ );
21521
+ }
21522
+ let repository;
21523
+ try {
21524
+ repository = JSON.parse(await deps.run("gh", ["repo", "view", prior.repo, "--json", "nameWithOwner"]));
21525
+ } catch (e) {
21526
+ throw new Error(`release --supersede-publish: could not prove repository access for ${prior.repo} (${e instanceof Error ? e.message.split("\n")[0] : String(e)}) \u2014 a Release 404 is untrusted without that proof; nothing was written (#6638)`);
21527
+ }
21528
+ if (repository.nameWithOwner !== prior.repo) {
21529
+ throw new Error(`release --supersede-publish: repository access proof named ${String(repository.nameWithOwner || "(missing)")}, not ${prior.repo} \u2014 nothing was written (#6638)`);
21530
+ }
21531
+ let releaseAbsent = false;
21532
+ try {
21533
+ await deps.run("gh", ["release", "view", prior.tag, "--repo", prior.repo, "--json", "tagName"]);
21534
+ } catch (e) {
21535
+ const detail = `${e instanceof Error ? e.message : String(e)} ${String(e.stderr ?? "")}`;
21536
+ releaseAbsent = /release not found|HTTP 404|\(404\)/i.test(detail);
21537
+ if (!releaseAbsent) {
21538
+ throw new Error(`release --supersede-publish: could not prove the GitHub Release for ${prior.tag} absent (${detail.split("\n")[0]}) \u2014 refusing to close on an unproven state; nothing was written (#6638)`);
21539
+ }
21540
+ }
21541
+ if (!releaseAbsent) {
21542
+ throw new Error(`release --supersede-publish: origin no longer has ${prior.tag} but its GitHub Release still exists \u2014 resolve the mixed external state before closing the ledger; nothing was written (#6638)`);
21543
+ }
21544
+ const archivePath = (0, import_node_path21.join)((0, import_node_path21.dirname)(path2), `phases.archive-${prior.tag}.json`);
21545
+ if ((0, import_node_fs21.existsSync)(archivePath)) {
21546
+ throw new Error(`release --supersede-publish: archive already exists at ${archivePath} \u2014 preserving both ledger records; resolve the collision by hand; nothing was written (#6638)`);
21547
+ }
21548
+ (0, import_node_fs21.renameSync)(path2, archivePath);
21549
+ return {
21550
+ command: "release-supersede-publish",
21551
+ repo: prior.repo,
21552
+ tag: prior.tag,
21553
+ tagSha: prior.tagSha,
21554
+ note: `closed the deleted ${prior.tag} publish failure by archiving its ledger after origin and GitHub both proved absent; start a fresh release train to carry the cause fix`
21555
+ };
21511
21556
  }
21512
21557
  const note = `superseded: content-caused publish failure on the immutable promoted ${prior.tag} \u2014 the cause fix rides the next patch train (master-approved closure, #6638)`;
21513
21558
  atomicWriteJson(path2, {
@@ -31877,8 +31922,9 @@ var surfaces_default = {
31877
31922
  },
31878
31923
  enforcementCeilings: [
31879
31924
  "MMI ships no Hermes hooks (#5908): the plugin contributes skills and the /mmi command only; enforcement is host-side.",
31880
- "Hermes user plugins are opt-in through plugins.enabled; operator consent and host process isolation remain Hermes-owned.",
31881
- "npm is MMI transport only: MMI-Hub extracts @mutmutco/hermes-plugin into $HERMES_HOME/plugins/mmi and provisions the canonical skills into $HERMES_HOME/skills/mmi/; a fresh Hermes Agent process is required for discovery."
31925
+ "Hermes user plugins are opt-in through plugins.enabled (#6656): after a verified converge MMI-Hub enables its OWN mmi key through Hermes' own `hermes plugins enable mmi --no-allow-tool-override` command, and never reads, reorders, or writes another operator entry. Built-in tool override is explicitly declined, since MMI ships no Hermes hooks. Host process isolation remains Hermes-owned.",
31926
+ "npm is MMI transport only: MMI-Hub extracts @mutmutco/hermes-plugin into $HERMES_HOME/plugins/mmi and provisions the canonical skills into $HERMES_HOME/skills/mmi/; a fresh Hermes Agent process is required for discovery.",
31927
+ "Every Hermes home is covered per home (#6672): a profile under $HERMES_HOME/profiles/<name> is a full sibling home and Hermes scans only the active home's plugins/, so MMI-Hub repeats the same single-home install, skills provisioning, and host-command enable in the resolved home and in each profile home with HERMES_HOME bound to it. No profile is enumerated for any other purpose, and nothing outside those per-home MMI paths is read or written."
31882
31928
  ]
31883
31929
  }
31884
31930
  ],
@@ -45032,7 +45078,8 @@ function mmiDoctorDeps(opts = {}) {
45032
45078
  manifest: hermes?.manifest ?? (installedVersion ? "valid" : snapshot.installRecordPresent ? "invalid" : "missing"),
45033
45079
  guardState: buildPluginGuardDecision(snapshot).state,
45034
45080
  ...installedVersion ? { installedVersion } : {},
45035
- ...stagedVersion ? { stagedVersion } : {}
45081
+ ...stagedVersion ? { stagedVersion } : {},
45082
+ ...hermes?.receipt ? { receipt: hermes.receipt } : {}
45036
45083
  };
45037
45084
  return surfaceEvidence;
45038
45085
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.3.63",
3
+ "version": "4.3.65",
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",