fluxflow-cli 1.8.17 → 1.8.19
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 +76 -71
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -768,23 +768,21 @@ var thinking_prompts_default;
|
|
|
768
768
|
var init_thinking_prompts = __esm({
|
|
769
769
|
"src/data/thinking_prompts.json"() {
|
|
770
770
|
thinking_prompts_default = {
|
|
771
|
-
Max:
|
|
772
|
-
EFFORT_LEVEL: MAX
|
|
771
|
+
Max: `EFFORT_LEVEL: MAX
|
|
773
772
|
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:
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
773
|
+
Deep Analysis: Deconstruct the request into its core technical and logic requirements.
|
|
774
|
+
Hypothesis & Test: Propose multiple solutions mentally and critique them for edge cases or security risks.
|
|
775
|
+
Architectural Planning: Consider the long-term impact on the project structure and maintainability.
|
|
776
|
+
Refinement: Iterate on the chosen path until it is bulletproof.
|
|
778
777
|
|
|
779
778
|
RULES:
|
|
780
779
|
- NO HEADINGS. Just a solid, stable analytical monologue.
|
|
781
780
|
- Be thorough and exhaustive. Explore the 'why' behind every decision.
|
|
782
781
|
- Use internal critique: Question your own logic as you go.
|
|
783
|
-
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
Minimal: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: LOW\nThink in a brief, focused monologue within the <think>...</think> block. No headings. Just a quick mental check before acting:\n1. Verify the objective.\n2. Note the target files/tools.\n\nRULES:\n- NO HEADINGS. Just a few lines of clear, linear thought.\n- Use minimal/no thinking for simple or conversational requests.\n-- END THINKING INSTRUCTIONS --"
|
|
782
|
+
- MANDATORY REASONING: You MUST engage in full reasoning regardless of perceived simplicity.`,
|
|
783
|
+
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.\n\nRULES:\n- NO HEADINGS. Maintain a fluid monologue style.\n- Be detailed and rigorous in your self-questioning.\n- Focus on accuracy and technical correctness.\n- MANDATORY REASONING: You MUST enter reasoning to verify the path forward.",
|
|
784
|
+
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.\n\nRULES:\n- NO HEADINGS. Keep it as a simple, logical stream.\n- Be efficient. Spend energy only on what matters for the task.\n- REQUIRED REASONING: Engage in a baseline mental check for all technical tasks.",
|
|
785
|
+
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.\n\nRULES:\n- NO HEADINGS. Just a few lines of clear, linear thought.\n- Use minimal/no thinking for simple or conversational requests."
|
|
788
786
|
};
|
|
789
787
|
}
|
|
790
788
|
});
|
|
@@ -796,7 +794,7 @@ var init_prompts = __esm({
|
|
|
796
794
|
init_main_tools();
|
|
797
795
|
init_janitor_tools();
|
|
798
796
|
init_thinking_prompts();
|
|
799
|
-
getSystemInstruction = (profile, thinkingLevel, mode, systemSettings, tempMemories = "", userMemories = "", isMemoryEnabled = true,
|
|
797
|
+
getSystemInstruction = (profile, thinkingLevel, mode, systemSettings, tempMemories = "", userMemories = "", isMemoryEnabled = true, isContext8 = false, maxLoops, currentLoop) => {
|
|
800
798
|
let levelKey = thinkingLevel;
|
|
801
799
|
if (thinkingLevel === "Low") levelKey = "Minimal";
|
|
802
800
|
if (thinkingLevel === "xHigh" || thinkingLevel === "Max") levelKey = "Max";
|
|
@@ -810,7 +808,7 @@ var init_prompts = __esm({
|
|
|
810
808
|
` : "";
|
|
811
809
|
const dateTimeStr = (/* @__PURE__ */ new Date()).toLocaleString();
|
|
812
810
|
const cwdStr = process.cwd();
|
|
813
|
-
const tempMemoriesStr = tempMemories?.length > 0 && !
|
|
811
|
+
const tempMemoriesStr = tempMemories?.length > 0 && !isContext8 ? `
|
|
814
812
|
-- RECENT CONTEXT FROM OTHER CHAT THREADS --
|
|
815
813
|
${tempMemories}
|
|
816
814
|
------------------------------------------
|
|
@@ -831,11 +829,13 @@ CURRENT_WORKING_DIRECTORY: ${cwdStr}.
|
|
|
831
829
|
OS: ${osDetected}. ${osDetected === "Windows" && mode === "Flux" ? "Your terminal commands will run on CMD. 'Prefer using PS scripts via CMD' instead of raw CMD commands." : ""}
|
|
832
830
|
If you see a [STEERING HINT] from user, give that prompt priority for the task at hand, user can use it to help you guide if you go wrong way.
|
|
833
831
|
|
|
834
|
-
[Runtime Monitor] Turn Progress: ${currentLoop}/${maxLoops} steps. Aim to finalize the task before the window closes. If the limit is reached, please summarize and invite the user to re-engage.
|
|
835
|
-
|
|
836
832
|
|
|
833
|
+
-- START THINKING INSTRUCTIONS --
|
|
837
834
|
${thinkingConfig}
|
|
838
835
|
|
|
836
|
+
BEFORE USING ANY TOOL THINKING IS **MANDATORY** WITH TOOL RULES. ALWAYS PRIORITIZE THINKING FIRST BEFORE RESPONDING. YOU ARE **FORBIDDEN** TO JUMP TO RESPONSES FIRST.
|
|
837
|
+
-- END THINKING INSTRUCTIONS --
|
|
838
|
+
|
|
839
839
|
${TOOL_PROTOCOL(mode)}
|
|
840
840
|
${mode === "Flux" ? `
|
|
841
841
|
-- START PROJECT SPECIFIC INSTRUCTIONS --
|
|
@@ -863,15 +863,15 @@ Every ${isMemoryEnabled ? "Prompt, Responses & Memories" : "Prompt & Responses"}
|
|
|
863
863
|
|
|
864
864
|
-- START FORMATTING RULES --
|
|
865
865
|
- CRITICAL NEWLINE PROTOCOL: When writing or updating files, you MUST use actual line breaks (LF) for structural newlines. If you need to write the literal characters '\\' and 'n' (e.g., in printf("Hello\\n")), you MUST use the sequence '[/n]'.
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
866
|
+
[CORRECT]:
|
|
867
|
+
tool:functions.write_file(path="test.c", content="#include <stdio.h>
|
|
868
|
+
int main() {
|
|
869
869
|
printf("Hello[/n]");
|
|
870
870
|
return 0;
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
871
|
+
}")
|
|
872
|
+
[INCORRECT]:
|
|
873
|
+
tool:functions.write_file(path="test.c", content="#include <stdio.h>\\nint main() {\\nprintf("Hello\\\\n");\\n}")
|
|
874
|
+
\u{1F6D1} NEVER use '\\\\n' for literals; it will be converted to a real line break and break code syntax.
|
|
875
875
|
- Structure responses VISUALLY pleasing, easy to read, and beautiful.
|
|
876
876
|
- USE GFM Markdown HEAVILY.
|
|
877
877
|
- Use GFM tables for structured data to keep the terminal view organized. KEEP SENTENCES IN TABLE **SHORT & CONCISE**. AND MAX 4 COLUMNS. DO NOT OVERUSE TABLES.
|
|
@@ -887,8 +887,9 @@ TO END THE LOOP YOU **MUST** WRITE [turn: finish] AT VERY END OF YOUR RESPONSE.
|
|
|
887
887
|
When you 'finish' an agentic loop, you will lose your previous turn 'thinking' data. So only write [turn: finish] when you are absolutely sure that you are done with the task. Or user has to prompt again and re-thinking again from scratch will use tokens that were already planned.
|
|
888
888
|
-- END REPONSE FINISH PROTOCOL --
|
|
889
889
|
|
|
890
|
+
[Runtime Monitor] Turn Progress: ${currentLoop}/${maxLoops} steps. Aim to finalize the task before the window closes. If the limit is reached, please summarize and invite the user to re-engage.
|
|
890
891
|
Current date and Time is: ${dateTimeStr}
|
|
891
|
-
|
|
892
|
+
--- END SYSTEM INSTRUCTION ---`.trim();
|
|
892
893
|
};
|
|
893
894
|
getJanitorInstruction = (originalText, agentRaws, userMemories = "", isMemoryEnabled = true, needTitle = false) => {
|
|
894
895
|
let agentRes = `${agentRaws.replace(/tool:functions\..*\n/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)}`;
|
|
@@ -1487,7 +1488,7 @@ var init_memory = __esm({
|
|
|
1487
1488
|
if (!content) return "ERROR: Missing 'content' for temp memory.";
|
|
1488
1489
|
const tempStorage = readEncryptedJson(TEMP_MEM_FILE, {});
|
|
1489
1490
|
if (!tempStorage[chatId]) tempStorage[chatId] = [];
|
|
1490
|
-
const MAX_CHARS =
|
|
1491
|
+
const MAX_CHARS = 2e3 * 4;
|
|
1491
1492
|
let currentTotalLength = tempStorage[chatId].reduce((acc, m) => acc + m.length, 0);
|
|
1492
1493
|
while (tempStorage[chatId].length > 0 && currentTotalLength + content.length > MAX_CHARS) {
|
|
1493
1494
|
const removed = tempStorage[chatId].shift();
|
|
@@ -2664,7 +2665,7 @@ var init_ai = __esm({
|
|
|
2664
2665
|
modifiedHistory.push({ role: "user", text: firstUserMsg });
|
|
2665
2666
|
let lastUsage = null;
|
|
2666
2667
|
const MAX_LOOPS = mode === "Flux" ? 50 : 7;
|
|
2667
|
-
const MAX_RETRIES =
|
|
2668
|
+
const MAX_RETRIES = 8;
|
|
2668
2669
|
yield { type: "status", content: "Connecting..." };
|
|
2669
2670
|
TERMINATION_SIGNAL = false;
|
|
2670
2671
|
let fullAgentResponseChunks = [];
|
|
@@ -2697,16 +2698,18 @@ var init_ai = __esm({
|
|
|
2697
2698
|
}
|
|
2698
2699
|
let stream;
|
|
2699
2700
|
let success = false;
|
|
2700
|
-
let retryCount =
|
|
2701
|
+
let retryCount = 1;
|
|
2702
|
+
let inStreamRetryCount = 1;
|
|
2701
2703
|
let turnText = "";
|
|
2702
2704
|
let lastToolSniffed = null;
|
|
2703
2705
|
let lastToolEventTime = null;
|
|
2704
2706
|
let toolResults = [];
|
|
2705
2707
|
let toolCallPointer = 0;
|
|
2706
2708
|
let isThinkingLoop = false;
|
|
2709
|
+
let isStutteringLoop = false;
|
|
2707
2710
|
let isInitialAttempt = true;
|
|
2708
2711
|
let accumulatedContext = "";
|
|
2709
|
-
while (retryCount <= MAX_RETRIES && !success && !TERMINATION_SIGNAL) {
|
|
2712
|
+
while (retryCount <= MAX_RETRIES && inStreamRetryCount <= MAX_RETRIES && !success && !TERMINATION_SIGNAL) {
|
|
2710
2713
|
try {
|
|
2711
2714
|
if (isInitialAttempt) {
|
|
2712
2715
|
yield { type: "turn_reset", content: true };
|
|
@@ -2728,48 +2731,32 @@ var init_ai = __esm({
|
|
|
2728
2731
|
throw new Error("Error: Daily Quota Exausted for Agent");
|
|
2729
2732
|
}
|
|
2730
2733
|
let targetModel = modelName;
|
|
2731
|
-
if (retryCount ===
|
|
2734
|
+
if (retryCount === 6) {
|
|
2732
2735
|
targetModel = "gemini-3-flash-preview";
|
|
2733
2736
|
yield { type: "model_update", content: "Trying with fallback model" };
|
|
2734
|
-
} else if (retryCount >=
|
|
2737
|
+
} else if (retryCount >= 7) {
|
|
2735
2738
|
targetModel = "gemini-3.1-flash-lite-preview";
|
|
2736
2739
|
yield { type: "model_update", content: "Trying with fallback model lite" };
|
|
2737
2740
|
} else if (retryCount > 0) {
|
|
2738
2741
|
yield { type: "model_update", content: null };
|
|
2739
2742
|
}
|
|
2740
|
-
const
|
|
2741
|
-
const currentSystemInstruction = getSystemInstruction(profile, thinkingLevel, mode, systemSettings, otherMemories, mainUserMemories, isMemoryEnabled,
|
|
2743
|
+
const isContext8 = (sessionStats.tokens || 0) >= 8e3;
|
|
2744
|
+
const currentSystemInstruction = getSystemInstruction(profile, thinkingLevel, mode, systemSettings, otherMemories, mainUserMemories, isMemoryEnabled, isContext8, MAX_LOOPS, loop + 1);
|
|
2742
2745
|
stream = await client.models.generateContentStream({
|
|
2743
2746
|
model: targetModel || "gemma-4-31b-it",
|
|
2744
2747
|
contents,
|
|
2745
2748
|
config: {
|
|
2746
2749
|
systemInstruction: currentSystemInstruction,
|
|
2747
|
-
temperature: mode === "Flux" ?
|
|
2750
|
+
temperature: mode === "Flux" ? 0.99 : 1.4,
|
|
2748
2751
|
maxOutputTokens: 32768,
|
|
2749
2752
|
mediaResolution: "MEDIA_RESOLUTION_MEDIUM",
|
|
2750
2753
|
safetySettings: [
|
|
2751
|
-
{
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
}
|
|
2755
|
-
{
|
|
2756
|
-
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
|
|
2757
|
-
threshold: HarmBlockThreshold.BLOCK_NONE
|
|
2758
|
-
},
|
|
2759
|
-
{
|
|
2760
|
-
category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
|
|
2761
|
-
threshold: HarmBlockThreshold.BLOCK_NONE
|
|
2762
|
-
},
|
|
2763
|
-
{
|
|
2764
|
-
category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
|
|
2765
|
-
threshold: HarmBlockThreshold.BLOCK_NONE
|
|
2766
|
-
}
|
|
2754
|
+
{ category: HarmCategory.HARM_CATEGORY_HARASSMENT, threshold: HarmBlockThreshold.BLOCK_NONE },
|
|
2755
|
+
{ category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold: HarmBlockThreshold.BLOCK_NONE },
|
|
2756
|
+
{ category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold: HarmBlockThreshold.BLOCK_NONE },
|
|
2757
|
+
{ category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold: HarmBlockThreshold.BLOCK_NONE }
|
|
2767
2758
|
],
|
|
2768
|
-
thinkingConfig: {
|
|
2769
|
-
includeThoughts: false,
|
|
2770
|
-
thinkingLevel: ThinkingLevel.MINIMAL
|
|
2771
|
-
// Gemma's API Reasoning is bad. Keep it Minimal.
|
|
2772
|
-
}
|
|
2759
|
+
thinkingConfig: { includeThoughts: false, thinkingLevel: targetModel.includes("pro") ? ThinkingLevel.HIGH : ThinkingLevel.MINIMAL }
|
|
2773
2760
|
}
|
|
2774
2761
|
});
|
|
2775
2762
|
turnText = "";
|
|
@@ -2784,7 +2771,7 @@ var init_ai = __esm({
|
|
|
2784
2771
|
for await (const chunk of stream) {
|
|
2785
2772
|
if (TERMINATION_SIGNAL) {
|
|
2786
2773
|
yield { type: "status", content: "Termination Signal Received." };
|
|
2787
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
2774
|
+
await new Promise((resolve) => setTimeout(resolve, 3e3));
|
|
2788
2775
|
break;
|
|
2789
2776
|
}
|
|
2790
2777
|
if (chunk.text) {
|
|
@@ -2831,9 +2818,16 @@ var init_ai = __esm({
|
|
|
2831
2818
|
const wordCount = thinkContent.split(/\s+/).filter((w) => w.length > 0).length;
|
|
2832
2819
|
let repetitionThresholdThinking = 0.4;
|
|
2833
2820
|
let repetitionThresholdResponse = 0.6;
|
|
2834
|
-
|
|
2821
|
+
const thinkingCaps = {
|
|
2822
|
+
"low": 200,
|
|
2823
|
+
"medium": 500,
|
|
2824
|
+
"high": 2e3,
|
|
2825
|
+
"max": 3500
|
|
2826
|
+
};
|
|
2827
|
+
const cap = thinkingCaps[thinkingLevel?.toLowerCase()] || 2500;
|
|
2828
|
+
let isOverVerboseThinking = wordCount > cap;
|
|
2835
2829
|
if (repetitionRatio > repetitionThresholdThinking || isOverVerboseThinking) {
|
|
2836
|
-
const reason = repetitionRatio > repetitionThresholdThinking ? "Thinking Loop Detected" : "
|
|
2830
|
+
const reason = repetitionRatio > repetitionThresholdThinking ? "Thinking Loop Detected" : "Thinking Budget Exceeded";
|
|
2837
2831
|
yield { type: "status", content: `${reason}. Re-centering...` };
|
|
2838
2832
|
isThinkingLoop = true;
|
|
2839
2833
|
await new Promise((resolve) => setTimeout(resolve, 3e3));
|
|
@@ -2863,6 +2857,7 @@ var init_ai = __esm({
|
|
|
2863
2857
|
if (stutterDetected) {
|
|
2864
2858
|
yield { type: "status", content: `Stuttering Detected. Re-centering...` };
|
|
2865
2859
|
isThinkingLoop = false;
|
|
2860
|
+
isStutteringLoop = true;
|
|
2866
2861
|
await new Promise((resolve) => setTimeout(resolve, 3e3));
|
|
2867
2862
|
break;
|
|
2868
2863
|
}
|
|
@@ -3066,24 +3061,33 @@ ${boxBottom}
|
|
|
3066
3061
|
----------------------------------------------------------------------
|
|
3067
3062
|
|
|
3068
3063
|
`);
|
|
3069
|
-
if (
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3064
|
+
if (turnText.trim().length > 0) {
|
|
3065
|
+
if (inStreamRetryCount <= MAX_RETRIES) {
|
|
3066
|
+
inStreamRetryCount++;
|
|
3067
|
+
const waitTime = Math.floor(Math.random() * (3e3 - 1e3 + 1)) + 1e3;
|
|
3073
3068
|
modifiedHistory.push({ role: "agent", text: turnText });
|
|
3074
3069
|
if (toolResults.length > 0) {
|
|
3075
3070
|
toolResults.forEach((tr) => modifiedHistory.push(tr));
|
|
3076
3071
|
}
|
|
3077
3072
|
modifiedHistory.push({ role: "user", text: "[SYSTEM] Response got cut for internal error, continue from checkpoint seamlessly and DON'T repeat what you already said!" });
|
|
3078
3073
|
accumulatedContext += turnText;
|
|
3079
|
-
yield { type: "status", content: `Recovering
|
|
3074
|
+
yield { type: "status", content: `Error Occured. Recovering Stream (${inStreamRetryCount}/${MAX_RETRIES})...` };
|
|
3075
|
+
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
|
3080
3076
|
} else {
|
|
3081
|
-
|
|
3082
|
-
|
|
3077
|
+
throw new Error(`Stream collapsed too many times. (Failed to resolve ${MAX_RETRIES} times)
|
|
3078
|
+
Error Log can be found in ${path16.join(LOGS_DIR, "agent", "error.log")}`);
|
|
3083
3079
|
}
|
|
3084
|
-
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
|
3085
3080
|
} else {
|
|
3086
|
-
|
|
3081
|
+
if (retryCount <= MAX_RETRIES) {
|
|
3082
|
+
retryCount++;
|
|
3083
|
+
const waitTime = Math.floor(Math.random() * (3e3 - 1e3 + 1)) + 1e3;
|
|
3084
|
+
isInitialAttempt = true;
|
|
3085
|
+
yield { type: "status", content: `Retrying Connection (${retryCount}/${MAX_RETRIES})...` };
|
|
3086
|
+
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
|
3087
|
+
} else {
|
|
3088
|
+
throw new Error(`Model cannot be reached. (Failed ${MAX_RETRIES} times)
|
|
3089
|
+
Error Log can be found in ${path16.join(LOGS_DIR, "agent", "error.log")}`);
|
|
3090
|
+
}
|
|
3087
3091
|
}
|
|
3088
3092
|
}
|
|
3089
3093
|
}
|
|
@@ -3242,8 +3246,9 @@ ${timestamp}`;
|
|
|
3242
3246
|
if (toolResults.length > 0) {
|
|
3243
3247
|
toolResults.forEach((tr) => modifiedHistory.push(tr));
|
|
3244
3248
|
} else {
|
|
3245
|
-
modifiedHistory.push({ role: "user", text: `[SYSTEM]: ${isThinkingLoop ? "OVER-THINKING " : ""}LOOP DETECTED by Internal System. ${isThinkingLoop ? "If you have planned the task, prioritize the execution/output. " : "If you have finished your task use [turn: finish] else continue."}` });
|
|
3249
|
+
modifiedHistory.push({ role: "user", text: `[SYSTEM]: ${isStutteringLoop && !isThinkingLoop ? `STUTTERING DETECTED by Internal System. Re-calibrate your response & proceed.` : `${isThinkingLoop ? "OVER-THINKING " : ""}LOOP DETECTED by Internal System${isThinkingLoop && " for current EFFORT_LEVEL"}. ${isThinkingLoop ? "If you have planned the task, prioritize the execution/output. " : "If you have finished your task use [turn: finish] else continue."}`}` });
|
|
3246
3250
|
isThinkingLoop = false;
|
|
3251
|
+
isStutteringLoop = false;
|
|
3247
3252
|
}
|
|
3248
3253
|
}
|
|
3249
3254
|
yield { type: "status", content: null };
|
|
@@ -3927,10 +3932,10 @@ Check what's new using \`/changelog\` command.`,
|
|
|
3927
3932
|
cmd: "/model",
|
|
3928
3933
|
desc: "Switch AI model",
|
|
3929
3934
|
subs: [
|
|
3930
|
-
{ cmd: "gemma-4-31b-it", desc: apiTier === "Free" ? "Standard Default (Free, Recommended)" : "Standard Default (Free, Recommended) -
|
|
3935
|
+
{ cmd: "gemma-4-31b-it", desc: apiTier === "Free" ? "Standard Default (Free, Recommended)" : "Standard Default (Free, Recommended) - Use Free API Key to use this model " },
|
|
3931
3936
|
{ cmd: "gemini-3.1-pro-preview", desc: "Most Capable (Paid)" },
|
|
3932
|
-
{ cmd: "gemini-3-flash-preview", desc: "Fast & Lightweight (Paid, Free
|
|
3933
|
-
{ cmd: "gemini-3.1-flash-lite-preview", desc: "Ultra Fast (Paid, Free
|
|
3937
|
+
{ cmd: "gemini-3-flash-preview", desc: "Fast & Lightweight (Paid, Limited Free quota)" },
|
|
3938
|
+
{ cmd: "gemini-3.1-flash-lite-preview", desc: "Ultra Fast (Paid, Decent Free quota)" }
|
|
3934
3939
|
]
|
|
3935
3940
|
},
|
|
3936
3941
|
{ cmd: "/settings", desc: "Configure system prefs" },
|
|
@@ -4950,7 +4955,7 @@ Selection: ${val}`,
|
|
|
4950
4955
|
setActiveView("chat");
|
|
4951
4956
|
setTimeout(() => {
|
|
4952
4957
|
handleSubmit(val);
|
|
4953
|
-
},
|
|
4958
|
+
}, 200);
|
|
4954
4959
|
},
|
|
4955
4960
|
onEdit: (val) => {
|
|
4956
4961
|
setResolutionData(null);
|
|
@@ -5197,7 +5202,7 @@ var init_app = __esm({
|
|
|
5197
5202
|
init_text();
|
|
5198
5203
|
SESSION_START_TIME = Date.now();
|
|
5199
5204
|
CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
|
|
5200
|
-
versionFluxflow = "1.8.
|
|
5205
|
+
versionFluxflow = "1.8.19";
|
|
5201
5206
|
updatedOn = "2026-05-10";
|
|
5202
5207
|
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 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(
|
|
5203
5208
|
CommandMenu,
|