fluxflow-cli 3.0.7 → 3.0.9
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/README.md +1 -1
- package/cat.txt +5 -0
- package/dist/fluxflow.js +35 -9
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-%3E%3D20-green?style=plastic" alt="Node Compatibility"></a>
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
|
-
### *The High-Fidelity Agentic
|
|
11
|
+
### *The High-Fidelity Agentic CLI with Sub-Agents for the Flux Era.*
|
|
12
12
|
|
|
13
13
|
**Flux Flow** is not just another CLI—it's a high-speed, sassy, and goal-oriented CLI AI Agent powered by the latest Gemini/Gemma frontier models. Designed for developers who demand a premium UI/UX while managing complex file-system tasks, web research, and autonomous workflows.
|
|
14
14
|
|
package/cat.txt
ADDED
package/dist/fluxflow.js
CHANGED
|
@@ -4840,11 +4840,30 @@ var init_StatusBar = __esm({
|
|
|
4840
4840
|
"src/components/StatusBar.jsx"() {
|
|
4841
4841
|
init_text();
|
|
4842
4842
|
activeGetMemoryInfo = null;
|
|
4843
|
-
StatusBar = React5.memo(({ mode, thinkingLevel, tokens = "0.0k", tokensTotal = "0.0k", chatId = "NEW-SESSION", isMemoryEnabled = true, apiTier = "Free", aiProvider = "Google", activeModel = "" }) => {
|
|
4843
|
+
StatusBar = React5.memo(({ mode, thinkingLevel, tokens = "0.0k", tokensTotal = "0.0k", chatId = "NEW-SESSION", isMemoryEnabled = true, apiTier = "Free", aiProvider = "Google", activeModel = "", isProcessing = false, lastChunkTime = 0 }) => {
|
|
4844
4844
|
const modeIcon = mode === "Flux" ? "" : "";
|
|
4845
4845
|
const [memoryUsage, setMemoryUsage] = useState5(0);
|
|
4846
4846
|
const [memoryLimit, setMemoryLimit] = useState5(0);
|
|
4847
4847
|
const [memoryUnit, setMemoryUnit] = useState5("MB");
|
|
4848
|
+
const [dotColor, setDotColor] = useState5("green");
|
|
4849
|
+
useEffect4(() => {
|
|
4850
|
+
if (!isProcessing) return;
|
|
4851
|
+
const checkLatency = () => {
|
|
4852
|
+
const delay = Date.now() - lastChunkTime;
|
|
4853
|
+
if (delay < 700) {
|
|
4854
|
+
setDotColor("green");
|
|
4855
|
+
} else if (delay <= 1200) {
|
|
4856
|
+
setDotColor("yellow");
|
|
4857
|
+
} else if (delay <= 2e3) {
|
|
4858
|
+
setDotColor("#ff9f43");
|
|
4859
|
+
} else {
|
|
4860
|
+
setDotColor("#d63031");
|
|
4861
|
+
}
|
|
4862
|
+
};
|
|
4863
|
+
checkLatency();
|
|
4864
|
+
const timer = setInterval(checkLatency, 100);
|
|
4865
|
+
return () => clearInterval(timer);
|
|
4866
|
+
}, [isProcessing, lastChunkTime]);
|
|
4848
4867
|
const updateMemory = () => {
|
|
4849
4868
|
const usage = process.memoryUsage();
|
|
4850
4869
|
const isGB = usage.heapTotal / (1024 * 1024) >= 1024;
|
|
@@ -4886,7 +4905,7 @@ var init_StatusBar = __esm({
|
|
|
4886
4905
|
},
|
|
4887
4906
|
/* @__PURE__ */ React5.createElement(Box4, null, /* @__PURE__ */ React5.createElement(Box4, { marginRight: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "white", bold: true }, mode.toUpperCase())), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, "\u2503"), /* @__PURE__ */ React5.createElement(Box4, { marginX: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "white", bold: true }, thinkingLevel.toUpperCase())), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, "\u2503"), /* @__PURE__ */ React5.createElement(Box4, { marginX: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "gray", bold: true }, "MEM: "), /* @__PURE__ */ React5.createElement(Text5, { color: "white", bold: true }, isMemoryEnabled ? "ON" : "OFF"))),
|
|
4888
4907
|
/* @__PURE__ */ React5.createElement(Box4, { flexGrow: 1, justifyContent: "center", paddingX: 2 }, /* @__PURE__ */ React5.createElement(Text5, { color: "white", italic: true }, truncatePath(process.cwd(), 35))),
|
|
4889
|
-
/* @__PURE__ */ React5.createElement(Box4, null, /* @__PURE__ */ React5.createElement(Box4, { marginX: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "white" }, formatTokens(tokensTotal), " ", /* @__PURE__ */ React5.createElement(Text5, { dimColor: true }, (tokens / maxLimit * 100).toFixed(0), "%"))), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, "\u2503"), /* @__PURE__ */ React5.createElement(Box4, { marginX: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "grey", bold: true }, memoryUsage, "/", memoryLimit, " ", memoryUnit)), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, "\u2503"), /* @__PURE__ */ React5.createElement(Box4, { marginLeft: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "gray", bold: true }, chatId), (apiTier === "Custom" || apiTier === "Paid") && /* @__PURE__ */ React5.createElement(Box4, null, /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, " \u2503 "), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", bold: true }, "PAID"))))
|
|
4908
|
+
/* @__PURE__ */ React5.createElement(Box4, null, isProcessing ? /* @__PURE__ */ React5.createElement(Box4, { marginRight: 0 }, /* @__PURE__ */ React5.createElement(Text5, { color: dotColor }, "\u25CF")) : /* @__PURE__ */ React5.createElement(Text5, null, " "), /* @__PURE__ */ React5.createElement(Box4, { marginX: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "white" }, formatTokens(tokensTotal), " ", /* @__PURE__ */ React5.createElement(Text5, { dimColor: true }, (tokens / maxLimit * 100).toFixed(0), "%"))), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, "\u2503"), /* @__PURE__ */ React5.createElement(Box4, { marginX: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "grey", bold: true }, memoryUsage, "/", memoryLimit, " ", memoryUnit)), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, "\u2503"), /* @__PURE__ */ React5.createElement(Box4, { marginLeft: 1 }, /* @__PURE__ */ React5.createElement(Text5, { color: "gray", bold: true }, chatId), (apiTier === "Custom" || apiTier === "Paid") && /* @__PURE__ */ React5.createElement(Box4, null, /* @__PURE__ */ React5.createElement(Text5, { color: "gray", dimColor: true }, " \u2503 "), /* @__PURE__ */ React5.createElement(Text5, { color: "gray", bold: true }, "PAID"))))
|
|
4890
4909
|
);
|
|
4891
4910
|
});
|
|
4892
4911
|
StatusBar_default = StatusBar;
|
|
@@ -5128,12 +5147,12 @@ ${mode === "Flux" ? `- WORKSPACE TOOLS (path = relative to CWD & WILL BE FIRST A
|
|
|
5128
5147
|
9. [tool:functions.await(time="seconds")]. For waiting without exiting agent loop, 15s - 180s
|
|
5129
5148
|
|
|
5130
5149
|
-- SUB AGENTS DEFINITIONS --
|
|
5131
|
-
USE PROACTIVELY
|
|
5150
|
+
USE PROACTIVELY A LOT **USE OF SUB AGENTS HIGHLY RECOMENDED**
|
|
5132
5151
|
Invocation Types:
|
|
5133
|
-
- invoke (async,
|
|
5134
|
-
- invokeSync (sync,
|
|
5152
|
+
- invoke (async, background worker for parallel tasks, upto 7 parallel agents together). Can take long time, If invoked DO NOT REPEAT SAME TASK AGAIN UNLESS subagent returns ERROR. Usage: Benefits parallelism & speed
|
|
5153
|
+
- invokeSync (sync, blocking main agent loop). Usage: Repeatetive work, Sequential tasks, Task delegation. Huge tokens/costs savings
|
|
5135
5154
|
|
|
5136
|
-
1. [agent:generalist.invokeSync/invoke(title="...", task="...")]. Task must me detailed,
|
|
5155
|
+
1. [agent:generalist.invokeSync/invoke(title="...", task="...")]. Task must me detailed, including exact file paths, imports/exports, dependency, folder structure
|
|
5137
5156
|
2. [agent:generalist.getProgress(id="...")]. Usage: Check progress of async subagent task, taking time? do your own task OR await (exponentially longer after 1st check, eg. 15s, 30s, 45s ...) >>> spamming getProgress`.trim() : `- CREATIVE TOOLS (path = relative to CWD & WILL BE FIRST ARGUMENT, path separator: '/') -
|
|
5138
5157
|
1. [tool:functions.WritePDF(path="...", content="...", orientation="...")]. PROACTIVE A4 PAGE BREAKS MUST IN CSS. HTML/CSS for PREMIUM layout
|
|
5139
5158
|
2. [tool:functions.WriteDoc(path="...", content="...")]. A4 Word document
|
|
@@ -13997,7 +14016,7 @@ ${providedToolsSection.trimEnd()}
|
|
|
13997
14016
|
NO EXPLICIT THINKING REQUIRED. FOCUS ON COMPLETING THE TASK DIRECTLY
|
|
13998
14017
|
|
|
13999
14018
|
Your main focus should be on tools and task, not chatting. Your Chat won't be visible to user
|
|
14000
|
-
Once you have fully completed the task, provide a detailed final structured summary preferebly in Tables/Bullet Points, if any task failed report back in detail, no hallucination
|
|
14019
|
+
Once you have fully completed the task, provide a detailed final structured summary preferebly in Tables/Bullet Points with file modified info, if any task failed report back in detail, no hallucination
|
|
14001
14020
|
|
|
14002
14021
|
CWD: ${process.cwd()}
|
|
14003
14022
|
Current Time: ${(/* @__PURE__ */ new Date()).toLocaleString("en-US", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", hour12: true }).replace(/(\d+)\/(\d+)\/(\d+),/, "$3-$1-$2").replace(":", "-")}
|
|
@@ -15269,6 +15288,7 @@ function App({ args = [] }) {
|
|
|
15269
15288
|
const [profileData, setProfileData] = useState14({ name: null, nickname: null, instructions: null });
|
|
15270
15289
|
const [imageSettings, setImageSettings] = useState14({ keyType: "Default", quality: "Low-High", apiKey: "" });
|
|
15271
15290
|
const [sessionStats, setSessionStats] = useState14({ tokens: 0 });
|
|
15291
|
+
const [lastChunkTime, setLastChunkTime] = useState14(0);
|
|
15272
15292
|
const [sessionAgentCalls, setSessionAgentCalls] = useState14(0);
|
|
15273
15293
|
const [sessionBackgroundCalls, setSessionBackgroundCalls] = useState14(0);
|
|
15274
15294
|
const [sessionTotalTokens, setSessionTotalTokens] = useState14(0);
|
|
@@ -17402,6 +17422,7 @@ ${timestamp}` };
|
|
|
17402
17422
|
};
|
|
17403
17423
|
let hasFiredJanitor = false;
|
|
17404
17424
|
setIsProcessing(true);
|
|
17425
|
+
setLastChunkTime(Date.now());
|
|
17405
17426
|
setIsExpanded(false);
|
|
17406
17427
|
let apiStart = Date.now();
|
|
17407
17428
|
let isFirstPacket = true;
|
|
@@ -17616,6 +17637,9 @@ Selection: ${val}`,
|
|
|
17616
17637
|
let inToolCallString = null;
|
|
17617
17638
|
const signalRegex = /\[?\s*turn\s*:\s*.*?\s*\]?/gi;
|
|
17618
17639
|
for await (const packet of stream) {
|
|
17640
|
+
if (packet.type === "text") {
|
|
17641
|
+
setLastChunkTime(Date.now());
|
|
17642
|
+
}
|
|
17619
17643
|
if (isFirstPacket && packet.type === "text") {
|
|
17620
17644
|
apiStart = Date.now();
|
|
17621
17645
|
isFirstPacket = false;
|
|
@@ -19028,7 +19052,7 @@ Selection: ${val}`,
|
|
|
19028
19052
|
}
|
|
19029
19053
|
)));
|
|
19030
19054
|
default:
|
|
19031
|
-
return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1, flexShrink: 0, width: "100%" }, showBtwBox && btwResponse && /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%", marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Box14, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "INQUIRY RESPONSE"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "[ ESC to Close ]")), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(CodeRenderer, { text: btwResponse, columns: terminalSize.columns - 6 }))), activeSubagents.filter((sa) => sa.status === "running").length > 0 && /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 2, paddingY: 0, width: "100%", marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Box14, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "ACTIVE SUBAGENTS")), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1, width: "100%" }, activeSubagents.filter((sa) => sa.status === "running").map((sa) => /* @__PURE__ */ React15.createElement(Box14, { key: sa.id, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " \u2022 ", sa.title, " ", /* @__PURE__ */ React15.createElement(Text15, { color: "white", dimColor: true }, "(", sa.id, ")")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, "Executing: ", /* @__PURE__ */ React15.createElement(Text15, { color: "white", dimColor: true, bold: true }, sa.currentTool || "Active")))))), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, null, statusText ? /* @__PURE__ */ React15.createElement(Box14, { gap: 1 }, /* @__PURE__ */ React15.createElement(build_default, null), /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, italic: true }, statusText.trimEnd()), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, activeTime > 0 ? `[${activeTime.toFixed(0)}s]` : "")) : /* @__PURE__ */ React15.createElement(Text15, { color: "white", italic: true }, input.length > 0 && escPressCount ? "Press ESC again to clear input" : hasPasteBlock ? "Press CTRL + O to expand" : "Waiting for input...")), /* @__PURE__ */ React15.createElement(Box14, null,
|
|
19055
|
+
return /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1, flexShrink: 0, width: "100%" }, showBtwBox && btwResponse && /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, width: "100%", marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Box14, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, underline: true }, "INQUIRY RESPONSE"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, "[ ESC to Close ]")), /* @__PURE__ */ React15.createElement(Box14, { marginTop: 1, width: "100%" }, /* @__PURE__ */ React15.createElement(CodeRenderer, { text: btwResponse, columns: terminalSize.columns - 6 }))), activeSubagents.filter((sa) => sa.status === "running").length > 0 && /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 2, paddingY: 0, width: "100%", marginBottom: 1 }, /* @__PURE__ */ React15.createElement(Box14, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true }, "ACTIVE SUBAGENTS")), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", marginTop: 1, width: "100%" }, activeSubagents.filter((sa) => sa.status === "running").map((sa) => /* @__PURE__ */ React15.createElement(Box14, { key: sa.id, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, " \u2022 ", sa.title, " ", /* @__PURE__ */ React15.createElement(Text15, { color: "white", dimColor: true }, "(", sa.id, ")")), /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, "Executing: ", /* @__PURE__ */ React15.createElement(Text15, { color: "white", dimColor: true, bold: true }, sa.currentTool || "Active")))))), /* @__PURE__ */ React15.createElement(Box14, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, null, statusText ? /* @__PURE__ */ React15.createElement(Box14, { gap: 1 }, /* @__PURE__ */ React15.createElement(build_default, null), /* @__PURE__ */ React15.createElement(Text15, { color: "white", bold: true, italic: true }, statusText.trimEnd()), /* @__PURE__ */ React15.createElement(Text15, { color: "gray" }, activeTime > 0 ? `[${activeTime.toFixed(0)}s]` : "")) : /* @__PURE__ */ React15.createElement(Text15, { color: "white", italic: true }, input.length > 0 && escPressCount ? "Press ESC again to clear input" : hasPasteBlock ? "Press CTRL + O to expand" : "Waiting for input...")), /* @__PURE__ */ React15.createElement(Box14, null, isProcessing && Date.now() - lastChunkTime > 15e3 ? /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Text15, { color: "yellow", bold: true }, "Waiting for API"), /* @__PURE__ */ React15.createElement(Text15, { color: "gray", dimColor: true }, " \u2503 ")) : wittyPhrase ? /* @__PURE__ */ React15.createElement(Box14, null, /* @__PURE__ */ React15.createElement(Text15, { color: "gray", italic: true }, wittyPhrase), /* @__PURE__ */ React15.createElement(Text15, { color: "gray", dimColor: true }, " \u2503 ")) : null, /* @__PURE__ */ React15.createElement(Text15, { color: "white" }, tempModelOverride || activeModel))), /* @__PURE__ */ React15.createElement(Box14, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React15.createElement(Box14, { width: "100%", height: 1, overflow: "hidden" }, /* @__PURE__ */ React15.createElement(Text15, { color: "#555555" }, "\u2584".repeat(Math.max(1, terminalSize.columns)))), /* @__PURE__ */ React15.createElement(
|
|
19032
19056
|
Box14,
|
|
19033
19057
|
{
|
|
19034
19058
|
backgroundColor: "#555555",
|
|
@@ -19182,7 +19206,9 @@ Selection: ${val}`,
|
|
|
19182
19206
|
isMemoryEnabled: systemSettings.memory,
|
|
19183
19207
|
apiTier,
|
|
19184
19208
|
aiProvider,
|
|
19185
|
-
activeModel
|
|
19209
|
+
activeModel,
|
|
19210
|
+
isProcessing,
|
|
19211
|
+
lastChunkTime
|
|
19186
19212
|
}
|
|
19187
19213
|
)), activeView === "exit" && (() => {
|
|
19188
19214
|
const wallTimeMs = Date.now() - SESSION_START_TIME;
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fluxflow-cli",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.9",
|
|
4
4
|
"date": "2026-07-03",
|
|
5
|
-
"description": "A
|
|
5
|
+
"description": "A High-Fidelity Agentic CLI with Sub-Agents for the Flux Era.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"ai",
|
|
8
8
|
"agent",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"package.json",
|
|
29
29
|
"ARCHITECTURE.md",
|
|
30
30
|
"TOOLS.md",
|
|
31
|
-
"UI_FEATURES.md"
|
|
31
|
+
"UI_FEATURES.md",
|
|
32
|
+
"cat.txt"
|
|
32
33
|
],
|
|
33
34
|
"type": "module",
|
|
34
35
|
"bin": {
|