fluxflow-cli 2.16.3 → 2.16.5

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 +20 -9
  2. package/package.json +1 -1
package/dist/fluxflow.js CHANGED
@@ -6738,7 +6738,9 @@ var init_history = __esm({
6738
6738
  await fs7.ensureDir(HISTORY_DIR);
6739
6739
  const history = await loadHistory();
6740
6740
  const existingChat = history[id];
6741
- const persistentMessages = (messages || []).filter((m) => !m.isUpdateNotification && !m.isMeta);
6741
+ const persistentMessages = (messages || []).filter(
6742
+ (m) => !m.isUpdateNotification && (!m.isMeta || m.text && m.text.includes("Request Cancelled"))
6743
+ );
6742
6744
  const finalName = name || (existingChat ? existingChat.name : `Session ${id.slice(-6)}`);
6743
6745
  const chatFile = path6.join(HISTORY_DIR, `${id}.json`);
6744
6746
  writeEncryptedJson(chatFile, persistentMessages);
@@ -9690,7 +9692,8 @@ var init_ai = __esm({
9690
9692
  "moonshotai/kimi-k2.6",
9691
9693
  "stepfun-ai/step-3.7-flash",
9692
9694
  "google/gemma-4-31b-it",
9693
- "mistralai/mistral-medium-3.5-128b"
9695
+ "mistralai/mistral-medium-3.5-128b",
9696
+ "qwen/qwen3.5-397b-a17b"
9694
9697
  // Google models
9695
9698
  // No need. All models on Gemini API is Multimodal
9696
9699
  ];
@@ -9937,6 +9940,7 @@ var init_ai = __esm({
9937
9940
  const isMistral = model.includes("mistral");
9938
9941
  const isMinimax = model.includes("minimax");
9939
9942
  const isGPT = model.includes("gpt");
9943
+ const isQwen = model.includes("qwen");
9940
9944
  const GPT_THINKING_LEVELS = {
9941
9945
  "Fast": "low",
9942
9946
  "Low": "low",
@@ -9972,6 +9976,8 @@ var init_ai = __esm({
9972
9976
  body.reasoning_effort = isThinking ? "high" : "none";
9973
9977
  } else if (isMinimax && model.includes("minimax-m3")) {
9974
9978
  body.chat_template_kwargs = { thinking_mode: isThinking ? "enabled" : "disabled" };
9979
+ } else if (isQwen) {
9980
+ body.chat_template_kwargs = { enable_thinking: isThinking };
9975
9981
  }
9976
9982
  const response = await fetchWithBackoff("https://integrate.api.nvidia.com/v1/chat/completions", {
9977
9983
  method: "POST",
@@ -11653,7 +11659,7 @@ ${activeSummaryBlock}${thinkingLevel !== "Fast" && thinkingLevel !== "xHigh" &&
11653
11659
  }
11654
11660
  if (TERMINATION_SIGNAL) {
11655
11661
  yield { type: "status", content: "Request Cancelled" };
11656
- yield { type: "text", content: "\n\n\x1B[33m\u2139 Request Cancelled\x1B[0m" };
11662
+ yield { type: "text", content: "\n\n\x1B[33m\u24D8 Request Cancelled\x1B[0m" };
11657
11663
  break;
11658
11664
  }
11659
11665
  if (steeringCallback) {
@@ -12104,7 +12110,7 @@ ${ideErr} [/ERROR]`;
12104
12110
  }
12105
12111
  if (TERMINATION_SIGNAL) {
12106
12112
  yield { type: "status", content: "Request Cancelled" };
12107
- yield { type: "text", content: "\n\n\x1B[33m\u2139 Request Cancelled\x1B[0m" };
12113
+ yield { type: "text", content: "\n\n\x1B[33m\u24D8 Request Cancelled\x1B[0m" };
12108
12114
  break;
12109
12115
  }
12110
12116
  let chunkText = "";
@@ -13242,7 +13248,7 @@ ${colorMainWords(output)}` };
13242
13248
  } catch (err) {
13243
13249
  if (TERMINATION_SIGNAL) {
13244
13250
  yield { type: "status", content: "Request Cancelled" };
13245
- yield { type: "text", content: "\n\n\x1B[33m\u2139 Request Cancelled\x1B[0m" };
13251
+ yield { type: "text", content: "\n\n\x1B[33m\u24D8 Request Cancelled\x1B[0m" };
13246
13252
  break;
13247
13253
  }
13248
13254
  if (String(err).includes("Incomplete JSON segment at the end")) {
@@ -15789,6 +15795,11 @@ function App({ args = [] }) {
15789
15795
  {
15790
15796
  cmd: "minimaxai/minimax-m3",
15791
15797
  desc: "Text Only"
15798
+ },
15799
+ // QWEN
15800
+ {
15801
+ cmd: "qwen/qwen3.5-397b-a17b",
15802
+ desc: "Multimodal"
15792
15803
  }
15793
15804
  ] : apiTier === "Free" ? [
15794
15805
  {
@@ -16760,7 +16771,7 @@ ${timestamp}` };
16760
16771
  const newMsgs = [...updatedPrev, {
16761
16772
  id: "cancel-" + Date.now(),
16762
16773
  role: "system",
16763
- text: "\n\n\x1B[33m\u2139 Request Cancelled\x1B[0m",
16774
+ text: "\n\n\x1B[33m\u24D8 Request Cancelled\x1B[0m",
16764
16775
  isMeta: true
16765
16776
  }];
16766
16777
  setCompletedIndex(newMsgs.length);
@@ -17375,7 +17386,7 @@ Selection: ${val}`,
17375
17386
  }
17376
17387
  return updated;
17377
17388
  }).reverse();
17378
- const historyToSave = newMsgs.filter((m) => !String(m.id).startsWith("welcome") && !m.isMeta);
17389
+ const historyToSave = newMsgs.filter((m) => !String(m.id).startsWith("welcome") && (!m.isMeta || m.text && m.text.includes("Request Cancelled")));
17379
17390
  saveChat(chatId, null, historyToSave);
17380
17391
  setCompletedIndex(newMsgs.length);
17381
17392
  return newMsgs;
@@ -18114,7 +18125,7 @@ Selection: ${val}`,
18114
18125
  setCompletedIndex(newMsgs.length);
18115
18126
  setInput(targetPrompt);
18116
18127
  setIsExpanded(targetPrompt.split("\n").length > 2);
18117
- const historyToSave = newMsgs.filter((m) => !String(m.id).startsWith("welcome") && !m.isMeta);
18128
+ const historyToSave = newMsgs.filter((m) => !String(m.id).startsWith("welcome") && (!m.isMeta || m.text && m.text.includes("Request Cancelled")));
18118
18129
  await saveChat(chatId, null, historyToSave);
18119
18130
  const s = emojiSpace(2);
18120
18131
  setMessages((prev) => {
@@ -18372,7 +18383,7 @@ Selection: ${val}`,
18372
18383
  }
18373
18384
  )));
18374
18385
  default:
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(
18386
+ 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(Box14, null, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, wittyPhrase), /* @__PURE__ */ React15.createElement(Text15, { color: "gray", dimColor: true }, " \u2503 ")), /* @__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
18387
  Box14,
18377
18388
  {
18378
18389
  backgroundColor: "#555555",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "2.16.3",
3
+ "version": "2.16.5",
4
4
  "date": "2026-07-01",
5
5
  "description": "A high-fidelity agentic terminal assistant for the Flux Era.",
6
6
  "keywords": [