fluxflow-cli 1.8.32 → 1.8.34
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 +80 -29
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -173,7 +173,7 @@ var init_ChatLayout = __esm({
|
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
-
return result.replace(/^\[TOOL_RESULT\]:\s*/gi, "").split("\n").filter((line) => !line.trim().startsWith("SUCCESS:") && !line.trim().startsWith("ERROR:")).join("\n").replace(/\[\s*(turn\s*:)?\s*(continue|finish)\s*\]/gi, "").replace(/\[\s*(turn\s*:)?\s*(continue|finish)?\s*$/gi, "").replace(/\n\s*turn\s*:\s*(continue|finish)\s*$/gi, "").replace(/\n\nResponded on .*/g, "").replace(/\n\n\[Prompted on: .*\]/g, "").replace(/(\$?\\?\/?\\rightarrow\$?|\$\\rightarrow\$)/gi, "\u2192").replace(/(\$?\\?\/?\\leftarrow\$?|\$\\leftarrow\$)/gi, "\u2190").replace(/(\$?\\?\/?\\uparrow\$?|\$\\uparrow\$)/gi, "\u2191").replace(/(\$?\\?\/?\\downarrow\$?|\$\\downarrow\$)/gi, "\u2193").replace(/(\$?\\?\/?\\leftrightarrow\$?|\$\\leftrightarrow\$)/gi, "\u2194").replace(/\[\/n\]
|
|
176
|
+
return result.replace(/^\[TOOL_RESULT\]:\s*/gi, "").split("\n").filter((line) => !line.trim().startsWith("SUCCESS:") && !line.trim().startsWith("ERROR:")).join("\n").replace(/\[\s*(turn\s*:)?\s*(continue|finish)\s*\]/gi, "").replace(/\[\s*(turn\s*:)?\s*(continue|finish)?\s*$/gi, "").replace(/\n\s*turn\s*:\s*(continue|finish)\s*$/gi, "").replace(/\n\nResponded on .*/g, "").replace(/\n\n\[Prompted on: .*\]/g, "").replace(/(\$?\\?\/?\\rightarrow\$?|\$\\rightarrow\$)/gi, "\u2192").replace(/(\$?\\?\/?\\leftarrow\$?|\$\\leftarrow\$)/gi, "\u2190").replace(/(\$?\\?\/?\\uparrow\$?|\$\\uparrow\$)/gi, "\u2191").replace(/(\$?\\?\/?\\downarrow\$?|\$\\downarrow\$)/gi, "\u2193").replace(/(\$?\\?\/?\\leftrightarrow\$?|\$\\leftrightarrow\$)/gi, "\u2194").replace(/\[\/n\]?/g, "\\\\n").trim();
|
|
177
177
|
};
|
|
178
178
|
formatThinkText = (cleaned, columns = 80) => {
|
|
179
179
|
if (!cleaned) return null;
|
|
@@ -776,11 +776,9 @@ Second Line with literal [/n] sequence")]. Creates/Overwrites. DO NOT USE CODE B
|
|
|
776
776
|
*Prefer file write/update tools over writing code in chat*.
|
|
777
777
|
|
|
778
778
|
*** [\u{1F6A8} CRITICAL POLICY: NEWLINE CONTROL \u{1F6A8}] ***
|
|
779
|
-
1.
|
|
780
|
-
2.
|
|
781
|
-
3.
|
|
782
|
-
4. ALWAYS check the tool result diff to ensure your [/n] was correctly translated to a literal
|
|
783
|
-
.
|
|
779
|
+
1. PHYSICAL NEWLINES: Press ENTER inside tool arguments for real line breaks in the file structure.
|
|
780
|
+
2. LITERAL \\n: To write the literal characters '\\' and 'n' (e.g., inside printf("Hello\\n")), you MUST use the sequence [/n].
|
|
781
|
+
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.
|
|
784
782
|
***
|
|
785
783
|
|
|
786
784
|
*** [\u{1F6A8} CRITICAL QUOTE ESCAPE POLICY \u{1F6A8}] ***
|
|
@@ -932,16 +930,15 @@ ${userMemories.split("\n").map((line) => ` ${line}`).join("\n")}
|
|
|
932
930
|
-- END TEMPORAL AWARENESS --
|
|
933
931
|
|
|
934
932
|
-- START FORMATTING RULES --
|
|
935
|
-
${mode === "Flux" ? `- CRITICAL NEWLINE PROTOCOL:
|
|
936
|
-
|
|
933
|
+
${mode === "Flux" ? `- CRITICAL NEWLINE PROTOCOL:
|
|
934
|
+
1. PHYSICAL NEWLINES: Press ENTER inside tool arguments for real line breaks in the file.
|
|
935
|
+
2. LITERAL \\n: To write the literal characters '\\' and 'n' (e.g., in printf("Hello\\n")), you MUST use the sequence '[/n]'.
|
|
936
|
+
[EXAMPLES]:
|
|
937
937
|
tool:functions.write_file(path="test.c", content="#include <stdio.h>
|
|
938
938
|
int main() {
|
|
939
939
|
printf("Hello[/n]World");
|
|
940
940
|
return 0;
|
|
941
941
|
}")
|
|
942
|
-
[INCORRECT]:
|
|
943
|
-
tool:functions.write_file(path="test.c", content="#include <stdio.h>\\nint main() {\\nprintf("Hello\\\\n");\\n}")
|
|
944
|
-
\u{1F6D1} NEVER use '\\\\n' for literals; it will be converted to a real line break and break code syntax.
|
|
945
942
|
|
|
946
943
|
- CRITICAL QUOTE ESCAPE POLICY: Inside tool call arguments (like 'content' in write_file AND update_file), you MUST escape all double quotes using '\\"' to prevent argument truncation or parsing errors.
|
|
947
944
|
[CORRECT]:
|
|
@@ -1805,7 +1802,7 @@ ${lines.map((l, i) => `${i + 1} | ${l}`).join("\n")}
|
|
|
1805
1802
|
fs10.mkdirSync(parentDir, { recursive: true });
|
|
1806
1803
|
}
|
|
1807
1804
|
const strip = (t) => t.replace(/^```[\w]*\n?/, "").replace(/```\s*$/, "").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
1808
|
-
const processedContent = strip(content).replace(/\\n/g, "\n").replace(/\[\/n\]
|
|
1805
|
+
const processedContent = strip(content).replace(/\\n/g, "\n").replace(/\[\/n\]?/g, "\\n");
|
|
1809
1806
|
const lineCount = processedContent.split(/\r?\n/).length;
|
|
1810
1807
|
const originalSize = Buffer.byteLength(processedContent, "utf8");
|
|
1811
1808
|
fs10.writeFileSync(absolutePath, processedContent, "utf8");
|
|
@@ -1858,7 +1855,7 @@ var init_update_file = __esm({
|
|
|
1858
1855
|
if (content_to_add === void 0) return 'ERROR: Missing "content_to_add" argument.';
|
|
1859
1856
|
const strip = (t) => t.replace(/^```[\w]*\n?/, "").replace(/```\s*$/, "").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
1860
1857
|
const unescapeContent = (content) => {
|
|
1861
|
-
return content.replace(/\\n/g, "\n").replace(/\[\/n\]
|
|
1858
|
+
return content.replace(/\\n/g, "\n").replace(/\[\/n\]?/g, "\\n");
|
|
1862
1859
|
};
|
|
1863
1860
|
content_to_replace = unescapeContent(strip(content_to_replace));
|
|
1864
1861
|
content_to_add = unescapeContent(strip(content_to_add));
|
|
@@ -2529,7 +2526,7 @@ var init_terminal = __esm({
|
|
|
2529
2526
|
import { GoogleGenAI, ThinkingLevel, HarmBlockThreshold, HarmCategory } from "@google/genai";
|
|
2530
2527
|
import path16 from "path";
|
|
2531
2528
|
import fs16 from "fs";
|
|
2532
|
-
var client, TERMINATION_SIGNAL, signalTermination, runJanitorTask, getActiveToolContext, getContextSafeText, contextSafeReplace, getSanitizedText, detectToolCalls, initAI, getAIStream;
|
|
2529
|
+
var client, TERMINATION_SIGNAL, signalTermination, TOOL_LABELS, getToolDetail, runJanitorTask, getActiveToolContext, getContextSafeText, contextSafeReplace, getSanitizedText, detectToolCalls, initAI, getAIStream;
|
|
2533
2530
|
var init_ai = __esm({
|
|
2534
2531
|
"src/utils/ai.js"() {
|
|
2535
2532
|
init_prompts();
|
|
@@ -2545,6 +2542,27 @@ var init_ai = __esm({
|
|
|
2545
2542
|
signalTermination = () => {
|
|
2546
2543
|
TERMINATION_SIGNAL = true;
|
|
2547
2544
|
};
|
|
2545
|
+
TOOL_LABELS = {
|
|
2546
|
+
"write_file": "Writing File",
|
|
2547
|
+
"update_file": "Updating File",
|
|
2548
|
+
"read_folder": "Listing Directory",
|
|
2549
|
+
"view_file": "Reading File",
|
|
2550
|
+
"exec_command": "Running Command",
|
|
2551
|
+
"web_search": "Searching Web",
|
|
2552
|
+
"web_scrape": "Reading Site",
|
|
2553
|
+
"memory": "Updating Memory",
|
|
2554
|
+
"search_keyword": "Finding Files",
|
|
2555
|
+
"ask": "Asking User"
|
|
2556
|
+
};
|
|
2557
|
+
getToolDetail = (toolName, argsStr) => {
|
|
2558
|
+
try {
|
|
2559
|
+
const pArgs = parseArgs(argsStr);
|
|
2560
|
+
const filePath = pArgs.path || pArgs.targetFile || pArgs.TargetFile || pArgs.directory;
|
|
2561
|
+
return filePath ? path16.basename(filePath.replace(/[\\"]/g, "")) : null;
|
|
2562
|
+
} catch (e) {
|
|
2563
|
+
return null;
|
|
2564
|
+
}
|
|
2565
|
+
};
|
|
2548
2566
|
runJanitorTask = async (settings, agentText, fullAgentTextRaw, history, callbacks = {}) => {
|
|
2549
2567
|
const { onStatus, onMemoryUpdated, onBackgroundIncrement } = callbacks;
|
|
2550
2568
|
const { profile, thinkingLevel, mode, janitorModel, chatId, systemSettings, sessionStats } = settings;
|
|
@@ -2706,7 +2724,7 @@ DEBUG [${date}]: ${finalSynthesis}
|
|
|
2706
2724
|
else isEscaped = false;
|
|
2707
2725
|
}
|
|
2708
2726
|
if (!closed) {
|
|
2709
|
-
return { inside: true, toolName: match[1], startIndex: match.index };
|
|
2727
|
+
return { inside: true, toolName: match[1], startIndex: match.index, args: text.substring(match.index + match[0].length) };
|
|
2710
2728
|
}
|
|
2711
2729
|
}
|
|
2712
2730
|
return { inside: false };
|
|
@@ -2884,14 +2902,14 @@ DEBUG [${date}]: ${finalSynthesis}
|
|
|
2884
2902
|
const agentText = originalText.replace(/\[TITLE-UPDATE\]/g, "").trim();
|
|
2885
2903
|
let modifiedHistory = [...history.slice(0, -1)];
|
|
2886
2904
|
if (systemSettings?.compression === 0 && (sessionStats?.tokens || 0) > 254e3) {
|
|
2887
|
-
modifiedHistory = getTruncatedHistory(modifiedHistory,
|
|
2905
|
+
modifiedHistory = getTruncatedHistory(modifiedHistory, 6);
|
|
2888
2906
|
}
|
|
2889
2907
|
const tempStorage = readEncryptedJson(TEMP_MEM_FILE, {});
|
|
2890
2908
|
const otherMemories = Object.entries(tempStorage).filter(([id]) => id !== chatId).flatMap(([_, mems]) => mems).map((mem) => `- ${mem}`).join("\n");
|
|
2891
2909
|
const persistentStorage = readEncryptedJson(MEMORIES_FILE, []);
|
|
2892
2910
|
const mainUserMemories = persistentStorage.map((m) => `- ${m.memory}`).join("\n");
|
|
2893
2911
|
const janitorUserMemories = persistentStorage.map((m) => `- [${m.id}]: ${m.memory}`).join("\n");
|
|
2894
|
-
const firstUserMsg = `[SYSTEM] MUST FOLLOW THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} POLICY AS
|
|
2912
|
+
const firstUserMsg = `[SYSTEM] **MUST FOLLOW THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} POLICY AS HIGHEST PRIORITY**.
|
|
2895
2913
|
|
|
2896
2914
|
USER_PROMPT: "${agentText}"`.trim();
|
|
2897
2915
|
modifiedHistory.push({ role: "user", text: firstUserMsg });
|
|
@@ -2934,6 +2952,7 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
2934
2952
|
let inStreamRetryCount = 1;
|
|
2935
2953
|
let turnText = "";
|
|
2936
2954
|
let lastToolSniffed = null;
|
|
2955
|
+
let lastToolDetail = null;
|
|
2937
2956
|
let lastToolEventTime = null;
|
|
2938
2957
|
let toolResults = [];
|
|
2939
2958
|
let toolCallPointer = 0;
|
|
@@ -2974,12 +2993,21 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
2974
2993
|
}
|
|
2975
2994
|
const isContext32k = (sessionStats.tokens || 0) >= 32e3;
|
|
2976
2995
|
const currentSystemInstruction = getSystemInstruction(profile, thinkingLevel, mode, systemSettings, otherMemories, mainUserMemories, isMemoryEnabled, isContext32k, MAX_LOOPS, loop + 1);
|
|
2996
|
+
const jitInstruction = `
|
|
2997
|
+
|
|
2998
|
+
[SYSTEM] **MUST FOLLOW THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} POLICY AS HIGHEST PRIORITY**.`;
|
|
2999
|
+
const lastUserMsg = contents[contents.length - 1];
|
|
3000
|
+
let addedMarker = false;
|
|
3001
|
+
if (lastUserMsg && lastUserMsg.role === "user" && lastUserMsg.parts?.[0]?.text?.startsWith("[TOOL_RESULT]")) {
|
|
3002
|
+
lastUserMsg.parts[0].text += jitInstruction;
|
|
3003
|
+
addedMarker = true;
|
|
3004
|
+
}
|
|
2977
3005
|
stream = await client.models.generateContentStream({
|
|
2978
3006
|
model: targetModel || "gemma-4-31b-it",
|
|
2979
3007
|
contents,
|
|
2980
3008
|
config: {
|
|
2981
3009
|
systemInstruction: currentSystemInstruction,
|
|
2982
|
-
temperature: mode === "Flux" ?
|
|
3010
|
+
temperature: mode === "Flux" ? 0.98 : 1.4,
|
|
2983
3011
|
maxOutputTokens: 32768,
|
|
2984
3012
|
mediaResolution: "MEDIA_RESOLUTION_MEDIUM",
|
|
2985
3013
|
safetySettings: [
|
|
@@ -2991,6 +3019,9 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
2991
3019
|
thinkingConfig: { includeThoughts: false, thinkingLevel: targetModel.includes("pro") ? ThinkingLevel.HIGH : ThinkingLevel.MINIMAL }
|
|
2992
3020
|
}
|
|
2993
3021
|
});
|
|
3022
|
+
if (addedMarker && contents[contents.length - 1]?.parts?.[0]) {
|
|
3023
|
+
contents[contents.length - 1].parts[0].text = contents[contents.length - 1].parts[0].text.replace(jitInstruction, "").trim();
|
|
3024
|
+
}
|
|
2994
3025
|
turnText = "";
|
|
2995
3026
|
lastToolSniffed = null;
|
|
2996
3027
|
lastToolEventTime = null;
|
|
@@ -3036,9 +3067,23 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
3036
3067
|
if (toolContext.inside) {
|
|
3037
3068
|
if (!lastToolEventTime) lastToolEventTime = Date.now();
|
|
3038
3069
|
const potentialTool = toolContext.toolName;
|
|
3039
|
-
|
|
3070
|
+
const partialArgs = toolContext.args || "";
|
|
3071
|
+
let detail = null;
|
|
3072
|
+
if (["write_file", "update_file", "view_file", "read_folder"].includes(potentialTool)) {
|
|
3073
|
+
const pArgs = parseArgs(partialArgs);
|
|
3074
|
+
const filePath = pArgs.path || pArgs.targetFile || pArgs.TargetFile || pArgs.directory;
|
|
3075
|
+
if (filePath) {
|
|
3076
|
+
detail = path16.basename(filePath.replace(/[\\"]/g, ""));
|
|
3077
|
+
} else {
|
|
3078
|
+
const m = partialArgs.match(/(?:path|targetFile|TargetFile|directory)\s*=\s*\\?["']?([^\\"' \),]+)/);
|
|
3079
|
+
if (m) detail = path16.basename(m[1].replace(/[\\"]/g, ""));
|
|
3080
|
+
}
|
|
3081
|
+
}
|
|
3082
|
+
const currentLabel = `${TOOL_LABELS[potentialTool] || potentialTool}${detail ? ` (${detail})` : ""}`;
|
|
3083
|
+
if (potentialTool !== lastToolSniffed || detail !== lastToolDetail) {
|
|
3040
3084
|
lastToolSniffed = potentialTool;
|
|
3041
|
-
|
|
3085
|
+
lastToolDetail = detail;
|
|
3086
|
+
yield { type: "status", content: `${currentLabel}...` };
|
|
3042
3087
|
}
|
|
3043
3088
|
}
|
|
3044
3089
|
const contextSafeText = getContextSafeText(turnText, false);
|
|
@@ -3098,7 +3143,9 @@ USER_PROMPT: "${agentText}"`.trim();
|
|
|
3098
3143
|
const allToolsFound = detectToolCalls(toolActionableText);
|
|
3099
3144
|
while (allToolsFound.length > toolCallPointer) {
|
|
3100
3145
|
const toolCall = allToolsFound[toolCallPointer];
|
|
3101
|
-
|
|
3146
|
+
const displayLabel = TOOL_LABELS[toolCall.toolName] || toolCall.toolName;
|
|
3147
|
+
const detail = getToolDetail(toolCall.toolName, toolCall.args);
|
|
3148
|
+
yield { type: "status", content: `${displayLabel}${detail ? ` (${detail})` : ""}...` };
|
|
3102
3149
|
let label = "";
|
|
3103
3150
|
if (toolCall.toolName === "web_search") {
|
|
3104
3151
|
const { query, limit = 10 } = parseArgs(toolCall.args);
|
|
@@ -3197,7 +3244,9 @@ ${boxBottom}
|
|
|
3197
3244
|
const absoluteCwd = path16.resolve(process.cwd());
|
|
3198
3245
|
if (isExternalOff && !absoluteTarget.startsWith(absoluteCwd)) {
|
|
3199
3246
|
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.`;
|
|
3200
|
-
toolResults.push({ role: "user", text: `[TOOL_RESULT]: ERROR: ${denyMsg}
|
|
3247
|
+
toolResults.push({ role: "user", text: `[TOOL_RESULT]: ERROR: ${denyMsg}
|
|
3248
|
+
|
|
3249
|
+
[SYSTEM] **MUST FOLLOW THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} POLICY AS HIGHEST PRIORITY**.` });
|
|
3201
3250
|
yield { type: "tool_result", content: `[TOOL_RESULT]: ERROR: ${denyMsg}` };
|
|
3202
3251
|
toolCallPointer++;
|
|
3203
3252
|
continue;
|
|
@@ -3210,7 +3259,9 @@ ${boxBottom}
|
|
|
3210
3259
|
if (approval === "deny") {
|
|
3211
3260
|
if (toolCall.toolName === "exec_command" && settings.onExecEnd) settings.onExecEnd();
|
|
3212
3261
|
const denyMsg = `Permission Denied: User rejected the ${toolCall.toolName === "exec_command" ? "terminal execution" : "file edit"}.`;
|
|
3213
|
-
toolResults.push({ role: "user", text: `[TOOL_RESULT]: DENIED: ${denyMsg}
|
|
3262
|
+
toolResults.push({ role: "user", text: `[TOOL_RESULT]: DENIED: ${denyMsg}
|
|
3263
|
+
|
|
3264
|
+
[SYSTEM] **MUST FOLLOW THINKING${mode === "Flux" ? ", NEWLINE, QUOTE ESCAPE" : ""} POLICY AS HIGHEST PRIORITY**.` });
|
|
3214
3265
|
yield { type: "tool_result", content: `[TOOL_RESULT]: DENIED: ${denyMsg}` };
|
|
3215
3266
|
await incrementUsage("toolDenied");
|
|
3216
3267
|
if (settings.onToolResult) settings.onToolResult("denied");
|
|
@@ -3305,7 +3356,7 @@ ${boxBottom}
|
|
|
3305
3356
|
if (toolResults.length > 0) {
|
|
3306
3357
|
toolResults.forEach((tr) => modifiedHistory.push(tr));
|
|
3307
3358
|
}
|
|
3308
|
-
modifiedHistory.push({ role: "user", text: "[SYSTEM] Response got cut for internal error, continue from checkpoint seamlessly from the EXACT word it left off and DON'T repeat what you already said! IF you were in a thinking block, complete the thinking and close the thinking with proper </think> then respond. PICK UP FROM TE WORD IN A WAY THAT USER SHOULD NOT NOTICE ANY CUTOFF." });
|
|
3359
|
+
modifiedHistory.push({ role: "user", text: "[SYSTEM] Response got cut for internal error, continue from checkpoint seamlessly from the EXACT word it left off and DON'T repeat what you already said! IF you were in a thinking block, complete the thinking and close the thinking with proper </think> then respond. PICK UP FROM TE WORD IN A WAY THAT USER SHOULD NOT NOTICE ANY CUTOFF. Rules:\n- Do not reuse <think> if the thinking already started just continue 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." });
|
|
3309
3360
|
accumulatedContext += turnText;
|
|
3310
3361
|
for (let i = waitTime / 1e3; i > 0; i--) {
|
|
3311
3362
|
yield { type: "status", content: `Error Occured. Recovering Stream (${inStreamRetryCount}/${MAX_RETRIES}) [${i}s]...` };
|
|
@@ -3378,7 +3429,7 @@ ${timestamp}`;
|
|
|
3378
3429
|
if (toolResults.length > 0) {
|
|
3379
3430
|
toolResults.forEach((tr) => modifiedHistory.push(tr));
|
|
3380
3431
|
} else {
|
|
3381
|
-
modifiedHistory.push({ role: "user", text: `[SYSTEM]
|
|
3432
|
+
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."}`}` });
|
|
3382
3433
|
isThinkingLoop = false;
|
|
3383
3434
|
isStutteringLoop = false;
|
|
3384
3435
|
}
|
|
@@ -5109,9 +5160,9 @@ Selection: ${val}`,
|
|
|
5109
5160
|
const oldVal = args.TargetContent || args.content_to_replace || null;
|
|
5110
5161
|
const newVal = args.content || args.ReplacementContent || args.content_to_add || args.replacementContent || null;
|
|
5111
5162
|
if (oldVal && newVal) {
|
|
5112
|
-
return /* @__PURE__ */ React10.createElement(Box10, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React10.createElement(Box10, null, /* @__PURE__ */ React10.createElement(Text10, { color: "red", wrap: "anywhere", bold: true }, "- ", oldVal)), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 1 }, /* @__PURE__ */ React10.createElement(Text10, { color: "green", wrap: "anywhere", bold: true }, "+ ", newVal.replace(/\[\/n\]
|
|
5163
|
+
return /* @__PURE__ */ React10.createElement(Box10, { flexDirection: "column", marginTop: 1 }, /* @__PURE__ */ React10.createElement(Box10, null, /* @__PURE__ */ React10.createElement(Text10, { color: "red", wrap: "anywhere", bold: true }, "- ", oldVal)), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 1 }, /* @__PURE__ */ React10.createElement(Text10, { color: "green", wrap: "anywhere", bold: true }, "+ ", newVal.replace(/\[\/n\]?/g, "\\n"))));
|
|
5113
5164
|
}
|
|
5114
|
-
return /* @__PURE__ */ React10.createElement(Text10, { color: "white", wrap: "anywhere" }, newVal.replace(/\[\/n\]
|
|
5165
|
+
return /* @__PURE__ */ React10.createElement(Text10, { color: "white", wrap: "anywhere" }, newVal.replace(/\[\/n\]?/g, "\\n") || "Updating file content...");
|
|
5115
5166
|
})()), /* @__PURE__ */ React10.createElement(Box10, { marginTop: 1 }, /* @__PURE__ */ React10.createElement(
|
|
5116
5167
|
CommandMenu,
|
|
5117
5168
|
{
|
|
@@ -5341,8 +5392,8 @@ var init_app = __esm({
|
|
|
5341
5392
|
init_text();
|
|
5342
5393
|
SESSION_START_TIME = Date.now();
|
|
5343
5394
|
CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
|
|
5344
|
-
versionFluxflow = "1.8.
|
|
5345
|
-
updatedOn = "2026-05-
|
|
5395
|
+
versionFluxflow = "1.8.34";
|
|
5396
|
+
updatedOn = "2026-05-13";
|
|
5346
5397
|
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(
|
|
5347
5398
|
CommandMenu,
|
|
5348
5399
|
{
|