@ganakailabs/cloudeval-cli 0.26.8 → 0.26.9

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.
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-QSBGUI25.js";
9
9
  import {
10
10
  Onboarding
11
- } from "./chunk-XHA4BH3P.js";
11
+ } from "./chunk-AO6RCQ3P.js";
12
12
  import {
13
13
  checkUserStatus,
14
14
  completeActiveAssistantMessage,
@@ -35,13 +35,13 @@ import {
35
35
  reduceChunk,
36
36
  runReports,
37
37
  streamChat
38
- } from "./chunk-3MIP274G.js";
38
+ } from "./chunk-2OLI5VOG.js";
39
39
  import {
40
40
  Banner
41
- } from "./chunk-PF2J2PFC.js";
41
+ } from "./chunk-6TCB66QU.js";
42
42
  import {
43
43
  CLI_VERSION
44
- } from "./chunk-YMGKGMUW.js";
44
+ } from "./chunk-NCMNBZG7.js";
45
45
  import {
46
46
  raisedButtonStyle,
47
47
  terminalTheme
@@ -5914,7 +5914,7 @@ var getUserIdentityFromToken = async (token) => {
5914
5914
  return { name: "You" };
5915
5915
  }
5916
5916
  try {
5917
- const { extractEmailFromToken } = await import("./dist-QLN52XKY.js");
5917
+ const { extractEmailFromToken } = await import("./dist-MQQKC6DZ.js");
5918
5918
  const email = extractEmailFromToken(token) ?? void 0;
5919
5919
  return {
5920
5920
  name: getFirstNameForDisplay({ email }),
@@ -7350,7 +7350,7 @@ var App = ({
7350
7350
  setIsLoggingIn(true);
7351
7351
  setLoaderStep(1);
7352
7352
  try {
7353
- const { login } = await import("./dist-QLN52XKY.js");
7353
+ const { login } = await import("./dist-MQQKC6DZ.js");
7354
7354
  const newToken = await login(baseUrl, {
7355
7355
  headless: Boolean(process.env.SSH_TTY || process.env.CI)
7356
7356
  });
@@ -3,8 +3,8 @@ import {
3
3
  bannerMetaColor,
4
4
  bannerSegmentColor,
5
5
  splitBannerLineSegments
6
- } from "./chunk-PF2J2PFC.js";
7
- import "./chunk-YMGKGMUW.js";
6
+ } from "./chunk-6TCB66QU.js";
7
+ import "./chunk-NCMNBZG7.js";
8
8
  import "./chunk-ZDKRIOMB.js";
9
9
  export {
10
10
  Banner,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Onboarding
3
- } from "./chunk-XHA4BH3P.js";
4
- import "./chunk-3MIP274G.js";
3
+ } from "./chunk-AO6RCQ3P.js";
4
+ import "./chunk-2OLI5VOG.js";
5
5
  import "./chunk-ZDKRIOMB.js";
6
6
  export {
7
7
  Onboarding
@@ -1803,6 +1803,13 @@ var objectArrayOrUndefined = (value) => {
1803
1803
  const records = value.filter(isObject2);
1804
1804
  return records.length ? records : void 0;
1805
1805
  };
1806
+ var assistantMessageContent = (value) => {
1807
+ const messages = objectArrayOrUndefined(value);
1808
+ const message = messages ? [...messages].reverse().find(
1809
+ (entry) => entry.role === "assistant" && typeof entry.content === "string"
1810
+ ) : void 0;
1811
+ return typeof message?.content === "string" ? message.content : void 0;
1812
+ };
1806
1813
  var isResponseOutputChunk = (chunk) => chunk.type === "responding" && (!chunk.node || RESPONSE_OUTPUT_NODES.has(chunk.node));
1807
1814
  var isResponseCompletionChunk = (chunk) => isResponseOutputChunk(chunk) && chunk.status === "completed";
1808
1815
  var isTerminalEndChunk = (chunk) => (chunk.type === "thinking" || chunk.type === "responding") && chunk.status === "completed" && chunk.node === "end";
@@ -1884,7 +1891,7 @@ var normalizeChunk = (raw, receivedAt) => {
1884
1891
  status: isValidChunkStatus(raw.status) ? raw.status : void 0,
1885
1892
  description: typeof raw.description === "string" ? raw.description : void 0,
1886
1893
  message: typeof raw.message === "string" ? raw.message : void 0,
1887
- content: typeof raw.content === "string" ? raw.content : void 0,
1894
+ content: typeof raw.content === "string" ? raw.content : assistantMessageContent(raw.messages) ?? assistantMessageContent(data?.messages),
1888
1895
  source: stringOrUndefined(raw.source),
1889
1896
  tools_used: objectArrayOrUndefined(raw.tools_used) ?? objectArrayOrUndefined(data?.tools_used),
1890
1897
  citation_markers: objectArrayOrUndefined(raw.citation_markers) ?? objectArrayOrUndefined(data?.citation_markers),
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CLI_VERSION
3
- } from "./chunk-YMGKGMUW.js";
3
+ } from "./chunk-NCMNBZG7.js";
4
4
  import {
5
5
  shouldUseColor,
6
6
  terminalTheme
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  completeOnboarding
3
- } from "./chunk-3MIP274G.js";
3
+ } from "./chunk-2OLI5VOG.js";
4
4
  import {
5
5
  terminalTheme
6
6
  } from "./chunk-ZDKRIOMB.js";
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var CLI_VERSION = "0.26.8";
2
+ var CLI_VERSION = "0.26.9";
3
3
 
4
4
  export {
5
5
  CLI_VERSION
package/dist/cli.js CHANGED
@@ -33,10 +33,10 @@ import {
33
33
  normalizeApiBase,
34
34
  redactSensitiveSecrets,
35
35
  redactSensitiveText
36
- } from "./chunk-3MIP274G.js";
36
+ } from "./chunk-2OLI5VOG.js";
37
37
  import {
38
38
  CLI_VERSION
39
- } from "./chunk-YMGKGMUW.js";
39
+ } from "./chunk-NCMNBZG7.js";
40
40
 
41
41
  // src/runtime/prepareInk.ts
42
42
  import fs from "fs";
@@ -1649,7 +1649,7 @@ var resolveReportProjectId = async ({
1649
1649
  if (!token) {
1650
1650
  throw new Error("No project specified. Use --project <id> for report access.");
1651
1651
  }
1652
- const resolvedWorkspace = workspace ?? await import("./dist-QLN52XKY.js").then((core) => ({
1652
+ const resolvedWorkspace = workspace ?? await import("./dist-MQQKC6DZ.js").then((core) => ({
1653
1653
  checkUserStatus: core.checkUserStatus,
1654
1654
  getProjects: core.getProjects
1655
1655
  }));
@@ -1678,7 +1678,7 @@ var warnIfAccessKeyFromCliOption = (options, command) => {
1678
1678
  };
1679
1679
  var resolveAuthContext = async (options, command, deps) => {
1680
1680
  const baseUrl = await deps.resolveBaseUrl(options, command);
1681
- const core = await import("./dist-QLN52XKY.js");
1681
+ const core = await import("./dist-MQQKC6DZ.js");
1682
1682
  core.assertSecureBaseUrl(baseUrl);
1683
1683
  warnIfAccessKeyFromCliOption(options, command);
1684
1684
  let accessKey = options.accessKey;
@@ -1764,7 +1764,7 @@ var resolveToken = async (options, baseUrl, deps, command) => {
1764
1764
  if (options.accessKey) {
1765
1765
  return options.accessKey;
1766
1766
  }
1767
- const { getAuthToken } = await import("./dist-QLN52XKY.js");
1767
+ const { getAuthToken } = await import("./dist-MQQKC6DZ.js");
1768
1768
  try {
1769
1769
  return await getAuthToken({
1770
1770
  accessKey: options.accessKey,
@@ -1775,7 +1775,7 @@ var resolveToken = async (options, baseUrl, deps, command) => {
1775
1775
  if (!canLogin) {
1776
1776
  throw error;
1777
1777
  }
1778
- const { login } = await import("./dist-QLN52XKY.js");
1778
+ const { login } = await import("./dist-MQQKC6DZ.js");
1779
1779
  process.stderr.write("Authentication required. Starting login flow...\n");
1780
1780
  const token = await login(baseUrl, {
1781
1781
  headless: Boolean(process.env.SSH_TTY || process.env.CLOUDEVAL_HEADLESS_LOGIN)
@@ -1941,7 +1941,7 @@ var registerReportsCommand = (program2, deps) => {
1941
1941
  token,
1942
1942
  requestedProjectId: options.project
1943
1943
  });
1944
- const core = await import("./dist-QLN52XKY.js");
1944
+ const core = await import("./dist-MQQKC6DZ.js");
1945
1945
  const status = token ? await core.checkUserStatus(baseUrl, token) : void 0;
1946
1946
  const reports2 = await core.listReports({
1947
1947
  baseUrl,
@@ -1963,7 +1963,7 @@ var registerReportsCommand = (program2, deps) => {
1963
1963
  try {
1964
1964
  const baseUrl = await deps.resolveBaseUrl(options, command);
1965
1965
  const token = await resolveToken(options, baseUrl, deps, command);
1966
- const core = await import("./dist-QLN52XKY.js");
1966
+ const core = await import("./dist-MQQKC6DZ.js");
1967
1967
  const status = token ? await core.checkUserStatus(baseUrl, token) : void 0;
1968
1968
  const projectId = await resolveReportProjectId({
1969
1969
  baseUrl,
@@ -2066,7 +2066,7 @@ var registerReportsCommand = (program2, deps) => {
2066
2066
  try {
2067
2067
  const baseUrl = await deps.resolveBaseUrl(options, command);
2068
2068
  const token = await resolveToken(options, baseUrl, deps, command);
2069
- const core = await import("./dist-QLN52XKY.js");
2069
+ const core = await import("./dist-MQQKC6DZ.js");
2070
2070
  const status = token ? await core.checkUserStatus(baseUrl, token) : void 0;
2071
2071
  const projectId = await resolveReportProjectId({
2072
2072
  baseUrl,
@@ -2136,7 +2136,7 @@ var registerReportsCommand = (program2, deps) => {
2136
2136
  token,
2137
2137
  requestedProjectId: options.project
2138
2138
  });
2139
- const core = await import("./dist-QLN52XKY.js");
2139
+ const core = await import("./dist-MQQKC6DZ.js");
2140
2140
  const status = token ? await core.checkUserStatus(baseUrl, token) : void 0;
2141
2141
  const report = await core.getWafReport({
2142
2142
  baseUrl,
@@ -2175,7 +2175,7 @@ var registerReportsCommand = (program2, deps) => {
2175
2175
  token,
2176
2176
  requestedProjectId: options.project
2177
2177
  });
2178
- const core = await import("./dist-QLN52XKY.js");
2178
+ const core = await import("./dist-MQQKC6DZ.js");
2179
2179
  const status = token ? await core.checkUserStatus(baseUrl, token) : void 0;
2180
2180
  const report = await core.getReport({
2181
2181
  baseUrl,
@@ -2203,7 +2203,7 @@ var registerReportsCommand = (program2, deps) => {
2203
2203
  token,
2204
2204
  requestedProjectId: options.project
2205
2205
  });
2206
- const core = await import("./dist-QLN52XKY.js");
2206
+ const core = await import("./dist-MQQKC6DZ.js");
2207
2207
  const status = token ? await core.checkUserStatus(baseUrl, token) : void 0;
2208
2208
  const report = await core.getCostReport({
2209
2209
  baseUrl,
@@ -2232,7 +2232,7 @@ var registerReportsCommand = (program2, deps) => {
2232
2232
  token,
2233
2233
  requestedProjectId: options.project
2234
2234
  });
2235
- const core = await import("./dist-QLN52XKY.js");
2235
+ const core = await import("./dist-MQQKC6DZ.js");
2236
2236
  const status = token ? await core.checkUserStatus(baseUrl, token) : void 0;
2237
2237
  const report = await core.getWafReport({
2238
2238
  baseUrl,
@@ -2539,6 +2539,15 @@ var formatValidation = (validation) => {
2539
2539
  const unitFailed = displayNumber(validation?.unitTests?.failed);
2540
2540
  return `Policy checks ${policyFailed} failed, unit tests ${unitFailed} failed`;
2541
2541
  };
2542
+ var compactValidation = (validation) => {
2543
+ const policyFailed = numberFrom(validation?.policyChecks?.failed);
2544
+ const unitFailed = numberFrom(validation?.unitTests?.failed);
2545
+ if (policyFailed === 0 && unitFailed === 0) {
2546
+ return "validation clean";
2547
+ }
2548
+ return formatValidation(validation);
2549
+ };
2550
+ var markdownLink = (label, url) => url ? `[${label}](${url})` : label;
2542
2551
  var extractPillars = (waf) => {
2543
2552
  const fromArray = waf?.parsed?.score?.pillars;
2544
2553
  if (Array.isArray(fromArray)) {
@@ -2921,9 +2930,10 @@ var generateAiSummary = async ({
2921
2930
  agentProfileId,
2922
2931
  data
2923
2932
  }) => {
2924
- const core = await import("./dist-QLN52XKY.js");
2933
+ const core = await import("./dist-MQQKC6DZ.js");
2925
2934
  const threadId = `review-${data.projectId}-${Date.now()}`;
2926
2935
  let markdown = "";
2936
+ let chatState = { ...core.initialChatState, threadId };
2927
2937
  for await (const chunk of core.streamChat({
2928
2938
  baseUrl,
2929
2939
  authToken: token,
@@ -2953,17 +2963,24 @@ var generateAiSummary = async ({
2953
2963
  responseCompletionGraceMs: 250,
2954
2964
  streamIdleTimeoutMs: 12e4
2955
2965
  })) {
2966
+ chatState = core.reduceChunk(chatState, chunk);
2967
+ const latestMessage = [...chatState.messages ?? []].reverse().find((message) => message.role === "assistant");
2968
+ const chunkAssistantMessage = Array.isArray(chunk?.messages) ? [...chunk.messages].reverse().find((message) => message?.role === "assistant" && typeof message?.content === "string")?.content : void 0;
2956
2969
  const content = chunk?.content;
2970
+ if (typeof chunkAssistantMessage === "string" && chunkAssistantMessage.trim()) {
2971
+ markdown = chunkAssistantMessage;
2972
+ }
2957
2973
  if (chunk.type === "responding" && typeof content === "string") {
2958
- markdown += content;
2974
+ markdown = latestMessage?.content || `${markdown}${content}`;
2959
2975
  }
2960
2976
  }
2977
+ const finalMessage = [...chatState.messages ?? []].reverse().find((message) => message.role === "assistant");
2961
2978
  return {
2962
2979
  enabled: true,
2963
2980
  mode,
2964
2981
  ...mode === "agent" ? { agentProfileId: agentProfileId ?? "architecture" } : {},
2965
2982
  ...model ? { model } : {},
2966
- markdown: markdown.trim(),
2983
+ markdown: String(finalMessage?.content || markdown).trim(),
2967
2984
  threadId
2968
2985
  };
2969
2986
  };
@@ -2972,47 +2989,60 @@ var buildMarkdownSummary = (data) => {
2972
2989
  const score = data.gate?.overallScore ?? "unknown";
2973
2990
  const cost = data.gate?.cost?.monthly;
2974
2991
  const validation = data.gate?.validation;
2992
+ const projectLabel = String(data.project?.name ?? data.projectName ?? data.projectId);
2993
+ const projectDisplay = markdownLink(projectLabel, data.project?.url ?? data.projectUrl);
2994
+ const source = data.repo ? `${data.repo}${data.ref ? ` @ ${data.ref}` : ""}` : data.ref ?? "unknown source";
2995
+ const commit = String(data.commitSha ?? "unknown").slice(0, 12);
2975
2996
  const pillarLines = Array.isArray(data.gate?.wellArchitected?.pillars) ? data.gate.wellArchitected.pillars.map(
2976
- (pillar) => ` - ${pillar.label}: ${pillar.score}${pillar.threshold !== void 0 ? ` (min ${pillar.threshold})` : ""} - ${String(pillar.status ?? "unknown").toUpperCase()}`
2997
+ (pillar) => `- ${pillar.label}: ${pillar.score} - ${String(pillar.status ?? "unknown").toUpperCase()}`
2977
2998
  ) : [];
2978
2999
  const lines = [
2979
- "### CloudEval review",
3000
+ `**${gateStatus}** for ${projectDisplay}: Well-Architected ${score}, cost ${formatMoney(cost?.amount, cost?.currency)}, ${compactValidation(validation)}.`,
2980
3001
  "",
2981
- `- **Project:** \`${data.projectId}\``,
2982
- `- **Repository:** \`${data.repo ?? "unknown"}\``,
2983
- `- **Ref:** \`${data.ref ?? "unknown"}\``,
2984
- `- **Commit:** \`${String(data.commitSha ?? "unknown").slice(0, 12)}\``,
2985
- `- **Gate:** ${gateStatus}`,
2986
- `- **Well-Architected score:** ${score}`,
2987
- `- **Cost:** ${formatMoney(cost?.amount, cost?.currency)}`,
2988
- `- **Validation:** ${formatValidation(validation)}`
3002
+ `Source: \`${source}\` \xB7 commit \`${commit}\``
2989
3003
  ];
3004
+ if (data.aiSummary?.markdown) {
3005
+ lines.push("", "#### AI summary", "", data.aiSummary.markdown);
3006
+ }
2990
3007
  if (Array.isArray(data.gate?.failures) && data.gate.failures.length) {
2991
3008
  lines.push("", "#### Gate failures", "", ...data.gate.failures.map((failure) => `- ${failure}`));
2992
3009
  }
2993
3010
  if (pillarLines.length) {
2994
- lines.push("", "#### Well-Architected drilldown", "", ...pillarLines);
3011
+ lines.push(
3012
+ "",
3013
+ "<details>",
3014
+ "<summary>Well-Architected details</summary>",
3015
+ "",
3016
+ `- Overall score: ${score}`,
3017
+ ...pillarLines,
3018
+ "",
3019
+ "</details>"
3020
+ );
2995
3021
  }
2996
3022
  if (cost?.amount !== void 0 || cost?.threshold !== void 0) {
2997
3023
  lines.push(
2998
3024
  "",
2999
- "#### Cost drilldown",
3025
+ "<details>",
3026
+ "<summary>Cost details</summary>",
3027
+ "",
3028
+ `- Monthly estimate: ${formatMoney(cost?.amount, cost?.currency)}`,
3029
+ data.gate?.cost?.estimatedSavings?.amount !== void 0 ? `- Estimated savings: ${formatMoney(data.gate.cost.estimatedSavings.amount, data.gate.cost.estimatedSavings.currency)}` : void 0,
3000
3030
  "",
3001
- `- Cost: ${formatMoney(cost?.amount, cost?.currency)}${cost?.threshold !== void 0 ? ` (max ${cost.threshold})` : ""}`
3031
+ "</details>"
3002
3032
  );
3003
3033
  }
3004
3034
  if (validation) {
3005
3035
  lines.push(
3006
3036
  "",
3007
- "#### Validation drilldown",
3037
+ "<details>",
3038
+ "<summary>Validation details</summary>",
3039
+ "",
3040
+ `- ${formatValidation(validation)}`,
3008
3041
  "",
3009
- `- Validation: ${formatValidation(validation)}`
3042
+ "</details>"
3010
3043
  );
3011
3044
  }
3012
- if (data.aiSummary?.markdown) {
3013
- lines.push("", "## AI summary", "", data.aiSummary.markdown);
3014
- }
3015
- return lines.join("\n");
3045
+ return lines.filter((line) => line !== void 0).join("\n");
3016
3046
  };
3017
3047
  var registerReviewCommand = (program2, deps) => {
3018
3048
  const command = addAuthOptions(
@@ -3093,6 +3123,17 @@ var registerReviewCommand = (program2, deps) => {
3093
3123
  ]);
3094
3124
  const data = {
3095
3125
  projectId,
3126
+ project: {
3127
+ id: projectId,
3128
+ name: String(project?.name ?? projectId),
3129
+ url: buildFrontendUrl({
3130
+ baseUrl: resolveFrontendBaseUrl({ apiBaseUrl: context.baseUrl }),
3131
+ target: "project",
3132
+ projectId,
3133
+ view: "preview",
3134
+ layout: "architecture"
3135
+ })
3136
+ },
3096
3137
  repo,
3097
3138
  ref,
3098
3139
  commitSha,
@@ -4477,7 +4518,7 @@ var runChatRecipe = async (recipe, prompt2, options, command, deps) => {
4477
4518
  });
4478
4519
  progressWriter.write({ type: "auth", step: "auth", message: "Resolving authentication" });
4479
4520
  const context = await resolveAuthContext(options, command, deps);
4480
- const core = await import("./dist-QLN52XKY.js");
4521
+ const core = await import("./dist-MQQKC6DZ.js");
4481
4522
  progressWriter.write({
4482
4523
  type: "request",
4483
4524
  step: "project",
@@ -5946,7 +5987,7 @@ var configureDiagramExportCommand = (command, deps) => addAuthOptions(command, d
5946
5987
  const context = requireAuthUser(
5947
5988
  await resolveAuthContext(options, actionCommand, deps)
5948
5989
  );
5949
- const core = await import("./dist-QLN52XKY.js");
5990
+ const core = await import("./dist-MQQKC6DZ.js");
5950
5991
  const projects = await core.getProjects(
5951
5992
  context.baseUrl,
5952
5993
  context.token,
@@ -6023,7 +6064,7 @@ var registerProjectsCommand = (program2, deps) => {
6023
6064
  addCommon(addAuthOptions(projects.command("list").description("List projects"), deps.defaultBaseUrl)).action(async (options, command) => {
6024
6065
  try {
6025
6066
  const context = await resolveAuthContext(options, command, deps);
6026
- const core = await import("./dist-QLN52XKY.js");
6067
+ const core = await import("./dist-MQQKC6DZ.js");
6027
6068
  const data = await listProjectsForContext(core, context);
6028
6069
  const url = buildFrontendUrl({ baseUrl: frontendBase(context, options), target: "projects" });
6029
6070
  await writeProjectListOutput({ data, options, frontendUrl: url });
@@ -6041,7 +6082,7 @@ var registerProjectsCommand = (program2, deps) => {
6041
6082
  ).action(async (id, options, command) => {
6042
6083
  try {
6043
6084
  const context = await resolveAuthContext(options, command, deps);
6044
- const core = await import("./dist-QLN52XKY.js");
6085
+ const core = await import("./dist-MQQKC6DZ.js");
6045
6086
  const list = await listProjectsForContext(core, context);
6046
6087
  const data = list.find((project) => project.id === id);
6047
6088
  if (!data) {
@@ -6106,7 +6147,7 @@ var registerProjectsCommand = (program2, deps) => {
6106
6147
  try {
6107
6148
  assertSingleProjectSource(options);
6108
6149
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6109
- const core = await import("./dist-QLN52XKY.js");
6150
+ const core = await import("./dist-MQQKC6DZ.js");
6110
6151
  const template = await fileBlob(options.templateFile);
6111
6152
  const parameters = await fileBlob(options.parametersFile);
6112
6153
  const workspace = options.workspaceDir ? await collectWorkspaceFiles(options.workspaceDir, options) : void 0;
@@ -6235,7 +6276,7 @@ var registerConnectionsCommand = (program2, deps) => {
6235
6276
  addCommon2(addAuthOptions(connections.command("list").description("List connections"), deps.defaultBaseUrl)).action(async (options, command) => {
6236
6277
  try {
6237
6278
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6238
- const core = await import("./dist-QLN52XKY.js");
6279
+ const core = await import("./dist-MQQKC6DZ.js");
6239
6280
  const data = await core.listConnections({
6240
6281
  baseUrl: context.baseUrl,
6241
6282
  authToken: context.token,
@@ -6260,7 +6301,7 @@ var registerConnectionsCommand = (program2, deps) => {
6260
6301
  ).action(async (id, options, command) => {
6261
6302
  try {
6262
6303
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6263
- const core = await import("./dist-QLN52XKY.js");
6304
+ const core = await import("./dist-MQQKC6DZ.js");
6264
6305
  const data = await core.getConnection({
6265
6306
  baseUrl: context.baseUrl,
6266
6307
  authToken: context.token,
@@ -6598,7 +6639,7 @@ var checkoutReturnUrl = (context, options) => options.returnTo || billingUrl(con
6598
6639
  var runTopUpCheckout = async (commandName, packId, options, command, deps) => {
6599
6640
  try {
6600
6641
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6601
- const core = await import("./dist-QLN52XKY.js");
6642
+ const core = await import("./dist-MQQKC6DZ.js");
6602
6643
  const returnTo = checkoutReturnUrl(context, options);
6603
6644
  const session = await core.createTopUpCheckoutSession({
6604
6645
  baseUrl: context.baseUrl,
@@ -6638,7 +6679,7 @@ var registerBillingCommands = (program2, deps) => {
6638
6679
  ).action(async (options, command) => {
6639
6680
  try {
6640
6681
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6641
- const core = await import("./dist-QLN52XKY.js");
6682
+ const core = await import("./dist-MQQKC6DZ.js");
6642
6683
  const range = rangeToDates("30d");
6643
6684
  const [entitlement, usageSummary] = await Promise.all([
6644
6685
  core.getBillingEntitlement({
@@ -6668,7 +6709,7 @@ var registerBillingCommands = (program2, deps) => {
6668
6709
  addCommon3(addAuthOptions(billing.command("summary").description("Show billing summary"), deps.defaultBaseUrl)).action(async (options, command) => {
6669
6710
  try {
6670
6711
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6671
- const core = await import("./dist-QLN52XKY.js");
6712
+ const core = await import("./dist-MQQKC6DZ.js");
6672
6713
  const range = rangeToDates("30d");
6673
6714
  const [entitlement, subscriptionStatus, usageSummary] = await Promise.all([
6674
6715
  core.getBillingEntitlement({ baseUrl: context.baseUrl, authToken: context.token }),
@@ -6704,7 +6745,7 @@ var registerBillingCommands = (program2, deps) => {
6704
6745
  addCommon3(addAuthOptions(billing.command("plans").description("Show billing plans"), deps.defaultBaseUrl)).action(async (options, command) => {
6705
6746
  try {
6706
6747
  const context = await resolveAuthContext(options, command, deps);
6707
- const core = await import("./dist-QLN52XKY.js");
6748
+ const core = await import("./dist-MQQKC6DZ.js");
6708
6749
  const data = await core.getBillingConfig({ baseUrl: context.baseUrl, authToken: context.token });
6709
6750
  const url = billingUrl(context, { ...options, tab: "plans" });
6710
6751
  await write("billing plans", data, options, url);
@@ -6716,7 +6757,7 @@ var registerBillingCommands = (program2, deps) => {
6716
6757
  addCommon3(addAuthOptions(billing.command("usage").description("Show billing usage summary"), deps.defaultBaseUrl)).option("--range <range>", "Usage range: 7d, 30d, 90d, all", "30d").option("--start-at <iso>", "Start timestamp").option("--end-at <iso>", "End timestamp").option("--granularity <value>", "Granularity: hour, day, month", "day").option("--action-type <type>", "Action type filter").option("--model <name>", "Model filter").option("--outcome <outcome>", "Outcome filter").option("--charge-status <status>", "Charge status filter").action(async (options, command) => {
6717
6758
  try {
6718
6759
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6719
- const core = await import("./dist-QLN52XKY.js");
6760
+ const core = await import("./dist-MQQKC6DZ.js");
6720
6761
  const range = rangeToDates(options.range);
6721
6762
  const data = await core.getBillingUsageSummary({
6722
6763
  baseUrl: context.baseUrl,
@@ -6739,7 +6780,7 @@ var registerBillingCommands = (program2, deps) => {
6739
6780
  addCommon3(addAuthOptions(billing.command("ledger").description("Show billing ledger"), deps.defaultBaseUrl)).option("--range <range>", "Usage range: 7d, 30d, 90d, all", "30d").option("--start-at <iso>", "Start timestamp").option("--end-at <iso>", "End timestamp").option("--action-type <type>", "Action type filter").option("--model <name>", "Model filter").option("--outcome <outcome>", "Outcome filter").option("--charge-status <status>", "Charge status filter").option("--limit <n>", "Page size", "25").option("--cursor <cursor>", "Pagination cursor").action(async (options, command) => {
6740
6781
  try {
6741
6782
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6742
- const core = await import("./dist-QLN52XKY.js");
6783
+ const core = await import("./dist-MQQKC6DZ.js");
6743
6784
  const range = rangeToDates(options.range);
6744
6785
  const data = await core.getBillingUsageLedger({
6745
6786
  baseUrl: context.baseUrl,
@@ -6767,7 +6808,7 @@ var registerBillingCommands = (program2, deps) => {
6767
6808
  addCommon3(addAuthOptions(billing.command(name).description(`Show billing ${name}`), deps.defaultBaseUrl)).option("--limit <n>", "Result limit", "25").action(async (options, command) => {
6768
6809
  try {
6769
6810
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6770
- const core = await import("./dist-QLN52XKY.js");
6811
+ const core = await import("./dist-MQQKC6DZ.js");
6771
6812
  const data = await core[getter]({
6772
6813
  baseUrl: context.baseUrl,
6773
6814
  authToken: context.token,
@@ -6785,7 +6826,7 @@ var registerBillingCommands = (program2, deps) => {
6785
6826
  addCommon3(addAuthOptions(topups, deps.defaultBaseUrl)).option("--limit <n>", "Result limit", "25").action(async (options, command) => {
6786
6827
  try {
6787
6828
  const context = requireAuthUser(await resolveAuthContext(options, command, deps));
6788
- const core = await import("./dist-QLN52XKY.js");
6829
+ const core = await import("./dist-MQQKC6DZ.js");
6789
6830
  const data = await core.getTopUpPacks({
6790
6831
  baseUrl: context.baseUrl,
6791
6832
  authToken: context.token
@@ -9456,7 +9497,7 @@ var reportsFrontendUrl = (config, input) => buildFrontendUrl({
9456
9497
  reportVerbosity: input.reportVerbosity
9457
9498
  });
9458
9499
  var resolveAuth = async (config, options = {}) => {
9459
- const core = await import("./dist-QLN52XKY.js");
9500
+ const core = await import("./dist-MQQKC6DZ.js");
9460
9501
  core.assertSecureBaseUrl(config.baseUrl);
9461
9502
  let token;
9462
9503
  try {
@@ -9552,7 +9593,7 @@ var assertModelAvailable = async (config, token) => {
9552
9593
  if (!config.model) {
9553
9594
  return;
9554
9595
  }
9555
- const core = await import("./dist-QLN52XKY.js");
9596
+ const core = await import("./dist-MQQKC6DZ.js");
9556
9597
  try {
9557
9598
  const response = await fetch(
9558
9599
  `${core.normalizeApiBase(config.baseUrl)}/models`,
@@ -9809,7 +9850,7 @@ var buildToolHandlers = (serverOptions) => {
9809
9850
  });
9810
9851
  handlers.set("agent_profiles_list", async (args) => {
9811
9852
  const config = await resolveInvocationConfig(serverOptions, args);
9812
- const core = await import("./dist-QLN52XKY.js");
9853
+ const core = await import("./dist-MQQKC6DZ.js");
9813
9854
  const data = await listProfilesForDiscovery(core, config.baseUrl);
9814
9855
  return withEnvelope({
9815
9856
  command: "agents list",
@@ -9822,7 +9863,7 @@ var buildToolHandlers = (serverOptions) => {
9822
9863
  throw new Error("profileId is required.");
9823
9864
  }
9824
9865
  const config = await resolveInvocationConfig(serverOptions, args);
9825
- const core = await import("./dist-QLN52XKY.js");
9866
+ const core = await import("./dist-MQQKC6DZ.js");
9826
9867
  const data = await getProfileForDiscovery(core, config.baseUrl, profileId);
9827
9868
  return withEnvelope({
9828
9869
  command: "agents show",
@@ -10459,7 +10500,7 @@ var buildToolHandlers = (serverOptions) => {
10459
10500
  });
10460
10501
  handlers.set("auth_status", async (args) => {
10461
10502
  const config = await resolveInvocationConfig(serverOptions, args);
10462
- const core = await import("./dist-QLN52XKY.js");
10503
+ const core = await import("./dist-MQQKC6DZ.js");
10463
10504
  const data = await core.getAuthStatus(config.baseUrl, { validate: true });
10464
10505
  return withEnvelope({
10465
10506
  command: "auth status",
@@ -10468,7 +10509,7 @@ var buildToolHandlers = (serverOptions) => {
10468
10509
  });
10469
10510
  handlers.set("status", async (args) => {
10470
10511
  const config = await resolveInvocationConfig(serverOptions, args);
10471
- const core = await import("./dist-QLN52XKY.js");
10512
+ const core = await import("./dist-MQQKC6DZ.js");
10472
10513
  const auth = await core.getAuthStatus(config.baseUrl, { validate: true });
10473
10514
  return withEnvelope({
10474
10515
  command: "status",
@@ -10499,7 +10540,7 @@ var buildToolHandlers = (serverOptions) => {
10499
10540
  }
10500
10541
  ];
10501
10542
  try {
10502
- const core = await import("./dist-QLN52XKY.js");
10543
+ const core = await import("./dist-MQQKC6DZ.js");
10503
10544
  core.assertSecureBaseUrl(config.baseUrl);
10504
10545
  checks.push({
10505
10546
  id: "base-url-secure",
@@ -11019,7 +11060,7 @@ var buildToolHandlers = (serverOptions) => {
11019
11060
  } catch {
11020
11061
  token = config.accessKey;
11021
11062
  }
11022
- const core = await import("./dist-QLN52XKY.js");
11063
+ const core = await import("./dist-MQQKC6DZ.js");
11023
11064
  const data = await core.getBillingConfig({
11024
11065
  baseUrl: config.baseUrl,
11025
11066
  authToken: token
@@ -11873,7 +11914,7 @@ var registerCapabilitiesCommand = (program2, deps) => {
11873
11914
  warnIfAccessKeyFromCliOption(options, command);
11874
11915
  let data = capabilities;
11875
11916
  if (options.live) {
11876
- const core = await import("./dist-QLN52XKY.js");
11917
+ const core = await import("./dist-MQQKC6DZ.js");
11877
11918
  const baseUrl = await deps.resolveBaseUrl(options, command);
11878
11919
  const accessKey = options.accessKeyStdin ? await deps.readStdinValue() : options.accessKey;
11879
11920
  const token = await core.getAuthToken({ accessKey, baseUrl });
@@ -12011,7 +12052,7 @@ var writeCredentialOutput = async (input) => {
12011
12052
  };
12012
12053
  var resolveCoreAuth = async (options, command, deps) => {
12013
12054
  const context = await resolveAuthContext(options, command, deps);
12014
- const core = await import("./dist-QLN52XKY.js");
12055
+ const core = await import("./dist-MQQKC6DZ.js");
12015
12056
  return { ...context, core };
12016
12057
  };
12017
12058
  var parseCapabilities = (value) => value?.split(",").map((item) => item.trim()).filter(Boolean);
@@ -12328,7 +12369,7 @@ var registerAgentsCommand = (program2, deps) => {
12328
12369
  const agents = program2.command("agents").description("CloudEval Agent Profile utilities");
12329
12370
  addAgentOutputOptions(agents.command("list").description("List Agent Profiles"), deps).action(async (options, command) => {
12330
12371
  const baseUrl = await deps.resolveBaseUrl(options, command);
12331
- const core = await import("./dist-QLN52XKY.js");
12372
+ const core = await import("./dist-MQQKC6DZ.js");
12332
12373
  core.assertSecureBaseUrl(baseUrl);
12333
12374
  const data = await listProfilesForDiscovery2(core, baseUrl);
12334
12375
  await writeProfiles({
@@ -12344,7 +12385,7 @@ var registerAgentsCommand = (program2, deps) => {
12344
12385
  deps
12345
12386
  ).action(async (profileId, options, command) => {
12346
12387
  const baseUrl = await deps.resolveBaseUrl(options, command);
12347
- const core = await import("./dist-QLN52XKY.js");
12388
+ const core = await import("./dist-MQQKC6DZ.js");
12348
12389
  core.assertSecureBaseUrl(baseUrl);
12349
12390
  const data = await getProfileForDiscovery2(core, baseUrl, profileId);
12350
12391
  await writeProfiles({
@@ -12363,7 +12404,7 @@ var registerAgentsCommand = (program2, deps) => {
12363
12404
  const cliProfile = getActiveConfigProfile(command);
12364
12405
  const cliConfig = await loadCliConfig(cliProfile);
12365
12406
  const auth = await resolveAuthContext(options, command, deps);
12366
- const core = await import("./dist-QLN52XKY.js");
12407
+ const core = await import("./dist-MQQKC6DZ.js");
12367
12408
  const profileResponse = await core.getAgentProfile({
12368
12409
  baseUrl: auth.baseUrl,
12369
12410
  authToken: auth.token,
@@ -12861,7 +12902,7 @@ var registerDiagnosticsCommands = (program2, deps) => {
12861
12902
  const baseUrl = await deps.resolveBaseUrl(options, command);
12862
12903
  const profile = getActiveConfigProfile(command);
12863
12904
  const config = await loadCliConfig(profile);
12864
- const core = await import("./dist-QLN52XKY.js");
12905
+ const core = await import("./dist-MQQKC6DZ.js");
12865
12906
  const auth = await core.getAuthStatus(baseUrl, { validate: true });
12866
12907
  if (options.format === "text" || !options.format) {
12867
12908
  process.stdout.write(
@@ -12911,7 +12952,7 @@ var registerDiagnosticsCommands = (program2, deps) => {
12911
12952
  detail: getCliConfigPath(profile)
12912
12953
  });
12913
12954
  try {
12914
- const core = await import("./dist-QLN52XKY.js");
12955
+ const core = await import("./dist-MQQKC6DZ.js");
12915
12956
  core.assertSecureBaseUrl(baseUrl);
12916
12957
  checks.push({
12917
12958
  id: "base-url-secure",
@@ -13011,7 +13052,7 @@ var resolveToken2 = async (options, deps, baseUrl, command) => {
13011
13052
  return options.accessKey;
13012
13053
  }
13013
13054
  try {
13014
- const core = await import("./dist-QLN52XKY.js");
13055
+ const core = await import("./dist-MQQKC6DZ.js");
13015
13056
  return await core.getAuthToken({
13016
13057
  baseUrl
13017
13058
  });
@@ -13095,7 +13136,7 @@ var registerModelsCommand = (program2, deps) => {
13095
13136
  let source = "fallback";
13096
13137
  let modelList = fallbackModels;
13097
13138
  try {
13098
- const core = await import("./dist-QLN52XKY.js");
13139
+ const core = await import("./dist-MQQKC6DZ.js");
13099
13140
  const response = await fetch(`${core.normalizeApiBase(baseUrl)}/models`, {
13100
13141
  headers: {
13101
13142
  Accept: "application/json",
@@ -14274,7 +14315,7 @@ var uninstallCompletionScript = async (shell) => {
14274
14315
  var runInteractiveLoginOnboarding = async (baseUrl, token) => {
14275
14316
  const [{ render }, { Onboarding }] = await Promise.all([
14276
14317
  import("ink"),
14277
- import("./Onboarding-SAYMQ36N.js")
14318
+ import("./Onboarding-CORIICF5.js")
14278
14319
  ]);
14279
14320
  await new Promise((resolve) => {
14280
14321
  let app;
@@ -14596,7 +14637,7 @@ var resolveBaseUrl = async (options, command) => {
14596
14637
  });
14597
14638
  }
14598
14639
  try {
14599
- const { getAuthStatus } = await import("./dist-QLN52XKY.js");
14640
+ const { getAuthStatus } = await import("./dist-MQQKC6DZ.js");
14600
14641
  const status = await getAuthStatus();
14601
14642
  const storedBaseUrl = status.baseUrl;
14602
14643
  if (storedBaseUrl && shouldUseStoredBaseUrl(storedBaseUrl)) {
@@ -14670,7 +14711,7 @@ program.command("login").description("Authenticate with Cloudeval").option(
14670
14711
  checkUserStatus,
14671
14712
  ensurePlaygroundProject,
14672
14713
  login
14673
- } = await import("./dist-QLN52XKY.js");
14714
+ } = await import("./dist-MQQKC6DZ.js");
14674
14715
  assertSecureBaseUrl(options.baseUrl);
14675
14716
  const headlessEnvironment = isHeadlessEnvironment();
14676
14717
  const headlessLogin = options.headless || headlessEnvironment;
@@ -14745,7 +14786,7 @@ program.command("logout").description("Log out and clear stored authentication s
14745
14786
  DEFAULT_BASE_URL
14746
14787
  ).option("--all-devices", "Revoke sessions on all devices", false).action(async (options) => {
14747
14788
  try {
14748
- const { assertSecureBaseUrl, logout } = await import("./dist-QLN52XKY.js");
14789
+ const { assertSecureBaseUrl, logout } = await import("./dist-MQQKC6DZ.js");
14749
14790
  assertSecureBaseUrl(options.baseUrl);
14750
14791
  const result = await logout({
14751
14792
  baseUrl: options.baseUrl,
@@ -14779,7 +14820,7 @@ authCommand.command("status").description("Show current authentication status").
14779
14820
  DEFAULT_BASE_URL
14780
14821
  ).option("--format <format>", "Output format: text, json, ndjson, markdown", "text").option("--show-sensitive-ids", "Show full account/session identifiers in command output", false).option("-v, --verbose", "Enable verbose logging and show full non-token identifiers", false).action(async (options, command) => {
14781
14822
  try {
14782
- const { assertSecureBaseUrl, getAuthStatus } = await import("./dist-QLN52XKY.js");
14823
+ const { assertSecureBaseUrl, getAuthStatus } = await import("./dist-MQQKC6DZ.js");
14783
14824
  const effectiveBaseUrl = await resolveBaseUrl(options, command);
14784
14825
  assertSecureBaseUrl(effectiveBaseUrl);
14785
14826
  const status = await getAuthStatus(effectiveBaseUrl, { validate: true });
@@ -14996,10 +15037,10 @@ program.command("tui").description("Open the CloudEval Terminal UI").option(
14996
15037
  "Access key for automation",
14997
15038
  process.env.CLOUDEVAL_ACCESS_KEY
14998
15039
  ).option("--access-key-stdin", "Read access key from stdin (recommended for automation)", false).option("--model <name>", "Model name").option("--debug", "Log raw chunks", false).option("--health-check", "Enable health check (disabled by default)").option("--no-banner", "Disable ASCII banner").option("--animate", "Enable TUI animations (default)").option("--no-anim", "Disable TUI animations").option("-v, --verbose", "Enable verbose logging", false).action(async (options, command) => {
14999
- const { assertSecureBaseUrl } = await import("./dist-QLN52XKY.js");
15040
+ const { assertSecureBaseUrl } = await import("./dist-MQQKC6DZ.js");
15000
15041
  const [{ render }, { App }] = await Promise.all([
15001
15042
  import("ink"),
15002
- import("./App-S7AENSQ6.js")
15043
+ import("./App-4NDMTVMJ.js")
15003
15044
  ]);
15004
15045
  const baseUrl = await resolveBaseUrl(options, command);
15005
15046
  assertSecureBaseUrl(baseUrl);
@@ -15054,10 +15095,10 @@ program.command("chat").description("Start an interactive chat session").option(
15054
15095
  "Access key for automation",
15055
15096
  process.env.CLOUDEVAL_ACCESS_KEY
15056
15097
  ).option("--access-key-stdin", "Read access key from stdin (recommended for automation)", false).option("--conversation <id>", "Conversation/thread id to resume").option("--continue", "Resume the most recent local chat session", false).option("--resume <id-or-title>", "Resume a local chat session by thread id or title").option("--model <name>", "Model name").option("--mode <mode>", "Initial chat mode: ask, agent").option("--debug", "Log raw chunks", false).option("--health-check", "Enable health check (disabled by default)").option("--no-banner", "Disable ASCII banner").option("--animate", "Enable TUI animations (default)").option("--no-anim", "Disable TUI animations").option("-v, --verbose", "Enable verbose logging", false).action(async (options, command) => {
15057
- const { assertSecureBaseUrl } = await import("./dist-QLN52XKY.js");
15098
+ const { assertSecureBaseUrl } = await import("./dist-MQQKC6DZ.js");
15058
15099
  const [{ render }, { App }] = await Promise.all([
15059
15100
  import("ink"),
15060
- import("./App-S7AENSQ6.js")
15101
+ import("./App-4NDMTVMJ.js")
15061
15102
  ]);
15062
15103
  const baseUrl = await resolveBaseUrl(options, command);
15063
15104
  assertSecureBaseUrl(baseUrl);
@@ -15132,7 +15173,7 @@ program.command("ask").alias("agent").description("Ask a single question or run
15132
15173
  const question = Array.isArray(questionParts) ? questionParts.join(" ") : String(questionParts);
15133
15174
  const commandName = command.parent?.args?.[0] === "agent" ? "agent" : "ask";
15134
15175
  const selectedMode = commandName === "agent" ? "agent" : "ask";
15135
- const { assertSecureBaseUrl } = await import("./dist-QLN52XKY.js");
15176
+ const { assertSecureBaseUrl } = await import("./dist-MQQKC6DZ.js");
15136
15177
  const baseUrl = await resolveBaseUrl(options, command);
15137
15178
  assertSecureBaseUrl(baseUrl);
15138
15179
  const selectedProfile = getActiveConfigProfile(command);
@@ -15173,7 +15214,7 @@ program.command("ask").alias("agent").description("Ask a single question or run
15173
15214
  const fs14 = await import("fs");
15174
15215
  const fsPromises = await import("fs/promises");
15175
15216
  const { randomUUID: randomUUID5 } = await import("crypto");
15176
- const core = await import("./dist-QLN52XKY.js");
15217
+ const core = await import("./dist-MQQKC6DZ.js");
15177
15218
  const {
15178
15219
  streamChat,
15179
15220
  reduceChunk,
@@ -15229,7 +15270,7 @@ program.command("ask").alias("agent").description("Ask a single question or run
15229
15270
  console.error("Authentication required. Starting login process...\n");
15230
15271
  }
15231
15272
  try {
15232
- const { login } = await import("./dist-QLN52XKY.js");
15273
+ const { login } = await import("./dist-MQQKC6DZ.js");
15233
15274
  verboseLog("Calling interactive login", { baseUrl });
15234
15275
  token = await login(baseUrl, {
15235
15276
  headless: isHeadlessEnvironment()
@@ -15293,7 +15334,7 @@ program.command("ask").alias("agent").description("Ask a single question or run
15293
15334
  message: error.message
15294
15335
  });
15295
15336
  }
15296
- const { resolveAskProject } = await import("./resolveAskProject-WOMNHUYT.js");
15337
+ const { resolveAskProject } = await import("./resolveAskProject-KQKI5GRT.js");
15297
15338
  let project;
15298
15339
  try {
15299
15340
  project = await resolveAskProject({
@@ -15811,7 +15852,7 @@ Error: ${errorMsg}
15811
15852
  program.command("banner").description("Preview the startup banner and terminal capabilities").action(async () => {
15812
15853
  const { render } = await import("ink");
15813
15854
  const BannerPreview = React.lazy(async () => ({
15814
- default: (await import("./Banner-SDED2C3N.js")).Banner
15855
+ default: (await import("./Banner-LP37NIKI.js")).Banner
15815
15856
  }));
15816
15857
  render(
15817
15858
  /* @__PURE__ */ jsx(React.Suspense, { fallback: null, children: /* @__PURE__ */ jsx(BannerPreview, { disable: false }) })
@@ -72,7 +72,7 @@ import {
72
72
  revokeCredential,
73
73
  runReports,
74
74
  streamChat
75
- } from "./chunk-3MIP274G.js";
75
+ } from "./chunk-2OLI5VOG.js";
76
76
  export {
77
77
  AgentProfileRequestError,
78
78
  BUNDLED_AGENT_PROFILES,
@@ -1,6 +1,6 @@
1
1
  // src/resolveAskProject.ts
2
2
  var resolveAskProject = async (input) => {
3
- const core = await import("./dist-QLN52XKY.js");
3
+ const core = await import("./dist-MQQKC6DZ.js");
4
4
  const { getProjects, ensurePlaygroundProject, checkUserStatus } = core;
5
5
  let userId = input.authenticatedUserId;
6
6
  let user = input.authenticatedUser;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ganakailabs/cloudeval-cli",
3
- "version": "0.26.8",
3
+ "version": "0.26.9",
4
4
  "license": "LicenseRef-CloudEval-CLI",
5
5
  "type": "module",
6
6
  "description": "CloudEval CLI for cloud architecture, cost, report, automation, and MCP workflows.",
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.26.8",
17
+ "versionInfo": "0.26.9",
18
18
  "downloadLocation": "https://github.com/ganakailabs/cloudeval-cli",
19
19
  "filesAnalyzed": false,
20
20
  "licenseConcluded": "LicenseRef-CloudEval-CLI",