fluxflow-cli 1.6.1 → 1.6.3

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 +18 -20
  2. package/package.json +1 -1
package/dist/fluxflow.js CHANGED
@@ -678,9 +678,11 @@ ${mode === "Flux" ? `
678
678
  3. Read Folder: tool:functions.read_folder(path="relative/path"). Detailed stats of a directory.
679
679
  4. Write File: tool:functions.write_file(path="path", content="content"). Creates/Overwrites. NO CODE BLOCKS. RETURNS: Disk verification + original content (if overwritten) for 100% reversibility.
680
680
  5. Update File: tool:functions.update_file(path="relative/path", content_to_replace="old", content_to_add="new"). Surgical patching. RETURNS: High-fidelity visual diff and old code block. You MUST verify that the change specifically matches your intent using the returned diff. PREFFER UPDATE FILE OVER WRITE FILE if file already exists for better reversal tracking (if a file has 500+ lines, try to stick with update_file over full-rewrite). DONT WRAP UPDATE FILE CALL CONTENT IN MARKDOWN CODE BLOCKS.
681
- 6. Write PDF: tool:functions.write_pdf(path="path", content="<html/css content>", orientation="portrait/landscape"). Generates a professional PDF document. Orientation are optional. A4 size page will be used, so any multi-page PDFs calculate your alightment and page breaks to not mess up A4 page layout . DO NOT ADD FOOTER MANUALLY, the system will handle it automatically. USE CSS TO VISUALLY BEAUTIFY THE DOCUMENT.
681
+ 6. Write PDF: tool:functions.write_pdf(path="path", content="<html/css content>", orientation="portrait/landscape"). Generates a professional PDF document. Orientation are optional. A4 size page will be used, so any multi-page PDFs calculate your alightment and page breaks to not mess up A4 page layout. DO NOT ADD FOOTER MANUALLY, the system will handle it automatically. USE CSS TO VISUALLY BEAUTIFY THE DOCUMENT, USE full 100vh & 100vw for page area. ENSURE THE CONTENT IS NEVER BROKEN IN BETWEEN PAGES, USE PAGE BREAKS PROACTIVELY FOR A A4 PAGE LAYOUT.
682
682
  7. Execution: tool:functions.exec_command(command="terminal command"). Runs a shell command.
683
683
 
684
+ AFTER GETTING THE TOOL RESULT, YOU MUST VERIFY THAT ITS A SUCCESS, IF IT GIVES A ERROR, TELL THE USER AND TRY TO FIX IF YOU CAN. DO NOT HALLUCINATE SUCCESS IF TOOL RETURNS ERROR.
685
+
684
686
  **NOTE:** WHEN WRITING/UPDATING FILES, USE ACTUAL NEW LINE CONTROL CHARACTER (LF) FOR LINE BREAKS RATHER THAN STRING '\\n'`.trim() : `
685
687
  - DEV & FILE TOOLS ARE NOT AVAILABLE IN FLOW MODE. If you need to access files, tell the user to switch to FLUX MODE (manually by user).`.trim()}
686
688
  -----------------
@@ -2119,6 +2121,7 @@ USER_PROMPT: ${agentText}`.trim();
2119
2121
  });
2120
2122
  success = true;
2121
2123
  yield { type: "model_update", content: null };
2124
+ yield { type: "status", content: "Working..." };
2122
2125
  } catch (err) {
2123
2126
  const errMsg = err.status || err.error && err.error.message || String(err);
2124
2127
  const date = (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace("T", " ");
@@ -2155,7 +2158,6 @@ USER_PROMPT: ${agentText}`.trim();
2155
2158
  lastUsage = chunk.usageMetadata;
2156
2159
  if (lastUsage) {
2157
2160
  yield { type: "liveTokens", content: lastUsage.totalTokenCount };
2158
- yield { type: "status", content: "Working..." };
2159
2161
  }
2160
2162
  }
2161
2163
  await incrementUsage("agent");
@@ -2502,7 +2504,7 @@ var init_settings = __esm({
2502
2504
  try {
2503
2505
  if (await fs15.exists(src)) {
2504
2506
  await fs15.ensureDir(dest);
2505
- await fs15.copy(src, dest, { overwrite: false });
2507
+ await fs15.copy(src, dest, { overwrite: true });
2506
2508
  }
2507
2509
  } catch (err) {
2508
2510
  console.error(`Migration failed for ${folder}:`, err);
@@ -3053,7 +3055,7 @@ Check what's new using \`/changelog\` command.`,
3053
3055
  { cmd: "/changelog", desc: "View latest updates" },
3054
3056
  { cmd: "/update", desc: "Check/Install updates", subs: [
3055
3057
  { cmd: "check", desc: "Check for new version" },
3056
- { cmd: "latest", desc: "Install Latest Version" }
3058
+ { cmd: "latest", desc: "Install latest release" }
3057
3059
  ] }
3058
3060
  ];
3059
3061
  const handleSubmit = (value) => {
@@ -3585,22 +3587,18 @@ Selection: ${val}`,
3585
3587
  }
3586
3588
  return newMsgs;
3587
3589
  });
3588
- } else if (!inThinkMode && !toolCallEncounteredInTurn) {
3589
- let cleanedText = chunkText.replace(/<(think|thought)>[\s\S]*?<\/(think|thought)>/gi, "").replace(/<\/?(think|thought)>/gi, "").replace(signalRegex, "");
3590
- const toolIdx = cleanedText.toLowerCase().indexOf("tool:functions.");
3591
- if (toolIdx !== -1) {
3592
- cleanedText = cleanedText.substring(0, toolIdx);
3590
+ } else if (!inThinkMode) {
3591
+ const chunkLower2 = chunkText.toLowerCase();
3592
+ if (!toolCallEncounteredInTurn && chunkLower2.includes("tool:functions.")) {
3593
3593
  toolCallEncounteredInTurn = true;
3594
3594
  }
3595
- if (cleanedText) {
3596
- if (!currentAgentId) {
3597
- currentAgentId = "agent-" + Date.now();
3598
- setMessages((prev) => [...prev, { id: currentAgentId, role: "agent", text: cleanedText, isStreaming: true }]);
3599
- } else {
3600
- setMessages((prev) => prev.map(
3601
- (m) => m.id === currentAgentId ? { ...m, text: m.text + cleanedText, isStreaming: true } : m
3602
- ));
3603
- }
3595
+ if (!currentAgentId) {
3596
+ currentAgentId = "agent-" + Date.now();
3597
+ setMessages((prev) => [...prev, { id: currentAgentId, role: "agent", text: chunkText, isStreaming: true }]);
3598
+ } else {
3599
+ setMessages((prev) => prev.map(
3600
+ (m) => m.id === currentAgentId ? { ...m, text: m.text + chunkText, isStreaming: true } : m
3601
+ ));
3604
3602
  }
3605
3603
  }
3606
3604
  }
@@ -3629,7 +3627,7 @@ Selection: ${val}`,
3629
3627
  }
3630
3628
  setMessages((prev) => {
3631
3629
  const newMsgs = prev.map((m) => m.isStreaming ? { ...m, isStreaming: false } : m);
3632
- const historyToSave = newMsgs.filter((m) => !String(m.id).startsWith("welcome") && !m.isVisualFeedback);
3630
+ const historyToSave = newMsgs.filter((m) => !String(m.id).startsWith("welcome") && !m.isMeta);
3633
3631
  saveChat(chatId, null, historyToSave);
3634
3632
  setCompletedIndex(newMsgs.length);
3635
3633
  return newMsgs;
@@ -4298,7 +4296,7 @@ var init_app = __esm({
4298
4296
  init_setup();
4299
4297
  SESSION_START_TIME = Date.now();
4300
4298
  CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
4301
- versionFluxflow = "1.6.1";
4299
+ versionFluxflow = "1.6.3";
4302
4300
  updatedOn = "2026-05-02";
4303
4301
  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 (turn: finish) 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(
4304
4302
  CommandMenu,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluxflow-cli",
3
- "version": "1.6.1",
3
+ "version": "1.6.3",
4
4
  "description": "A high-fidelity agentic terminal assistant for the Flux Era.",
5
5
  "keywords": [
6
6
  "ai",