fluxflow-cli 2.11.1 → 2.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fluxflow.js +50 -10
- package/package.json +2 -2
package/dist/fluxflow.js
CHANGED
|
@@ -3146,8 +3146,7 @@ function SettingsMenu({
|
|
|
3146
3146
|
Text6,
|
|
3147
3147
|
{
|
|
3148
3148
|
color: isSelected ? "white" : "grey",
|
|
3149
|
-
bold: isSelected
|
|
3150
|
-
underline: isParserDownload
|
|
3149
|
+
bold: isSelected
|
|
3151
3150
|
},
|
|
3152
3151
|
isSelected ? "\u276F " : " ",
|
|
3153
3152
|
item.label
|
|
@@ -8741,7 +8740,9 @@ ${ideErr} [/ERROR]`;
|
|
|
8741
8740
|
if (splitPoint !== -1) break;
|
|
8742
8741
|
}
|
|
8743
8742
|
if (splitPoint !== -1) {
|
|
8744
|
-
if (splitPoint > 0)
|
|
8743
|
+
if (splitPoint > 0) {
|
|
8744
|
+
msgs.push({ type: "text", content: remaining.substring(0, splitPoint) });
|
|
8745
|
+
}
|
|
8745
8746
|
isBufferingToolCall = true;
|
|
8746
8747
|
toolCallBuffer = remaining.substring(splitPoint);
|
|
8747
8748
|
remaining = "";
|
|
@@ -8853,6 +8854,7 @@ ${ideErr} [/ERROR]`;
|
|
|
8853
8854
|
if (aiProvider === "Google") {
|
|
8854
8855
|
pendingGoogleText += dedupeClean;
|
|
8855
8856
|
} else {
|
|
8857
|
+
yield* flushGoogleBuffer2();
|
|
8856
8858
|
const msgs = getBufferedMessages(dedupeClean);
|
|
8857
8859
|
for (const m of msgs) yield m;
|
|
8858
8860
|
}
|
|
@@ -8867,6 +8869,7 @@ ${ideErr} [/ERROR]`;
|
|
|
8867
8869
|
if (aiProvider === "Google") {
|
|
8868
8870
|
pendingGoogleText += chunkText;
|
|
8869
8871
|
} else {
|
|
8872
|
+
yield* flushGoogleBuffer2();
|
|
8870
8873
|
const msgs = getBufferedMessages(chunkText);
|
|
8871
8874
|
for (const m of msgs) yield m;
|
|
8872
8875
|
}
|
|
@@ -9878,6 +9881,7 @@ ${boxBottom}` };
|
|
|
9878
9881
|
toolCallPointer++;
|
|
9879
9882
|
}
|
|
9880
9883
|
if (aiProvider === "Google" && pendingGoogleText && Date.now() - lastGoogleFlushTime >= 150) {
|
|
9884
|
+
yield* flushGoogleBuffer2();
|
|
9881
9885
|
const msgs = getBufferedMessages(pendingGoogleText);
|
|
9882
9886
|
for (const m of msgs) yield m;
|
|
9883
9887
|
pendingGoogleText = "";
|
|
@@ -9922,6 +9926,7 @@ ${boxBottom}` };
|
|
|
9922
9926
|
if (aiProvider === "Google") {
|
|
9923
9927
|
pendingGoogleText += dedupeClean;
|
|
9924
9928
|
} else {
|
|
9929
|
+
yield* flushGoogleBuffer2();
|
|
9925
9930
|
const msgs = getBufferedMessages(dedupeClean);
|
|
9926
9931
|
for (const m of msgs) yield m;
|
|
9927
9932
|
}
|
|
@@ -10289,8 +10294,10 @@ var init_ResumeModal = __esm({
|
|
|
10289
10294
|
|
|
10290
10295
|
// src/components/MemoryModal.jsx
|
|
10291
10296
|
import React10, { useState as useState7, useEffect as useEffect5 } from "react";
|
|
10292
|
-
import { Box as Box10, Text as Text10, useInput as useInput5 } from "ink";
|
|
10297
|
+
import { Box as Box10, Text as Text10, useInput as useInput5, useStdout } from "ink";
|
|
10293
10298
|
function MemoryModal({ onClose }) {
|
|
10299
|
+
const { stdout } = useStdout();
|
|
10300
|
+
const columns = stdout?.columns || 80;
|
|
10294
10301
|
const [memories, setMemories] = useState7([]);
|
|
10295
10302
|
const [selectedIndex, setSelectedIndex] = useState7(0);
|
|
10296
10303
|
const [isMemoryOn, setIsMemoryOn] = useState7(true);
|
|
@@ -10322,9 +10329,42 @@ function MemoryModal({ onClose }) {
|
|
|
10322
10329
|
}
|
|
10323
10330
|
}
|
|
10324
10331
|
});
|
|
10325
|
-
const
|
|
10332
|
+
const formatMemory = (text, idx, isSelected) => {
|
|
10326
10333
|
if (!text) return "";
|
|
10327
|
-
|
|
10334
|
+
const clean = text.replace(/\[Saved on: .*?\]/g, "").replace(/\\+'/g, "'").trim();
|
|
10335
|
+
const prefix = `${isSelected ? "\u276F " : " "}${idx + 1}. `;
|
|
10336
|
+
const prefixLen = prefix.length;
|
|
10337
|
+
const rightPadding = isSelected ? 22 : 2;
|
|
10338
|
+
const parts = clean.split("\n");
|
|
10339
|
+
return parts.map((part, partIdx) => {
|
|
10340
|
+
const isFirstPart = partIdx === 0;
|
|
10341
|
+
const firstLineMax = Math.max(10, columns - 4 - (isFirstPart ? prefixLen : 3) - rightPadding);
|
|
10342
|
+
const subLineMax = Math.max(10, columns - 4 - 3 - rightPadding);
|
|
10343
|
+
const words = part.split(/(\s+)/);
|
|
10344
|
+
const lines = [];
|
|
10345
|
+
let currentLine = "";
|
|
10346
|
+
words.forEach((word) => {
|
|
10347
|
+
if (word.length === 0) return;
|
|
10348
|
+
const currentLimit = lines.length === 0 ? firstLineMax : subLineMax;
|
|
10349
|
+
if (currentLine.length + word.length > currentLimit) {
|
|
10350
|
+
if (currentLine.trim().length > 0) {
|
|
10351
|
+
lines.push(currentLine.trimEnd());
|
|
10352
|
+
currentLine = word;
|
|
10353
|
+
} else {
|
|
10354
|
+
lines.push(word.substring(0, currentLimit));
|
|
10355
|
+
currentLine = word.substring(currentLimit);
|
|
10356
|
+
}
|
|
10357
|
+
} else {
|
|
10358
|
+
currentLine += word;
|
|
10359
|
+
}
|
|
10360
|
+
});
|
|
10361
|
+
if (currentLine.trimEnd().length > 0) {
|
|
10362
|
+
lines.push(currentLine.trimEnd());
|
|
10363
|
+
}
|
|
10364
|
+
if (lines.length === 0) return "";
|
|
10365
|
+
const wrapped = lines.join("\n ");
|
|
10366
|
+
return isFirstPart ? wrapped : " " + wrapped;
|
|
10367
|
+
}).join("\n");
|
|
10328
10368
|
};
|
|
10329
10369
|
const totalCapacity = 4 * 1024 * 2;
|
|
10330
10370
|
const currentLength = memories.reduce((acc, m) => acc + (m.memory?.length || 0), 0);
|
|
@@ -10348,8 +10388,8 @@ function MemoryModal({ onClose }) {
|
|
|
10348
10388
|
backgroundColor: isSelected ? "#2a2a2a" : void 0,
|
|
10349
10389
|
width: "100%"
|
|
10350
10390
|
},
|
|
10351
|
-
/* @__PURE__ */ React10.createElement(Box10, { flexGrow: 1 }, /* @__PURE__ */ React10.createElement(Text10, { color: isSelected ? "white" : "grey", bold: isSelected }, isSelected ? "\u276F " : " ", idx + 1, ". ",
|
|
10352
|
-
isSelected && /* @__PURE__ */ React10.createElement(Box10, { flexShrink: 0 }, /* @__PURE__ */ React10.createElement(Text10, { color: "grey", dimColor: true }, "[
|
|
10391
|
+
/* @__PURE__ */ React10.createElement(Box10, { flexGrow: 1 }, /* @__PURE__ */ React10.createElement(Text10, { color: isSelected ? "white" : "grey", bold: isSelected }, isSelected ? "\u276F " : " ", idx + 1, ". ", formatMemory(mem.memory, idx, isSelected))),
|
|
10392
|
+
isSelected && /* @__PURE__ */ React10.createElement(Box10, { flexShrink: 0 }, /* @__PURE__ */ React10.createElement(Text10, { color: "grey", dimColor: true }, " [", /* @__PURE__ */ React10.createElement(Text10, { italic: true }, mem.score), "] "), /* @__PURE__ */ React10.createElement(Text10, { color: "grey", bold: true }, "[X] WIPE "))
|
|
10353
10393
|
);
|
|
10354
10394
|
})), /* @__PURE__ */ React10.createElement(
|
|
10355
10395
|
Box10,
|
|
@@ -11015,7 +11055,7 @@ __export(app_exports, {
|
|
|
11015
11055
|
});
|
|
11016
11056
|
import os4 from "os";
|
|
11017
11057
|
import React14, { useState as useState11, useEffect as useEffect8, useRef as useRef3, useMemo as useMemo2 } from "react";
|
|
11018
|
-
import { Box as Box14, Text as Text14, useInput as useInput8, useStdout } from "ink";
|
|
11058
|
+
import { Box as Box14, Text as Text14, useInput as useInput8, useStdout as useStdout2 } from "ink";
|
|
11019
11059
|
import fs22 from "fs-extra";
|
|
11020
11060
|
import path20 from "path";
|
|
11021
11061
|
import { exec as exec2 } from "child_process";
|
|
@@ -11026,7 +11066,7 @@ import gradient2 from "gradient-string";
|
|
|
11026
11066
|
function App({ args = [] }) {
|
|
11027
11067
|
const [confirmExit, setConfirmExit] = useState11(false);
|
|
11028
11068
|
const [exitCountdown, setExitCountdown] = useState11(10);
|
|
11029
|
-
const { stdout } =
|
|
11069
|
+
const { stdout } = useStdout2();
|
|
11030
11070
|
const [input, setInput] = useState11("");
|
|
11031
11071
|
const [inputKey, setInputKey] = useState11(0);
|
|
11032
11072
|
const [isExpanded, setIsExpanded] = useState11(false);
|