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.
Files changed (2) hide show
  1. package/dist/fluxflow.js +17 -27
  2. 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 || "" : (output || "").replace(/\r\n/g, "\n").replace(/\n{3,}/g, "\n\n");
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.startsWith(",") || // Next argument separator
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. To call a tool, MUST use the exact syntax on a new line: [tool:functions.ToolName(args)]
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 contexual BEST tools, no brute forcing
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. Unsure? ReadFile > guessing. Multiple patch same file? Use replaceContent2, newContent2 etc >>> tool spamming
1183
- 4. [tool:functions.WriteFile(path="...", content="...")]. Creates/Overwrites. File Exist? PatchFile >> WriteFile. Verify Imports
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 = totalFolders > 6144 ? `FileSystem length exceeded for indexing` : process.cwd() + "\n" + getDirTree(process.cwd(), dynamicMaxDepth);
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: "MEDIA_RESOLUTION_MEDIUM",
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 (Free, Recommended)"
7685
+ desc: "Standard Default"
7686
7686
  }
7687
7687
  ] : [
7688
7688
  {
7689
7689
  cmd: "gemini-3-flash-preview",
7690
- desc: "Fast & Lightweight (Paid, Limited Free quota)"
7690
+ desc: "Fast & Lightweight"
7691
7691
  },
7692
7692
  {
7693
7693
  cmd: "gemini-3.5-flash",
7694
- desc: "New (Paid, Limited Free quota)"
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 finalStatusRaw = `[TERMINAL_RECORD]
8342
- COMMAND: ${activeCommandRef.current}
8343
- PTY: ${isActiveCommandPty}
8344
- OUTPUT: ${rawOutput}`;
8345
- const finalStatusNormalized = `[TERMINAL_RECORD]
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "1.18.17",
3
+ "version": "1.18.19",
4
4
  "date": "2026-06-01",
5
5
  "description": "A high-fidelity agentic terminal assistant for the Flux Era.",
6
6
  "keywords": [