fluxflow-cli 2.16.0 → 2.16.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.
Files changed (2) hide show
  1. package/dist/fluxflow.js +141 -260
  2. package/package.json +1 -1
package/dist/fluxflow.js CHANGED
@@ -2110,11 +2110,11 @@ var init_text = __esm({
2110
2110
  init_paths();
2111
2111
  wrapText = (text, width) => {
2112
2112
  if (!text) return "";
2113
- const ansiRegex2 = /\x1B\[[0-?]*[ -/]*[@-~]/g;
2113
+ const ansiRegex = /\x1B\[[0-?]*[ -/]*[@-~]/g;
2114
2114
  const sourceLines = text.split("\n");
2115
2115
  let finalLines = [];
2116
2116
  if (width <= 5) return text;
2117
- const getVisibleLength = (str) => str.replace(ansiRegex2, "").length;
2117
+ const getVisibleLength = (str) => str.replace(ansiRegex, "").length;
2118
2118
  sourceLines.forEach((sLine) => {
2119
2119
  const visibleLength = getVisibleLength(sLine);
2120
2120
  if (visibleLength <= width) {
@@ -2135,7 +2135,7 @@ var init_text = __esm({
2135
2135
  currentLine = indent + token;
2136
2136
  currentVisibleLength = getVisibleLength(currentLine);
2137
2137
  } else {
2138
- if (ansiRegex2.test(token)) {
2138
+ if (ansiRegex.test(token)) {
2139
2139
  finalLines.push(token);
2140
2140
  currentLine = indent;
2141
2141
  currentVisibleLength = getVisibleLength(currentLine);
@@ -3183,8 +3183,8 @@ var init_MultilineInput = __esm({
3183
3183
  }
3184
3184
  return /* @__PURE__ */ React2.createElement(Text2, { color: "gray", dimColor: true }, emptyText || " ");
3185
3185
  }
3186
- const regex2 = /(\[Pasted \d+ (?:lines|chars)\])/g;
3187
- const parts = text.split(regex2);
3186
+ const regex = /(\[Pasted \d+ (?:lines|chars)\])/g;
3187
+ const parts = text.split(regex);
3188
3188
  let currentOffset = 0;
3189
3189
  const rendered = [];
3190
3190
  for (let i = 0; i < parts.length; i++) {
@@ -3575,7 +3575,7 @@ var init_TerminalBox = __esm({
3575
3575
  let cursorRow = 0;
3576
3576
  let cursorCol = 0;
3577
3577
  let currentStyle = "";
3578
- const ansiRegex2 = /\x1b\[([0-9;]*?)([a-zA-Z])/g;
3578
+ const ansiRegex = /\x1b\[([0-9;]*?)([a-zA-Z])/g;
3579
3579
  let lastIndex = 0;
3580
3580
  let match;
3581
3581
  const writeText = (plainText) => {
@@ -3602,7 +3602,7 @@ var init_TerminalBox = __esm({
3602
3602
  }
3603
3603
  }
3604
3604
  };
3605
- while ((match = ansiRegex2.exec(text)) !== null) {
3605
+ while ((match = ansiRegex.exec(text)) !== null) {
3606
3606
  writeText(text.substring(lastIndex, match.index));
3607
3607
  const params = match[1];
3608
3608
  const command2 = match[2];
@@ -3663,7 +3663,7 @@ var init_TerminalBox = __esm({
3663
3663
  currentStyle = escSeq;
3664
3664
  }
3665
3665
  }
3666
- lastIndex = ansiRegex2.lastIndex;
3666
+ lastIndex = ansiRegex.lastIndex;
3667
3667
  }
3668
3668
  writeText(text.substring(lastIndex));
3669
3669
  const resultLines = lines.map((line) => {
@@ -3703,6 +3703,7 @@ var init_TerminalBox = __esm({
3703
3703
  const collapsedCount = rawLines.length - limit;
3704
3704
  const visibleLines = hasCollapsibleContent && !isExpanded ? rawLines.slice(rawLines.length - limit) : rawLines;
3705
3705
  const renderedOutput = visibleLines.join("\n");
3706
+ const displayOutput = rawLines.length > 0;
3706
3707
  return /* @__PURE__ */ React3.createElement(
3707
3708
  Box2,
3708
3709
  {
@@ -3715,7 +3716,7 @@ var init_TerminalBox = __esm({
3715
3716
  borderColor: "#555555",
3716
3717
  paddingLeft: 2,
3717
3718
  paddingRight: 0,
3718
- paddingY: completed ? 0 : 1,
3719
+ paddingY: 1,
3719
3720
  marginTop: 1,
3720
3721
  width: "100%"
3721
3722
  },
@@ -5133,7 +5134,7 @@ var init_exec_command = __esm({
5133
5134
  const lines = [[]];
5134
5135
  let cursorRow = 0;
5135
5136
  let cursorCol = 0;
5136
- const ansiRegex2 = /\x1b\[([0-9;]*?)([a-zA-Z])/g;
5137
+ const ansiRegex = /\x1b\[([0-9;]*?)([a-zA-Z])/g;
5137
5138
  let lastIndex = 0;
5138
5139
  let match;
5139
5140
  const writeText = (plainText) => {
@@ -5160,7 +5161,7 @@ var init_exec_command = __esm({
5160
5161
  }
5161
5162
  }
5162
5163
  };
5163
- while ((match = ansiRegex2.exec(text)) !== null) {
5164
+ while ((match = ansiRegex.exec(text)) !== null) {
5164
5165
  writeText(text.substring(lastIndex, match.index));
5165
5166
  const params = match[1];
5166
5167
  const command = match[2];
@@ -5214,7 +5215,7 @@ var init_exec_command = __esm({
5214
5215
  cursorCol = 0;
5215
5216
  }
5216
5217
  }
5217
- lastIndex = ansiRegex2.lastIndex;
5218
+ lastIndex = ansiRegex.lastIndex;
5218
5219
  }
5219
5220
  writeText(text.substring(lastIndex));
5220
5221
  const resultLines = lines.map((line) => line.join(""));
@@ -5576,10 +5577,22 @@ var init_exec_command = __esm({
5576
5577
  netEnv.NO_PROXY = "localhost,127.0.0.1";
5577
5578
  }
5578
5579
  return new Promise((resolve) => {
5579
- const attempt = (usePowerShell) => {
5580
- const command = adjustWindowsCommand(rawCommand, usePowerShell);
5581
- let shell = isWin ? usePowerShell ? "powershell.exe" : "cmd.exe" : process.env.SHELL || "bash";
5582
- let shellArgs = isWin ? usePowerShell ? ["-NoProfile", "-Command", command] : ["/c", command] : ["-c", command];
5580
+ const attempt = (shellType) => {
5581
+ const isPowerShell = shellType === "pwsh" || shellType === "powershell";
5582
+ const command = adjustWindowsCommand(rawCommand, isPowerShell);
5583
+ let shell;
5584
+ if (isWin) {
5585
+ if (shellType === "pwsh") {
5586
+ shell = "C:\\Users\\User\\AppData\\Local\\Microsoft\\WindowsApps\\pwsh.exe";
5587
+ } else if (shellType === "powershell") {
5588
+ shell = "powershell.exe";
5589
+ } else {
5590
+ shell = "cmd.exe";
5591
+ }
5592
+ } else {
5593
+ shell = process.env.SHELL || "bash";
5594
+ }
5595
+ let shellArgs = isWin ? isPowerShell ? ["-NoProfile", "-Command", command] : ["/c", command] : ["-c", command];
5583
5596
  if (systemSettings.networkAccess === false && !isWin) {
5584
5597
  const originalShell = shell;
5585
5598
  const originalArgs = [...shellArgs];
@@ -5641,30 +5654,44 @@ ${finalOutput}`);
5641
5654
  });
5642
5655
  return true;
5643
5656
  } catch (err) {
5644
- if (isWin && usePowerShell && err.code === "ENOENT") {
5657
+ if (isWin && (shellType === "pwsh" || shellType === "powershell") && err.code === "ENOENT") {
5645
5658
  return false;
5646
5659
  }
5647
- runStandardSpawn(resolve, command, rawCommand, netEnv, onChunk, usePowerShell, systemSettings);
5660
+ runStandardSpawn(resolve, command, rawCommand, netEnv, onChunk, shellType, systemSettings);
5648
5661
  return true;
5649
5662
  }
5650
5663
  } else {
5651
- runStandardSpawn(resolve, command, rawCommand, netEnv, onChunk, usePowerShell, systemSettings);
5664
+ runStandardSpawn(resolve, command, rawCommand, netEnv, onChunk, shellType, systemSettings);
5652
5665
  return true;
5653
5666
  }
5654
5667
  };
5655
5668
  if (isWin) {
5656
- if (!attempt(true)) {
5657
- attempt(false);
5669
+ if (!attempt("pwsh")) {
5670
+ if (!attempt("powershell")) {
5671
+ attempt("cmd");
5672
+ }
5658
5673
  }
5659
5674
  } else {
5660
- attempt(false);
5675
+ attempt("bash");
5661
5676
  }
5662
5677
  });
5663
5678
  };
5664
- runStandardSpawn = (resolve, command, rawCommand, netEnv, onChunk, usePowerShell = true, systemSettings = {}) => {
5679
+ runStandardSpawn = (resolve, command, rawCommand, netEnv, onChunk, shellType = "powershell", systemSettings = {}) => {
5665
5680
  const isWin = process.platform === "win32";
5666
- let shell = isWin ? usePowerShell ? "powershell.exe" : "cmd.exe" : process.env.SHELL || "bash";
5667
- let shellArgs = isWin ? usePowerShell ? ["-NoProfile", "-Command", command] : ["/c", command] : ["-c", command];
5681
+ const isPowerShell = shellType === "pwsh" || shellType === "powershell";
5682
+ let shell;
5683
+ if (isWin) {
5684
+ if (shellType === "pwsh") {
5685
+ shell = "C:\\Users\\User\\AppData\\Local\\Microsoft\\WindowsApps\\pwsh.exe";
5686
+ } else if (shellType === "powershell") {
5687
+ shell = "powershell.exe";
5688
+ } else {
5689
+ shell = "cmd.exe";
5690
+ }
5691
+ } else {
5692
+ shell = process.env.SHELL || "bash";
5693
+ }
5694
+ let shellArgs = isWin ? isPowerShell ? ["-NoProfile", "-Command", command] : ["/c", command] : ["-c", command];
5668
5695
  if (systemSettings.networkAccess === false && !isWin) {
5669
5696
  const originalShell = shell;
5670
5697
  const originalArgs = [...shellArgs];
@@ -5742,9 +5769,14 @@ ${finalOutput}`);
5742
5769
  }
5743
5770
  });
5744
5771
  child.on("error", (err) => {
5745
- if (isWin && usePowerShell && err.code === "ENOENT") {
5746
- const cmdCommand = adjustWindowsCommand(rawCommand, false);
5747
- return runStandardSpawn(resolve, cmdCommand, rawCommand, netEnv, onChunk, false, systemSettings);
5772
+ if (isWin && err.code === "ENOENT") {
5773
+ if (shellType === "pwsh") {
5774
+ const nextCommand = adjustWindowsCommand(rawCommand, true);
5775
+ return runStandardSpawn(resolve, nextCommand, rawCommand, netEnv, onChunk, "powershell", systemSettings);
5776
+ } else if (shellType === "powershell") {
5777
+ const nextCommand = adjustWindowsCommand(rawCommand, false);
5778
+ return runStandardSpawn(resolve, nextCommand, rawCommand, netEnv, onChunk, "cmd", systemSettings);
5779
+ }
5748
5780
  }
5749
5781
  activeChildProcess = null;
5750
5782
  const errorMsg = err instanceof Error ? err.message : String(err);
@@ -8873,8 +8905,8 @@ var init_saveSummary = __esm({
8873
8905
  init_paths();
8874
8906
  saveSummary = async (rawArgs, context = {}) => {
8875
8907
  const parseArg = (key) => {
8876
- const regex2 = new RegExp(`${key}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`, "s");
8877
- const match = rawArgs.match(regex2);
8908
+ const regex = new RegExp(`${key}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`, "s");
8909
+ const match = rawArgs.match(regex);
8878
8910
  return match ? match[2].trim() : null;
8879
8911
  };
8880
8912
  const id = parseArg("id");
@@ -8906,8 +8938,8 @@ var init_addMemScore = __esm({
8906
8938
  init_paths();
8907
8939
  addMemScore = async (rawArgs, context = {}) => {
8908
8940
  const parseArg = (key) => {
8909
- const regex2 = new RegExp(`${key}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`, "s");
8910
- const match = rawArgs.match(regex2);
8941
+ const regex = new RegExp(`${key}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`, "s");
8942
+ const match = rawArgs.match(regex);
8911
8943
  return match ? match[2].trim() : null;
8912
8944
  };
8913
8945
  const id = parseArg("id");
@@ -10546,14 +10578,14 @@ ${originalTextProcessed.length > USER_CONTEXT_LENGTH ? "... (truncated) ...\n\n"
10546
10578
  }
10547
10579
  return result;
10548
10580
  };
10549
- contextSafeReplace = (text, regex2, replacement) => {
10581
+ contextSafeReplace = (text, regex, replacement) => {
10550
10582
  const toolRegex = /\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi;
10551
10583
  let result = "";
10552
10584
  let lastIdx = 0;
10553
10585
  let match;
10554
10586
  while ((match = toolRegex.exec(text)) !== null) {
10555
10587
  const before = text.substring(lastIdx, match.index);
10556
- result += before.replace(regex2, replacement);
10588
+ result += before.replace(regex, replacement);
10557
10589
  const startIdx = match.index + match[0].length - 1;
10558
10590
  let balance = 0;
10559
10591
  let inString = null;
@@ -10599,7 +10631,7 @@ ${originalTextProcessed.length > USER_CONTEXT_LENGTH ? "... (truncated) ...\n\n"
10599
10631
  }
10600
10632
  }
10601
10633
  if (lastIdx < text.length) {
10602
- result += text.substring(lastIdx).replace(regex2, replacement);
10634
+ result += text.substring(lastIdx).replace(regex, replacement);
10603
10635
  }
10604
10636
  return result;
10605
10637
  };
@@ -11284,7 +11316,7 @@ Provide a consolidated summary of the entire session.`;
11284
11316
  };
11285
11317
  yield { type: "status", content: "[start]" };
11286
11318
  yield { type: "status", content: "Gathering Context..." };
11287
- await new Promise((resolve) => setTimeout(resolve, 500));
11319
+ await new Promise((resolve) => setTimeout(resolve, 300));
11288
11320
  const totalFolders = countFolders(process.cwd());
11289
11321
  let dynamicMaxDepth = 12;
11290
11322
  if (totalFolders > 4096) dynamicMaxDepth = 1;
@@ -11772,7 +11804,7 @@ ${activeSummaryBlock}${thinkingLevel !== "Fast" && thinkingLevel !== "xHigh" &&
11772
11804
  currentSystemInstruction = getSystemInstruction(profile, !(targetModel || "gemma").toLowerCase().startsWith("gemma") ? thinkingLevel : thinkingLevel, mode, systemSettings, isMemoryEnabled, isFirstPrompt, aiProvider, aiProvider === "Google" ? true : isMultiModal, !(targetModel || "gemma").toLowerCase().startsWith("gemma") ? true : false);
11773
11805
  const lastUserMsg = contents[contents.length - 1];
11774
11806
  if (isBridgeConnected() & loop > 0) {
11775
- yield { type: "status", content: "Checking Code..." };
11807
+ yield { type: "status", content: "Verifying..." };
11776
11808
  await new Promise((resolve) => setTimeout(resolve, 2500));
11777
11809
  const ideCtxJIT = await getIDEContext();
11778
11810
  const ideErr = ideCtxJIT ? ideCtxJIT.diagnostics : null;
@@ -14185,159 +14217,9 @@ var init_witty_phrases = __esm({
14185
14217
  }
14186
14218
  });
14187
14219
 
14188
- // node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js
14189
- function ansiRegex({ onlyFirst = false } = {}) {
14190
- const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
14191
- const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
14192
- const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
14193
- const pattern = `${osc}|${csi}`;
14194
- return new RegExp(pattern, onlyFirst ? void 0 : "g");
14195
- }
14196
- var init_ansi_regex = __esm({
14197
- "node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js"() {
14198
- }
14199
- });
14200
-
14201
- // node_modules/.pnpm/strip-ansi@7.2.0/node_modules/strip-ansi/index.js
14202
- function stripAnsi3(string) {
14203
- if (typeof string !== "string") {
14204
- throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
14205
- }
14206
- if (!string.includes("\x1B") && !string.includes("\x9B")) {
14207
- return string;
14208
- }
14209
- return string.replace(regex, "");
14210
- }
14211
- var regex;
14212
- var init_strip_ansi = __esm({
14213
- "node_modules/.pnpm/strip-ansi@7.2.0/node_modules/strip-ansi/index.js"() {
14214
- init_ansi_regex();
14215
- regex = ansiRegex();
14216
- }
14217
- });
14218
-
14219
- // node_modules/.pnpm/ink-gradient@4.0.1_ink@7.1._10eadb2cdb3bd743653644e90a99e776/node_modules/ink-gradient/dist/index.js
14220
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
14221
- import { Children, isValidElement, cloneElement } from "react";
14222
- import { Box as Box13, Transform, Text as Text14 } from "ink";
14223
- import gradientString from "gradient-string";
14224
- var Gradient, dist_default;
14225
- var init_dist = __esm({
14226
- "node_modules/.pnpm/ink-gradient@4.0.1_ink@7.1._10eadb2cdb3bd743653644e90a99e776/node_modules/ink-gradient/dist/index.js"() {
14227
- init_strip_ansi();
14228
- Gradient = (props) => {
14229
- if (props.name && props.colors) {
14230
- throw new Error("The `name` and `colors` props are mutually exclusive");
14231
- }
14232
- let gradient3;
14233
- if (props.name) {
14234
- gradient3 = gradientString[props.name];
14235
- } else if (props.colors) {
14236
- gradient3 = gradientString(props.colors);
14237
- } else {
14238
- throw new Error("Either `name` or `colors` prop must be provided");
14239
- }
14240
- const applyGradient = (text) => gradient3.multiline(stripAnsi3(text));
14241
- const containsBoxDescendant = (nodeChildren) => {
14242
- let hasBox = false;
14243
- const search = (value) => {
14244
- Children.forEach(value, (child) => {
14245
- if (hasBox) {
14246
- return;
14247
- }
14248
- if (!isValidElement(child)) {
14249
- return;
14250
- }
14251
- if (child.type === Box13) {
14252
- hasBox = true;
14253
- return;
14254
- }
14255
- const childProps = child.props;
14256
- if (Object.hasOwn(childProps, "children")) {
14257
- search(childProps["children"]);
14258
- }
14259
- });
14260
- };
14261
- search(nodeChildren);
14262
- return hasBox;
14263
- };
14264
- const hasChildrenProp = (props2) => Object.hasOwn(props2, "children");
14265
- const isPlainTextNode = (node) => typeof node === "string" || typeof node === "number";
14266
- const isNonRenderableChild = (node) => node === null || node === void 0 || typeof node === "boolean";
14267
- const childrenCount = Children.count(props.children);
14268
- if (isPlainTextNode(props.children)) {
14269
- return _jsx(Transform, { transform: applyGradient, children: props.children });
14270
- }
14271
- if (childrenCount === 1 && !containsBoxDescendant(props.children)) {
14272
- return _jsx(Transform, { transform: applyGradient, children: props.children });
14273
- }
14274
- const applyGradientToChildren = (children) => {
14275
- const nodes = [];
14276
- let bufferedText = "";
14277
- let nodeIndex = 0;
14278
- const createKey = () => `gradient-node-${nodeIndex++}`;
14279
- const pushTransformed = (node, key) => {
14280
- nodes.push(_jsx(Transform, { transform: applyGradient, children: node }, key));
14281
- };
14282
- const flushText = () => {
14283
- if (bufferedText === "") {
14284
- return;
14285
- }
14286
- const text = bufferedText;
14287
- bufferedText = "";
14288
- pushTransformed(_jsx(Text14, { children: text }), createKey());
14289
- };
14290
- Children.forEach(children, (child) => {
14291
- if (isNonRenderableChild(child)) {
14292
- return;
14293
- }
14294
- if (isPlainTextNode(child)) {
14295
- bufferedText += String(child);
14296
- return;
14297
- }
14298
- flushText();
14299
- if (isValidElement(child)) {
14300
- const childKey = child.key ?? createKey();
14301
- const childProps = child.props;
14302
- if (child.type === Text14) {
14303
- pushTransformed(child, childKey);
14304
- return;
14305
- }
14306
- if (child.type === Box13) {
14307
- if (hasChildrenProp(childProps)) {
14308
- const childChildren = childProps["children"];
14309
- nodes.push(cloneElement(child, { key: childKey }, applyGradientToChildren(childChildren)));
14310
- return;
14311
- }
14312
- nodes.push(cloneElement(child, { key: childKey }));
14313
- return;
14314
- }
14315
- if (hasChildrenProp(childProps)) {
14316
- const childChildren = childProps["children"];
14317
- if (!containsBoxDescendant(childChildren)) {
14318
- pushTransformed(child, childKey);
14319
- return;
14320
- }
14321
- nodes.push(cloneElement(child, { key: childKey }, applyGradientToChildren(childChildren)));
14322
- return;
14323
- }
14324
- pushTransformed(child, childKey);
14325
- return;
14326
- }
14327
- nodes.push(child);
14328
- });
14329
- flushText();
14330
- return nodes;
14331
- };
14332
- return _jsx(_Fragment, { children: applyGradientToChildren(props.children) });
14333
- };
14334
- dist_default = Gradient;
14335
- }
14336
- });
14337
-
14338
14220
  // src/components/RevertModal.jsx
14339
14221
  import React14, { useState as useState13 } from "react";
14340
- import { Box as Box14, Text as Text15, useInput as useInput8 } from "ink";
14222
+ import { Box as Box13, Text as Text14, useInput as useInput8 } from "ink";
14341
14223
  function RevertModal({ prompts, onSelect, onClose }) {
14342
14224
  const [selectedIndex, setSelectedIndex] = useState13(0);
14343
14225
  useInput8((input, key) => {
@@ -14359,23 +14241,23 @@ function RevertModal({ prompts, onSelect, onClose }) {
14359
14241
  }
14360
14242
  }
14361
14243
  const visiblePrompts = prompts.slice(startIndex, startIndex + MAX_VISIBLE);
14362
- return /* @__PURE__ */ React14.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", padding: 0, width: "100%" }, /* @__PURE__ */ React14.createElement(Box14, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text15, { color: "white", bold: true }, "CODEBASE TIME TRAVEL: SELECT UNDO POINT")), /* @__PURE__ */ React14.createElement(Box14, { paddingX: 2, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text15, null, "Select a prompt to revert the codebase back to the state ", /* @__PURE__ */ React14.createElement(Text15, { bold: true, color: "cyan" }, "immediately before"), " it was executed:")), prompts.length === 0 ? /* @__PURE__ */ React14.createElement(Box14, { paddingX: 2, paddingY: 1 }, /* @__PURE__ */ React14.createElement(Text15, { italic: true, color: "gray" }, "No prompt checkpoints found for this session.")) : /* @__PURE__ */ React14.createElement(Box14, { flexDirection: "column", width: "100%" }, startIndex > 0 && /* @__PURE__ */ React14.createElement(Box14, { paddingX: 2, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text15, { color: "gray" }, "\u25B2 (+", startIndex, " more prompts above)")), visiblePrompts.map((p, index) => {
14244
+ return /* @__PURE__ */ React14.createElement(Box13, { flexDirection: "column", borderStyle: "round", borderColor: "grey", padding: 0, width: "100%" }, /* @__PURE__ */ React14.createElement(Box13, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: "white", bold: true }, "CODEBASE TIME TRAVEL: SELECT UNDO POINT")), /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text14, null, "Select a prompt to revert the codebase back to the state ", /* @__PURE__ */ React14.createElement(Text14, { bold: true, color: "cyan" }, "immediately before"), " it was executed:")), prompts.length === 0 ? /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, paddingY: 1 }, /* @__PURE__ */ React14.createElement(Text14, { italic: true, color: "gray" }, "No prompt checkpoints found for this session.")) : /* @__PURE__ */ React14.createElement(Box13, { flexDirection: "column", width: "100%" }, startIndex > 0 && /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: "gray" }, "\u25B2 (+", startIndex, " more prompts above)")), visiblePrompts.map((p, index) => {
14363
14245
  const actualIndex = startIndex + index;
14364
14246
  const isSelected = actualIndex === selectedIndex;
14365
14247
  const dateStr = formatDate2(p.timestamp);
14366
14248
  const fileCount = p.changes ? p.changes.length : 0;
14367
14249
  return /* @__PURE__ */ React14.createElement(
14368
- Box14,
14250
+ Box13,
14369
14251
  {
14370
14252
  key: p.id,
14371
14253
  paddingX: 1,
14372
14254
  backgroundColor: isSelected ? "#444444" : void 0,
14373
14255
  width: "100%"
14374
14256
  },
14375
- /* @__PURE__ */ React14.createElement(Box14, { flexGrow: 1 }, /* @__PURE__ */ React14.createElement(Text15, { color: isSelected ? "white" : "grey", bold: isSelected }, isSelected ? "\u276F " : " ", '"', formatPromptPreview(p.prompt), '"', /* @__PURE__ */ React14.createElement(Text15, { color: `${isSelected ? "white" : "grey"}`, dimColor: true }, " [", dateStr, " \u2022 ", fileCount, " file(s) changed]")))
14257
+ /* @__PURE__ */ React14.createElement(Box13, { flexGrow: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: isSelected ? "white" : "grey", bold: isSelected }, isSelected ? "\u276F " : " ", '"', formatPromptPreview(p.prompt), '"', /* @__PURE__ */ React14.createElement(Text14, { color: `${isSelected ? "white" : "grey"}`, dimColor: true }, " [", dateStr, " \u2022 ", fileCount, " file(s) changed]")))
14376
14258
  );
14377
- }), startIndex + MAX_VISIBLE < prompts.length && /* @__PURE__ */ React14.createElement(Box14, { paddingX: 2, marginTop: 1 }, /* @__PURE__ */ React14.createElement(Text15, { color: "gray" }, "\u25BC (+", prompts.length - (startIndex + MAX_VISIBLE), " more prompts below)"))), /* @__PURE__ */ React14.createElement(
14378
- Box14,
14259
+ }), startIndex + MAX_VISIBLE < prompts.length && /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, marginTop: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: "gray" }, "\u25BC (+", prompts.length - (startIndex + MAX_VISIBLE), " more prompts below)"))), /* @__PURE__ */ React14.createElement(
14260
+ Box13,
14379
14261
  {
14380
14262
  marginTop: 1,
14381
14263
  paddingX: 1,
@@ -14385,7 +14267,7 @@ function RevertModal({ prompts, onSelect, onClose }) {
14385
14267
  borderBottom: false,
14386
14268
  borderColor: "grey"
14387
14269
  },
14388
- /* @__PURE__ */ React14.createElement(Text15, { color: "grey", italic: true }, "\u2191\u2193 navigate \u2022 Enter select undo point \u2022 Esc close")
14270
+ /* @__PURE__ */ React14.createElement(Text14, { color: "grey", italic: true }, "\u2191\u2193 navigate \u2022 Enter select undo point \u2022 Esc close")
14389
14271
  ));
14390
14272
  }
14391
14273
  function formatPromptPreview(prompt) {
@@ -14463,7 +14345,7 @@ __export(app_exports, {
14463
14345
  });
14464
14346
  import os4 from "os";
14465
14347
  import React15, { useState as useState14, useEffect as useEffect11, useRef as useRef3, useMemo as useMemo2 } from "react";
14466
- import { Box as Box15, Text as Text16, useInput as useInput9, useStdout as useStdout2, Static } from "ink";
14348
+ import { Box as Box14, Text as Text15, useInput as useInput9, useStdout as useStdout2, Static } from "ink";
14467
14349
  import fs22 from "fs-extra";
14468
14350
  import path20 from "path";
14469
14351
  import { exec as exec2 } from "child_process";
@@ -17635,14 +17517,14 @@ Selection: ${val}`,
17635
17517
  const CustomMenuItem = ({ label: label2, isSelected }) => {
17636
17518
  const isCancel = label2 === "Cancel" || label2 === "Back" || label2.toLowerCase().includes("exit") || label2.toLowerCase().includes("back");
17637
17519
  return /* @__PURE__ */ React15.createElement(
17638
- Box15,
17520
+ Box14,
17639
17521
  {
17640
17522
  marginTop: isCancel ? 1 : 0,
17641
17523
  backgroundColor: isSelected ? "#2a2a2a" : void 0,
17642
17524
  paddingX: 1,
17643
17525
  width: "100%"
17644
17526
  },
17645
- /* @__PURE__ */ React15.createElement(Text16, { color: isSelected ? "white" : "gray", bold: isSelected }, isSelected ? "\u276F " : " ", label2)
17527
+ /* @__PURE__ */ React15.createElement(Text15, { color: isSelected ? "white" : "gray", bold: isSelected }, isSelected ? "\u276F " : " ", label2)
17646
17528
  );
17647
17529
  };
17648
17530
  const renderProgressBar = (label2, current, limit) => {
@@ -17659,7 +17541,7 @@ Selection: ${val}`,
17659
17541
  const isTokens = label2.toLowerCase().includes("token");
17660
17542
  const displayLimit = shouldClearValue(limit) ? "\u221E" : isTokens ? formatTokens(limit) : limit;
17661
17543
  const displayCurrent = isTokens ? formatTokens(current) : current;
17662
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "row", paddingLeft: 4, key: label2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 18 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, label2, ": ")), /* @__PURE__ */ React15.createElement(Text16, { color: barColor }, barStr), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " ", percent, "% (", displayCurrent, "/", displayLimit, ")"));
17544
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "row", paddingLeft: 4, key: label2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 18 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, label2, ": ")), /* @__PURE__ */ React15.createElement(Text15, { color: barColor }, barStr), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " ", percent, "% (", displayCurrent, "/", displayLimit, ")"));
17663
17545
  };
17664
17546
  const renderActiveView = () => {
17665
17547
  switch (activeView) {
@@ -17737,7 +17619,7 @@ Selection: ${val}`,
17737
17619
  }
17738
17620
  );
17739
17621
  case "apiTier": {
17740
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, "SELECT API MODE FOR ", aiProvider.toUpperCase())), /* @__PURE__ */ React15.createElement(
17622
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "SELECT API MODE FOR ", aiProvider.toUpperCase())), /* @__PURE__ */ React15.createElement(
17741
17623
  SelectInput2,
17742
17624
  {
17743
17625
  items: [
@@ -17767,7 +17649,7 @@ Selection: ${val}`,
17767
17649
  itemComponent: CustomMenuItem,
17768
17650
  indicatorComponent: () => null
17769
17651
  }
17770
- ), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, "(Arrows to select \u2022 Enter to confirm)")));
17652
+ ), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, "(Arrows to select \u2022 Enter to confirm)")));
17771
17653
  }
17772
17654
  case "resetMode":
17773
17655
  return /* @__PURE__ */ React15.createElement(
@@ -17872,11 +17754,11 @@ Selection: ${val}`,
17872
17754
  case "providerBudgetSelect": {
17873
17755
  const PROVIDERS_LIST = ["Google", "DeepSeek", "NVIDIA", "OpenRouter"];
17874
17756
  const anySelected = PROVIDERS_LIST.some((p) => pbsSelected[p]);
17875
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", bold: true }, "SELECT PROVIDERS TO SET BUDGETS FOR")), PROVIDERS_LIST.map((prov, i) => {
17757
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", bold: true }, "SELECT PROVIDERS TO SET BUDGETS FOR")), PROVIDERS_LIST.map((prov, i) => {
17876
17758
  const isActive = i === pbsCursor;
17877
17759
  const isChecked = !!pbsSelected[prov];
17878
- return /* @__PURE__ */ React15.createElement(Box15, { key: prov, backgroundColor: isActive ? "#2a2a2a" : void 0, paddingX: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: isActive ? "white" : "gray", bold: isActive }, isActive ? "\u276F " : " ", /* @__PURE__ */ React15.createElement(Text16, { color: isChecked ? "green" : "gray" }, isChecked ? "\u2611" : "\u2610"), " ", prov, isChecked && quotas.providerBudgets?.[prov]?.agentLimit ? /* @__PURE__ */ React15.createElement(Text16, { color: "cyan" }, " (budget set)") : null));
17879
- }), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, "\u2191\u2193 Navigate \u2022 Space to toggle \u2022 Enter to confirm \u2022 ESC to go back"), !anySelected && /* @__PURE__ */ React15.createElement(Text16, { color: "yellow", italic: true }, " Select at least one provider to continue")));
17760
+ return /* @__PURE__ */ React15.createElement(Box14, { key: prov, backgroundColor: isActive ? "#2a2a2a" : void 0, paddingX: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: isActive ? "white" : "gray", bold: isActive }, isActive ? "\u276F " : " ", /* @__PURE__ */ React15.createElement(Text15, { color: isChecked ? "green" : "gray" }, isChecked ? "\u2611" : "\u2610"), " ", prov, isChecked && quotas.providerBudgets?.[prov]?.agentLimit ? /* @__PURE__ */ React15.createElement(Text15, { color: "cyan" }, " (budget set)") : null));
17761
+ }), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, "\u2191\u2193 Navigate \u2022 Space to toggle \u2022 Enter to confirm \u2022 ESC to go back"), !anySelected && /* @__PURE__ */ React15.createElement(Text15, { color: "yellow", italic: true }, " Select at least one provider to continue")));
17880
17762
  }
17881
17763
  case "providerBudgetFlow":
17882
17764
  return null;
@@ -17941,7 +17823,7 @@ Selection: ${val}`,
17941
17823
  const monthName = resetDate.toLocaleString("default", { month: "short" });
17942
17824
  resetInfo = `Resets on: ${resetDay}-${monthName}`;
17943
17825
  }
17944
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { marginBottom: 1, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "BUDGET LIMIT STATUS"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "[ ESC to Close ]")), limitsNotSet ? /* @__PURE__ */ React15.createElement(Box15, { padding: 1, justifyContent: "center", alignItems: "center", width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, "LIMITS NOT SET")) : usingProviderBudgets && configuredProviders.length > 0 ? /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", gap: 1, width: "100%" }, configuredProviders.map((prov) => {
17826
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { marginBottom: 1, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "BUDGET LIMIT STATUS"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "[ ESC to Close ]")), limitsNotSet ? /* @__PURE__ */ React15.createElement(Box14, { padding: 1, justifyContent: "center", alignItems: "center", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "LIMITS NOT SET")) : usingProviderBudgets && configuredProviders.length > 0 ? /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", gap: 1, width: "100%" }, configuredProviders.map((prov) => {
17945
17827
  const pb = providerBudgetsMap[prov];
17946
17828
  const provReqCurrent = dailyUsage?.providerRequests?.[prov] || 0;
17947
17829
  let provTokenCurrent = 0;
@@ -17955,11 +17837,11 @@ Selection: ${val}`,
17955
17837
  for (const m in monthlyModels) {
17956
17838
  provMonthlyCurrent += monthlyModels[m]?.tokens || 0;
17957
17839
  }
17958
- return /* @__PURE__ */ React15.createElement(Box15, { key: prov, flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { marginBottom: 0 }, /* @__PURE__ */ React15.createElement(Text16, { color: "cyan", bold: true }, "\u25C6 ", prov)), renderProgressBar("Daily Requests", provReqCurrent, pb.agentLimit || 99999999, "cyan"), renderProgressBar("Daily Tokens", provTokenCurrent, pb.tokenLimit || 99999999999999, "green"), renderProgressBar("Monthly Tokens", provMonthlyCurrent, pb.monthlyTokenLimit || 99999999999999, "yellow"));
17959
- }), resetInfo ? /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text16, { color: "magenta", bold: true }, resetInfo)) : /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text16, { color: "blue", bold: true }, "Rolling 30-Day Window"))) : /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, width: "100%" }, renderProgressBar("Daily Requests", reqCurrent, reqLimit, "cyan"), renderProgressBar("Daily Tokens", tokenCurrent, tokenLimit, "green"), renderProgressBar("Monthly Tokens", monthlyCurrent, monthlyLimit, "yellow"), resetInfo ? /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text16, { color: "magenta", bold: true }, resetInfo)) : /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text16, { color: "blue", bold: true }, "Rolling 30-Day Window"))));
17840
+ return /* @__PURE__ */ React15.createElement(Box14, { key: prov, flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { marginBottom: 0 }, /* @__PURE__ */ React15.createElement(Text15, { color: "cyan", bold: true }, "\u25C6 ", prov)), renderProgressBar("Daily Requests", provReqCurrent, pb.agentLimit || 99999999, "cyan"), renderProgressBar("Daily Tokens", provTokenCurrent, pb.tokenLimit || 99999999999999, "green"), renderProgressBar("Monthly Tokens", provMonthlyCurrent, pb.monthlyTokenLimit || 99999999999999, "yellow"));
17841
+ }), resetInfo ? /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text15, { color: "magenta", bold: true }, resetInfo)) : /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text15, { color: "blue", bold: true }, "Rolling 30-Day Window"))) : /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, width: "100%" }, renderProgressBar("Daily Requests", reqCurrent, reqLimit, "cyan"), renderProgressBar("Daily Tokens", tokenCurrent, tokenLimit, "green"), renderProgressBar("Monthly Tokens", monthlyCurrent, monthlyLimit, "yellow"), resetInfo ? /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text15, { color: "magenta", bold: true }, resetInfo)) : /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "Monthly Reset : "), /* @__PURE__ */ React15.createElement(Text15, { color: "blue", bold: true }, "Rolling 30-Day Window"))));
17960
17842
  }
17961
17843
  case "input":
17962
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, "DATA CONFIGURATION")), inputConfig?.note && /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, inputConfig.note)), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, flexDirection: "row" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, inputConfig?.label, " "), /* @__PURE__ */ React15.createElement(
17844
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "white", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "DATA CONFIGURATION")), inputConfig?.note && /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, inputConfig.note)), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, flexDirection: "row" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, inputConfig?.label, " "), /* @__PURE__ */ React15.createElement(
17963
17845
  TextInput4,
17964
17846
  {
17965
17847
  value: inputConfig?.value || "",
@@ -18062,7 +17944,7 @@ Selection: ${val}`,
18062
17944
  }
18063
17945
  }
18064
17946
  }
18065
- )), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", dimColor: true, italic: true }, "(Press Enter to confirm selection)")));
17947
+ )), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", dimColor: true, italic: true }, "(Press Enter to confirm selection)")));
18066
17948
  case "stats": {
18067
17949
  const u = statsMode === "monthly" ? monthlyUsage : dailyUsage;
18068
17950
  const trackerTitle = statsMode === "monthly" ? "LAST 30 DAYS USAGE" : "TODAY's USAGE";
@@ -18072,13 +17954,13 @@ Selection: ${val}`,
18072
17954
  const imageCreditsLabel = statsMode === "monthly" ? "Image Credits:" : "Image Credits:";
18073
17955
  const codeChangesLabel = statsMode === "monthly" ? "Code Changes:" : "Code Changes:";
18074
17956
  const toolCallsLabel = statsMode === "monthly" ? "Tool Calls:" : "Tool Calls:";
18075
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 3, paddingY: 1, paddingBottom: 0, width: Math.min(125, (stdout?.columns || 100) - 2) }, statsMode === "modelBreakdown" ? /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "30-DAY MODEL TOKEN BREAKDOWN"), !monthlyUsage?.models || Object.keys(monthlyUsage.models).length === 0 ? /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey", italic: true }, "No model token usage recorded in the last 30 days.")) : Object.entries(monthlyUsage.models).map(([provider, models]) => {
17957
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 3, paddingY: 1, paddingBottom: 0, width: Math.min(125, (stdout?.columns || 100) - 2) }, statsMode === "modelBreakdown" ? /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "30-DAY MODEL TOKEN BREAKDOWN"), !monthlyUsage?.models || Object.keys(monthlyUsage.models).length === 0 ? /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey", italic: true }, "No model token usage recorded in the last 30 days.")) : Object.entries(monthlyUsage.models).map(([provider, models]) => {
18076
17958
  const providerTotalTokens = Object.values(models).reduce((sum, m) => sum + (m.tokens || 0), 0);
18077
- return /* @__PURE__ */ React15.createElement(Box15, { key: provider, flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 40 }, /* @__PURE__ */ React15.createElement(Text16, { color: "cyan", bold: true }, provider, ":")), /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, formatTokens(providerTotalTokens))), Object.entries(models).map(([modelName, stats]) => /* @__PURE__ */ React15.createElement(Box15, { key: modelName, flexDirection: "column", marginLeft: 4, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 36 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "\xBB ", modelName, ":")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(stats.tokens || 0))), /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box15, { width: 32 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens((stats.tokens || 0) - (stats.candidateTokens || 0)))), (stats.cachedTokens || 0) > 0 && /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 5 }, /* @__PURE__ */ React15.createElement(Box15, { width: 31 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(stats.cachedTokens))), /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box15, { width: 32 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(stats.candidateTokens || 0))))));
18078
- })) : /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, { marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "SESSION TELEMETRY")), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Session Duration:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatMsDuration(Date.now() - SESSION_START_TIME))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Model Requests:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, sessionAgentCalls)), /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 23 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB API Time:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatMsDuration(sessionApiTime))), /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 23 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Tool Time:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatMsDuration(sessionToolTime))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Memory Agent:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, sessionBackgroundCalls)), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Tokens Consumed:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalTokens))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Active Context:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionStats.tokens))), sessionTotalTokens > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 23 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalTokens - sessionTotalCandidateTokens))), sessionTotalCachedTokens > 0 && /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box15, { width: 21 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalCachedTokens))), sessionTotalCandidateTokens > 0 && /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 23 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalCandidateTokens)))), sessionImageCount > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Images Made:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, sessionImageCount)), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Image Credits:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, Number(((sessionImageCredits || 0) * 1e3).toFixed(0)), " credits"))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Code Changes (Sess):")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, /* @__PURE__ */ React15.createElement(Text16, { color: "green" }, "+", linesAdded), " ", /* @__PURE__ */ React15.createElement(Text16, { color: "red" }, "-", linesRemoved))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Tool Calls (Sess):")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, sessionToolSuccess + sessionToolFailure + sessionToolDenied, " ( "), /* @__PURE__ */ React15.createElement(Text16, { color: "green" }, "\u2713 ", sessionToolSuccess), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text16, { color: "yellow" }, "\u2298 ", sessionToolDenied), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text16, { color: "red" }, "\u2715 ", sessionToolFailure), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " )"))), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, trackerTitle), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, timeLabel)), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatDuration(u?.duration || 0))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Model Requests:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, u?.agent || 0)), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Memory Agent:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, u?.background || 0)), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, tokensLabel)), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(u?.tokens || 0))), (u?.tokens || 0) > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 23 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens((u?.tokens || 0) - (u?.candidateTokens || 0)))), (u?.cachedTokens || 0) > 0 && /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box15, { width: 21 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(u.cachedTokens))), (u?.candidateTokens || 0) > 0 && /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 23 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(u.candidateTokens)))), (u?.imageCalls?.length || 0) > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, imagesLabel)), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, u.imageCalls.length)), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, imageCreditsLabel)), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, Number(((u.imageCalls.reduce((sum, c) => sum + c.cost, 0) || 0) * 1e3).toFixed(0)), " credits"))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, codeChangesLabel)), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, /* @__PURE__ */ React15.createElement(Text16, { color: "green" }, "+", u?.linesAdded || 0), " ", /* @__PURE__ */ React15.createElement(Text16, { color: "red" }, "-", u?.linesRemoved || 0))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 25 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, toolCallsLabel)), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, (u?.toolSuccess || 0) + (u?.toolFailure || 0) + (u?.toolDenied || 0), " ( "), /* @__PURE__ */ React15.createElement(Text16, { color: "green" }, "\u2713 ", u?.toolSuccess || 0), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text16, { color: "yellow" }, "\u2298 ", u?.toolDenied || 0), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text16, { color: "red" }, "\u2715 ", u?.toolFailure || 0), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " )")))), /* @__PURE__ */ React15.createElement(Text16, { dimColor: true, marginTop: 1, italic: true }, "(Press TAB to toggle Daily/Monthly views, SPACE for Model Breakdown, ESC to return)"));
17959
+ return /* @__PURE__ */ React15.createElement(Box14, { key: provider, flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 40 }, /* @__PURE__ */ React15.createElement(Text15, { color: "cyan", bold: true }, provider, ":")), /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, formatTokens(providerTotalTokens))), Object.entries(models).map(([modelName, stats]) => /* @__PURE__ */ React15.createElement(Box14, { key: modelName, flexDirection: "column", marginLeft: 4, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 36 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "\xBB ", modelName, ":")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(stats.tokens || 0))), /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box14, { width: 32 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens((stats.tokens || 0) - (stats.candidateTokens || 0)))), (stats.cachedTokens || 0) > 0 && /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 5 }, /* @__PURE__ */ React15.createElement(Box14, { width: 31 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(stats.cachedTokens))), /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box14, { width: 32 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(stats.candidateTokens || 0))))));
17960
+ })) : /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, { marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "SESSION TELEMETRY")), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Session Duration:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatMsDuration(Date.now() - SESSION_START_TIME))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Model Requests:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, sessionAgentCalls)), /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 23 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB API Time:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatMsDuration(sessionApiTime))), /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 23 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Tool Time:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatMsDuration(sessionToolTime))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Memory Agent:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, sessionBackgroundCalls)), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Tokens Consumed:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalTokens))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Active Context:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionStats.tokens))), sessionTotalTokens > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 23 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalTokens - sessionTotalCandidateTokens))), sessionTotalCachedTokens > 0 && /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box14, { width: 21 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalCachedTokens))), sessionTotalCandidateTokens > 0 && /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 23 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalCandidateTokens)))), sessionImageCount > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Images Made:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, sessionImageCount)), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Image Credits:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, Number(((sessionImageCredits || 0) * 1e3).toFixed(0)), " credits"))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Code Changes (Sess):")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, /* @__PURE__ */ React15.createElement(Text15, { color: "green" }, "+", linesAdded), " ", /* @__PURE__ */ React15.createElement(Text15, { color: "red" }, "-", linesRemoved))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Tool Calls (Sess):")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, sessionToolSuccess + sessionToolFailure + sessionToolDenied, " ( "), /* @__PURE__ */ React15.createElement(Text15, { color: "green" }, "\u2713 ", sessionToolSuccess), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text15, { color: "yellow" }, "\u2298 ", sessionToolDenied), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text15, { color: "red" }, "\u2715 ", sessionToolFailure), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " )"))), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, trackerTitle), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, timeLabel)), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatDuration(u?.duration || 0))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Model Requests:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, u?.agent || 0)), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Memory Agent:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, u?.background || 0)), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, tokensLabel)), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(u?.tokens || 0))), (u?.tokens || 0) > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 23 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens((u?.tokens || 0) - (u?.candidateTokens || 0)))), (u?.cachedTokens || 0) > 0 && /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box14, { width: 21 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(u.cachedTokens))), (u?.candidateTokens || 0) > 0 && /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 23 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(u.candidateTokens)))), (u?.imageCalls?.length || 0) > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, imagesLabel)), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, u.imageCalls.length)), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, imageCreditsLabel)), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, Number(((u.imageCalls.reduce((sum, c) => sum + c.cost, 0) || 0) * 1e3).toFixed(0)), " credits"))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, codeChangesLabel)), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, /* @__PURE__ */ React15.createElement(Text15, { color: "green" }, "+", u?.linesAdded || 0), " ", /* @__PURE__ */ React15.createElement(Text15, { color: "red" }, "-", u?.linesRemoved || 0))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 25 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, toolCallsLabel)), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, (u?.toolSuccess || 0) + (u?.toolFailure || 0) + (u?.toolDenied || 0), " ( "), /* @__PURE__ */ React15.createElement(Text15, { color: "green" }, "\u2713 ", u?.toolSuccess || 0), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text15, { color: "yellow" }, "\u2298 ", u?.toolDenied || 0), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " "), /* @__PURE__ */ React15.createElement(Text15, { color: "red" }, "\u2715 ", u?.toolFailure || 0), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " )")))), /* @__PURE__ */ React15.createElement(Text15, { dimColor: true, marginTop: 1, italic: true }, "(Press TAB to toggle Daily/Monthly views, SPACE for Model Breakdown, ESC to return)"));
18079
17961
  }
18080
17962
  case "autoExecDanger":
18081
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "SECURITY WARNING: YOLO MODE"), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1 }, "Turning this ON allows the agent to execute terminal commands automatically without requiring your approval for each step."), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1, color: "white" }, "RISKS INVOLVED:"), /* @__PURE__ */ React15.createElement(Text16, null, "\u2022 The agent may execute destructive commands (rm -rf, etc.) by mistake unless specified in sandbox rules."), /* @__PURE__ */ React15.createElement(Text16, null, "\u2022 Unintended system changes if the agent hallucinates a path or command."), /* @__PURE__ */ React15.createElement(Text16, null, "\u2022 Reduced control over the agent's step-by-step decision making."), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
17963
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "SECURITY WARNING: YOLO MODE"), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1 }, "Turning this ON allows the agent to execute terminal commands automatically without requiring your approval for each step."), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1, color: "white" }, "RISKS INVOLVED:"), /* @__PURE__ */ React15.createElement(Text15, null, "\u2022 The agent may execute destructive commands (rm -rf, etc.) by mistake unless specified in sandbox rules."), /* @__PURE__ */ React15.createElement(Text15, null, "\u2022 Unintended system changes if the agent hallucinates a path or command."), /* @__PURE__ */ React15.createElement(Text15, null, "\u2022 Reduced control over the agent's step-by-step decision making."), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18082
17964
  CommandMenu,
18083
17965
  {
18084
17966
  title: "Confirm Intent",
@@ -18095,7 +17977,7 @@ Selection: ${val}`,
18095
17977
  }
18096
17978
  )));
18097
17979
  case "externalDanger":
18098
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "SECURITY WARNING: EXTERNAL WORKSPACE ACCESS"), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1 }, "Turning this ON allows the agent to execute tools (Read/Write/Exec) outside of the current active workspace directory."), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1, color: "white" }, "RISKS INVOLVED:"), /* @__PURE__ */ React15.createElement(Text16, null, "\u2022 Access to sensitive system files (SSH keys, Browser data, etc.)"), /* @__PURE__ */ React15.createElement(Text16, null, "\u2022 Potential for accidental or malicious deletion of OS-critical files."), /* @__PURE__ */ React15.createElement(Text16, null, "\u2022 Unauthorized script execution across your entire file system."), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
17980
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "SECURITY WARNING: EXTERNAL WORKSPACE ACCESS"), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1 }, "Turning this ON allows the agent to execute tools (Read/Write/Exec) outside of the current active workspace directory."), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1, color: "white" }, "RISKS INVOLVED:"), /* @__PURE__ */ React15.createElement(Text15, null, "\u2022 Access to sensitive system files (SSH keys, Browser data, etc.)"), /* @__PURE__ */ React15.createElement(Text15, null, "\u2022 Potential for accidental or malicious deletion of OS-critical files."), /* @__PURE__ */ React15.createElement(Text15, null, "\u2022 Unauthorized script execution across your entire file system."), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18099
17981
  CommandMenu,
18100
17982
  {
18101
17983
  title: "Confirm Intent",
@@ -18112,7 +17994,7 @@ Selection: ${val}`,
18112
17994
  }
18113
17995
  )));
18114
17996
  case "doubleDanger":
18115
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "white", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "CRITICAL SECURITY WARNING: COMBINED SYSTEM RISK"), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1 }, "You are attempting to enable BOTH [YOLO Mode] and [External Workspace Access] simultaneously."), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1, color: "red", bold: true }, "THIS IS NOT RECOMMENDED."), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1, color: "white" }, "THE CRITICAL RISK:"), /* @__PURE__ */ React15.createElement(Text16, null, "The agent will have the power to execute any command across your entire system WITHOUT your approval or supervision."), /* @__PURE__ */ React15.createElement(Text16, { color: "red", italic: true, marginTop: 1 }, "A single hallucination or error could result in full system wipe or data theft."), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
17997
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "white", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "CRITICAL SECURITY WARNING: COMBINED SYSTEM RISK"), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1 }, "You are attempting to enable BOTH [YOLO Mode] and [External Workspace Access] simultaneously."), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1, color: "red", bold: true }, "THIS IS NOT RECOMMENDED."), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1, color: "white" }, "THE CRITICAL RISK:"), /* @__PURE__ */ React15.createElement(Text15, null, "The agent will have the power to execute any command across your entire system WITHOUT your approval or supervision."), /* @__PURE__ */ React15.createElement(Text15, { color: "red", italic: true, marginTop: 1 }, "A single hallucination or error could result in full system wipe or data theft."), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18116
17998
  CommandMenu,
18117
17999
  {
18118
18000
  title: "Final Confirmation",
@@ -18153,10 +18035,10 @@ Selection: ${val}`,
18153
18035
  }
18154
18036
  );
18155
18037
  case "deleteKey":
18156
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1 }, (() => {
18038
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1 }, (() => {
18157
18039
  const s = emojiSpace(2);
18158
- return /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, "DANGER: CLEAR CREDENTIALS");
18159
- })(), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1 }, "This will permanently delete all saved API keys in credential cache. You will need to enter it again to use Flux."), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18040
+ return /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "DANGER: CLEAR CREDENTIALS");
18041
+ })(), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1 }, "This will permanently delete all saved API keys in credential cache. You will need to enter it again to use Flux."), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18160
18042
  CommandMenu,
18161
18043
  {
18162
18044
  title: "Are you sure?",
@@ -18180,7 +18062,7 @@ Selection: ${val}`,
18180
18062
  case "exit":
18181
18063
  return null;
18182
18064
  case "ask":
18183
- return /* @__PURE__ */ React15.createElement(Box15, { width: "100%" }, /* @__PURE__ */ React15.createElement(
18065
+ return /* @__PURE__ */ React15.createElement(Box14, { width: "100%" }, /* @__PURE__ */ React15.createElement(
18184
18066
  AskUserModal_default,
18185
18067
  {
18186
18068
  question: pendingAsk?.question,
@@ -18195,7 +18077,7 @@ Selection: ${val}`,
18195
18077
  }
18196
18078
  ));
18197
18079
  case "revert":
18198
- return /* @__PURE__ */ React15.createElement(Box15, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(
18080
+ return /* @__PURE__ */ React15.createElement(Box14, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(
18199
18081
  RevertModal,
18200
18082
  {
18201
18083
  prompts: recentPrompts,
@@ -18266,7 +18148,7 @@ Selection: ${val}`,
18266
18148
  }
18267
18149
  ));
18268
18150
  case "resume":
18269
- return /* @__PURE__ */ React15.createElement(Box15, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(
18151
+ return /* @__PURE__ */ React15.createElement(Box14, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(
18270
18152
  ResumeModal,
18271
18153
  {
18272
18154
  onSelect: async (id) => {
@@ -18303,7 +18185,7 @@ Selection: ${val}`,
18303
18185
  }
18304
18186
  ));
18305
18187
  case "keybindingsPrompt":
18306
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "\u2328 CONFIGURE SHIFT+ENTER NEWLINE"), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1 }, "To support multi-line inputs with ", /* @__PURE__ */ React15.createElement(Text16, { bold: true, color: "white" }, "Shift + Enter"), " for newline, a terminal sequence keybinding needs to be added to your IDE configuration."), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1 }, "Would you like FluxFlow to automatically add this to your ", getIDEName(), " keybindings?"), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18188
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "\u2328 CONFIGURE SHIFT+ENTER NEWLINE"), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1 }, "To support multi-line inputs with ", /* @__PURE__ */ React15.createElement(Text15, { bold: true, color: "white" }, "Shift + Enter"), " for newline, a terminal sequence keybinding needs to be added to your IDE configuration."), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1 }, "Would you like FluxFlow to automatically add this to your ", getIDEName(), " keybindings?"), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18307
18189
  CommandMenu,
18308
18190
  {
18309
18191
  title: "Add Keybinding?",
@@ -18322,9 +18204,9 @@ Selection: ${val}`,
18322
18204
  }
18323
18205
  )));
18324
18206
  case "memory":
18325
- return /* @__PURE__ */ React15.createElement(Box15, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(MemoryModal, { onClose: () => setActiveView("chat") }));
18207
+ return /* @__PURE__ */ React15.createElement(Box14, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(MemoryModal, { onClose: () => setActiveView("chat") }));
18326
18208
  case "parserDownload":
18327
- return /* @__PURE__ */ React15.createElement(Box15, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(ParserDownloadModal, { onClose: () => setActiveView("settings") }));
18209
+ return /* @__PURE__ */ React15.createElement(Box14, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(ParserDownloadModal, { onClose: () => setActiveView("settings") }));
18328
18210
  case "profile":
18329
18211
  return /* @__PURE__ */ React15.createElement(
18330
18212
  ProfileForm,
@@ -18339,7 +18221,7 @@ Selection: ${val}`,
18339
18221
  }
18340
18222
  );
18341
18223
  case "resolution":
18342
- return /* @__PURE__ */ React15.createElement(Box15, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(
18224
+ return /* @__PURE__ */ React15.createElement(Box14, { width: "100%", alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(
18343
18225
  ResolutionModal,
18344
18226
  {
18345
18227
  data: resolutionData,
@@ -18358,7 +18240,7 @@ Selection: ${val}`,
18358
18240
  }
18359
18241
  ));
18360
18242
  case "approval":
18361
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "white", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "FILE WRITE PERMISSION"), /* @__PURE__ */ React15.createElement(Text16, { marginTop: 1 }, "The agent is attempting to modify: ", /* @__PURE__ */ React15.createElement(Text16, { color: "cyan" }, parseArgs(pendingApproval?.args || "{}").path || "Unknown File")), !isBridgeConnected() ? /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1, borderStyle: "single", borderColor: "#333", paddingX: 1, flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "--- PROPOSED CONTENT ---"), (() => {
18243
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "white", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "FILE WRITE PERMISSION"), /* @__PURE__ */ React15.createElement(Text15, { marginTop: 1 }, "The agent is attempting to modify: ", /* @__PURE__ */ React15.createElement(Text15, { color: "cyan" }, parseArgs(pendingApproval?.args || "{}").path || "Unknown File")), !isBridgeConnected() ? /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1, borderStyle: "single", borderColor: "#333", paddingX: 1, flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "--- PROPOSED CONTENT ---"), (() => {
18362
18244
  const args2 = parseArgs(pendingApproval?.args || "{}");
18363
18245
  const patchPairs = [];
18364
18246
  const indices = /* @__PURE__ */ new Set();
@@ -18384,15 +18266,15 @@ Selection: ${val}`,
18384
18266
  }
18385
18267
  });
18386
18268
  if (patchPairs.length > 0) {
18387
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", marginTop: 1 }, patchPairs.map((pair, idx) => {
18269
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1 }, patchPairs.map((pair, idx) => {
18388
18270
  const hasOld = pair.replace !== null;
18389
18271
  const hasNew = pair.new !== null;
18390
- return /* @__PURE__ */ React15.createElement(Box15, { key: idx, flexDirection: "column", marginTop: idx > 0 ? 1 : 0 }, patchPairs.length > 1 && /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "Block ", idx + 1, ":"), hasOld && /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Text16, { color: "red", wrap: "anywhere", bold: true }, "- ", pair.replace)), hasNew && /* @__PURE__ */ React15.createElement(Box15, { marginTop: hasOld ? 0 : 0 }, /* @__PURE__ */ React15.createElement(Text16, { color: "green", wrap: "anywhere", bold: true }, "+ ", pair.new.replace(/\[\/n\]?/g, "\\n"))));
18272
+ return /* @__PURE__ */ React15.createElement(Box14, { key: idx, flexDirection: "column", marginTop: idx > 0 ? 1 : 0 }, patchPairs.length > 1 && /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "Block ", idx + 1, ":"), hasOld && /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Text15, { color: "red", wrap: "anywhere", bold: true }, "- ", pair.replace)), hasNew && /* @__PURE__ */ React15.createElement(Box14, { marginTop: hasOld ? 0 : 0 }, /* @__PURE__ */ React15.createElement(Text15, { color: "green", wrap: "anywhere", bold: true }, "+ ", pair.new.replace(/\[\/n\]?/g, "\\n"))));
18391
18273
  }));
18392
18274
  }
18393
18275
  const newVal = args2.content || args2.ReplacementContent || args2.content_to_add || args2.replacementContent || args2.newContent || null;
18394
- return /* @__PURE__ */ React15.createElement(Text16, { color: "white", wrap: "anywhere" }, (newVal ? newVal.replace(/\[\/n\]?/g, "\\n") : null) || "Updating file content...");
18395
- })()) : /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1, paddingX: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "cyan", italic: true }, "\u26A1\uFE0F FluxFlow Companion is active. Review the changes in your editor.")), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18276
+ return /* @__PURE__ */ React15.createElement(Text15, { color: "white", wrap: "anywhere" }, (newVal ? newVal.replace(/\[\/n\]?/g, "\\n") : null) || "Updating file content...");
18277
+ })()) : /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1, paddingX: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "cyan", italic: true }, "\u26A1\uFE0F FluxFlow Companion is active. Review the changes in your editor.")), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18396
18278
  CommandMenu,
18397
18279
  {
18398
18280
  title: "Action Required",
@@ -18474,7 +18356,7 @@ Selection: ${val}`,
18474
18356
  }
18475
18357
  );
18476
18358
  case "terminalApproval":
18477
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "white", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "TERMINAL COMMAND OVERSIGHT"), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, null, "Agent requested to run: ", /* @__PURE__ */ React15.createElement(Text16, { color: "yellow", bold: true }, parseArgs(pendingApproval?.args || "{}").command || "Unknown Command"))), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18359
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "white", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "TERMINAL COMMAND OVERSIGHT"), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, null, "Agent requested to run: ", /* @__PURE__ */ React15.createElement(Text15, { color: "yellow", bold: true }, parseArgs(pendingApproval?.args || "{}").command || "Unknown Command"))), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18478
18360
  CommandMenu,
18479
18361
  {
18480
18362
  title: "Risk Assessment Required",
@@ -18490,8 +18372,8 @@ Selection: ${val}`,
18490
18372
  }
18491
18373
  )));
18492
18374
  default:
18493
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", marginTop: 1, flexShrink: 0, width: "100%" }, showBtwBox && btwResponse && /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%", marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Box15, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "INQUIRY RESPONSE"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, "[ ESC to Close ]")), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(CodeRenderer, { text: btwResponse, columns: terminalSize.columns - 6 }))), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, null, statusText ? /* @__PURE__ */ React15.createElement(Box15, { gap: 1 }, /* @__PURE__ */ React15.createElement(dist_default, { colors: ["#001a1a", "#080510", "#12021c"] }, /* @__PURE__ */ React15.createElement(build_default, null)), /* @__PURE__ */ React15.createElement(Text16, { color: "gray", bold: true, italic: true }, statusText), /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true, dimColor: true }, activeTime > 0 ? ` [${activeTime.toFixed(0)}s]` : "")) : /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, input.length > 0 && escPressCount ? "Press ESC again to clear input" : hasPasteBlock ? "Press CTRL + O to expand" : "Waiting for input...")), /* @__PURE__ */ React15.createElement(Box15, null, wittyPhrase && /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, wittyPhrase, " "), /* @__PURE__ */ React15.createElement(Text16, { color: "gray", bold: true }, "[ "), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, tempModelOverride || activeModel), /* @__PURE__ */ React15.createElement(Text16, { color: "gray", bold: true }, " ]"))), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { width: "100%", height: 1, overflow: "hidden" }, /* @__PURE__ */ React15.createElement(Text16, { color: "#555555" }, "\u2584".repeat(Math.max(1, terminalSize.columns)))), /* @__PURE__ */ React15.createElement(
18494
- Box15,
18375
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1, flexShrink: 0, width: "100%" }, showBtwBox && btwResponse && /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%", marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Box14, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "INQUIRY RESPONSE"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "[ ESC to Close ]")), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(CodeRenderer, { text: btwResponse, columns: terminalSize.columns - 6 }))), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, null, statusText ? /* @__PURE__ */ React15.createElement(Box14, { gap: 1 }, /* @__PURE__ */ React15.createElement(build_default, null), /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, italic: true }, statusText.trimEnd()), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, activeTime > 0 ? `[${activeTime.toFixed(0)}s]` : "")) : /* @__PURE__ */ React15.createElement(Text15, { color: "white", italic: true }, input.length > 0 && escPressCount ? "Press ESC again to clear input" : hasPasteBlock ? "Press CTRL + O to expand" : "Waiting for input...")), /* @__PURE__ */ React15.createElement(Box14, null, wittyPhrase && /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, wittyPhrase, " "), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, tempModelOverride || activeModel))), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { width: "100%", height: 1, overflow: "hidden" }, /* @__PURE__ */ React15.createElement(Text15, { color: "#555555" }, "\u2584".repeat(Math.max(1, terminalSize.columns)))), /* @__PURE__ */ React15.createElement(
18376
+ Box14,
18495
18377
  {
18496
18378
  backgroundColor: "#555555",
18497
18379
  paddingX: 1,
@@ -18499,7 +18381,7 @@ Selection: ${val}`,
18499
18381
  width: "100%",
18500
18382
  flexDirection: "column"
18501
18383
  },
18502
- /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "row", width: "100%", paddingY: 0 }, /* @__PURE__ */ React15.createElement(Box15, { flexShrink: 0, width: 4 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, isProcessing || isCompressing ? "\u2726 " : " \u276F ")), /* @__PURE__ */ React15.createElement(Box15, { flexGrow: 1 }, /* @__PURE__ */ React15.createElement(Box15, { flexGrow: 1, position: "relative" }, input === "" && /* @__PURE__ */ React15.createElement(Box15, { position: "absolute", paddingLeft: 0 }, activeCommand && !isTerminalFocused ? /* @__PURE__ */ React15.createElement(Text16, { color: "yellow" }, isTerminalWaitingForInput ? " Terminal is waiting for user input. Press TAB to interact" : " Press TAB to interact with terminal...") : activeCommand && isTerminalFocused ? /* @__PURE__ */ React15.createElement(Text16, { color: "yellow", bold: true }, " [ TERMINAL FOCUSED ] Type to interact, press TAB to exit...") : escPressCount === 1 ? /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, " Press ESC again to ", input.length > 0 ? "clear input" : "revert codebase to checkpoint", "...") : /* @__PURE__ */ React15.createElement(Text16, { color: "#cccccc" }, escPressed ? " Press ESC again to cancel the request." : isCompressing ? " Compressing session history, please wait..." : !isProcessing ? ` Send message, @file or /cmd ... (${terminalEnv.shortcut} for newline)` : " Enter a prompt to steer the agent.")), /* @__PURE__ */ React15.createElement(
18384
+ /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "row", width: "100%", paddingY: 0 }, /* @__PURE__ */ React15.createElement(Box14, { flexShrink: 0, width: 4 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, isProcessing || isCompressing ? "\u2726 " : " \u276F ")), /* @__PURE__ */ React15.createElement(Box14, { flexGrow: 1 }, /* @__PURE__ */ React15.createElement(Box14, { flexGrow: 1, position: "relative" }, input === "" && /* @__PURE__ */ React15.createElement(Box14, { position: "absolute", paddingLeft: 0 }, activeCommand && !isTerminalFocused ? /* @__PURE__ */ React15.createElement(Text15, { color: "yellow" }, isTerminalWaitingForInput ? " Terminal is waiting for user input. Press TAB to interact" : " Press TAB to interact with terminal...") : activeCommand && isTerminalFocused ? /* @__PURE__ */ React15.createElement(Text15, { color: "yellow", bold: true }, " [ TERMINAL FOCUSED ] Type to interact, press TAB to exit...") : escPressCount === 1 ? /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, " Press ESC again to ", input.length > 0 ? "clear input" : "revert codebase to checkpoint", "...") : /* @__PURE__ */ React15.createElement(Text15, { color: "#cccccc" }, escPressed ? " Press ESC again to cancel the request." : isCompressing ? " Compressing session history, please wait..." : !isProcessing ? ` Send message, @file or /cmd ... (${terminalEnv.shortcut} for newline)` : " Enter a prompt to steer the agent.")), /* @__PURE__ */ React15.createElement(
18503
18385
  MultilineInput,
18504
18386
  {
18505
18387
  key: `input-${inputKey}`,
@@ -18524,10 +18406,10 @@ Selection: ${val}`,
18524
18406
  }
18525
18407
  }
18526
18408
  )))))
18527
- ), /* @__PURE__ */ React15.createElement(Box15, { width: "100%", height: 1, overflow: "hidden" }, /* @__PURE__ */ React15.createElement(Text16, { color: "#555555" }, "\u2580".repeat(Math.max(1, terminalSize.columns))))));
18409
+ ), /* @__PURE__ */ React15.createElement(Box14, { width: "100%", height: 1, overflow: "hidden" }, /* @__PURE__ */ React15.createElement(Text15, { color: "#555555" }, "\u2580".repeat(Math.max(1, terminalSize.columns))))));
18528
18410
  }
18529
18411
  };
18530
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", width: "100%" }, showBridgePromo ? /* @__PURE__ */ React15.createElement(BridgePromo, { width: stdout?.columns || 80, height: stdout?.rows || 24, selectedIndex: promoSelectedIndex }) : /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, flexDirection: "column", width: "100%" }, /* @__PURE__ */ React15.createElement(Static, { key: `static-${clearKey}-${chatId}-${terminalSize.columns}-${terminalSize.rows}`, items: parsedBlocks.completed }, (block) => /* @__PURE__ */ React15.createElement(
18412
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", width: "100%" }, showBridgePromo ? /* @__PURE__ */ React15.createElement(BridgePromo, { width: stdout?.columns || 80, height: stdout?.rows || 24, selectedIndex: promoSelectedIndex }) : /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, flexDirection: "column", width: "100%" }, /* @__PURE__ */ React15.createElement(Static, { key: `static-${clearKey}-${chatId}-${terminalSize.columns}-${terminalSize.rows}`, items: parsedBlocks.completed }, (block) => /* @__PURE__ */ React15.createElement(
18531
18413
  BlockItem,
18532
18414
  {
18533
18415
  key: block.key,
@@ -18537,7 +18419,7 @@ Selection: ${val}`,
18537
18419
  aiProvider,
18538
18420
  version: versionFluxflow
18539
18421
  }
18540
- ))), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", paddingX: 1, paddingBottom: 1, width: "100%" }, (activeView === "chat" || ["ask", "approval", "terminalApproval"].includes(activeView)) && /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", width: "100%" }, parsedBlocks.active.map((block) => /* @__PURE__ */ React15.createElement(
18422
+ ))), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", paddingX: 1, paddingBottom: 1, width: "100%" }, (activeView === "chat" || ["ask", "approval", "terminalApproval"].includes(activeView)) && /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", width: "100%" }, parsedBlocks.active.map((block) => /* @__PURE__ */ React15.createElement(
18541
18423
  BlockItem,
18542
18424
  {
18543
18425
  key: block.key,
@@ -18547,7 +18429,7 @@ Selection: ${val}`,
18547
18429
  aiProvider,
18548
18430
  version: versionFluxflow
18549
18431
  }
18550
- )), activeCommand && /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(TerminalBox, { command: activeCommand, output: execOutput, isFocused: isTerminalFocused, isPty: isActiveCommandPty, terminalHeight: terminalSize.rows }))), isInitializing ? /* @__PURE__ */ React15.createElement(Box15, { borderStyle: "double", borderColor: "grey", padding: 1, flexShrink: 0 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, "Starting Flux Flow...")) : !apiKey ? /* @__PURE__ */ React15.createElement(Box15, { borderStyle: "round", borderColor: "white", padding: 0, flexDirection: "column", flexShrink: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", bold: true }, "API KEY REQUIRED")), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, flexDirection: "column" }, setupStep === 0 ? /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, "Select your Preferred Provider:"), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18432
+ )), activeCommand && /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(TerminalBox, { command: activeCommand, output: execOutput, isFocused: isTerminalFocused, isPty: isActiveCommandPty, terminalHeight: terminalSize.rows }))), isInitializing ? /* @__PURE__ */ React15.createElement(Box14, { borderStyle: "double", borderColor: "grey", padding: 1, flexShrink: 0 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, "Starting Flux Flow...")) : !apiKey ? /* @__PURE__ */ React15.createElement(Box14, { borderStyle: "round", borderColor: "white", padding: 0, flexDirection: "column", flexShrink: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", bold: true }, "API KEY REQUIRED")), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, flexDirection: "column" }, setupStep === 0 ? /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, "Select your Preferred Provider:"), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(
18551
18433
  CommandMenu,
18552
18434
  {
18553
18435
  items: [
@@ -18561,7 +18443,7 @@ Selection: ${val}`,
18561
18443
  setSetupStep(1);
18562
18444
  }
18563
18445
  }
18564
- ))) : /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, "Please enter your ", aiProvider, " API Key to initialize the agent (If billing is enabled set /settings \u2192 Others \u2192 API Strategy to use premium models. Set budget limit at /budgets.)."), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", bold: true }, " ", ">", " "), /* @__PURE__ */ React15.createElement(
18446
+ ))) : /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, "Please enter your ", aiProvider, " API Key to initialize the agent (If billing is enabled set /settings \u2192 Others \u2192 API Strategy to use premium models. Set budget limit at /budgets.)."), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", bold: true }, " ", ">", " "), /* @__PURE__ */ React15.createElement(
18565
18447
  TextInput4,
18566
18448
  {
18567
18449
  value: tempKey,
@@ -18569,7 +18451,7 @@ Selection: ${val}`,
18569
18451
  onSubmit: handleSetup,
18570
18452
  mask: "*"
18571
18453
  }
18572
- )), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, "(Press ESC to go back to provider selection)")))), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, setupStep === 0 ? "(Use arrows to select and Enter to confirm)" : "(Press Enter to confirm and initialize)"))) : renderActiveView(), confirmExit && /* @__PURE__ */ React15.createElement(Box15, { borderStyle: "round", borderColor: "white", paddingX: 2, marginY: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, "\u{1F534} EXIT CONFIRMATION: "), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, "Press "), /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, "CTRL + C"), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " again to exit (", exitCountdown, "s). Press "), /* @__PURE__ */ React15.createElement(Text16, { color: "gray", bold: true }, "ESC"), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, " to cancel.")), suggestions.length > 0 && (() => {
18454
+ )), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, "(Press ESC to go back to provider selection)")))), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, setupStep === 0 ? "(Use arrows to select and Enter to confirm)" : "(Press Enter to confirm and initialize)"))) : renderActiveView(), confirmExit && /* @__PURE__ */ React15.createElement(Box14, { borderStyle: "round", borderColor: "white", paddingX: 2, marginY: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "\u{1F534} EXIT CONFIRMATION: "), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, "Press "), /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "CTRL + C"), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " again to exit (", exitCountdown, "s). Press "), /* @__PURE__ */ React15.createElement(Text15, { color: "gray", bold: true }, "ESC"), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " to cancel.")), suggestions.length > 0 && (() => {
18573
18455
  const windowSize = 5;
18574
18456
  let startIdx = suggestionOffsetRef.current;
18575
18457
  if (selectedIndex < startIdx) {
@@ -18582,13 +18464,13 @@ Selection: ${val}`,
18582
18464
  const visible = suggestions.slice(startIdx, startIdx + windowSize);
18583
18465
  const remaining = suggestions.length - (startIdx + visible.length);
18584
18466
  return /* @__PURE__ */ React15.createElement(
18585
- Box15,
18467
+ Box14,
18586
18468
  {
18587
18469
  flexDirection: "column",
18588
18470
  width: "100%",
18589
18471
  marginBottom: 1
18590
18472
  },
18591
- /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true }, suggestions[0]?.cmd?.startsWith("@") ? "FILE SUGGESTIONS" : "COMMAND SUGGESTIONS"), suggestions[0]?.cmd?.startsWith("@") ? /* @__PURE__ */ React15.createElement(Text16, { color: "gray", italic: true }, "(Use '#Lstart-Lend' to specify line numbers)") : input.startsWith("/model") && apiTier === "Free" ? (() => {
18473
+ /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, suggestions[0]?.cmd?.startsWith("@") ? "FILE SUGGESTIONS" : "COMMAND SUGGESTIONS"), suggestions[0]?.cmd?.startsWith("@") ? /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, "(Use '#Lstart-Lend' to specify line numbers)") : input.startsWith("/model") && apiTier === "Free" ? (() => {
18592
18474
  let url = "https://aistudio.google.com/billing";
18593
18475
  let label2 = "billing";
18594
18476
  if (aiProvider === "DeepSeek") {
@@ -18601,23 +18483,23 @@ Selection: ${val}`,
18601
18483
  url = "https://build.nvidia.com/settings/api-keys";
18602
18484
  label2 = "billing";
18603
18485
  }
18604
- return /* @__PURE__ */ React15.createElement(Text16, { color: "gray", dimColor: true, italic: true }, "Paid API Strategy has more models. Configure ", /* @__PURE__ */ React15.createElement(Text16, { color: "cyan", underline: true }, `\x1B]8;;${url}\x07${label2}\x1B]8;;\x07`), " & /settings");
18486
+ return /* @__PURE__ */ React15.createElement(Text15, { color: "gray", dimColor: true, italic: true }, "Paid API Strategy has more models. Configure ", /* @__PURE__ */ React15.createElement(Text15, { color: "cyan", underline: true }, `\x1B]8;;${url}\x07${label2}\x1B]8;;\x07`), " & /settings");
18605
18487
  })() : null),
18606
18488
  visible.map((s, i) => {
18607
18489
  const actualIdx = startIdx + i;
18608
18490
  const isActive = actualIdx === selectedIndex;
18609
18491
  const isGemmaDisabled = s.cmd === "gemma-4-31b-it" && apiTier !== "Free";
18610
18492
  return /* @__PURE__ */ React15.createElement(
18611
- Box15,
18493
+ Box14,
18612
18494
  {
18613
18495
  key: s.cmd,
18614
18496
  flexDirection: "row",
18615
18497
  backgroundColor: isActive ? "#2a2a2a" : void 0,
18616
18498
  paddingX: 1
18617
18499
  },
18618
- /* @__PURE__ */ React15.createElement(Box15, { width: 3 }, /* @__PURE__ */ React15.createElement(Text16, { color: isActive ? "white" : "gray", bold: isActive }, isActive ? " \u276F" : " ")),
18619
- /* @__PURE__ */ React15.createElement(Box15, { width: 55 }, /* @__PURE__ */ React15.createElement(
18620
- Text16,
18500
+ /* @__PURE__ */ React15.createElement(Box14, { width: 3 }, /* @__PURE__ */ React15.createElement(Text15, { color: isActive ? "white" : "gray", bold: isActive }, isActive ? " \u276F" : " ")),
18501
+ /* @__PURE__ */ React15.createElement(Box14, { width: 55 }, /* @__PURE__ */ React15.createElement(
18502
+ Text15,
18621
18503
  {
18622
18504
  color: isGemmaDisabled ? "gray" : isActive ? "white" : "grey",
18623
18505
  bold: isActive
@@ -18628,12 +18510,12 @@ Selection: ${val}`,
18628
18510
  return parts[parts.length - 1];
18629
18511
  })() : s.cmd
18630
18512
  )),
18631
- /* @__PURE__ */ React15.createElement(Box15, { flexGrow: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: `${!isActive ? "gray" : "white"}`, italic: true }, s.desc))
18513
+ /* @__PURE__ */ React15.createElement(Box14, { flexGrow: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: `${!isActive ? "gray" : "white"}`, italic: true }, s.desc))
18632
18514
  );
18633
18515
  }),
18634
- suggestions.length > 5 && /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, height: 1 }, remaining > 0 ? /* @__PURE__ */ React15.createElement(Text16, { color: "gray", dimColor: true, italic: true }, " ... (", remaining, " more commands available)") : /* @__PURE__ */ React15.createElement(Text16, { color: "gray", dimColor: true, italic: true }, " (End of list)"))
18516
+ suggestions.length > 5 && /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, height: 1 }, remaining > 0 ? /* @__PURE__ */ React15.createElement(Text15, { color: "gray", dimColor: true, italic: true }, " ... (", remaining, " more commands available)") : /* @__PURE__ */ React15.createElement(Text15, { color: "gray", dimColor: true, italic: true }, " (End of list)"))
18635
18517
  );
18636
- })(), /* @__PURE__ */ React15.createElement(Box15, { flexShrink: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(
18518
+ })(), /* @__PURE__ */ React15.createElement(Box14, { flexShrink: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(
18637
18519
  StatusBar_default,
18638
18520
  {
18639
18521
  mode,
@@ -18652,7 +18534,7 @@ Selection: ${val}`,
18652
18534
  const agentActiveMs = sessionApiTime + sessionToolTime;
18653
18535
  const apiPercent = agentActiveMs > 0 ? (sessionApiTime / agentActiveMs * 100).toFixed(1) : "0.0";
18654
18536
  const toolPercent = agentActiveMs > 0 ? (sessionToolTime / agentActiveMs * 100).toFixed(1) : "0.0";
18655
- return /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", paddingX: 3, paddingY: 1, borderColor: "grey", width: Math.min(100, (stdout?.columns || 100) - 2), marginTop: 0, marginBottom: 0 }, /* @__PURE__ */ React15.createElement(Box15, { marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text16, { bold: true }, gradient2(["blue", "purple"])("Agent powering down. Goodbye!"))), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "Interaction Summary"), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Session ID:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, chatId)), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Tool Calls:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, sessionToolSuccess + sessionToolFailure + sessionToolDenied, " ( ", /* @__PURE__ */ React15.createElement(Text16, { color: "green" }, "\u2713 ", sessionToolSuccess), " ", /* @__PURE__ */ React15.createElement(Text16, { color: "yellow" }, "\u2298 ", sessionToolDenied), " ", /* @__PURE__ */ React15.createElement(Text16, { color: "red" }, "\u2715 ", sessionToolFailure), " )")), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Success Rate:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, successRate, "%")), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Code Changes:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, /* @__PURE__ */ React15.createElement(Text16, { color: "green" }, "+", linesAdded), " ", /* @__PURE__ */ React15.createElement(Text16, { color: "red" }, "-", linesRemoved))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Tokens Consumed:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalTokens))), sessionTotalTokens > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 18 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalTokens - sessionTotalCandidateTokens))), sessionTotalCachedTokens > 0 && /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box15, { width: 16 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalCachedTokens))), sessionTotalCandidateTokens > 0 && /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 18 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatTokens(sessionTotalCandidateTokens)))), sessionImageCount > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Images Made:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, sessionImageCount)), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Image Credits:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, Number(((sessionImageCredits || 0) * 1e3).toFixed(0)), " credits")))), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, "Performance"), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Wall Time:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatMsDuration(wallTimeMs))), /* @__PURE__ */ React15.createElement(Box15, null, /* @__PURE__ */ React15.createElement(Box15, { width: 20 }, /* @__PURE__ */ React15.createElement(Text16, { color: "blue" }, "Agent Active:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatMsDuration(agentActiveMs))), /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 18 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB API Time:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatMsDuration(sessionApiTime), " (", apiPercent, "%)")), /* @__PURE__ */ React15.createElement(Box15, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box15, { width: 18 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "\xBB Tool Time:")), /* @__PURE__ */ React15.createElement(Text16, { color: "white" }, formatMsDuration(sessionToolTime), " (", toolPercent, "%)"))));
18537
+ return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", paddingX: 3, paddingY: 1, borderColor: "grey", width: Math.min(100, (stdout?.columns || 100) - 2), marginTop: 0, marginBottom: 0 }, /* @__PURE__ */ React15.createElement(Box14, { marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Text15, { bold: true }, gradient2(["blue", "purple"])("Agent powering down. Goodbye!"))), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "Interaction Summary"), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Session ID:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, chatId)), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Tool Calls:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, sessionToolSuccess + sessionToolFailure + sessionToolDenied, " ( ", /* @__PURE__ */ React15.createElement(Text15, { color: "green" }, "\u2713 ", sessionToolSuccess), " ", /* @__PURE__ */ React15.createElement(Text15, { color: "yellow" }, "\u2298 ", sessionToolDenied), " ", /* @__PURE__ */ React15.createElement(Text15, { color: "red" }, "\u2715 ", sessionToolFailure), " )")), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Success Rate:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, successRate, "%")), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Code Changes:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, /* @__PURE__ */ React15.createElement(Text15, { color: "green" }, "+", linesAdded), " ", /* @__PURE__ */ React15.createElement(Text15, { color: "red" }, "-", linesRemoved))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Tokens Consumed:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalTokens))), sessionTotalTokens > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 18 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Input Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalTokens - sessionTotalCandidateTokens))), sessionTotalCachedTokens > 0 && /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 4 }, /* @__PURE__ */ React15.createElement(Box14, { width: 16 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Cached:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalCachedTokens))), sessionTotalCandidateTokens > 0 && /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 18 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Output Tokens:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatTokens(sessionTotalCandidateTokens)))), sessionImageCount > 0 && /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Images Made:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, sessionImageCount)), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Image Credits:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, Number(((sessionImageCredits || 0) * 1e3).toFixed(0)), " credits")))), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "Performance"), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Wall Time:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatMsDuration(wallTimeMs))), /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Box14, { width: 20 }, /* @__PURE__ */ React15.createElement(Text15, { color: "blue" }, "Agent Active:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatMsDuration(agentActiveMs))), /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 18 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB API Time:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatMsDuration(sessionApiTime), " (", apiPercent, "%)")), /* @__PURE__ */ React15.createElement(Box14, { marginLeft: 2 }, /* @__PURE__ */ React15.createElement(Box14, { width: 18 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "\xBB Tool Time:")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, formatMsDuration(sessionToolTime), " (", toolPercent, "%)"))));
18656
18538
  })())));
18657
18539
  }
18658
18540
  var shouldClearValue, getPrefilledValue, getIDEName, getIDEDirName, getKeybindingsPath, parseJsonc, hasShiftEnterBinding, getPromoOptions, BridgePromo, SESSION_START_TIME, CHANGELOG_URL, DOCS_URL, linesAdded, linesRemoved, packageJsonPath, packageJson, versionFluxflow, updatedOn, ResolutionModal, parseAgentText, getProjectFiles, cachedShortcut;
@@ -18677,7 +18559,6 @@ var init_app = __esm({
18677
18559
  init_revert();
18678
18560
  init_gemini_quotes();
18679
18561
  init_witty_phrases();
18680
- init_dist();
18681
18562
  init_RevertModal();
18682
18563
  init_usage();
18683
18564
  init_TerminalBox();
@@ -18771,7 +18652,7 @@ var init_app = __esm({
18771
18652
  const ideName = getIDEName();
18772
18653
  const options = getPromoOptions(ideName);
18773
18654
  return /* @__PURE__ */ React15.createElement(
18774
- Box15,
18655
+ Box14,
18775
18656
  {
18776
18657
  flexDirection: "column",
18777
18658
  alignItems: "center",
@@ -18779,8 +18660,8 @@ var init_app = __esm({
18779
18660
  width,
18780
18661
  height
18781
18662
  },
18782
- /* @__PURE__ */ React15.createElement(Box15, { marginBottom: 1, width: Math.min(80, width - 4), justifyContent: "flex-start" }, /* @__PURE__ */ React15.createElement(Text16, null, getFluxLogo(versionFluxflow))),
18783
- /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "double", borderColor: "grey", paddingX: 3, paddingY: 1, width: Math.min(80, width - 4) }, /* @__PURE__ */ React15.createElement(Text16, { bold: true, color: "white", textAlign: "center" }, "\u{1F680} UPGRADE YOUR WORKFLOW"), /* @__PURE__ */ React15.createElement(Box15, { marginY: 1, flexDirection: "column", alignItems: "left" }, /* @__PURE__ */ React15.createElement(Text16, null, "You're in ", /* @__PURE__ */ React15.createElement(Text16, { bold: true, color: "cyan" }, ideName), ", but the ", /* @__PURE__ */ React15.createElement(Text16, { bold: true, color: "white" }, "FluxFlow-CLI Companion"), " is not installed."), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Real-time IDE context & Error Resolution"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Auto-open files created by agent"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Native DIFFing for AI edits"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Direct IDE context sharing"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Surgical Diagnostic Sync"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Native Right-Click \u276F Chat integration"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Live Status in IDE"), /* @__PURE__ */ React15.createElement(Text16, { color: "gray" }, " \u2705 Clickable terminal-to-code links"))), /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", marginTop: 1 }, options.map((opt, i) => /* @__PURE__ */ React15.createElement(Box15, { key: i }, /* @__PURE__ */ React15.createElement(Text16, { color: selectedIndex === i ? "yellow" : "white", bold: selectedIndex === i }, selectedIndex === i ? " \u276F " : " ", opt.label)))), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1, alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(Text16, { dimColor: true, italic: true }, "(Use arrows to navigate, Enter to select)")))
18663
+ /* @__PURE__ */ React15.createElement(Box14, { marginBottom: 1, width: Math.min(80, width - 4), justifyContent: "flex-start" }, /* @__PURE__ */ React15.createElement(Text15, null, getFluxLogo(versionFluxflow))),
18664
+ /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "double", borderColor: "grey", paddingX: 3, paddingY: 1, width: Math.min(80, width - 4) }, /* @__PURE__ */ React15.createElement(Text15, { bold: true, color: "white", textAlign: "center" }, "\u{1F680} UPGRADE YOUR WORKFLOW"), /* @__PURE__ */ React15.createElement(Box14, { marginY: 1, flexDirection: "column", alignItems: "left" }, /* @__PURE__ */ React15.createElement(Text15, null, "You're in ", /* @__PURE__ */ React15.createElement(Text15, { bold: true, color: "cyan" }, ideName), ", but the ", /* @__PURE__ */ React15.createElement(Text15, { bold: true, color: "white" }, "FluxFlow-CLI Companion"), " is not installed."), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Real-time IDE context & Error Resolution"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Auto-open files created by agent"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Native DIFFing for AI edits"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Direct IDE context sharing"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Surgical Diagnostic Sync"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Native Right-Click \u276F Chat integration"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Live Status in IDE"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, " \u2705 Clickable terminal-to-code links"))), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1 }, options.map((opt, i) => /* @__PURE__ */ React15.createElement(Box14, { key: i }, /* @__PURE__ */ React15.createElement(Text15, { color: selectedIndex === i ? "yellow" : "white", bold: selectedIndex === i }, selectedIndex === i ? " \u276F " : " ", opt.label)))), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1, alignItems: "center", justifyContent: "center" }, /* @__PURE__ */ React15.createElement(Text15, { dimColor: true, italic: true }, "(Use arrows to navigate, Enter to select)")))
18784
18665
  );
18785
18666
  };
18786
18667
  SESSION_START_TIME = Date.now();
@@ -18792,7 +18673,7 @@ var init_app = __esm({
18792
18673
  packageJson = JSON.parse(fs22.readFileSync(packageJsonPath, "utf8"));
18793
18674
  versionFluxflow = packageJson.version;
18794
18675
  updatedOn = packageJson.date || "2026-05-20";
18795
- ResolutionModal = ({ data, onResolve, onEdit }) => /* @__PURE__ */ React15.createElement(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "grey", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "white", bold: true, underline: true }, data.startsWith("/btw") ? "QUESTION" : "STEERING HINT", " RESOLUTION")), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, null, "The agent already finished the task before your ", data.startsWith("/btw") ? "question" : "hint", " was consumed.")), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 1, backgroundColor: "#222", paddingX: 2, width: "100%" }, /* @__PURE__ */ React15.createElement(Text16, { italic: true, color: "gray" }, '"', data.replace("/btw", "").trim(), '"')), /* @__PURE__ */ React15.createElement(Box15, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text16, { color: "grey" }, "How would you like to proceed?")), /* @__PURE__ */ React15.createElement(Box15, { marginTop: 0 }, /* @__PURE__ */ React15.createElement(
18676
+ ResolutionModal = ({ data, onResolve, onEdit }) => /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", padding: 0, width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, data.startsWith("/btw") ? "QUESTION" : "STEERING HINT", " RESOLUTION")), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, null, "The agent already finished the task before your ", data.startsWith("/btw") ? "question" : "hint", " was consumed.")), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1, backgroundColor: "#222", paddingX: 2, width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { italic: true, color: "gray" }, '"', data.replace("/btw", "").trim(), '"')), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React15.createElement(Text15, { color: "grey" }, "How would you like to proceed?")), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 0 }, /* @__PURE__ */ React15.createElement(
18796
18677
  CommandMenu,
18797
18678
  {
18798
18679
  title: "Select Action",
@@ -19065,7 +18946,7 @@ if (isBundled && !process.execArgv.some((arg) => arg.includes("max-old-space-siz
19065
18946
  const promptPackageManager = async () => {
19066
18947
  const React17 = (await import("react")).default;
19067
18948
  const { useState: useState15 } = React17;
19068
- const { render: render2, Box: Box16, Text: Text17 } = await import("ink");
18949
+ const { render: render2, Box: Box15, Text: Text16 } = await import("ink");
19069
18950
  const SelectInput3 = (await import("ink-select-input")).default;
19070
18951
  const TextInput5 = (await import("ink-text-input")).default;
19071
18952
  return new Promise((resolve) => {
@@ -19077,7 +18958,7 @@ if (isBundled && !process.execArgv.some((arg) => arg.includes("max-old-space-siz
19077
18958
  { label: "Custom Command", value: "custom" }
19078
18959
  ];
19079
18960
  const CustomItem2 = ({ label: label2, isSelected }) => {
19080
- return /* @__PURE__ */ React17.createElement(Box16, { width: "100%" }, /* @__PURE__ */ React17.createElement(Text17, { bold: isSelected }, "\u2514\u2500 ", isSelected ? "\x1B[32m\u25CF\x1B[0m" : "\u25CB", " ", label2));
18961
+ return /* @__PURE__ */ React17.createElement(Box15, { width: "100%" }, /* @__PURE__ */ React17.createElement(Text16, { bold: isSelected }, "\u2514\u2500 ", isSelected ? "\x1B[32m\u25CF\x1B[0m" : "\u25CB", " ", label2));
19081
18962
  };
19082
18963
  let unmountFn;
19083
18964
  const PromptComponent = () => {
@@ -19094,16 +18975,16 @@ if (isBundled && !process.execArgv.some((arg) => arg.includes("max-old-space-siz
19094
18975
  cleanupAndResolve({ manager: "custom", customCommand: value });
19095
18976
  };
19096
18977
  if (step === "custom") {
19097
- return /* @__PURE__ */ React17.createElement(Box16, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React17.createElement(Box16, { marginBottom: 1 }, /* @__PURE__ */ React17.createElement(Text17, { color: "magenta", bold: true }, "\u{1F527} Enter custom update command:")), /* @__PURE__ */ React17.createElement(Box16, { flexDirection: "row" }, /* @__PURE__ */ React17.createElement(Text17, { color: "cyan", bold: true }, " \u276F "), /* @__PURE__ */ React17.createElement(
18978
+ return /* @__PURE__ */ React17.createElement(Box15, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React17.createElement(Box15, { marginBottom: 1 }, /* @__PURE__ */ React17.createElement(Text16, { color: "magenta", bold: true }, "\u{1F527} Enter custom update command:")), /* @__PURE__ */ React17.createElement(Box15, { flexDirection: "row" }, /* @__PURE__ */ React17.createElement(Text16, { color: "cyan", bold: true }, " \u276F "), /* @__PURE__ */ React17.createElement(
19098
18979
  TextInput5,
19099
18980
  {
19100
18981
  value: customCommand2,
19101
18982
  onChange: setCustomCommand,
19102
18983
  onSubmit: handleCustomSubmit
19103
18984
  }
19104
- )), /* @__PURE__ */ React17.createElement(Box16, { marginTop: 1 }, /* @__PURE__ */ React17.createElement(Text17, { color: "gray", dimColor: true, italic: true }, " (Press Enter to confirm)")));
18985
+ )), /* @__PURE__ */ React17.createElement(Box15, { marginTop: 1 }, /* @__PURE__ */ React17.createElement(Text16, { color: "gray", dimColor: true, italic: true }, " (Press Enter to confirm)")));
19105
18986
  }
19106
- return /* @__PURE__ */ React17.createElement(Box16, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React17.createElement(Box16, { marginBottom: 1 }, /* @__PURE__ */ React17.createElement(Text17, { color: "magenta", bold: true }, "\u{1F4E6} Select a package manager for the update:")), /* @__PURE__ */ React17.createElement(
18987
+ return /* @__PURE__ */ React17.createElement(Box15, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React17.createElement(Box15, { marginBottom: 1 }, /* @__PURE__ */ React17.createElement(Text16, { color: "magenta", bold: true }, "\u{1F4E6} Select a package manager for the update:")), /* @__PURE__ */ React17.createElement(
19107
18988
  SelectInput3,
19108
18989
  {
19109
18990
  items,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "2.16.0",
3
+ "version": "2.16.2",
4
4
  "date": "2026-07-01",
5
5
  "description": "A high-fidelity agentic terminal assistant for the Flux Era.",
6
6
  "keywords": [