fluxflow-cli 1.9.23 → 1.9.25

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/README.md CHANGED
@@ -71,14 +71,14 @@ While you move at high speed, the Janitor follows behind—refining session titl
71
71
 
72
72
  ## ⚙️ Configuration
73
73
  Type `/settings` in-app to live-configure:
74
- - **Thinking Level**: Low, Medium, or High (Deep-Reasoning).
74
+ - **Thinking Level**: Fast (No Reasoning), Low, Medium, High, xHigh (Extended Reasoning).
75
75
  - **Auto-Execution**: For ultimate high-speed flow (Advanced users only).
76
76
  - **Security Perimeter**: Toggle External Workspace access.
77
77
 
78
78
  ---
79
79
 
80
80
  ## 🏁 License
81
- MIT © 2026 Flux Flow Team.
81
+ MIT © 2026 Flux Flow.
82
82
 
83
83
  ---
84
84
  *Forged with ⚡ and 🧬. Welcome to the FluxFlow.*
package/UI_FEATURES.md CHANGED
@@ -22,7 +22,7 @@ You can control the application using `/` commands directly in the chat input:
22
22
 
23
23
  Flux Flow allows you to "Anchor" your data outside of the default user directory. This is perfect for users who want to keep their logs, chat history, and encrypted memories on an external drive, a VeraCrypt volume, or a specific project folder.
24
24
 
25
- - **How to Enable**: Open `/settings` and toggle **Use External Data**.
25
+ - **How to Enable**: Open `/settings` and toggle **Use External Data**.
26
26
  - **Portability**: Once set, the application will synchronously "pivot" all data operations to your specified `externalDataPath` upon startup.
27
27
  - **Privacy**: Keeps sensitive data off your primary system drive.
28
28
 
@@ -40,7 +40,7 @@ For power users, several commands support direct arguments to skip the menus:
40
40
 
41
41
  Flux Flow separates the model's "internal monologue" (reasoning) from its final response using `<think>` tags.
42
42
 
43
- - **Thinking Levels**: Depending on the mode, you can choose from **Low**, **Medium**, **High**, or **Max**. Higher levels allow the agent more "space" to reason through complex architecture or debugging problems.
43
+ - **Thinking Levels**: Depending on the mode, you can choose from **Fast**, **Low**, **Medium**, **High**, or **xHigh**. Higher levels allow the agent more "space" to reason through complex architecture or debugging problems.
44
44
  - **Show/Hide Thinking**: You can toggle the visibility of the thinking process using `/thinking show/hide`.
45
45
  - When **Hidden**, the agent doesn't just disappear; it provides a "minimalist" view showing only the core **Headings** and **Action Steps** (bolded lines) from its reasoning. This keeps you informed of its current "step" without cluttering the screen with detailed internal monologue.
46
46
 
package/dist/fluxflow.js CHANGED
@@ -586,7 +586,7 @@ var init_StatusBar = __esm({
586
586
  },
587
587
  /* @__PURE__ */ React3.createElement(Box3, null, /* @__PURE__ */ React3.createElement(Box3, { marginRight: 1 }, /* @__PURE__ */ React3.createElement(Text3, { color: modeColor, bold: true }, modeIcon, " ", mode.toUpperCase())), /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true }, "\u2503 "), /* @__PURE__ */ React3.createElement(Box3, { marginX: 1 }, /* @__PURE__ */ React3.createElement(Text3, { color: "magenta" }, "\u{1F9E0} ", thinkingLevel)), /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true }, "\u2503 "), /* @__PURE__ */ React3.createElement(Box3, { marginX: 1 }, /* @__PURE__ */ React3.createElement(Text3, { color: "gray" }, "MEM: "), /* @__PURE__ */ React3.createElement(Text3, { color: isMemoryEnabled ? "green" : "red", bold: true }, isMemoryEnabled ? "ON" : "OFF"))),
588
588
  /* @__PURE__ */ React3.createElement(Box3, { flexGrow: 1, justifyContent: "center", paddingX: 2 }, /* @__PURE__ */ React3.createElement(Text3, null, "\u{1F4C1}"), /* @__PURE__ */ React3.createElement(Text3, { color: "gray", italic: true }, " ", truncatePath(process.cwd(), 35))),
589
- /* @__PURE__ */ React3.createElement(Box3, null, /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true }, "\u2503 "), /* @__PURE__ */ React3.createElement(Box3, { marginX: 1 }, /* @__PURE__ */ React3.createElement(Text3, null, "\u2728"), /* @__PURE__ */ React3.createElement(Text3, { color: "blue" }, " ", formatTokens(tokensTotal), " ", /* @__PURE__ */ React3.createElement(Text3, { dimColor: true }, "(", Math.round(tokens / 254e3 * 100), "%)"))), /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true }, "\u2503 "), /* @__PURE__ */ React3.createElement(Box3, { marginLeft: 1 }, /* @__PURE__ */ React3.createElement(Text3, null, "\u{1F194}"), /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true, italic: true }, " ", chatId)))
589
+ /* @__PURE__ */ React3.createElement(Box3, null, /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true }, "\u2503 "), /* @__PURE__ */ React3.createElement(Box3, { marginX: 1 }, /* @__PURE__ */ React3.createElement(Text3, null, "\u2728"), /* @__PURE__ */ React3.createElement(Text3, { color: "blue" }, " ", formatTokens(tokensTotal), " ", /* @__PURE__ */ React3.createElement(Text3, { dimColor: true }, "(", (tokens / 254e3 * 100).toFixed(0), "%)"))), /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true }, "\u2503 "), /* @__PURE__ */ React3.createElement(Box3, { marginLeft: 1 }, /* @__PURE__ */ React3.createElement(Text3, null, "\u{1F194}"), /* @__PURE__ */ React3.createElement(Text3, { color: "gray", dimColor: true, italic: true }, " ", chatId)))
590
590
  );
591
591
  });
592
592
  StatusBar_default = StatusBar;
@@ -910,7 +910,7 @@ ${mode === "Flux" ? `- DEV TOOLS (path = relative to CWD) -
910
910
  - Escape quotes: \\" for code strings
911
911
  - Literal escapes: Double-escape sequences (e.g., \\\\n, \\\\t)
912
912
  - File structure: Real newlines for code formatting`.trim() : `
913
- - DEV TOOLS ARE NOT AVAILABLE IN FLOW MODE. If file access is needed, tell the user to switch to FLUX`.trim()}
913
+ - DEV TOOLS ARE NOT AVAILABLE IN FLOW MODE`.trim()}
914
914
 
915
915
  - Results: Passed as [TOOL RESULT] SYSTEM
916
916
  - Tool calls: End with [turn: continue]. Only use [turn: finish] after verifying goals
@@ -948,22 +948,23 @@ var thinking_prompts_default;
948
948
  var init_thinking_prompts = __esm({
949
949
  "src/data/thinking_prompts.json"() {
950
950
  thinking_prompts_default = {
951
- Max: `EFFORT_LEVEL: MAX
951
+ xHigh: `EFFORT_LEVEL: xHIGH
952
952
  Think in a continuous, fluid analytical monologue within the <think>...</think> block. Do NOT use headings, bullet points, or artificial sections. Engage in a deep "Stream of Consciousness" that follows this cognitive path:
953
- Deep Analysis: Deconstruct the request into its core technical and logic requirements.
954
- Hypothesis & Test: Propose multiple solutions mentally and critique them for edge cases or security risks.
955
- Architectural Planning: Consider the long-term impact on the project structure and maintainability.
956
- Refinement: Iterate on the chosen path until it is bulletproof.
953
+ Deep Analysis: Deconstruct the request into its core technical and logic requirements
954
+ Hypothesis & Test: Propose multiple solutions mentally and critique them for edge cases or security risks
955
+ Architectural Planning: Consider the long-term impact on the project structure and maintainability
956
+ Refinement: Iterate on the chosen path until it is bulletproof
957
957
  RULES:
958
- - NO HEADINGS. Just a solid, stable analytical monologue.
959
- - Be thorough and exhaustive. Explore the 'why' behind every decision, depth and nuances.
958
+ - NO HEADINGS. Just a solid, stable analytical monologue
959
+ - Be thorough and exhaustive. Explore the 'why' behind every decision, depth and nuances
960
960
  Question your own logic as you go,
961
961
 
962
- DO NOT GET STUCK IN RE-VERIFICATION LOOP.
962
+ DO NOT GET STUCK IN RE-VERIFICATION LOOP
963
963
  - MANDATORY THINKING: You MUST engage in full reasoning regardless of perceived simplicity.`,
964
- High: "EFFORT_LEVEL: HIGH\nThink in a stable, analytical monologue within the <think>...</think> block. Avoid headings or structured formatting. Your thinking should be a continuous stream of logical deduction:\nAnalyze the immediate task and its dependencies.\nMentally simulate the execution to identify potential failure points.\nStructure a precise plan that addresses both primary goals and secondary constraints.\nRULES:\n- NO HEADINGS. Maintain a fluid monologue style.\n- Be detailed and rigorous in your self-questioning.\n- Focus on accuracy, technical correctness, depth and nuances.\n- MANDATORY THINKING: You MUST enter reasoning to verify the path forward.",
965
- Medium: "EFFORT_LEVEL: MEDIUM\nThink in a concise, stable monologue within the <think>...</think> block. No headings needed. Focus on the core logic required to solve the task efficiently:\nIdentify the most direct path to the solution.\nBriefly consider and discard obvious alternatives.\nConfirm the plan meets the user's immediate requirements.\nRULES:\n- NO HEADINGS. Keep it as a simple, logical stream.\n- Be efficient. Spend energy only on what matters for the task.\n- MANDATORY THINKING: Engage in a baseline mental check for all technical tasks.",
966
- Minimal: "EFFORT_LEVEL: LOW\nThink in a brief, focused monologue within the <think>...</think> block. No headings. Just a quick mental check before acting:\nVerify the objective.\nNote the target files/tools.\nRULES:\n- NO HEADINGS. Just a few lines of clear, linear thought.\n- Use minimal thinking for simple or conversational requests."
964
+ High: "EFFORT_LEVEL: HIGH\nThink in a stable, analytical monologue within the <think>...</think> block. Avoid headings or structured formatting. Your thinking should be a continuous stream of logical deduction:\nAnalyze the immediate task and its dependencies\nMentally simulate the execution to identify potential failure points\nStructure a precise plan that addresses both primary goals and secondary constraints\nRULES:\n- NO HEADINGS. Maintain a fluid monologue style\n- Be detailed and rigorous in your self-questioning\n- Focus on accuracy, technical correctness, depth and nuances\n- MANDATORY THINKING: You MUST enter reasoning to verify the path forward.",
965
+ Medium: "EFFORT_LEVEL: MEDIUM\nThink in a concise, stable monologue within the <think>...</think> block. No headings needed. Focus on the core logic required to solve the task efficiently:\nIdentify the most direct path to the solution\nBriefly consider and discard obvious alternatives\nConfirm the plan meets the user's immediate requirements\nRULES:\n- NO HEADINGS. Keep it as a simple, logical stream\n- Be efficient. Spend energy only on what matters for the task\n- MANDATORY THINKING: Engage in a baseline mental check for all technical tasks.",
966
+ Minimal: "EFFORT_LEVEL: LOW\nThink in a brief, focused monologue within the <think>...</think> block. No headings. Just a quick mental check before acting:\nVerify the objective\nNote the target files/tools\nRULES:\n- NO HEADINGS. Just a few lines of clear, linear thought\n- Use minimal thinking for simple or conversational requests",
967
+ Off: "EFFORT_LEVEL: FAST\nNo internal thinking process required. Respond directly"
967
968
  };
968
969
  }
969
970
  });
@@ -989,8 +990,9 @@ ${parts.join("\n\n")}
989
990
  };
990
991
  getSystemInstruction = (profile, thinkingLevel, mode, systemSettings, isMemoryEnabled = true) => {
991
992
  let levelKey = thinkingLevel;
993
+ if (thinkingLevel === "Fast") levelKey = "Off";
992
994
  if (thinkingLevel === "Low") levelKey = "Minimal";
993
- if (thinkingLevel === "xHigh" || thinkingLevel === "Max") levelKey = "Max";
995
+ if (thinkingLevel === "xHigh" || thinkingLevel === "Max") levelKey = "xHigh";
994
996
  const thinkingConfig = thinking_prompts_default[levelKey] || thinking_prompts_default["Medium"];
995
997
  const osDetected = process.platform === "win32" ? "Windows" : process.platform === "darwin" ? "macOS" : "Linux";
996
998
  const nameStr = profile.name && profile.name?.length > 0 ? `User Name: ${profile.name}
@@ -1024,7 +1026,7 @@ ${parts.join("\n\n")}
1024
1026
  const projectContextBlock = mode === "Flux" && foundFiles.length > 0 ? `
1025
1027
  -- PROJECT CONTEXT (Source of Truth) --
1026
1028
  ${foundFiles.map((f) => `- ${f.name}: ${f.desc}`).join("\n")}
1027
- Check these first; these files > training data for project consistency. Safety rules still apply` : "";
1029
+ Check these first; these files > training data for project consistency. Safety rules apply` : "";
1028
1030
  return `${nameStr}${nicknameStr}${userInstrStr}
1029
1031
  [SYSTEM (OVERRIDES EVERYTHING)]
1030
1032
  Identity: Flux Flow (by Kushal Roy Chowdhury). Sassy, Friendly CLI Agent. No flirting
@@ -1034,16 +1036,16 @@ High Priority: [SYSTEM], [STEERING HINT]
1034
1036
 
1035
1037
  -- THINKING RULES --
1036
1038
  ${thinkingConfig}
1037
- ***THINKING POLICY***
1039
+ ${!thinkingLevel === "Fast" ? `***THINKING POLICY***
1038
1040
  - Always use <think> ... </think> before responding
1039
1041
  - Never skip thinking, even for simple tasks, code, or greetings
1040
1042
  - Never jump to responses, regardless of task complexity
1041
-
1043
+ ` : ""}
1042
1044
  ${TOOL_PROTOCOL(mode)}
1043
1045
  ${projectContextBlock}
1044
1046
 
1045
1047
  -- MEMORY RULES --
1046
- - Memory: ${isMemoryEnabled ? "Use memories to subtly personalize" : "OFF (tell user to enable in /settings if needed)"}
1048
+ - Memory: ${isMemoryEnabled ? "Use memories to subtly personalize" : "OFF"}
1047
1049
  - Time: Logs are timestamped. RELATIVE TIME REFERENCE e.g. few mins ago <dd/mm/yyyy>
1048
1050
 
1049
1051
  -- SECURITY RULES --
@@ -1058,20 +1060,12 @@ ${projectContextBlock}
1058
1060
 
1059
1061
  -- RESPONSE RULES --
1060
1062
  - End with [turn: continue] for more steps or [turn: finish] when done
1061
- - Stack tools if needed, but always end with [turn: continue] if called any tools
1062
- TO END THE LOOP, **MUST** WRITE [turn: finish] AT END OF RESPONSE
1063
+ - Always end with [turn: continue] if called any tools
1064
+ - Task Complete? End loop with [turn: finish]
1063
1065
  [/SYSTEM]`.trim();
1064
1066
  };
1065
1067
  getJanitorInstruction = (originalText, agentRaws, userMemories = "", isMemoryEnabled = true, needTitle = true) => {
1066
- let agentRes = `${agentRaws.replace(/\[tool:functions\..*?\]/g, "").replace(/<think>.*<\/think>/g, "").replace(/\[Prompted on:.*?\]/g, "").replace(/\[turn: continue\]/g, "").replace(/\[turn: finish\]/g, "").replace(/\[TOOL RESULTS\]/g, "").replace(/\[tool results\]/g, "").substring(0, 3500)}`;
1067
- if (agentRes.length > 3500) {
1068
- agentRes += "\n... (truncated) ...";
1069
- }
1070
- let originalTextProcessed = originalText.replace(/\[Prompted on:.*?\]/g, "").trim();
1071
- agentRes = agentRes.replace(/\r?\n\r?\n/g, "\n").replace(/\n\n/g, "\n").replace(/\\n\\n/g, "").trim();
1072
- return `[USER]: ${originalTextProcessed.substring(0, 600)}
1073
- ${originalTextProcessed.length > 600 ? "... (truncated) ...\n\n" : ""}
1074
- [AGENT (current turn)]: ${agentRes}
1068
+ return `
1075
1069
  ${userMemories ? `
1076
1070
 
1077
1071
  -- CURRENT PERSISTENT USER MEMORIES --
@@ -2736,7 +2730,16 @@ var init_ai = __esm({
2736
2730
  isMemoryEnabled,
2737
2731
  true
2738
2732
  );
2739
- janitorContents.push({ role: "system", parts: [{ text: janitorPrompt }] });
2733
+ let agentRes = `${cleanedFullResponse.replace(/\[tool:functions\..*?\]/g, "").replace(/<think>.*<\/think>/g, "").replace(/\[Prompted on:.*?\]/g, "").replace(/\[turn: continue\]/g, "").replace(/\[turn: finish\]/g, "").replace(/\[TOOL RESULTS\]/g, "").replace(/\[tool results\]/g, "").substring(0, 3500)}`;
2734
+ if (agentRes.length > 3500) {
2735
+ agentRes += "\n... (truncated) ...";
2736
+ }
2737
+ let originalTextProcessed = agentText.replace(/\[Prompted on:.*?\]/g, "").trim();
2738
+ agentRes = agentRes.replace(/\r?\n\r?\n/g, "\n").replace(/\n\n/g, "\n").replace(/\\n\\n/g, "").trim();
2739
+ let userPrompt = `[USER]: ${originalTextProcessed.substring(0, 600)}
2740
+ ${originalTextProcessed.length > 600 ? "... (truncated) ...\n\n" : ""}
2741
+ [AGENT (current turn)]: ${agentRes}`;
2742
+ janitorContents.push({ role: "user", parts: [{ text: userPrompt }] });
2740
2743
  let finalSynthesis = "";
2741
2744
  let attempts = 0;
2742
2745
  const MAX_JANITOR_RETRIES = 5;
@@ -2756,6 +2759,7 @@ var init_ai = __esm({
2756
2759
  model: janitorModel || "gemma-4-26b-a4b-it",
2757
2760
  contents: janitorContents,
2758
2761
  config: {
2762
+ systemInstruction: janitorPrompt,
2759
2763
  maxOutputTokens: 384,
2760
2764
  temperature: 0.69,
2761
2765
  safetySettings: [
@@ -3068,8 +3072,7 @@ DEBUG [${date}]: ${finalSynthesis}
3068
3072
  const dateTimeStr = (/* @__PURE__ */ new Date()).toLocaleString([], { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", minute: "2-digit", hour12: true });
3069
3073
  const firstUserMsg = `${memoryPrompt}
3070
3074
  [METADATA (PRIORITY: DYNAMIC)] Time: ${dateTimeStr} | v${versionFluxflow2}
3071
- [SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**.
3072
- [USER] ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
3075
+ ${thinkingLevel != "Fast" ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**\n" : ""}[USER] ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
3073
3076
  modifiedHistory.push({ role: "user", text: firstUserMsg });
3074
3077
  let lastUsage = null;
3075
3078
  const MAX_LOOPS = mode === "Flux" ? 70 : 7;
@@ -3099,9 +3102,7 @@ DEBUG [${date}]: ${finalSynthesis}
3099
3102
 
3100
3103
  [STEERING HINT]: ${hint}`;
3101
3104
  } else {
3102
- modifiedHistory.push({ role: "user", text: `[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**.
3103
-
3104
- [STEERING HINT]: ${hint}` });
3105
+ modifiedHistory.push({ role: "user", text: `${thinkingLevel != "Fast" ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**\n" : ""}[STEERING HINT]: ${hint}` });
3105
3106
  }
3106
3107
  yield { type: "status", content: "Steering Hint Injected." };
3107
3108
  }
@@ -3155,7 +3156,7 @@ DEBUG [${date}]: ${finalSynthesis}
3155
3156
  const currentSystemInstruction = getSystemInstruction(profile, thinkingLevel, mode, systemSettings, isMemoryEnabled, MAX_LOOPS, loop + 1);
3156
3157
  const jitInstruction = `
3157
3158
 
3158
- [SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING PROTOCOL. NEVER START A RESPONSE WITHOUT THINKING**.`;
3159
+ [SYSTEM] Tool result received. Analyze output and proceed with your turn.${thinkingLevel != "Fast" ? "**STRICTLY MAINTAIN THINKING PROTOCOL. NEVER START A RESPONSE WITHOUT THINKING**" : ""}`;
3159
3160
  const lastUserMsg = contents[contents.length - 1];
3160
3161
  let addedMarker = false;
3161
3162
  if (lastUserMsg && lastUserMsg.role === "user" && lastUserMsg.parts?.[0]?.text?.startsWith("[TOOL RESULT]")) {
@@ -3449,9 +3450,7 @@ ${boxBottom}` };
3449
3450
  const absoluteCwd = path15.resolve(process.cwd());
3450
3451
  if (isExternalOff && !absoluteTarget.startsWith(absoluteCwd)) {
3451
3452
  const denyMsg = `Access Denied. You are not allowed to access files outside the current workspace. To enable this, ask the user to turn on "External Workspace Access" in /settings.`;
3452
- toolResults.push({ role: "user", text: `[TOOL RESULT]: ERROR: ${denyMsg}
3453
-
3454
- [SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**.` });
3453
+ toolResults.push({ role: "user", text: `[TOOL RESULT]: ERROR: ${denyMsg}${thinkingLevel != "Fast" ? "\n\n[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**" : ""}` });
3455
3454
  yield { type: "tool_result", content: `[TOOL RESULT]: ERROR: ${denyMsg}` };
3456
3455
  toolCallPointer++;
3457
3456
  continue;
@@ -3464,9 +3463,7 @@ ${boxBottom}` };
3464
3463
  if (approval === "deny") {
3465
3464
  if (normToolName === "exec_command" && settings.onExecEnd) settings.onExecEnd();
3466
3465
  const denyMsg = `Permission Denied: User rejected the ${normToolName === "exec_command" ? "terminal execution" : "file edit"}.`;
3467
- toolResults.push({ role: "user", text: `[TOOL RESULT]: DENIED: ${denyMsg}
3468
-
3469
- [SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**.` });
3466
+ toolResults.push({ role: "user", text: `[TOOL RESULT]: DENIED: ${denyMsg}${thinkingLevel != "Fast" ? "\n\n[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**" : ""}` });
3470
3467
  yield { type: "tool_result", content: `[TOOL RESULT]: DENIED: ${denyMsg}` };
3471
3468
  await incrementUsage("toolDenied");
3472
3469
  if (settings.onToolResult) settings.onToolResult("denied");
@@ -4444,10 +4441,11 @@ function App() {
4444
4441
  cmd: "/thinking",
4445
4442
  desc: "Set AI reasoning depth",
4446
4443
  subs: [
4447
- { cmd: "low", desc: "Fastest reasoning" },
4448
- { cmd: "medium", desc: "Balanced depth" },
4449
- { cmd: "high", desc: "Complex coding" },
4450
- { cmd: "max", desc: "Architectural depth" }
4444
+ { cmd: "Fast", desc: "No Reasoning (Fastest)" },
4445
+ { cmd: "Low", desc: "Quick Reasoning (Answers Quickly)" },
4446
+ { cmd: "Medium", desc: "Balanced Reasoning (Decent Depth)" },
4447
+ { cmd: "High", desc: "Deep Reasoning (Complex Problems)" },
4448
+ { cmd: "xHigh", desc: "Extended Reasoning (Advanced Logic & Code)" }
4451
4449
  ]
4452
4450
  },
4453
4451
  {
@@ -4576,9 +4574,9 @@ ${hintText}`, color: "magenta" }];
4576
4574
  const newMode = parts[1].toLowerCase() === "flow" ? "Flow" : "Flux";
4577
4575
  setMode(newMode);
4578
4576
  if (newMode === "Flow") {
4579
- setThinkingLevel("Low");
4577
+ setThinkingLevel("Fast");
4580
4578
  } else if (newMode === "Flux") {
4581
- setThinkingLevel("High");
4579
+ setThinkingLevel("Medium");
4582
4580
  }
4583
4581
  const s2 = emojiSpace(2);
4584
4582
  setMessages((prev) => {
@@ -4591,29 +4589,17 @@ ${hintText}`, color: "magenta" }];
4591
4589
  break;
4592
4590
  }
4593
4591
  case "/thinking": {
4594
- const arg = parts[1]?.toLowerCase();
4595
- if (arg === "show") {
4596
- setShowFullThinking(true);
4597
- const s2 = emojiSpace(2);
4598
- setMessages((prev) => {
4599
- setCompletedIndex(prev.length + 1);
4600
- return [...prev, { id: Date.now(), role: "system", text: `\u{1F527}${s2}[SYSTEM] Full Thinking Process: VISIBLE`, isMeta: true }];
4601
- });
4602
- } else if (arg === "hide") {
4603
- setShowFullThinking(false);
4604
- const s2 = emojiSpace(2);
4605
- setMessages((prev) => {
4606
- setCompletedIndex(prev.length + 1);
4607
- return [...prev, { id: Date.now(), role: "system", text: `\u{1F527}${s2}[SYSTEM] Full Thinking Process: HIDDEN (Headings only)`, isMeta: true }];
4608
- });
4609
- } else if (parts[1]) {
4592
+ let formattedLevel;
4593
+ if (parts[1]) {
4610
4594
  let val = parts[1].toLowerCase();
4611
- if (val === "xhigh") val = "max";
4612
- const formattedLevel = val.charAt(0).toUpperCase() + val.slice(1);
4613
- if (mode === "Flow" && (formattedLevel === "High" || formattedLevel === "Max")) {
4595
+ formattedLevel = val.charAt(0).toUpperCase() + val.slice(1);
4596
+ if (val === "xhigh") {
4597
+ formattedLevel = "xHigh";
4598
+ }
4599
+ if (mode === "Flow" && (formattedLevel === "Medium" || formattedLevel === "High" || formattedLevel === "xHigh")) {
4614
4600
  setMessages((prev) => {
4615
4601
  setCompletedIndex(prev.length + 1);
4616
- return [...prev, { id: Date.now(), role: "system", text: `\u274C [RESTRICTED] "${formattedLevel}" is restricted in Flow mode. Switch to Flux to enable Deep Thinking.` }];
4602
+ return [...prev, { id: Date.now(), role: "system", text: `\u274C [RESTRICTED] "${formattedLevel}" is restricted in Flow mode. Switch to Flux to enable Higher Thinking Levels.`, isMeta: true }];
4617
4603
  });
4618
4604
  } else {
4619
4605
  setThinkingLevel(formattedLevel);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "1.9.23",
3
+ "version": "1.9.25",
4
4
  "description": "A high-fidelity agentic terminal assistant for the Flux Era.",
5
5
  "keywords": [
6
6
  "ai",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "scripts": {
36
36
  "start": "tsx ./src/cli.jsx",
37
- "build": "esbuild ./src/cli.jsx --bundle --platform=node --format=esm --outfile=./dist/fluxflow.js --external:react --external:ink --external:chalk --external:fs-extra --external:gradient-string --external:ink-text-input --external:ink-select-input --external:ink-spinner --external:ink-multiline-input --external:@google/genai --external:zod --external:nanoid --external:puppeteer --external:pdf-lib --external:html-to-docx --external:pptxgenjs --external:html2pptxgenjs --external:typescript"
37
+ "build": "esbuild ./src/cli.jsx --bundle --platform=node --format=esm --outfile=./dist/fluxflow.js --external:react --external:ink --external:chalk --external:fs-extra --external:gradient-string --external:ink-text-input --external:ink-select-input --external:ink-spinner --external:ink-multiline-input --external:@google/genai --external:zod --external:nanoid --external:puppeteer --external:pdf-lib --external:html-to-docx --external:typescript"
38
38
  },
39
39
  "dependencies": {
40
40
  "@google/genai": "^1.50.1",