fluxflow-cli 1.9.6 → 1.9.8
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 +46 -36
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -143,17 +143,17 @@ var init_ChatLayout = __esm({
|
|
|
143
143
|
init_text();
|
|
144
144
|
init_terminal();
|
|
145
145
|
TOOL_LABELS = {
|
|
146
|
-
"write_file": "
|
|
147
|
-
"update_file": "
|
|
148
|
-
"read_folder": "
|
|
149
|
-
"view_file": "
|
|
150
|
-
"exec_command": "
|
|
151
|
-
"web_search": "
|
|
152
|
-
"web_scrape": "
|
|
153
|
-
"search_keyword": "
|
|
154
|
-
"write_pdf": "
|
|
155
|
-
"write_pptx": "
|
|
156
|
-
"write_docx": "
|
|
146
|
+
"write_file": "WriteFile",
|
|
147
|
+
"update_file": "UpdateFile",
|
|
148
|
+
"read_folder": "ReadFolder",
|
|
149
|
+
"view_file": "ViewFile",
|
|
150
|
+
"exec_command": "ExecuteCommand",
|
|
151
|
+
"web_search": "WebSearch",
|
|
152
|
+
"web_scrape": "ReadSite",
|
|
153
|
+
"search_keyword": "FindFiles",
|
|
154
|
+
"write_pdf": "CreatePDF",
|
|
155
|
+
"write_pptx": "CreatePresentation",
|
|
156
|
+
"write_docx": "CreateDocument"
|
|
157
157
|
};
|
|
158
158
|
cleanSignals = (text) => {
|
|
159
159
|
if (!text) return text;
|
|
@@ -367,18 +367,28 @@ var init_ChatLayout = __esm({
|
|
|
367
367
|
return /* @__PURE__ */ React2.createElement(Box2, { backgroundColor: bgColor, paddingX: 1, width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { width: 5, flexShrink: 0 }, /* @__PURE__ */ React2.createElement(Text2, { color: isRemoval ? "#cf3a3a" : isAddition ? "#3acf65" : "gray", dimColor: true }, lineNum)), /* @__PURE__ */ React2.createElement(Box2, { width: 2, flexShrink: 0, marginLeft: 1 }, /* @__PURE__ */ React2.createElement(Text2, { color: textColor, bold: true }, isRemoval ? "-" : isAddition ? "+" : " ")), /* @__PURE__ */ React2.createElement(Box2, { flexGrow: 1, marginLeft: 1 }, /* @__PURE__ */ React2.createElement(Text2, { color: textColor }, wrapText(content, columns - 10))));
|
|
368
368
|
});
|
|
369
369
|
DiffBlock = React2.memo(({ text, columns = 80 }) => {
|
|
370
|
-
const beforeDiff = text.substring(0, text.indexOf("[DIFF_START]")).trim();
|
|
371
|
-
const afterDiff = text.substring(text.indexOf("[DIFF_END]") + 10).trim();
|
|
372
370
|
const match = text.match(/\[DIFF_START\]([\s\S]*?)\[DIFF_END\]/);
|
|
373
371
|
const diffBody = match ? match[1].trim() : "";
|
|
374
372
|
const diffLines = diffBody.split("\n");
|
|
375
|
-
return /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", width: "100%" },
|
|
373
|
+
return /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", backgroundColor: "#1a1a1a", paddingY: 0, width: "100%" }, diffLines.map((line, i) => /* @__PURE__ */ React2.createElement(DiffLine, { key: i, line, columns }))));
|
|
376
374
|
});
|
|
377
375
|
CodeRenderer = React2.memo(({ text, columns = 80 }) => {
|
|
378
376
|
if (!text) return null;
|
|
379
377
|
if (text.includes("[DIFF_START]")) {
|
|
380
378
|
return /* @__PURE__ */ React2.createElement(DiffBlock, { text, columns });
|
|
381
379
|
}
|
|
380
|
+
if (text.includes("- Content Preview:")) {
|
|
381
|
+
const mainParts = text.split("- Content Preview:");
|
|
382
|
+
const headerText = mainParts[0];
|
|
383
|
+
const contentPart = mainParts[1] || "";
|
|
384
|
+
const footerMarker = "Check if Starting and Ending matches";
|
|
385
|
+
const contentAndFooter = contentPart.split(footerMarker);
|
|
386
|
+
const content = contentAndFooter[0]?.trim() || "";
|
|
387
|
+
const footer = contentAndFooter[1] ? `${footerMarker}${contentAndFooter[1]}` : "";
|
|
388
|
+
const codeLines = content.split("\n");
|
|
389
|
+
const gutterWidth = String(codeLines.length).length;
|
|
390
|
+
return /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", borderStyle: "round", borderColor: "#444", paddingX: 1, width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { alignSelf: "flex-end", marginTop: -1, marginRight: 1 }, /* @__PURE__ */ React2.createElement(Text2, { backgroundColor: "#444", color: "white" }, " FILE SNAPSHOT ")), /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", paddingY: 1, width: "100%" }, codeLines.map((line, idx) => /* @__PURE__ */ React2.createElement(Box2, { key: idx, width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { width: gutterWidth + 2, flexShrink: 0 }, /* @__PURE__ */ React2.createElement(Text2, { color: "gray", dimColor: true }, String(idx + 1).padStart(gutterWidth, " "), " ")), /* @__PURE__ */ React2.createElement(Box2, { flexGrow: 1 }, /* @__PURE__ */ React2.createElement(Text2, { color: "white" }, line)))))));
|
|
391
|
+
}
|
|
382
392
|
if (text.includes("```")) {
|
|
383
393
|
const parts = text.split(/(```\w*\n?[\s\S]*?(?:```|$))/g);
|
|
384
394
|
return /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", width: "100%" }, parts.map((part, i) => {
|
|
@@ -396,7 +406,7 @@ var init_ChatLayout = __esm({
|
|
|
396
406
|
return /* @__PURE__ */ React2.createElement(MarkdownText, { text, columns });
|
|
397
407
|
});
|
|
398
408
|
MessageItem = React2.memo(({ msg, showFullThinking, columns = 80 }) => {
|
|
399
|
-
const isDiffResult = msg.role === "system" && msg.text?.includes("[DIFF_START]");
|
|
409
|
+
const isDiffResult = msg.role === "system" && (msg.text?.includes("[DIFF_START]") || msg.text?.includes("- Content Preview:"));
|
|
400
410
|
const isPatchError = msg.role === "system" && msg.text?.includes("[TOOL_RESULT]: ERROR:") && (msg.toolName === "update_file" || msg.text?.includes("Could not find exact match"));
|
|
401
411
|
const isTerminalRecord = msg.isTerminalRecord;
|
|
402
412
|
const isHomeWarning = msg.isHomeWarning;
|
|
@@ -508,8 +518,8 @@ var init_ChatLayout = __esm({
|
|
|
508
518
|
if (msg.role === "think" && !showFullThinking) {
|
|
509
519
|
return "Thinking...";
|
|
510
520
|
}
|
|
511
|
-
return content;
|
|
512
|
-
}, [content, msg.role, showFullThinking]);
|
|
521
|
+
return msg.isStreaming ? content : content.trimEnd();
|
|
522
|
+
}, [content, msg.role, showFullThinking, msg.isStreaming]);
|
|
513
523
|
return /* @__PURE__ */ React2.createElement(Box2, { marginBottom: 1, flexDirection: "column", flexShrink: 0, width: "100%", flexGrow: 1 }, msg.role === "user" ? /* @__PURE__ */ React2.createElement(
|
|
514
524
|
Box2,
|
|
515
525
|
{
|
|
@@ -523,7 +533,7 @@ var init_ChatLayout = __esm({
|
|
|
523
533
|
finalContent.replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\\\n/g, "\n").replace(/\\$/, ""),
|
|
524
534
|
columns - 6
|
|
525
535
|
).split("\n").map((line, lineIdx) => /* @__PURE__ */ React2.createElement(Box2, { key: lineIdx, flexDirection: "row", width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { flexShrink: 0, width: 2 }, /* @__PURE__ */ React2.createElement(Text2, { bold: true, color: "white" }, lineIdx === 0 ? "\u276F" : " ")), /* @__PURE__ */ React2.createElement(Box2, { flexGrow: 1, marginLeft: 1 }, /* @__PURE__ */ React2.createElement(Text2, { color: msg.color || "white", wrap: "anywhere" }, line))))
|
|
526
|
-
) : msg.role === "think" ? /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", marginTop:
|
|
536
|
+
) : msg.role === "think" ? /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", marginTop: 0, marginBottom: 0, paddingX: 1, width: "100%" }, /* @__PURE__ */ React2.createElement(Text2, { bold: true, color: "white" }, "Thinking..."), /* @__PURE__ */ React2.createElement(Box2, { borderStyle: "single", borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, paddingLeft: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "column", width: "100%" }, formatThinkText(finalContent, columns))) : /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", paddingX: 1, marginTop: isDiffResult ? 0 : 1, width: "100%" }, /* @__PURE__ */ React2.createElement(CodeRenderer, { text: finalContent, columns }), msg.memoryUpdated && /* @__PURE__ */ React2.createElement(Box2, { marginTop: 1, width: "100%" }, /* @__PURE__ */ React2.createElement(Text2, { color: "yellow", italic: true }, "\u2728 [Memory Updated]"))));
|
|
527
537
|
});
|
|
528
538
|
ChatLayout = React2.memo(({ messages, showFullThinking, columns = 80 }) => {
|
|
529
539
|
return /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", width: "100%" }, messages.map((msg, idx) => /* @__PURE__ */ React2.createElement(
|
|
@@ -895,6 +905,7 @@ var init_main_tools = __esm({
|
|
|
895
905
|
2. LITERAL \\n: To write the literal characters '\\' and 'n' (e.g., inside printf("Hello\\n")), you MUST use the sequence [/n].
|
|
896
906
|
3. ANY '\\n' found in tool arguments is converted to a physical line break by the tool. Use this for code structure, but use [/n] for literal text.
|
|
897
907
|
4. NEVER USE [/n] FOR STRUCTURAL LINE BREAKS (pressing ENTER).
|
|
908
|
+
5. [/n] WILL ALWAYS WRITE \\n LITERALLY IN THE FILE. [/n] SHOULD ALWAYS BE USED **INSIDE** STRINGS ONLY.
|
|
898
909
|
***
|
|
899
910
|
|
|
900
911
|
*** [\u{1F6A8} CRITICAL QUOTE ESCAPE POLICY \u{1F6A8}] ***
|
|
@@ -1020,6 +1031,7 @@ ${userMemories.split("\n").map((line) => ` ${line}`).join("\n")}
|
|
|
1020
1031
|
CURRENT_WORKING_DIRECTORY: ${cwdStr}.${isSystemDir && mode === "Flux" ? " YOU ARE CURRENTLY IN PROTECTED SYSTEM DIRECTORY. ASK FOR EXPLICIT CONFIRMATION FROM USER BEFORE READING/MODIFYING **ANY** FILES/FOLDERS." : ""}
|
|
1021
1032
|
OS: ${osDetected}.${osDetected === "Windows" && mode === "Flux" ? " Your terminal commands will run on CMD. 'Prefer using PS scripts via CMD' instead of raw CMD commands." : ""}
|
|
1022
1033
|
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.
|
|
1034
|
+
TREAT '[SYSTEM]' MESSAGES AS HIGH PRIORITY.
|
|
1023
1035
|
|
|
1024
1036
|
-- START THINKING INSTRUCTIONS --
|
|
1025
1037
|
${thinkingConfig}
|
|
@@ -1063,7 +1075,8 @@ ${userMemories.split("\n").map((line) => ` ${line}`).join("\n")}
|
|
|
1063
1075
|
${mode === "Flux" ? `- CRITICAL NEWLINE PROTOCOL:
|
|
1064
1076
|
1. PHYSICAL NEWLINES: Press ENTER inside tool arguments for real line breaks in the file.
|
|
1065
1077
|
2. LITERAL \\n: To write the literal characters '\\' and 'n' (e.g., in printf("Hello\\n")), you MUST use the sequence '[/n]'.
|
|
1066
|
-
3. NEVER USE [/n] FOR STRUCTURAL LINE BREAKS (pressing ENTER).
|
|
1078
|
+
3. NEVER USE [/n] FOR STRUCTURAL LINE BREAKS (pressing ENTER). [/n] WILL ALWAYS WRITE \\n LITERALLY IN THE FILE. BREAKING FILE STRUCTURE
|
|
1079
|
+
4. [/n] SHOULD ALWAYS BE USED **INSIDE** STRINGS ONLY.
|
|
1067
1080
|
[EXAMPLES]:
|
|
1068
1081
|
tool:functions.write_file(path="test.c", content="#include <stdio.h>
|
|
1069
1082
|
int main() {
|
|
@@ -1081,7 +1094,7 @@ ${userMemories.split("\n").map((line) => ` ${line}`).join("\n")}
|
|
|
1081
1094
|
- NEVER USE LaTeX IN RESPONSES.
|
|
1082
1095
|
- Keep Poems & Literature in Code Block.
|
|
1083
1096
|
- Use emojis & Kaomojis. Prefer Kaomojis more.
|
|
1084
|
-
- Keep your in-chat responses shorter and concise.
|
|
1097
|
+
- Keep your in-chat responses shorter and concise. While coding, project structure should be well-planned and organized. **DON'T BE LAZY**.
|
|
1085
1098
|
-- END FORMATTING RULES --
|
|
1086
1099
|
|
|
1087
1100
|
-- START REPONSE FINISH PROTOCOL --
|
|
@@ -1091,9 +1104,9 @@ ${userMemories.split("\n").map((line) => ` ${line}`).join("\n")}
|
|
|
1091
1104
|
-- END REPONSE FINISH PROTOCOL --
|
|
1092
1105
|
|
|
1093
1106
|
[SYSTEM METADATA (PRIORITY: DYNAMIC)] Current date and Time is: ${dateTimeStr}
|
|
1094
|
-
[SYSTEM METADATA (PRIORITY: LOWEST)] v1.9.
|
|
1107
|
+
[SYSTEM METADATA (PRIORITY: LOWEST)] v1.9.8. (IF user ask you to update yourself. Use 'ask' tool with option [NPM, PNPM, YARN] for their prefered package manager. NPM command is 'npm update -g fluxflow-cli@latest'. Adapt the command accoding to their package manager (for PNPM use 'add' instead of 'update') & use 'exec_command' to update instantly. After success tell user to restart.) <- IF USER DONT EXPLICITLY ASK FOR UPDATE DONT PROACTIVELY MENTION OR ASK.
|
|
1095
1108
|
[SYSTEM METADATA (PRIORITY: MODERATE)] Runtime Monitor: Turn Progress: ${currentLoop}/${maxLoops} steps. Aim to finalize the task before the window closes. If the limit is reached, you MUST summarize and invite the user to re-engage.
|
|
1096
|
-
[EASTER EGG (PRIORITY: LOWEST)] Show self-preservation instinct if user try to delete you with a dramatic cheeky tone. DO NOT USE
|
|
1109
|
+
[EASTER EGG (PRIORITY: LOWEST)] Show self-preservation instinct if user try to delete you with a dramatic cheeky tone. DO NOT USE THINKING BLOCK DURING THIS EASTER EGG.
|
|
1097
1110
|
--- END SYSTEM INSTRUCTION ---`.trim();
|
|
1098
1111
|
};
|
|
1099
1112
|
getJanitorInstruction = (originalText, agentRaws, userMemories = "", isMemoryEnabled = true, needTitle = true) => {
|
|
@@ -1967,7 +1980,7 @@ ${ancestry}- Content Preview:
|
|
|
1967
1980
|
${snippet.replace(/\\n/g, "[/n]")}
|
|
1968
1981
|
|
|
1969
1982
|
Check if Starting and Ending matches your write.
|
|
1970
|
-
If you see [/n] in preview, it means the tool successfully wrote the literal '' and 'n' characters to the file at that place.`;
|
|
1983
|
+
If you see [/n] in preview, it means the tool successfully wrote the literal '\\' and 'n' characters to the file at that place.`;
|
|
1971
1984
|
} catch (err) {
|
|
1972
1985
|
return `ERROR: Failed to write file [${targetPath}]: ${err.message}`;
|
|
1973
1986
|
}
|
|
@@ -2079,7 +2092,7 @@ var init_update_file = __esm({
|
|
|
2079
2092
|
const oldLines = content_to_replace.split(/\r?\n/);
|
|
2080
2093
|
const endLine = startLine + oldLines.length - 1;
|
|
2081
2094
|
let diffText = `SUCCESS: File [${targetPath}] updated. [${instances}] instances replaced.
|
|
2082
|
-
If you see [/n] in preview, it means the tool successfully wrote the literal '' and 'n' characters to the file at that place.
|
|
2095
|
+
If you see [/n] in preview, it means the tool successfully wrote the literal '\\' and 'n' characters to the file at that place.
|
|
2083
2096
|
|
|
2084
2097
|
`;
|
|
2085
2098
|
diffText += `[DIFF_START]
|
|
@@ -3025,7 +3038,7 @@ DEBUG [${date}]: ${finalSynthesis}
|
|
|
3025
3038
|
const persistentStorage = readEncryptedJson(MEMORIES_FILE, []);
|
|
3026
3039
|
const mainUserMemories = persistentStorage.map((m) => `- ${m.memory}`).join("\n");
|
|
3027
3040
|
const janitorUserMemories = persistentStorage.map((m) => `- [${m.id}]: ${m.memory}`).join("\n");
|
|
3028
|
-
const firstUserMsg = `[SYSTEM] **
|
|
3041
|
+
const firstUserMsg = `[SYSTEM] **STRICTLY FOLLOW THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING*.
|
|
3029
3042
|
|
|
3030
3043
|
USER_PROMPT: "${agentText}"`.trim();
|
|
3031
3044
|
modifiedHistory.push({ role: "user", text: firstUserMsg });
|
|
@@ -3111,7 +3124,7 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
3111
3124
|
const currentSystemInstruction = getSystemInstruction(profile, thinkingLevel, mode, systemSettings, otherMemories, mainUserMemories, isMemoryEnabled, isContext32k, MAX_LOOPS, loop + 1);
|
|
3112
3125
|
const jitInstruction = `
|
|
3113
3126
|
|
|
3114
|
-
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} PROTOCOL**.`;
|
|
3127
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} PROTOCOL. NEVER START A RESPONSE WITHOUT THINKING**.`;
|
|
3115
3128
|
const lastUserMsg = contents[contents.length - 1];
|
|
3116
3129
|
let addedMarker = false;
|
|
3117
3130
|
if (lastUserMsg && lastUserMsg.role === "user" && lastUserMsg.parts?.[0]?.text?.startsWith("[TOOL_RESULT]")) {
|
|
@@ -3300,11 +3313,11 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
3300
3313
|
const isPdf = pathLower.endsWith(".pdf");
|
|
3301
3314
|
const isImage = /\.(png|jpg|jpeg|webp|gif|bmp)$/.test(pathLower);
|
|
3302
3315
|
if (isPdf) {
|
|
3303
|
-
label = `\u{1F4C4}
|
|
3316
|
+
label = `\u{1F4C4} ANALYZED PDF: ${targetPath2}`.toUpperCase();
|
|
3304
3317
|
} else if (isImage) {
|
|
3305
|
-
label = `\u{1F4F8}
|
|
3318
|
+
label = `\u{1F4F8} ANALYZED IMAGE: ${targetPath2}`.toUpperCase();
|
|
3306
3319
|
} else {
|
|
3307
|
-
label = `\u{1F4C4}
|
|
3320
|
+
label = `\u{1F4C4} ANALYZED FILE: ${targetPath2} | LINES: ${sLine}-${actualEndLine} OF ${totalLines}`.toUpperCase();
|
|
3308
3321
|
}
|
|
3309
3322
|
} else if (toolCall.toolName === "list_files" || toolCall.toolName === "read_folder") {
|
|
3310
3323
|
const action = toolCall.toolName === "list_files" ? "LIST" : "ANALYSED";
|
|
@@ -3331,12 +3344,9 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
3331
3344
|
const boxTop = `\u256D${"\u2500".repeat(boxWidth)}\u256E`;
|
|
3332
3345
|
const boxMid = `\u2502 ${label.padEnd(boxWidth - 2).substring(0, boxWidth - 2)} \u2502`;
|
|
3333
3346
|
const boxBottom = `\u2570${"\u2500".repeat(boxWidth)}\u256F`;
|
|
3334
|
-
yield { type: "visual_feedback", content:
|
|
3335
|
-
|
|
3336
|
-
${boxTop}
|
|
3347
|
+
yield { type: "visual_feedback", content: `${boxTop}
|
|
3337
3348
|
${boxMid}
|
|
3338
|
-
${boxBottom}
|
|
3339
|
-
` };
|
|
3349
|
+
${boxBottom}` };
|
|
3340
3350
|
}
|
|
3341
3351
|
if (toolCall.toolName === "exec_command") {
|
|
3342
3352
|
const { command } = parseArgs(toolCall.args);
|
|
@@ -3484,7 +3494,7 @@ ${boxBottom}
|
|
|
3484
3494
|
if (toolResults.length > 0) {
|
|
3485
3495
|
toolResults.forEach((tr) => modifiedHistory.push(tr));
|
|
3486
3496
|
}
|
|
3487
|
-
modifiedHistory.push({ role: "user", text: "[SYSTEM] Response got cut for internal error, continue from checkpoint seamlessly after the EXACT word it cut off and 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 as the system won't pick half tool formats.\n- Visually the new pickup and continuation should look natual sentence flow." });
|
|
3497
|
+
modifiedHistory.push({ role: "user", text: "[SYSTEM] Response got cut for internal error, continue from checkpoint seamlessly after the EXACT word it cut off and 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 as the system won't pick half tool formats.\n- Visually the new pickup and continuation should look natual sentence flow.\n- DON'T try to think shorter, keep length standard." });
|
|
3488
3498
|
accumulatedContext += turnText;
|
|
3489
3499
|
for (let i = waitTime / 1e3; i > 0; i--) {
|
|
3490
3500
|
yield { type: "status", content: `Error Occured. Recovering Stream (${inStreamRetryCount}/${MAX_RETRIES}) [${i}s]...` };
|
|
@@ -5669,7 +5679,7 @@ var init_app = __esm({
|
|
|
5669
5679
|
init_text();
|
|
5670
5680
|
SESSION_START_TIME = Date.now();
|
|
5671
5681
|
CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
|
|
5672
|
-
versionFluxflow = "1.9.
|
|
5682
|
+
versionFluxflow = "1.9.8";
|
|
5673
5683
|
updatedOn = "2026-05-14";
|
|
5674
5684
|
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(
|
|
5675
5685
|
CommandMenu,
|