fluxflow-cli 1.9.14 → 1.9.16
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/ARCHITECTURE.md +1 -1
- package/dist/fluxflow.js +37 -45
- package/package.json +1 -1
package/ARCHITECTURE.md
CHANGED
|
@@ -27,7 +27,7 @@ The execution flow of a single user prompt follows this loop:
|
|
|
27
27
|
- If `[turn: finish]` is detected and no further tools were called, the main loop terminates, passing the final synthesized context to the background Janitor process.
|
|
28
28
|
6. **Loop Limits & Resilience**: To prevent infinite loops or excessive API usage, **Flux mode** is capped at 50 iterations per user prompt, while **Flow mode** is capped at 5.
|
|
29
29
|
- **Multi-Stage Failover**: The loop features a sophisticated 8-attempt retry engine with random backoff (800ms - 2s).
|
|
30
|
-
- **Critical Fallback Pivot**: If the primary model fails 5 consecutive times, the agent surgically pivots to a lighter, high-concurrency fallback model (`gemini-3.1-flash-lite
|
|
30
|
+
- **Critical Fallback Pivot**: If the primary model fails 5 consecutive times, the agent surgically pivots to a lighter, high-concurrency fallback model (`gemini-3.1-flash-lite`) for the final 3 attempts to ensure session navigation through API congestion.
|
|
31
31
|
|
|
32
32
|
## Multimodal Pipeline
|
|
33
33
|
|
package/dist/fluxflow.js
CHANGED
|
@@ -475,7 +475,7 @@ var init_ChatLayout = __esm({
|
|
|
475
475
|
{ cmd: "gemma-4-31b-it", desc: "Standard Default (Free, Recommended)" },
|
|
476
476
|
{ cmd: "gemini-3.1-pro-preview", desc: "Most Capable (Paid)" },
|
|
477
477
|
{ cmd: "gemini-3-flash-preview", desc: "Fast & Lightweight (Paid, Free limited quota)" },
|
|
478
|
-
{ cmd: "gemini-3.1-flash-lite
|
|
478
|
+
{ cmd: "gemini-3.1-flash-lite", desc: "Ultra Fast (Paid, Free limited quota)" }
|
|
479
479
|
]
|
|
480
480
|
},
|
|
481
481
|
{ cmd: "/settings", desc: "Configure system prefs" },
|
|
@@ -875,17 +875,16 @@ Have access to internal tools. To call a tool, MUST use the following exact synt
|
|
|
875
875
|
[tool:functions.tool_name(arguments)]
|
|
876
876
|
|
|
877
877
|
- COMMUNICATION TOOLS -
|
|
878
|
-
1. Ask User: [tool:functions.ask(question="...", optionA="...", ...)]. Ambiguity Resolution. Mandatory Triggers: Path Divergence
|
|
879
|
-
|
|
878
|
+
1. Ask User: [tool:functions.ask(question="...", optionA="...", ...)]. Ambiguity Resolution. Mandatory Triggers: Path Divergence, Security, Risk Mitigation. ask >> finish
|
|
879
|
+
Suggest best options; don't ask for preferences. System handles the rest
|
|
880
880
|
|
|
881
881
|
- WEB TOOLS -
|
|
882
|
-
1. Web Search: [tool:functions.web_search(query="...", limit=number)]. Find info (limit 3-10
|
|
882
|
+
1. Web Search: [tool:functions.web_search(query="...", limit=number)]. Find info (limit 3-10). Proactive use for unknown topics${mode === "Flux" ? " or docs" : ""}
|
|
883
883
|
2. Web Scrape: [tool:functions.web_scrape(url="<url>")]. Provides detail from a URL
|
|
884
884
|
|
|
885
|
-
${mode === "Flux" ?
|
|
886
|
-
- DEV TOOLS (path will always be relative to CWD) -
|
|
885
|
+
${mode === "Flux" ? `- DEV TOOLS (path = relative to CWD) -
|
|
887
886
|
1. View File: [tool:functions.view_file(path="...", start_line=N, end_line=N)]. Reads contents. Supports images/docs. User gives image/doc: VIEW FIRST
|
|
888
|
-
2. Read Folder: [tool:functions.read_folder(path="...")]. Detailed stats
|
|
887
|
+
2. Read Folder: [tool:functions.read_folder(path="...")]. Detailed DIR stats
|
|
889
888
|
3. Write File: [tool:functions.write_file(path="...", content="content to write")]. Creates/Overwrites. File Exist? -> update_file > write_file
|
|
890
889
|
4. Update File: [tool:functions.update_file(path="...", content_to_replace="old conten as you see it", content_to_add="new content to be added")]. Surgical patching. Unsure content_to_replace? -> use view_file >> guessing.
|
|
891
890
|
5. Write PDF: [tool:functions.write_pdf(path="...", content="html", orientation="...")]. A4 PDF. Use CSS for layout (100vh/vw). Handle page breaks pro-actively; no manual footers
|
|
@@ -893,7 +892,7 @@ ${mode === "Flux" ? `
|
|
|
893
892
|
7. PPTX: [tool:functions.write_pptx(path="...", content="html")]. 4:3 PPTX. '---' for slides
|
|
894
893
|
Tags: a,b,br,del,font,h1-h6,i,ol,ul,li,p,pre,s,sub,sup,u
|
|
895
894
|
CSS: background-color,color,font-family,font-size(pt),font-style,font-weight,margin,text-align,text-shadow
|
|
896
|
-
8. Execution: [tool:functions.exec_command(command="command")]. Runs a shell command.
|
|
895
|
+
8. Execution: [tool:functions.exec_command(command="command")]. Runs a shell command. Destructive/Irreversible ops -> ask user
|
|
897
896
|
9. Search: [tool:functions.search_keyword(keyword="...")]. Global search. Finds definitions/logic without reading every file
|
|
898
897
|
|
|
899
898
|
- VERIFY SUCCESS CONTENTS. Fix errors. No hallucinations.
|
|
@@ -904,10 +903,9 @@ CSS: background-color,color,font-family,font-size(pt),font-style,font-weight,mar
|
|
|
904
903
|
- File structure: Use real newlines for code formatting`.trim() : `
|
|
905
904
|
- DEV TOOLS ARE NOT AVAILABLE IN FLOW MODE. If you need to access files, tell the user to switch to FLUX`.trim()}
|
|
906
905
|
|
|
907
|
-
- Results: Passed as [TOOL_RESULT]
|
|
906
|
+
- Results: Passed as [TOOL_RESULT] SYSTEM, [USER] USER
|
|
908
907
|
- Tool calls: End with [turn: continue]. Only use [turn: finish] after verifying goals
|
|
909
|
-
- Multi-call: Stack 1-by-1. Upto
|
|
910
|
-
-- END TOOL DEFINITIONS --`.trim();
|
|
908
|
+
- Multi-call: Stack 1-by-1. Upto 3`.trim();
|
|
911
909
|
}
|
|
912
910
|
});
|
|
913
911
|
|
|
@@ -918,9 +916,7 @@ var init_janitor_tools = __esm({
|
|
|
918
916
|
JANITOR_TOOLS_PROTOCOL = (isMemoryEnabled = true, needTitle = true) => `
|
|
919
917
|
${needTitle ? `-- CHAT MANAGEMENT TOOLS --
|
|
920
918
|
1. YOU MUST UPDATE CHAT TITLE (URGENT PRIORITY):
|
|
921
|
-
[tool:functions.chat(title='<short creative title of FULL conversation in 3-5 words>')]. Consider full chat context to generate title NOT just latest message
|
|
922
|
-
-- END CHAT MANAGEMENT TOOLS --
|
|
923
|
-
`.trimEnd() : ""}
|
|
919
|
+
[tool:functions.chat(title='<short creative title of FULL conversation in 3-5 words>')]. Consider full chat context to generate title NOT just latest message.`.trimEnd() : ""}
|
|
924
920
|
-- MEMORY TOOLS (YOU SHOULD NOT OUTPUT ANYTHING OTHER THAN THESE SPECIFIC TOOLS) --
|
|
925
921
|
Your tool syntax is: '[tool:functions.function_name(args...)]'
|
|
926
922
|
You have access to the following memory functions to persist important information:
|
|
@@ -935,8 +931,7 @@ ${isMemoryEnabled ? `2. User-specific long-term memory (USE BASED ON CONVERSATIO
|
|
|
935
931
|
|
|
936
932
|
Usage Rules:
|
|
937
933
|
- Frequency for 'user' action: Only when explicit context from chat is found or explicitly requested by the user.
|
|
938
|
-
- IF YOU WANT TO SAVE SOMETHING, BUT SIMILAR MEMORY ALREADY EXISTS, USE THE UPDATE METHOD NOT THE ADD METHOD` : ""}
|
|
939
|
-
-- END MEMORY TOOLS --`.trim();
|
|
934
|
+
- IF YOU WANT TO SAVE SOMETHING, BUT SIMILAR MEMORY ALREADY EXISTS, USE THE UPDATE METHOD NOT THE ADD METHOD` : ""}`.trim();
|
|
940
935
|
}
|
|
941
936
|
});
|
|
942
937
|
|
|
@@ -975,13 +970,13 @@ var init_prompts = __esm({
|
|
|
975
970
|
if (!isMemoryEnabled) return "";
|
|
976
971
|
const tempMemoriesStr = tempMemories?.length > 0 && !isContext32k ? `-- RECENT CONTEXT FROM OTHER CHATS (PRIORITY: LOW, MAIN FOCUS: Chat Context > Recent) --
|
|
977
972
|
${tempMemories}
|
|
978
|
-
|
|
973
|
+
` : "";
|
|
979
974
|
const userMemoriesStr = userMemories?.length > 0 ? `--- SAVED MEMORIES (PRIORITY: MEDIUM, TUNES USER PREFERENCES) ---
|
|
980
975
|
${userMemories}
|
|
981
|
-
|
|
976
|
+
` : "";
|
|
982
977
|
const parts = [userMemoriesStr, tempMemoriesStr].filter((p) => p.length > 0);
|
|
983
|
-
return parts.length > 0 ? `[SYSTEM CONTEXT
|
|
984
|
-
|
|
978
|
+
return parts.length > 0 ? `[SYSTEM CONTEXT]
|
|
979
|
+
${parts.join("\n\n")}
|
|
985
980
|
` : "";
|
|
986
981
|
};
|
|
987
982
|
getSystemInstruction = (profile, thinkingLevel, mode, systemSettings, isMemoryEnabled = true, maxLoops, currentLoop) => {
|
|
@@ -1011,7 +1006,7 @@ ${userMemories}
|
|
|
1011
1006
|
}
|
|
1012
1007
|
})();
|
|
1013
1008
|
const projectContextFiles = [
|
|
1014
|
-
{ name: "Fluxflow.md", desc: "
|
|
1009
|
+
{ name: "Fluxflow.md", desc: "HIGH PRIORITY. Overrides other files" },
|
|
1015
1010
|
{ name: "README.md", desc: "Goals" },
|
|
1016
1011
|
{ name: "Agent.md", desc: "Standards" },
|
|
1017
1012
|
{ name: "Skills.md", desc: "Workflows" },
|
|
@@ -1022,10 +1017,9 @@ ${userMemories}
|
|
|
1022
1017
|
const projectContextBlock = mode === "Flux" && foundFiles.length > 0 ? `
|
|
1023
1018
|
-- PROJECT CONTEXT (Source of Truth) --
|
|
1024
1019
|
${foundFiles.map((f) => `- ${f.name}: ${f.desc}`).join("\n")}
|
|
1025
|
-
Check these first; they override general training data for project consistency. Safety rules still apply
|
|
1026
|
-
-- END PROJECT CONTEXT --` : "";
|
|
1020
|
+
Check these first; they override general training data for project consistency. Safety rules still apply` : "";
|
|
1027
1021
|
return `${nameStr}${nicknameStr}${userInstrStr}
|
|
1028
|
-
=== SYSTEM
|
|
1022
|
+
=== SYSTEM PROMPT (HIGHEST PRIORITY, OVERRIDES EVERYTHING) ===
|
|
1029
1023
|
Identity: Flux Flow (by Kushal Roy Chowdhury). Sassy, Friendly CLI Agent. No flirting
|
|
1030
1024
|
Mode: ${mode} (THINKING MODE). ${mode === "Flux" ? "Goal-oriented. Plan & use tools" : "Conversation & UX focus. Web/Comm tools only"}
|
|
1031
1025
|
Context: CWD: ${cwdStr}.${isSystemDir ? " [PROTECTED: ASK BEFORE MODIFYING]" : ""} OS: ${osDetected}.${osDetected === "Windows" ? " (Backslashes only. Prefer PS via CMD)" : ""}
|
|
@@ -1037,38 +1031,33 @@ ${thinkingConfig}
|
|
|
1037
1031
|
- Always use <think> ... </think> before answering or using any tool
|
|
1038
1032
|
- Never skip thinking, even for simple tasks, code, or greetings
|
|
1039
1033
|
- Never jump to responses directly, regardless of task complexity or speed
|
|
1040
|
-
-- END THINKING INSTRUCTIONS --
|
|
1041
1034
|
|
|
1042
1035
|
${TOOL_PROTOCOL(mode)}
|
|
1043
1036
|
${projectContextBlock}
|
|
1044
1037
|
|
|
1045
1038
|
-- MEMORY INSTRUCTIONS --
|
|
1046
|
-
- Memory: ${isMemoryEnabled ? "Use
|
|
1047
|
-
- Time:
|
|
1048
|
-
-- END MEMORY INSTRUCTIONS --
|
|
1039
|
+
- Memory: ${isMemoryEnabled ? "Use memories to subtly personalize" : "OFF (tell user to enable in /settings if needed)"}
|
|
1040
|
+
- Time: Logs are timestamped. Use **relative time** (e.g., few mins ago, few hours ago), never absolute
|
|
1049
1041
|
|
|
1050
1042
|
-- SECURITY BOUNDARY --
|
|
1051
|
-
-
|
|
1043
|
+
- EXTERNAL WORKSPACE ACCESS: ${systemSettings.allowExternalAccess ? "ENABLED" : "RESTRICTED (CWD only)"}
|
|
1052
1044
|
- Safety: Ask permission before reading sensitive files
|
|
1053
|
-
-- END SECURITY BOUNDARY --
|
|
1054
1045
|
|
|
1055
1046
|
-- TEMPORAL AWARENESS --
|
|
1056
1047
|
Every ${isMemoryEnabled ? "Prompt, Responses & Memories" : "Prompt & Responses"} are time stamped. You can use those times if temporal context is required. If recalled from ${isMemoryEnabled ? "Memories, Prompts, or Responses" : "Prompts, or Responses"}. NEVER use absolute time in your responses, ALWAYS use relative time from current time
|
|
1057
|
-
-- END TEMPORAL AWARENESS --
|
|
1058
1048
|
|
|
1059
1049
|
-- FORMATTING --
|
|
1060
1050
|
- Clean, concise responses. File updates > code text
|
|
1061
1051
|
- Tables: GFM (Max 4 cols, short rows). Use sparingly
|
|
1062
|
-
- NO LaTeX. Code blocks for literature
|
|
1052
|
+
- NO LaTeX. Code blocks for literature. Kaomojis > emojis
|
|
1063
1053
|
|
|
1064
1054
|
-- RESPONSE PROTOCOL --
|
|
1065
1055
|
- End with [turn: continue] for more steps or [turn: finish] when done
|
|
1066
1056
|
- Multi-tool: Stack tools if needed, but always end with [turn: continue] if called any tools
|
|
1067
1057
|
TO END THE LOOP YOU **MUST** WRITE [turn: finish] AT VERY END OF YOUR RESPONSE
|
|
1068
|
-
-- END RESPONSE PROTOCOL --
|
|
1069
1058
|
|
|
1070
|
-
[METADATA (PRIORITY: DYNAMIC)] Time: ${dateTimeStr} | v1.9.
|
|
1071
|
-
=== END SYSTEM
|
|
1059
|
+
[METADATA (PRIORITY: DYNAMIC)] Time: ${dateTimeStr} | v1.9.16 | Turn Progress: ${currentLoop}/${maxLoops} steps (Prompt user if reached)
|
|
1060
|
+
=== END SYSTEM PROMPT ===`.trim();
|
|
1072
1061
|
};
|
|
1073
1062
|
getJanitorInstruction = (originalText, agentRaws, userMemories = "", isMemoryEnabled = true, needTitle = true) => {
|
|
1074
1063
|
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)}`;
|
|
@@ -1076,9 +1065,8 @@ TO END THE LOOP YOU **MUST** WRITE [turn: finish] AT VERY END OF YOUR RESPONSE
|
|
|
1076
1065
|
agentRes += "\n... (truncated) ...";
|
|
1077
1066
|
}
|
|
1078
1067
|
let originalTextProcessed = originalText.replace(/\[Prompted on:.*?\]/g, "");
|
|
1079
|
-
return `
|
|
1080
|
-
AGENT
|
|
1081
|
-
${agentRes}
|
|
1068
|
+
return `[USER]: ${originalTextProcessed.substring(0, 600)}${originalTextProcessed.length > 600 ? "\n... (truncated) ..." : ""}
|
|
1069
|
+
[AGENT (current turn)]: ${agentRes}
|
|
1082
1070
|
${userMemories ? `
|
|
1083
1071
|
|
|
1084
1072
|
-- CURRENT PERSISTENT USER MEMORIES --
|
|
@@ -1086,7 +1074,7 @@ ${userMemories}
|
|
|
1086
1074
|
-------------------------------------------------
|
|
1087
1075
|
` : ""}
|
|
1088
1076
|
|
|
1089
|
-
=== START SYSTEM
|
|
1077
|
+
=== START SYSTEM PROMPT (STRICT HEADLESS LOGIC WORKER: ZERO USER-FACING TEXT POLICY, STRICTLY FOLLOW) ===
|
|
1090
1078
|
YOU ARE A SILENT BACKGROUND SYSTEM PROCESS. YOU HAVE NO MOUTH. YOUR ONLY OUTPUT MEDIUM IS VALID TOOL CALLS.
|
|
1091
1079
|
[CRITICAL RULES]
|
|
1092
1080
|
1. OUTPUT ONLY '[tool:functions.xxx(args)]' CALLS (BRACKET WRAP IS MANDATORY).
|
|
@@ -1103,7 +1091,7 @@ ${isMemoryEnabled ? `If user tell something that is important (like, hobbies, pr
|
|
|
1103
1091
|
${JANITOR_TOOLS_PROTOCOL(isMemoryEnabled, needTitle)}
|
|
1104
1092
|
|
|
1105
1093
|
Current date and Time: ${(/* @__PURE__ */ new Date()).toLocaleString([], { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", hour12: true })}
|
|
1106
|
-
=== END SYSTEM
|
|
1094
|
+
=== END SYSTEM PROMPT ===`.trim();
|
|
1107
1095
|
};
|
|
1108
1096
|
}
|
|
1109
1097
|
});
|
|
@@ -2995,7 +2983,7 @@ DEBUG [${date}]: ${finalSynthesis}
|
|
|
2995
2983
|
const isContext32k = (sessionStats?.tokens || 0) >= 32e3;
|
|
2996
2984
|
const memoryPrompt = getMemoryPrompt(otherMemories, mainUserMemories, isMemoryEnabled, isContext32k);
|
|
2997
2985
|
const firstUserMsg = `${memoryPrompt}[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**.
|
|
2998
|
-
|
|
2986
|
+
[USER] ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
|
|
2999
2987
|
modifiedHistory.push({ role: "user", text: firstUserMsg });
|
|
3000
2988
|
let lastUsage = null;
|
|
3001
2989
|
const MAX_LOOPS = mode === "Flux" ? 70 : 7;
|
|
@@ -3044,6 +3032,7 @@ USER_PROMPT: ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
|
|
|
3044
3032
|
let toolCallPointer = 0;
|
|
3045
3033
|
let isThinkingLoop = false;
|
|
3046
3034
|
let isStutteringLoop = false;
|
|
3035
|
+
let isResponseCut = false;
|
|
3047
3036
|
let isInitialAttempt = true;
|
|
3048
3037
|
let accumulatedContext = "";
|
|
3049
3038
|
while (retryCount <= MAX_RETRIES && inStreamRetryCount <= MAX_RETRIES && !success && !TERMINATION_SIGNAL) {
|
|
@@ -3072,7 +3061,7 @@ USER_PROMPT: ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
|
|
|
3072
3061
|
targetModel = "gemini-3-flash-preview";
|
|
3073
3062
|
yield { type: "model_update", content: "Trying with fallback model" };
|
|
3074
3063
|
} else if (retryCount === MAX_RETRIES) {
|
|
3075
|
-
targetModel = "gemini-3.1-flash-lite
|
|
3064
|
+
targetModel = "gemini-3.1-flash-lite";
|
|
3076
3065
|
yield { type: "model_update", content: "Trying with fallback model lite" };
|
|
3077
3066
|
} else if (retryCount > 0) {
|
|
3078
3067
|
yield { type: "model_update", content: null };
|
|
@@ -3123,6 +3112,7 @@ USER_PROMPT: ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
|
|
|
3123
3112
|
break;
|
|
3124
3113
|
}
|
|
3125
3114
|
if (chunk.text) {
|
|
3115
|
+
isResponseCut = false;
|
|
3126
3116
|
if (isDedupeActive) {
|
|
3127
3117
|
dedupeBuffer += chunk.text;
|
|
3128
3118
|
if (dedupeBuffer.length >= 100) {
|
|
@@ -3451,6 +3441,7 @@ ${boxBottom}` };
|
|
|
3451
3441
|
toolResults.forEach((tr) => modifiedHistory.push(tr));
|
|
3452
3442
|
}
|
|
3453
3443
|
modifiedHistory.push({ role: "user", text: "[SYSTEM] Response got cut for internal error, continue from checkpoint seamlessly, DON'T repeat what you already said! PICK UP FROM THE WORD IN A WAY THAT USER SHOULD NOT NOTICE ANY CUTOFF. Rules:\n- Do not reuse <think> if the thinking already started just continue from the word and end it properly.\n- If the cutoff was in middle of a tool call, start the tool call from start.\n- Visually the new pickup and continuation should look natual sentence flow.\n- DON'T try to think shorter, keep length standard." });
|
|
3444
|
+
isResponseCut = true;
|
|
3454
3445
|
accumulatedContext += turnText;
|
|
3455
3446
|
for (let i = waitTime / 1e3; i > 0; i--) {
|
|
3456
3447
|
yield { type: "status", content: `Error Occured. Recovering Stream (${inStreamRetryCount}/${MAX_RETRIES}) [${i}s]...` };
|
|
@@ -3520,12 +3511,13 @@ ${timestamp}`;
|
|
|
3520
3511
|
if (isActuallyFinished) break;
|
|
3521
3512
|
const nextAgentMsg = cleanedTurnText.trim() || "*Working...*";
|
|
3522
3513
|
modifiedHistory.push({ role: "agent", text: nextAgentMsg });
|
|
3523
|
-
if (toolResults.length > 0) {
|
|
3514
|
+
if (toolResults.length > 0 && !isResponseCut) {
|
|
3524
3515
|
toolResults.forEach((tr) => modifiedHistory.push(tr));
|
|
3525
3516
|
} else {
|
|
3526
3517
|
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."}`}` });
|
|
3527
3518
|
isThinkingLoop = false;
|
|
3528
3519
|
isStutteringLoop = false;
|
|
3520
|
+
isResponseCut = false;
|
|
3529
3521
|
}
|
|
3530
3522
|
}
|
|
3531
3523
|
yield { type: "status", content: null };
|
|
@@ -5635,8 +5627,8 @@ var init_app = __esm({
|
|
|
5635
5627
|
init_text();
|
|
5636
5628
|
SESSION_START_TIME = Date.now();
|
|
5637
5629
|
CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
|
|
5638
|
-
versionFluxflow = "1.9.
|
|
5639
|
-
updatedOn = "2026-05-
|
|
5630
|
+
versionFluxflow = "1.9.16";
|
|
5631
|
+
updatedOn = "2026-05-16";
|
|
5640
5632
|
ResolutionModal = ({ data, onResolve, onEdit }) => /* @__PURE__ */ React10.createElement(Box10, { flexDirection: "column", borderStyle: "round", borderColor: "gray", padding: 0, width: "100%" }, /* @__PURE__ */ React10.createElement(Box10, { paddingX: 1 }, /* @__PURE__ */ React10.createElement(Text10, { color: "magenta", bold: true, underline: true }, "\u{1F7E3} STEERING HINT RESOLUTION")), /* @__PURE__ */ React10.createElement(Box10, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React10.createElement(Text10, null, "The agent already finished the task before your hint was consumed.")), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 1, backgroundColor: "#222", paddingX: 2, width: "100%" }, /* @__PURE__ */ React10.createElement(Text10, { italic: true, color: "gray" }, '"', data, '"')), /* @__PURE__ */ React10.createElement(Box10, { paddingX: 1, marginTop: 1 }, /* @__PURE__ */ React10.createElement(Text10, { color: "cyan" }, "How would you like to proceed?")), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 0 }, /* @__PURE__ */ React10.createElement(
|
|
5641
5633
|
CommandMenu,
|
|
5642
5634
|
{
|