fluxflow-cli 1.18.17 → 1.18.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 +17 -27
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -455,7 +455,7 @@ var init_TerminalBox = __esm({
|
|
|
455
455
|
return parts[parts.length - 1];
|
|
456
456
|
}).join("\n");
|
|
457
457
|
};
|
|
458
|
-
const cleanOutput = isPty ? output
|
|
458
|
+
const cleanOutput = (isPty ? processPTY(output) : (output || "").replace(/\r\n/g, "\n")).replace(/\n{3,}/g, "\n\n");
|
|
459
459
|
const displayOutput = isPty ? cleanOutput : cleanOutput ? wrapText(cleanOutput, columns - 6) : "";
|
|
460
460
|
return /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", borderStyle: isFocused ? "double" : "round", borderColor: completed ? "#334155" : isFocused ? "yellow" : "cyan", paddingX: 2, paddingY: completed ? 0 : 1, width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { marginBottom: 1, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { flexShrink: 1, paddingRight: 2 }, /* @__PURE__ */ React2.createElement(Text2, null, /* @__PURE__ */ React2.createElement(Text2, { color: completed ? "gray" : isFocused ? "yellow" : "cyan", bold: true }, completed ? "\u{1F3C1} FINISHED:" : "\u26A1 EXECUTING:", " "), /* @__PURE__ */ React2.createElement(Text2, { color: completed ? "gray" : "white" }, command))), isPty && /* @__PURE__ */ React2.createElement(Box2, { flexShrink: 0, paddingX: 1 }, /* @__PURE__ */ React2.createElement(Text2, { color: completed ? "gray" : "magenta", bold: true }, "ADVANCE"))), displayOutput ? /* @__PURE__ */ React2.createElement(Box2, { marginTop: completed ? 0 : 1, backgroundColor: isPty ? void 0 : "#0a0a0a", paddingX: 1 }, /* @__PURE__ */ React2.createElement(Text2, { color: completed ? "gray" : void 0 }, displayOutput)) : !completed && /* @__PURE__ */ React2.createElement(Box2, { marginTop: 1, backgroundColor: isPty ? void 0 : "#0a0a0a", paddingX: 1 }, /* @__PURE__ */ React2.createElement(Text2, { color: "gray", italic: true }, "Waiting for output...")), /* @__PURE__ */ React2.createElement(Box2, { justifyContent: "space-between", marginTop: 1 }, !completed ? /* @__PURE__ */ React2.createElement(Text2, { color: "gray", dimColor: true, italic: true }, isFocused ? "Press TAB to unfocus, then double-press ESC to terminate." : "Double-press ESC to terminate if hanging.") : /* @__PURE__ */ React2.createElement(Box2, null), /* @__PURE__ */ React2.createElement(Text2, { color: completed ? "#475569" : isFocused ? "yellow" : "cyan", bold: true }, completed ? "\u25CF ARCHIVED" : isFocused ? "\u25B6 TERMINAL FOCUSED" : "\u25CF LIVE (Press TAB to focus)")));
|
|
461
461
|
});
|
|
@@ -1044,8 +1044,7 @@ var init_arg_parser = __esm({
|
|
|
1044
1044
|
const afterRaw = argsString.substring(qIdx + 1);
|
|
1045
1045
|
const after = afterRaw.trim();
|
|
1046
1046
|
const isLogicalEnd = after === "" || // End of entire string
|
|
1047
|
-
after
|
|
1048
|
-
/^(\w+)\s*=/.test(after) || // Next argument key=
|
|
1047
|
+
/^,\s*\w+\s*=/.test(after) || // Next argument separator (comma followed by key=)
|
|
1049
1048
|
after.startsWith(")") && (after.length === 1 || /^\)\s*([,\]\s]|tool:)/i.test(after));
|
|
1050
1049
|
if (isLogicalEnd && afterRaw.startsWith("\n")) {
|
|
1051
1050
|
const nextLine = after.split("\n")[0];
|
|
@@ -1163,10 +1162,11 @@ var init_main_tools = __esm({
|
|
|
1163
1162
|
};
|
|
1164
1163
|
TOOL_PROTOCOL = (mode, osDetected) => `
|
|
1165
1164
|
-- TOOL DEFINITIONS --
|
|
1166
|
-
Access to internal tools.
|
|
1165
|
+
Access to internal tools. MUST use the exact syntax on a new line: [tool:functions.ToolName(args)]
|
|
1167
1166
|
STRICT POLICY
|
|
1168
1167
|
- **MAX 3 TOOL CALLS PER TURN. Next Turn, verify results, plan next**${mode === "Flux" ? "\n- **File Tools >> Code in chat**" : ""}
|
|
1169
|
-
- Use
|
|
1168
|
+
- Use contextually BEST tool, no brute force, no spamming
|
|
1169
|
+
- Use multiple search & replace on patch tool if same file/path
|
|
1170
1170
|
|
|
1171
1171
|
- COMMUNICATION TOOLS -
|
|
1172
1172
|
1. [tool:functions.Ask(question="...", optionA="option::description", ...MAX 4)]. Ambiguity Resolution. Mandatory Triggers: Path Divergence, Security, Risk Mitigation. ask >> finish
|
|
@@ -1179,8 +1179,8 @@ Suggest best options; don't ask for preferences
|
|
|
1179
1179
|
${mode === "Flux" ? `- PROJECT TOOLS (path = relative to CWD) -
|
|
1180
1180
|
1. [tool:functions.ReadFile(path="...", startLine=number, endLine=number)]. Supports images/docs. User gives image/doc: VIEW FIRST
|
|
1181
1181
|
2. [tool:functions.ReadFolder(path="...")]. Detailed DIR stats
|
|
1182
|
-
3. [tool:functions.PatchFile(path="...", replaceContent1="exact string", newContent1="...", ...MAX 8)]. Surgical Patch.
|
|
1183
|
-
4. [tool:functions.WriteFile(path="...", content="...")]. Creates/Overwrites. File Exist? PatchFile
|
|
1182
|
+
3. [tool:functions.PatchFile(path="...", replaceContent1="exact string", newContent1="...", ...MAX 8)]. Surgical Patch. **Multiple patch on same file/path? Use replaceContent2, newContent2 etc >>> multiple spams**. Unsure? ReadFile > guessing.
|
|
1183
|
+
4. [tool:functions.WriteFile(path="...", content="...")]. Creates/Overwrites. File Exist? PatchFile >>> WriteFile. Verify Imports
|
|
1184
1184
|
5. [tool:functions.SearchKeyword(keyword="...", file="optional")]. Global project search. If 'file' is provided, searches only that file. Finds definitions/logic without reading every file
|
|
1185
1185
|
6. [tool:functions.Run(command="...")]. Runs ${osDetected === "Windows" ? isPsAvailable() ? `${isPtyAvailable ? "Interactive " : ""}WINDOWS POWERSHELL ONLY` : `${isPtyAvailable ? "Interactive " : ""}WINDOWS CMD` : `${isPtyAvailable ? "Interactive " : ""}BASH`} command. Destructive/Irreversible ops -> Ask user
|
|
1186
1186
|
7. [tool:functions.GenerateImage(path="... png", prompt="detailed", ratio="16:9, 9:16, 1:1")]. Usage: Mockups, PDF thumbnails, any visual content
|
|
@@ -5671,7 +5671,7 @@ ${newMemoryListStr}
|
|
|
5671
5671
|
else if (totalFolders > 128) dynamicMaxDepth = 8;
|
|
5672
5672
|
else if (totalFolders > 64) dynamicMaxDepth = 9;
|
|
5673
5673
|
else if (totalFolders > 32) dynamicMaxDepth = 10;
|
|
5674
|
-
let dirStructure =
|
|
5674
|
+
let dirStructure = process.cwd() + "\n" + getDirTree(process.cwd(), dynamicMaxDepth);
|
|
5675
5675
|
const firstUserMsg = `[SYSTEM METADATA (PRIORITY: DYNAMIC)] Time: ${dateTimeStr} | v${versionFluxflow2}
|
|
5676
5676
|
CWD: ${process.cwd()}
|
|
5677
5677
|
**DIRECTORY STRUCTURE**
|
|
@@ -5797,7 +5797,7 @@ ${thinkingLevel != "Fast" ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS CRITI
|
|
|
5797
5797
|
systemInstruction: currentSystemInstruction,
|
|
5798
5798
|
temperature: mode === "Flux" ? 1 : 1.4,
|
|
5799
5799
|
maxOutputTokens: 32768,
|
|
5800
|
-
mediaResolution: "
|
|
5800
|
+
mediaResolution: "MEDIA_RESOLUTION_HIGH",
|
|
5801
5801
|
safetySettings: [
|
|
5802
5802
|
{ category: HarmCategory.HARM_CATEGORY_HARASSMENT, threshold: HarmBlockThreshold.BLOCK_NONE },
|
|
5803
5803
|
{ category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold: HarmBlockThreshold.BLOCK_NONE },
|
|
@@ -7682,16 +7682,16 @@ function App({ args = [] }) {
|
|
|
7682
7682
|
subs: apiTier === "Free" ? [
|
|
7683
7683
|
{
|
|
7684
7684
|
cmd: "gemma-4-31b-it",
|
|
7685
|
-
desc: "Standard Default
|
|
7685
|
+
desc: "Standard Default"
|
|
7686
7686
|
}
|
|
7687
7687
|
] : [
|
|
7688
7688
|
{
|
|
7689
7689
|
cmd: "gemini-3-flash-preview",
|
|
7690
|
-
desc: "Fast & Lightweight
|
|
7690
|
+
desc: "Fast & Lightweight"
|
|
7691
7691
|
},
|
|
7692
7692
|
{
|
|
7693
7693
|
cmd: "gemini-3.5-flash",
|
|
7694
|
-
desc: "
|
|
7694
|
+
desc: "Latest"
|
|
7695
7695
|
}
|
|
7696
7696
|
]
|
|
7697
7697
|
},
|
|
@@ -8338,21 +8338,11 @@ ${timestamp}` };
|
|
|
8338
8338
|
} else {
|
|
8339
8339
|
normalizedOutput = rawOutput.replace(/\r\n/g, "\n");
|
|
8340
8340
|
}
|
|
8341
|
-
const
|
|
8342
|
-
COMMAND: ${activeCommandRef.current}
|
|
8343
|
-
PTY: ${isActiveCommandPty}
|
|
8344
|
-
OUTPUT: ${
|
|
8345
|
-
|
|
8346
|
-
COMMAND: ${activeCommandRef.current}
|
|
8347
|
-
PTY: ${isActiveCommandPty}
|
|
8348
|
-
OUTPUT: ${normalizedOutput.replace(/\n{3,}/g, "\n\n")}`;
|
|
8349
|
-
return [...prev, {
|
|
8350
|
-
id: "term-" + Date.now(),
|
|
8351
|
-
role: "system",
|
|
8352
|
-
text: finalStatusRaw,
|
|
8353
|
-
fullText: finalStatusNormalized,
|
|
8354
|
-
isTerminalRecord: true
|
|
8355
|
-
}];
|
|
8341
|
+
const finalStatus = `[TERMINAL_RECORD]
|
|
8342
|
+
COMMAND: ${activeCommandRef.current}
|
|
8343
|
+
PTY: ${isActiveCommandPty}
|
|
8344
|
+
OUTPUT: ${normalizedOutput.replace(/\n{3,}/g, "\n\n")}`;
|
|
8345
|
+
return [...prev, { id: "term-" + Date.now(), role: "system", text: finalStatus, isTerminalRecord: true }];
|
|
8356
8346
|
});
|
|
8357
8347
|
setActiveCommand(null);
|
|
8358
8348
|
setIsTerminalFocused(false);
|