fluxflow-cli 1.7.6 → 1.7.8
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 +19 -5
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -1663,7 +1663,7 @@ ${lines.map((l, i) => `${i + 1} | ${l}`).join("\n")}
|
|
|
1663
1663
|
const verifiedLineCount = verifiedLines.length;
|
|
1664
1664
|
if (verifiedSize === 0 && originalSize > 0) {
|
|
1665
1665
|
verifiedContent = null;
|
|
1666
|
-
return `CRITICAL FAILURE: Verification failed. File [${targetPath}] is empty on disk despite success report!`;
|
|
1666
|
+
return `ERROR: CRITICAL FAILURE: Verification failed. File [${targetPath}] is empty on disk despite success report!`;
|
|
1667
1667
|
}
|
|
1668
1668
|
let snippet = "";
|
|
1669
1669
|
if (verifiedLineCount <= 200) {
|
|
@@ -1865,7 +1865,7 @@ ${stderr}`);
|
|
|
1865
1865
|
if (code !== 0) result.push(`EXIT CODE: ${code}`);
|
|
1866
1866
|
const finalOutput = result.join("\n\n") || "Command executed with no output.";
|
|
1867
1867
|
if (code !== 0) {
|
|
1868
|
-
resolve(`
|
|
1868
|
+
resolve(`ERROR: Command [${command}] failed with exit code [${code}].
|
|
1869
1869
|
|
|
1870
1870
|
${finalOutput}`);
|
|
1871
1871
|
} else {
|
|
@@ -2380,6 +2380,9 @@ USER_PROMPT: ${agentText}`.trim();
|
|
|
2380
2380
|
}
|
|
2381
2381
|
});
|
|
2382
2382
|
for (let loop = 0; loop < MAX_LOOPS; loop++) {
|
|
2383
|
+
if (loop > 0) {
|
|
2384
|
+
yield { type: "status", content: "Processed. Reconnecting..." };
|
|
2385
|
+
}
|
|
2383
2386
|
if (TERMINATION_SIGNAL) {
|
|
2384
2387
|
yield { type: "status", content: "Termination Signal Received." };
|
|
2385
2388
|
break;
|
|
@@ -2458,12 +2461,14 @@ USER_PROMPT: ${agentText}`.trim();
|
|
|
2458
2461
|
}
|
|
2459
2462
|
let turnText = "";
|
|
2460
2463
|
let lastToolSniffed = null;
|
|
2464
|
+
let lastToolEventTime = null;
|
|
2461
2465
|
for await (const chunk of stream) {
|
|
2462
2466
|
if (TERMINATION_SIGNAL) break;
|
|
2463
2467
|
if (chunk.text) {
|
|
2464
2468
|
turnText += chunk.text;
|
|
2465
2469
|
yield { type: "text", content: chunk.text };
|
|
2466
2470
|
if (turnText.includes("tool:functions.")) {
|
|
2471
|
+
if (!lastToolEventTime) lastToolEventTime = Date.now();
|
|
2467
2472
|
const parts = turnText.split("tool:functions.");
|
|
2468
2473
|
const potentialTool = parts[parts.length - 1].split("(")[0].trim();
|
|
2469
2474
|
if (potentialTool && /^[a-z_]+$/.test(potentialTool) && potentialTool !== lastToolSniffed) {
|
|
@@ -2623,7 +2628,7 @@ ${boxBottom}
|
|
|
2623
2628
|
}
|
|
2624
2629
|
}
|
|
2625
2630
|
}
|
|
2626
|
-
const
|
|
2631
|
+
const effectiveStart = lastToolEventTime || Date.now();
|
|
2627
2632
|
let result = await dispatchTool(toolCall.toolName, toolCall.args, {
|
|
2628
2633
|
chatId,
|
|
2629
2634
|
history,
|
|
@@ -2631,7 +2636,8 @@ ${boxBottom}
|
|
|
2631
2636
|
onAskUser: settings.onAskUser
|
|
2632
2637
|
});
|
|
2633
2638
|
const toolEnd = Date.now();
|
|
2634
|
-
yield { type: "tool_time", content: toolEnd -
|
|
2639
|
+
yield { type: "tool_time", content: toolEnd - effectiveStart };
|
|
2640
|
+
lastToolEventTime = toolEnd;
|
|
2635
2641
|
let binaryPart = null;
|
|
2636
2642
|
if (typeof result === "object" && result.binaryPart) {
|
|
2637
2643
|
binaryPart = result.binaryPart;
|
|
@@ -3470,6 +3476,14 @@ Check what's new using \`/changelog\` command.`,
|
|
|
3470
3476
|
if (!absoluteClean.trim()) return;
|
|
3471
3477
|
if (isProcessing) {
|
|
3472
3478
|
const hintText = absoluteClean.trim();
|
|
3479
|
+
if (hintText.startsWith("/")) {
|
|
3480
|
+
setMessages((prev) => {
|
|
3481
|
+
setCompletedIndex(prev.length + 1);
|
|
3482
|
+
return [...prev, { id: "hint-err-" + Date.now(), role: "system", text: "\u274C [RESTRICTED] Steering Hints cannot start with /", isMeta: true }];
|
|
3483
|
+
});
|
|
3484
|
+
setInput("");
|
|
3485
|
+
return;
|
|
3486
|
+
}
|
|
3473
3487
|
setQueuedPrompt(hintText);
|
|
3474
3488
|
queuedPromptRef.current = hintText;
|
|
3475
3489
|
setMessages((prev) => {
|
|
@@ -4659,7 +4673,7 @@ var init_app = __esm({
|
|
|
4659
4673
|
init_setup();
|
|
4660
4674
|
SESSION_START_TIME = Date.now();
|
|
4661
4675
|
CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
|
|
4662
|
-
versionFluxflow = "1.7.
|
|
4676
|
+
versionFluxflow = "1.7.8";
|
|
4663
4677
|
updatedOn = "2026-05-03";
|
|
4664
4678
|
ResolutionModal = ({ data, onResolve, onEdit }) => /* @__PURE__ */ React10.createElement(Box10, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React10.createElement(Text10, { color: "magenta", bold: true, underline: true }, "\u{1F7E3} STEERING HINT RESOLUTION"), /* @__PURE__ */ React10.createElement(Text10, { marginTop: 1 }, "The agent already finished the task (turn: finish) before your hint was consumed."), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 1, backgroundColor: "#222", paddingX: 1, width: "100%" }, /* @__PURE__ */ React10.createElement(Text10, { italic: true, color: "gray" }, '"', data, '"')), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 1 }, /* @__PURE__ */ React10.createElement(Text10, { color: "cyan" }, "How would you like to proceed?")), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 1 }, /* @__PURE__ */ React10.createElement(
|
|
4665
4679
|
CommandMenu,
|