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 +2 -2
- package/UI_FEATURES.md +2 -2
- package/dist/fluxflow.js +54 -68
- package/package.json +2 -2
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,
|
|
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
|
|
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 **
|
|
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 }, "(",
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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 = "
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
-
|
|
1062
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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: "
|
|
4448
|
-
{ cmd: "
|
|
4449
|
-
{ cmd: "
|
|
4450
|
-
{ cmd: "
|
|
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("
|
|
4577
|
+
setThinkingLevel("Fast");
|
|
4580
4578
|
} else if (newMode === "Flux") {
|
|
4581
|
-
setThinkingLevel("
|
|
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
|
-
|
|
4595
|
-
if (
|
|
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
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
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
|
|
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.
|
|
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:
|
|
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",
|