@mutmutco/cli 3.88.0 → 3.89.0
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 +39 -12
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -27862,13 +27862,16 @@ function registerSessionReport(program3) {
|
|
|
27862
27862
|
// src/doctor-render.ts
|
|
27863
27863
|
var RESTART_LINE = "\u21BB Restart Claude to finish.";
|
|
27864
27864
|
var VERBOSE_INDENT = " ";
|
|
27865
|
+
function checkGlyph(check) {
|
|
27866
|
+
if (!check.ok) return "\u2717";
|
|
27867
|
+
return check.verified === false ? "?" : "\u2713";
|
|
27868
|
+
}
|
|
27865
27869
|
function renderCheckLine(check) {
|
|
27866
|
-
|
|
27867
|
-
|
|
27868
|
-
}
|
|
27869
|
-
|
|
27870
|
-
return
|
|
27871
|
-
${VERBOSE_INDENT}\u2192 ${check.fix}` : head;
|
|
27870
|
+
const head = check.detail ? `${checkGlyph(check)} ${check.label} \u2014 ${check.detail}` : `${checkGlyph(check)} ${check.label}`;
|
|
27871
|
+
const lines = [head];
|
|
27872
|
+
if (check.fix) lines.push(`${VERBOSE_INDENT}\u2192 ${check.fix}`);
|
|
27873
|
+
if (check.command) lines.push(`${VERBOSE_INDENT}${check.command}`);
|
|
27874
|
+
return lines.join("\n");
|
|
27872
27875
|
}
|
|
27873
27876
|
function renderReport(checks, opts) {
|
|
27874
27877
|
const lines = checks.map(renderCheckLine);
|
|
@@ -27877,8 +27880,14 @@ function renderReport(checks, opts) {
|
|
|
27877
27880
|
}
|
|
27878
27881
|
function renderTally(checks) {
|
|
27879
27882
|
const total = checks.length;
|
|
27880
|
-
const
|
|
27881
|
-
|
|
27883
|
+
const failed = checks.filter((c) => !c.ok).length;
|
|
27884
|
+
const unverified = checks.filter((c) => c.ok && c.verified === false).length;
|
|
27885
|
+
const healthy = total - failed - unverified;
|
|
27886
|
+
if (failed === 0 && unverified === 0) return `\u2713 all ${total} checks healthy`;
|
|
27887
|
+
const parts = [`\u2713 ${healthy} verified healthy`];
|
|
27888
|
+
if (unverified > 0) parts.push(`? ${unverified} unverified`);
|
|
27889
|
+
if (failed > 0) parts.push(`\u2717 ${failed} failed`);
|
|
27890
|
+
return `${parts.join(" \xB7 ")} \u2014 ${total} checks`;
|
|
27882
27891
|
}
|
|
27883
27892
|
function doctorReportExitCode(checks) {
|
|
27884
27893
|
return checks.some((c) => !c.ok && !c.reportOnly) ? 1 : 0;
|
|
@@ -28704,6 +28713,11 @@ function checkAwsIdentity(probe) {
|
|
|
28704
28713
|
const arn = probe.callerArn?.trim();
|
|
28705
28714
|
return {
|
|
28706
28715
|
ok: !arn || !arn.endsWith(":root"),
|
|
28716
|
+
// #4074: the row's claim is "this caller is not root", and with no ARN resolved there is no caller to
|
|
28717
|
+
// make it about. `awsCallerArn` returns undefined for ANY failure — expired SSO, no `aws` binary, a
|
|
28718
|
+
// timeout — so an empty result is "I could not look", never "I looked and it is fine". The evidence
|
|
28719
|
+
// line below has said exactly that since #3485; the glyph now says it too.
|
|
28720
|
+
verified: Boolean(arn),
|
|
28707
28721
|
id: "aws-identity",
|
|
28708
28722
|
label: "aws identity",
|
|
28709
28723
|
fix: "use a non-root IAM user/session profile (set AWS_PROFILE or run: aws sso login), then verify `aws sts get-caller-identity` is not :root",
|
|
@@ -28738,13 +28752,25 @@ function checkCodexHookTrust(probe, displayName = "Codex") {
|
|
|
28738
28752
|
if (probe.trusted) {
|
|
28739
28753
|
return { id: "codex-hook-trust", ok: true, label, detail: "trusted", verbose: evidence };
|
|
28740
28754
|
}
|
|
28755
|
+
if (probe.requiredCount === 0) {
|
|
28756
|
+
return {
|
|
28757
|
+
id: "codex-hook-trust",
|
|
28758
|
+
ok: true,
|
|
28759
|
+
verified: false,
|
|
28760
|
+
warn: true,
|
|
28761
|
+
label,
|
|
28762
|
+
detail: "no approval rows to read \u2014 the hook bundle could not be checked",
|
|
28763
|
+
fix: `run \`mmi-cli plugin heal\`, restart ${displayName}, then review and trust MMI under \`/hooks\``,
|
|
28764
|
+
verbose: evidence
|
|
28765
|
+
};
|
|
28766
|
+
}
|
|
28741
28767
|
return {
|
|
28742
28768
|
id: "codex-hook-trust",
|
|
28743
28769
|
ok: true,
|
|
28744
28770
|
warn: true,
|
|
28745
28771
|
label,
|
|
28746
|
-
detail:
|
|
28747
|
-
fix:
|
|
28772
|
+
detail: `${probe.trustedCount}/${probe.requiredCount} approval rows present`,
|
|
28773
|
+
fix: `${displayName} does not allow silent hook approval; run \`/hooks\`, review the MMI commands, and trust them`,
|
|
28748
28774
|
verbose: evidence
|
|
28749
28775
|
};
|
|
28750
28776
|
}
|
|
@@ -28757,8 +28783,9 @@ function checkCliVersion(input, releasedNote) {
|
|
|
28757
28783
|
if (!report.releasedVersion) {
|
|
28758
28784
|
return {
|
|
28759
28785
|
id: "cli-version",
|
|
28760
|
-
ok:
|
|
28761
|
-
|
|
28786
|
+
ok: true,
|
|
28787
|
+
verified: false,
|
|
28788
|
+
warn: true,
|
|
28762
28789
|
label: "mmi-cli",
|
|
28763
28790
|
detail: `${report.currentVersion} \u2014 freshness UNKNOWN, the published version could not be read`,
|
|
28764
28791
|
fix: "check it directly: `mmi-cli --version` against `npm view @mutmutco/cli version`; update with `npm install -g @mutmutco/cli@<released>`",
|
package/package.json
CHANGED