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.
- package/dist/fluxflow.js +141 -260
- 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
|
|
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(
|
|
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 (
|
|
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
|
|
3187
|
-
const parts = text.split(
|
|
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
|
|
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 =
|
|
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 =
|
|
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:
|
|
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
|
|
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 =
|
|
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 =
|
|
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 = (
|
|
5580
|
-
const
|
|
5581
|
-
|
|
5582
|
-
let
|
|
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 &&
|
|
5657
|
+
if (isWin && (shellType === "pwsh" || shellType === "powershell") && err.code === "ENOENT") {
|
|
5645
5658
|
return false;
|
|
5646
5659
|
}
|
|
5647
|
-
runStandardSpawn(resolve, command, rawCommand, netEnv, onChunk,
|
|
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,
|
|
5664
|
+
runStandardSpawn(resolve, command, rawCommand, netEnv, onChunk, shellType, systemSettings);
|
|
5652
5665
|
return true;
|
|
5653
5666
|
}
|
|
5654
5667
|
};
|
|
5655
5668
|
if (isWin) {
|
|
5656
|
-
if (!attempt(
|
|
5657
|
-
attempt(
|
|
5669
|
+
if (!attempt("pwsh")) {
|
|
5670
|
+
if (!attempt("powershell")) {
|
|
5671
|
+
attempt("cmd");
|
|
5672
|
+
}
|
|
5658
5673
|
}
|
|
5659
5674
|
} else {
|
|
5660
|
-
attempt(
|
|
5675
|
+
attempt("bash");
|
|
5661
5676
|
}
|
|
5662
5677
|
});
|
|
5663
5678
|
};
|
|
5664
|
-
runStandardSpawn = (resolve, command, rawCommand, netEnv, onChunk,
|
|
5679
|
+
runStandardSpawn = (resolve, command, rawCommand, netEnv, onChunk, shellType = "powershell", systemSettings = {}) => {
|
|
5665
5680
|
const isWin = process.platform === "win32";
|
|
5666
|
-
|
|
5667
|
-
let
|
|
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 &&
|
|
5746
|
-
|
|
5747
|
-
|
|
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
|
|
8877
|
-
const match = rawArgs.match(
|
|
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
|
|
8910
|
-
const match = rawArgs.match(
|
|
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,
|
|
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(
|
|
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(
|
|
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,
|
|
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: "
|
|
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
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
14378
|
-
|
|
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(
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
17879
|
-
}), /* @__PURE__ */ React15.createElement(
|
|
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(
|
|
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(
|
|
17959
|
-
}), resetInfo ? /* @__PURE__ */ React15.createElement(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
18159
|
-
})(), /* @__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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
18395
|
-
})()) : /* @__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(
|
|
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(
|
|
18494
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
18467
|
+
Box14,
|
|
18586
18468
|
{
|
|
18587
18469
|
flexDirection: "column",
|
|
18588
18470
|
width: "100%",
|
|
18589
18471
|
marginBottom: 1
|
|
18590
18472
|
},
|
|
18591
|
-
/* @__PURE__ */ React15.createElement(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
18619
|
-
/* @__PURE__ */ React15.createElement(
|
|
18620
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
18783
|
-
/* @__PURE__ */ React15.createElement(
|
|
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(
|
|
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:
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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,
|