@ganakailabs/cloudeval-cli 0.29.2 → 0.29.3
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/{App-ISTB45LE.js → App-7FR4HVBO.js} +2 -2
- package/dist/{Banner-USFUJC3Y.js → Banner-WWNHRGQD.js} +2 -2
- package/dist/{chunk-YAD6SGBL.js → chunk-D2ROSW4U.js} +1 -1
- package/dist/{chunk-FWCQ4PWL.js → chunk-PN4AUAH6.js} +1 -1
- package/dist/cli.js +21 -20
- package/package.json +1 -1
- package/sbom.spdx.json +1 -1
|
@@ -38,10 +38,10 @@ import {
|
|
|
38
38
|
} from "./chunk-ERGQHMNT.js";
|
|
39
39
|
import {
|
|
40
40
|
Banner
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-D2ROSW4U.js";
|
|
42
42
|
import {
|
|
43
43
|
CLI_VERSION
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-PN4AUAH6.js";
|
|
45
45
|
import {
|
|
46
46
|
raisedButtonStyle,
|
|
47
47
|
terminalTheme
|
package/dist/cli.js
CHANGED
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
} from "./chunk-ERGQHMNT.js";
|
|
40
40
|
import {
|
|
41
41
|
CLI_VERSION
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-PN4AUAH6.js";
|
|
43
43
|
|
|
44
44
|
// src/runtime/prepareInk.ts
|
|
45
45
|
import fs from "fs";
|
|
@@ -3512,32 +3512,33 @@ var deterministicAiSummary = (data, error) => {
|
|
|
3512
3512
|
const failedTests = numberFrom(validation?.unitTests?.failed) ?? numberFrom(validation?.unit_tests?.failed) ?? numberFrom(validation?.failedUnitTests) ?? numberFrom(validation?.failed_tests) ?? 0;
|
|
3513
3513
|
const policyFailed = numberFrom(validation?.policyChecks?.failed) ?? numberFrom(validation?.policy_checks?.failed) ?? numberFrom(data.gate?.policy?.failed) ?? 0;
|
|
3514
3514
|
const policyStatus = policyFailed > 0 ? "has failed checks" : "GOOD";
|
|
3515
|
+
const weakestPillar = Array.isArray(data.gate?.wellArchitected?.pillars) ? data.gate.wellArchitected.pillars.filter((pillar) => numberFrom(pillar.score) !== void 0).sort(
|
|
3516
|
+
(left, right) => (numberFrom(left.score) ?? 0) - (numberFrom(right.score) ?? 0)
|
|
3517
|
+
)[0] : void 0;
|
|
3518
|
+
const weakestPillarLabel = weakestPillar?.label ?? weakestPillar?.id ?? "the weakest Well-Architected pillar";
|
|
3519
|
+
const highRisk = numberFrom(data.gate?.wellArchitected?.risks?.high) ?? 0;
|
|
3515
3520
|
const summary = [
|
|
3516
3521
|
`CloudEval review completed with **${String(data.gate?.status ?? "UNKNOWN").toUpperCase()}**.`,
|
|
3517
3522
|
`Well-Architected posture is **${formatScore(score)} (${rating})**, validation has **${displayNumber(failedTests)} failed unit tests**, policy checks are **${policyStatus}**, and monthly cost is **${formatMonthlyMoney(cost?.amount, cost?.currency)}**.`,
|
|
3518
|
-
|
|
3523
|
+
`Prioritize **failed validation checks** and **${weakestPillarLabel}** first.`
|
|
3519
3524
|
].join(" ");
|
|
3525
|
+
const detailsMarkdown = [
|
|
3526
|
+
`**Main risk**
|
|
3527
|
+
The gate is **${String(data.gate?.status ?? "UNKNOWN").toUpperCase()}** with Well-Architected posture **${formatScore(score)} (${rating})**, **${displayNumber(failedTests)} failed unit tests**, and monthly cost **${formatMonthlyMoney(cost?.amount, cost?.currency)}**.`,
|
|
3528
|
+
`**Why it matters**
|
|
3529
|
+
${highRisk > 0 ? `There are **${displayNumber(highRisk)} high-risk findings**. ` : ""}Validation failures, weak architecture pillars, and cost over budget are the highest-signal remediation inputs before merge.`,
|
|
3530
|
+
`**Recommended actions**
|
|
3531
|
+
Fix **${displayNumber(failedTests)} failed unit tests**, address **${weakestPillarLabel}**, review cost drivers against the budget, rerun CloudEval review, and compare the updated gate.`,
|
|
3532
|
+
"**Evidence used**\n**Gate status**, **Well-Architected score**, **validation totals**, **policy totals**, **monthly cost**, and **architecture signals**."
|
|
3533
|
+
].join("\n\n");
|
|
3520
3534
|
return {
|
|
3521
3535
|
enabled: true,
|
|
3522
3536
|
status: "fallback",
|
|
3523
3537
|
fallbackUsed: true,
|
|
3524
3538
|
warnings: error ? [`Review summary endpoint failed: ${error}`] : [],
|
|
3525
3539
|
shortSummary: summary,
|
|
3526
|
-
detailsMarkdown
|
|
3527
|
-
|
|
3528
|
-
"**Why it matters**\n**Failed validation** and **weak architecture pillars** are the highest-signal remediation inputs.",
|
|
3529
|
-
"**Recommended actions**\nFix **failed validation checks**, address the **weakest pillar**, rerun CloudEval review, and compare the updated gate.",
|
|
3530
|
-
"**Evidence used**\n**Gate status**, **Well-Architected score**, **validation totals**, **policy totals**, and **monthly cost**."
|
|
3531
|
-
].join("\n\n"),
|
|
3532
|
-
markdown: renderAiSummarySections(
|
|
3533
|
-
summary,
|
|
3534
|
-
[
|
|
3535
|
-
"**Main risk**\nCloudEval could not produce an AI-written review summary, so use the deterministic gate evidence.",
|
|
3536
|
-
"**Why it matters**\n**Failed validation** and **weak architecture pillars** are the highest-signal remediation inputs.",
|
|
3537
|
-
"**Recommended actions**\nFix **failed validation checks**, address the **weakest pillar**, rerun CloudEval review, and compare the updated gate.",
|
|
3538
|
-
"**Evidence used**\n**Gate status**, **Well-Architected score**, **validation totals**, **policy totals**, and **monthly cost**."
|
|
3539
|
-
].join("\n\n")
|
|
3540
|
-
)
|
|
3540
|
+
detailsMarkdown,
|
|
3541
|
+
markdown: renderAiSummarySections(summary, detailsMarkdown)
|
|
3541
3542
|
};
|
|
3542
3543
|
};
|
|
3543
3544
|
var generateAiSummary = async (input) => {
|
|
@@ -16573,7 +16574,7 @@ program.command("tui").description("Open the CloudEval Terminal UI").option(
|
|
|
16573
16574
|
const { assertSecureBaseUrl } = await import("./dist-QYIPN7MD.js");
|
|
16574
16575
|
const [{ render }, { App }] = await Promise.all([
|
|
16575
16576
|
import("ink"),
|
|
16576
|
-
import("./App-
|
|
16577
|
+
import("./App-7FR4HVBO.js")
|
|
16577
16578
|
]);
|
|
16578
16579
|
const baseUrl = await resolveBaseUrl(options, command);
|
|
16579
16580
|
assertSecureBaseUrl(baseUrl);
|
|
@@ -16631,7 +16632,7 @@ program.command("chat").description("Start an interactive chat session").option(
|
|
|
16631
16632
|
const { assertSecureBaseUrl } = await import("./dist-QYIPN7MD.js");
|
|
16632
16633
|
const [{ render }, { App }] = await Promise.all([
|
|
16633
16634
|
import("ink"),
|
|
16634
|
-
import("./App-
|
|
16635
|
+
import("./App-7FR4HVBO.js")
|
|
16635
16636
|
]);
|
|
16636
16637
|
const baseUrl = await resolveBaseUrl(options, command);
|
|
16637
16638
|
assertSecureBaseUrl(baseUrl);
|
|
@@ -17385,7 +17386,7 @@ Error: ${errorMsg}
|
|
|
17385
17386
|
program.command("banner").description("Preview the startup banner and terminal capabilities").action(async () => {
|
|
17386
17387
|
const { render } = await import("ink");
|
|
17387
17388
|
const BannerPreview = React.lazy(async () => ({
|
|
17388
|
-
default: (await import("./Banner-
|
|
17389
|
+
default: (await import("./Banner-WWNHRGQD.js")).Banner
|
|
17389
17390
|
}));
|
|
17390
17391
|
render(
|
|
17391
17392
|
/* @__PURE__ */ jsx(React.Suspense, { fallback: null, children: /* @__PURE__ */ jsx(BannerPreview, { disable: false }) })
|
package/package.json
CHANGED
package/sbom.spdx.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{
|
|
15
15
|
"SPDXID": "SPDXRef-Package-CloudEval-CLI",
|
|
16
16
|
"name": "CloudEval CLI",
|
|
17
|
-
"versionInfo": "0.29.
|
|
17
|
+
"versionInfo": "0.29.3",
|
|
18
18
|
"downloadLocation": "https://github.com/ganakailabs/cloudeval-cli",
|
|
19
19
|
"filesAnalyzed": false,
|
|
20
20
|
"licenseConcluded": "LicenseRef-CloudEval-CLI",
|