@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.
- package/dist/main.cjs +63 -16
- 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.
|
|
15805
|
-
tag: "v4.3.
|
|
15806
|
-
commit: "
|
|
15807
|
-
npm: "@mutmutco/cli@4.3.
|
|
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.
|
|
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.
|
|
15831
|
-
v3Target: "v4.3.
|
|
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:
|
|
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
|
-
|
|
21509
|
-
|
|
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
|
|
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