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.
Files changed (2) hide show
  1. package/dist/fluxflow.js +19 -5
  2. 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(`FAILURE: Command [${command}] failed.
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 toolStart = Date.now();
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 - toolStart };
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.6";
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "1.7.6",
3
+ "version": "1.7.8",
4
4
  "description": "A high-fidelity agentic terminal assistant for the Flux Era.",
5
5
  "keywords": [
6
6
  "ai",