@ganakailabs/cloudeval-cli 0.21.1 → 0.21.2

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.
@@ -38,10 +38,10 @@ import {
38
38
  } from "./chunk-LDDHLUZH.js";
39
39
  import {
40
40
  Banner
41
- } from "./chunk-6AHSCVTF.js";
41
+ } from "./chunk-CJWMEKKP.js";
42
42
  import {
43
43
  CLI_VERSION
44
- } from "./chunk-74TONCUI.js";
44
+ } from "./chunk-32EP3DJT.js";
45
45
  import {
46
46
  raisedButtonStyle,
47
47
  terminalTheme
@@ -325,11 +325,13 @@ var TitledBox = ({
325
325
  ...boxProps
326
326
  }) => {
327
327
  const labelColor = titleColor ?? (typeof borderColor === "string" ? borderColor : void 0);
328
+ const clipContent = boxProps.height !== void 0;
328
329
  return /* @__PURE__ */ jsxs2(
329
330
  Box2,
330
331
  {
331
332
  ...boxProps,
332
333
  flexDirection: "column",
334
+ overflow: clipContent ? "hidden" : void 0,
333
335
  borderStyle,
334
336
  borderColor,
335
337
  padding,
@@ -355,6 +357,8 @@ var TitledBox = ({
355
357
  alignItems,
356
358
  justifyContent,
357
359
  flexWrap,
360
+ overflow: clipContent ? "hidden" : void 0,
361
+ height: clipContent ? "100%" : void 0,
358
362
  children
359
363
  }
360
364
  )
@@ -2088,6 +2092,8 @@ var getMiddleViewportRows = (size, options = {}) => {
2088
2092
  return Math.max(1, Math.floor(rows) - headerRows - footerRows - safetyRows);
2089
2093
  };
2090
2094
  var getFramedBodyRows = (frameRows, chromeRows = 4) => Math.max(1, Math.floor(frameRows) - Math.max(0, Math.ceil(chromeRows)));
2095
+ var estimateWorkspaceTabBarRows = () => 2;
2096
+ var estimateSelectPanelRows = (visibleLimit) => 4 + Math.max(1, Math.ceil(visibleLimit));
2091
2097
  var getPromptInputRowBudget = (size) => {
2092
2098
  const rows = normalizeDimension(size.rows, 32);
2093
2099
  return clamp2(Math.floor(rows * 0.13), 4, 8);
@@ -8166,7 +8172,7 @@ var App = ({
8166
8172
  const lastRow = Math.max(...workspaceTabHitAreas.map((area) => area.endRow));
8167
8173
  return Math.max(0, lastRow - firstRow + 1);
8168
8174
  }, [workspaceTabHitAreas]);
8169
- const workspaceTabBarRows = (bannerDisabled ? 3 : 0) + workspaceTabButtonRows + 1 + (bannerDisabled ? 1 : 0);
8175
+ const workspaceTabBarRows = (bannerDisabled ? 4 : 0) + Math.max(estimateWorkspaceTabBarRows(), workspaceTabButtonRows);
8170
8176
  const promptPanelRows = estimatePromptPanelRows({
8171
8177
  inputRows: promptInputRows,
8172
8178
  suggestionRows: promptSuggestionRows,
@@ -8194,15 +8200,23 @@ var App = ({
8194
8200
  24,
8195
8201
  workspaceContentWidth - (workspacePanelOverflowing ? 7 : 5)
8196
8202
  );
8197
- const chatHeaderRows = bannerRenderedRows + workspaceTabBarRows + 2;
8198
- const chatFooterRows = bottomControlsRows + (isSearching ? searchPromptPanelRows : activeSelector ? 0 : promptPanelRows);
8203
+ const chatTabDescriptionRows = 1;
8204
+ const chatMiddleMarginRows = 1;
8205
+ const chatHeaderRows = bannerRenderedRows + workspaceTabBarRows + chatTabDescriptionRows + chatMiddleMarginRows;
8206
+ const chatSelectorRows = activeSelector ? estimateSelectPanelRows(tuiLayout.selectorLimit) : 0;
8207
+ const chatFooterRows = bottomControlsRows + chatSelectorRows + (isSearching ? searchPromptPanelRows : activeSelector ? 0 : promptPanelRows);
8199
8208
  const chatMiddleViewportRows = getMiddleViewportRows(terminalSize, {
8200
8209
  headerRows: chatHeaderRows,
8201
- footerRows: chatFooterRows
8210
+ footerRows: chatFooterRows,
8211
+ safetyRows: 3
8202
8212
  });
8203
- const chatMiddleAuxiliaryRows = (isSearching ? 3 : 0) + (queuedMessages.length > 0 ? 4 : 0) + (notice ? 1 : 0) + (errorText ? 5 : 0) + (chatState.status === "hitl_waiting" && chatState.hitl?.waiting ? 7 : 0) + (activeSelector ? tuiLayout.selectorLimit + 4 : 0);
8213
+ const chatMiddleAuxiliaryRows = (isSearching ? 3 : 0) + (queuedMessages.length > 0 ? 4 : 0) + (notice ? 1 : 0) + (errorText ? 5 : 0) + (chatState.status === "hitl_waiting" && chatState.hitl?.waiting ? 7 : 0);
8204
8214
  const contextRailArtifactRows = splitChatLayout && chatArtifactChips.length ? chatArtifactChips.length + 2 : 0;
8205
- const chatMainPanelRows = Math.max(4, chatMiddleViewportRows - chatMiddleAuxiliaryRows);
8215
+ const chatMainPanelRows = Math.max(
8216
+ 4,
8217
+ chatMiddleViewportRows - chatMiddleAuxiliaryRows
8218
+ );
8219
+ const showChatThreadPanel = !activeSelector;
8206
8220
  const chatThreadHeight = getFramedBodyRows(chatMainPanelRows);
8207
8221
  const chatMiddleOverflowing = chatMiddleContentHeight > chatMiddleViewportHeight;
8208
8222
  const selectorControlStartRow = useMemo(
@@ -9087,16 +9101,16 @@ var App = ({
9087
9101
  ] });
9088
9102
  }
9089
9103
  return /* @__PURE__ */ jsxs8(Box9, { flexDirection: "column", paddingX: tuiLayout.paddingX, paddingY: 0, gap: 0, height: terminalSize.rows, children: [
9090
- /* @__PURE__ */ jsx10(Banner, { disable: bannerDisabled, details: headerDetails, terminalColumns: bannerContentColumns }),
9091
- /* @__PURE__ */ jsx10(
9104
+ /* @__PURE__ */ jsx10(Box9, { flexShrink: 0, children: /* @__PURE__ */ jsx10(Banner, { disable: bannerDisabled, details: headerDetails, terminalColumns: bannerContentColumns }) }),
9105
+ /* @__PURE__ */ jsx10(Box9, { flexShrink: 0, children: /* @__PURE__ */ jsx10(
9092
9106
  WorkspaceTabBar,
9093
9107
  {
9094
9108
  activeTab: activeWorkspaceTab,
9095
9109
  showBrand: bannerDisabled,
9096
9110
  billingSummary: bannerDisabled ? billingHeader : void 0
9097
9111
  }
9098
- ),
9099
- /* @__PURE__ */ jsx10(Text10, { dimColor: true, wrap: "wrap", children: workspaceTabDescriptions.chat }),
9112
+ ) }),
9113
+ /* @__PURE__ */ jsx10(Box9, { flexShrink: 0, children: /* @__PURE__ */ jsx10(Text10, { dimColor: true, wrap: "wrap", children: workspaceTabDescriptions.chat }) }),
9100
9114
  /* @__PURE__ */ jsxs8(Box9, { flexDirection: "row", marginTop: 1, children: [
9101
9115
  /* @__PURE__ */ jsx10(
9102
9116
  Box9,
@@ -9158,7 +9172,7 @@ var App = ({
9158
9172
  terminalColumns: chatAvailableWidth
9159
9173
  }
9160
9174
  ) }) : null,
9161
- splitChatLayout ? /* @__PURE__ */ jsxs8(Box9, { flexDirection: "row", columnGap: chatSplitGap, children: [
9175
+ showChatThreadPanel ? splitChatLayout ? /* @__PURE__ */ jsxs8(Box9, { flexDirection: "row", columnGap: chatSplitGap, children: [
9162
9176
  /* @__PURE__ */ jsx10(
9163
9177
  ChatContextPanel,
9164
9178
  {
@@ -9183,7 +9197,7 @@ var App = ({
9183
9197
  }
9184
9198
  ),
9185
9199
  threadPanel
9186
- ] }) : threadPanel,
9200
+ ] }) : threadPanel : null,
9187
9201
  chatState.status === "hitl_waiting" && chatState.hitl?.waiting ? /* @__PURE__ */ jsx10(
9188
9202
  HitlPanel,
9189
9203
  {
@@ -9193,108 +9207,6 @@ var App = ({
9193
9207
  answers: hitlAnswers,
9194
9208
  frontendUrl: frontendThreadUrl
9195
9209
  }
9196
- ) : null,
9197
- activeSelector === "thread" ? /* @__PURE__ */ jsx10(
9198
- SelectPanel,
9199
- {
9200
- title: "Select Thread",
9201
- items: loadingSessions || loadingRemoteThreads ? [
9202
- {
9203
- label: "Loading threads...",
9204
- value: { kind: "new" },
9205
- description: "Reading CloudEval threads and local CLI history."
9206
- }
9207
- ] : threadSelectItems,
9208
- selectedIndex: Math.max(
9209
- 0,
9210
- threadSelectItems.findIndex(
9211
- (item) => item.value.kind === "remote" && item.value.thread.thread_id === chatState.threadId || item.value.kind === "session" && item.value.session.threadId === chatState.threadId || item.value.kind === "draft" && item.value.draft.key === activeDraftSessionKey
9212
- )
9213
- ),
9214
- onSubmit: (item) => selectThread(item.value),
9215
- onCancel: () => setActiveSelector(null),
9216
- limit: tuiLayout.selectorLimit
9217
- }
9218
- ) : null,
9219
- activeSelector === "project" ? /* @__PURE__ */ jsx10(
9220
- SelectPanel,
9221
- {
9222
- title: "Select Project",
9223
- items: (projects.length ? projects : [defaultProject]).map((project) => ({
9224
- label: `${project.name} (${project.cloud_provider ?? "cloud"})`,
9225
- value: project,
9226
- description: project.id
9227
- })),
9228
- selectedIndex: Math.max(
9229
- 0,
9230
- (projects.length ? projects : [defaultProject]).findIndex(
9231
- (project) => project.id === (selectedProject ?? defaultProject).id
9232
- )
9233
- ),
9234
- onSubmit: (item) => {
9235
- setSelectedProject(item.value);
9236
- setActiveSelector(null);
9237
- },
9238
- onCancel: () => setActiveSelector(null),
9239
- limit: tuiLayout.selectorLimit
9240
- }
9241
- ) : null,
9242
- activeSelector === "model" ? /* @__PURE__ */ jsx10(
9243
- SelectPanel,
9244
- {
9245
- title: "Select Model",
9246
- items: modelItems,
9247
- selectedIndex: Math.max(
9248
- 0,
9249
- modelItems.findIndex((item) => item.value === selectedModel)
9250
- ),
9251
- onSubmit: (item) => {
9252
- setSelectedModel(item.value);
9253
- setActiveSelector(null);
9254
- },
9255
- onCancel: () => setActiveSelector(null),
9256
- limit: tuiLayout.selectorLimit
9257
- }
9258
- ) : null,
9259
- activeSelector === "mode" ? /* @__PURE__ */ jsx10(
9260
- SelectPanel,
9261
- {
9262
- title: "Select Mode",
9263
- items: modeItems,
9264
- selectedIndex: Math.max(
9265
- 0,
9266
- modeItems.findIndex((item) => item.value === selectedMode)
9267
- ),
9268
- onSubmit: (item) => {
9269
- setSelectedMode(item.value);
9270
- if (item.value === "ask") {
9271
- setSelectedAgentProfileId("");
9272
- }
9273
- setNotice(
9274
- item.value === "ask" ? "Mode selected: Ask. Agent Profile cleared." : `Mode selected: ${item.label}`
9275
- );
9276
- setActiveSelector(null);
9277
- },
9278
- onCancel: () => setActiveSelector(null),
9279
- limit: tuiLayout.selectorLimit
9280
- }
9281
- ) : null,
9282
- activeSelector === "profile" ? /* @__PURE__ */ jsx10(
9283
- SelectPanel,
9284
- {
9285
- title: "Select Agent Profile",
9286
- items: agentProfileItems,
9287
- selectedIndex: Math.max(
9288
- 0,
9289
- agentProfileItems.findIndex((item) => item.value === selectedAgentProfileId)
9290
- ),
9291
- onSubmit: (item) => {
9292
- selectAgentProfileById(item.value, item.label);
9293
- setActiveSelector(null);
9294
- },
9295
- onCancel: () => setActiveSelector(null),
9296
- limit: tuiLayout.selectorLimit
9297
- }
9298
9210
  ) : null
9299
9211
  ] })
9300
9212
  }
@@ -9310,6 +9222,108 @@ var App = ({
9310
9222
  }
9311
9223
  ) : null
9312
9224
  ] }),
9225
+ activeSelector === "thread" ? /* @__PURE__ */ jsx10(
9226
+ SelectPanel,
9227
+ {
9228
+ title: "Select Thread",
9229
+ items: loadingSessions || loadingRemoteThreads ? [
9230
+ {
9231
+ label: "Loading threads...",
9232
+ value: { kind: "new" },
9233
+ description: "Reading CloudEval threads and local CLI history."
9234
+ }
9235
+ ] : threadSelectItems,
9236
+ selectedIndex: Math.max(
9237
+ 0,
9238
+ threadSelectItems.findIndex(
9239
+ (item) => item.value.kind === "remote" && item.value.thread.thread_id === chatState.threadId || item.value.kind === "session" && item.value.session.threadId === chatState.threadId || item.value.kind === "draft" && item.value.draft.key === activeDraftSessionKey
9240
+ )
9241
+ ),
9242
+ onSubmit: (item) => selectThread(item.value),
9243
+ onCancel: () => setActiveSelector(null),
9244
+ limit: tuiLayout.selectorLimit
9245
+ }
9246
+ ) : null,
9247
+ activeSelector === "project" ? /* @__PURE__ */ jsx10(
9248
+ SelectPanel,
9249
+ {
9250
+ title: "Select Project",
9251
+ items: (projects.length ? projects : [defaultProject]).map((project) => ({
9252
+ label: `${project.name} (${project.cloud_provider ?? "cloud"})`,
9253
+ value: project,
9254
+ description: project.id
9255
+ })),
9256
+ selectedIndex: Math.max(
9257
+ 0,
9258
+ (projects.length ? projects : [defaultProject]).findIndex(
9259
+ (project) => project.id === (selectedProject ?? defaultProject).id
9260
+ )
9261
+ ),
9262
+ onSubmit: (item) => {
9263
+ setSelectedProject(item.value);
9264
+ setActiveSelector(null);
9265
+ },
9266
+ onCancel: () => setActiveSelector(null),
9267
+ limit: tuiLayout.selectorLimit
9268
+ }
9269
+ ) : null,
9270
+ activeSelector === "model" ? /* @__PURE__ */ jsx10(
9271
+ SelectPanel,
9272
+ {
9273
+ title: "Select Model",
9274
+ items: modelItems,
9275
+ selectedIndex: Math.max(
9276
+ 0,
9277
+ modelItems.findIndex((item) => item.value === selectedModel)
9278
+ ),
9279
+ onSubmit: (item) => {
9280
+ setSelectedModel(item.value);
9281
+ setActiveSelector(null);
9282
+ },
9283
+ onCancel: () => setActiveSelector(null),
9284
+ limit: tuiLayout.selectorLimit
9285
+ }
9286
+ ) : null,
9287
+ activeSelector === "mode" ? /* @__PURE__ */ jsx10(
9288
+ SelectPanel,
9289
+ {
9290
+ title: "Select Mode",
9291
+ items: modeItems,
9292
+ selectedIndex: Math.max(
9293
+ 0,
9294
+ modeItems.findIndex((item) => item.value === selectedMode)
9295
+ ),
9296
+ onSubmit: (item) => {
9297
+ setSelectedMode(item.value);
9298
+ if (item.value === "ask") {
9299
+ setSelectedAgentProfileId("");
9300
+ }
9301
+ setNotice(
9302
+ item.value === "ask" ? "Mode selected: Ask. Agent Profile cleared." : `Mode selected: ${item.label}`
9303
+ );
9304
+ setActiveSelector(null);
9305
+ },
9306
+ onCancel: () => setActiveSelector(null),
9307
+ limit: tuiLayout.selectorLimit
9308
+ }
9309
+ ) : null,
9310
+ activeSelector === "profile" ? /* @__PURE__ */ jsx10(
9311
+ SelectPanel,
9312
+ {
9313
+ title: "Select Agent Profile",
9314
+ items: agentProfileItems,
9315
+ selectedIndex: Math.max(
9316
+ 0,
9317
+ agentProfileItems.findIndex((item) => item.value === selectedAgentProfileId)
9318
+ ),
9319
+ onSubmit: (item) => {
9320
+ selectAgentProfileById(item.value, item.label);
9321
+ setActiveSelector(null);
9322
+ },
9323
+ onCancel: () => setActiveSelector(null),
9324
+ limit: tuiLayout.selectorLimit
9325
+ }
9326
+ ) : null,
9313
9327
  isSearching ? /* @__PURE__ */ jsx10(
9314
9328
  InputBox,
9315
9329
  {
@@ -3,8 +3,8 @@ import {
3
3
  bannerMetaColor,
4
4
  bannerSegmentColor,
5
5
  splitBannerLineSegments
6
- } from "./chunk-6AHSCVTF.js";
7
- import "./chunk-74TONCUI.js";
6
+ } from "./chunk-CJWMEKKP.js";
7
+ import "./chunk-32EP3DJT.js";
8
8
  import "./chunk-ZDKRIOMB.js";
9
9
  export {
10
10
  Banner,
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var CLI_VERSION = "0.21.1";
2
+ var CLI_VERSION = "0.21.2";
3
3
 
4
4
  export {
5
5
  CLI_VERSION
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CLI_VERSION
3
- } from "./chunk-74TONCUI.js";
3
+ } from "./chunk-32EP3DJT.js";
4
4
  import {
5
5
  shouldUseColor,
6
6
  terminalTheme
package/dist/cli.js CHANGED
@@ -36,7 +36,7 @@ import {
36
36
  } from "./chunk-LDDHLUZH.js";
37
37
  import {
38
38
  CLI_VERSION
39
- } from "./chunk-74TONCUI.js";
39
+ } from "./chunk-32EP3DJT.js";
40
40
 
41
41
  // src/runtime/prepareInk.ts
42
42
  import fs from "fs";
@@ -13382,7 +13382,7 @@ program.command("tui").description("Open the CloudEval Terminal UI").option(
13382
13382
  const { assertSecureBaseUrl } = await import("./dist-AGQQPJUD.js");
13383
13383
  const [{ render }, { App }] = await Promise.all([
13384
13384
  import("ink"),
13385
- import("./App-77Q76GI5.js")
13385
+ import("./App-5ITWBHXF.js")
13386
13386
  ]);
13387
13387
  const baseUrl = await resolveBaseUrl(options, command);
13388
13388
  assertSecureBaseUrl(baseUrl);
@@ -13434,7 +13434,7 @@ program.command("chat").description("Start an interactive chat session").option(
13434
13434
  const { assertSecureBaseUrl } = await import("./dist-AGQQPJUD.js");
13435
13435
  const [{ render }, { App }] = await Promise.all([
13436
13436
  import("ink"),
13437
- import("./App-77Q76GI5.js")
13437
+ import("./App-5ITWBHXF.js")
13438
13438
  ]);
13439
13439
  const baseUrl = await resolveBaseUrl(options, command);
13440
13440
  assertSecureBaseUrl(baseUrl);
@@ -14191,7 +14191,7 @@ Error: ${errorMsg}
14191
14191
  program.command("banner").description("Preview the startup banner and terminal capabilities").action(async () => {
14192
14192
  const { render } = await import("ink");
14193
14193
  const BannerPreview = React.lazy(async () => ({
14194
- default: (await import("./Banner-43UE3WHI.js")).Banner
14194
+ default: (await import("./Banner-4PWWKMRZ.js")).Banner
14195
14195
  }));
14196
14196
  render(
14197
14197
  /* @__PURE__ */ jsx(React.Suspense, { fallback: null, children: /* @__PURE__ */ jsx(BannerPreview, { disable: false }) })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ganakailabs/cloudeval-cli",
3
- "version": "0.21.1",
3
+ "version": "0.21.2",
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.21.1",
17
+ "versionInfo": "0.21.2",
18
18
  "downloadLocation": "https://github.com/ganakailabs/cloudeval-cli",
19
19
  "filesAnalyzed": false,
20
20
  "licenseConcluded": "LicenseRef-CloudEval-CLI",