fluxflow-cli 1.8.3 โ 1.8.5
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 +60 -60
- package/dist/fluxflow.js +54 -38
- package/package.json +2 -2
- package/README-npm.md +0 -84
package/README.md
CHANGED
|
@@ -1,38 +1,14 @@
|
|
|
1
|
-
#
|
|
2
|
-

|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
### *The High-Fidelity Agentic Terminal for the Flux Era.*
|
|
5
5
|
|
|
6
|
-
Flux Flow is
|
|
7
|
-
|
|
8
|
-
Whether you need a conversational partner or an autonomous developer that can write code, run shell commands, and read your project files, Flux Flow adapts to your needs.
|
|
6
|
+
**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.
|
|
9
7
|
|
|
10
8
|
---
|
|
11
9
|
|
|
12
|
-
##
|
|
13
|
-
|
|
14
|
-
- **Native Multimodality**: Flux Flow can now see! Analyze images (JPG, PNG) and PDF documents natively through the `view_file` tool with high-fidelity context retention.
|
|
15
|
-
- **Document Engineering Suite**: Generate professional, branded PDF, DOCX, and PPTX documents on the fly. Features native HTML-to-Office translation for selectable text, high-performance rendering, and automatic watermarking.
|
|
16
|
-
- **External Data Sanctuary**: Redirect your logs, history, and memories to any external path for maximum portability and privacy.
|
|
17
|
-
- **Responsive Terminal UI**: A gorgeous, reactive interface built with React and Ink, featuring multi-line input, status bars, modals, and diff views.
|
|
18
|
-
- **Dual-Model Architecture**: A primary agent interacts with you and executes tasks, while a silent background "Janitor" model handles chat summarization and long-term memory extraction without blocking the main UI.
|
|
19
|
-
- **Two Operating Modes**:
|
|
20
|
-
- **Flux (Dev Mode)**: Full system access. The agent can read/write files, execute shell commands, and run autonomous agentic loops (up to 45 iterations) to solve complex coding tasks.
|
|
21
|
-
- **Flow (Chat Mode)**: Focused on conversation and web research, with limited agentic loops for faster response times.
|
|
22
|
-
- **Advanced Memory System**: Features both temporary session context and persistent, cross-session user memories encrypted locally on your machine.
|
|
23
|
-
- **Agentic Tooling**: Built-in tools for smart file patching, web scraping, web searching, terminal execution and high-fidelity Office document generation (PDF/DOCX/PPTX).
|
|
24
|
-
- **Autonomous Project Alignment**: Automatically detects and adheres to project-specific instructions in `Agent.md`, `Skills.md`, and `Fluxflow.md` for high-fidelity coding standards and complex workflows.
|
|
25
|
-
- **Customizable "Thinking" Levels**: Adjust the depth of the model's reasoning process (from Minimal to Max).
|
|
26
|
-
- **High-Reliability Fallback**: Automatic failover to a lighter, high-concurrency model (Gemini 3.1 Flash Lite) during peak traffic to ensure 100% session persistence.
|
|
27
|
-
|
|
28
|
-
## ๐ Quick Start
|
|
29
|
-
|
|
30
|
-
### Prerequisites
|
|
31
|
-
- [Node.js](https://nodejs.org/) (v18 or higher recommended)
|
|
32
|
-
- `npm`, `yarn`, or `pnpm`
|
|
33
|
-
|
|
34
|
-
### Via NPM (Global & Instant)
|
|
35
|
-
You can run the agent instantly or install it globally for high-speed access:
|
|
10
|
+
## ๐ Instant Ignition (No Setup Required)
|
|
11
|
+
You don't even need to install it. Just fire up your terminal and run:
|
|
36
12
|
|
|
37
13
|
```bash
|
|
38
14
|
# Run instantly (Zero Setup)
|
|
@@ -40,45 +16,69 @@ npx fluxflow-cli
|
|
|
40
16
|
|
|
41
17
|
# OR Install Globally
|
|
42
18
|
npm install -g fluxflow-cli
|
|
43
|
-
fluxflow
|
|
19
|
+
fluxflow-cli
|
|
44
20
|
```
|
|
45
21
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
22
|
+
*The agent will prompt you for your Gemini API Key on the first run and store it securely in an XOR-encrypted vault.* Free API Key recomemded to use Gemma 4 (Default Model).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## โจ Why Flux Flow?
|
|
27
|
+
|
|
28
|
+
### ๐จ **Premium Visual Sovereignty**
|
|
29
|
+
Experience a terminal UI that feels alive. Built with **Ink** and **React**, Flux Flow features:
|
|
30
|
+
- **Dynamic Status Bar**: Real-time telemetry showing your "Neural Headroom" (token usage), Thinking Level, and Session ID.
|
|
53
31
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
npm start
|
|
57
|
-
```
|
|
32
|
+
### ๐๏ธ **Native Multimodality**
|
|
33
|
+
Flux Flow can now see! Use the `view_file` tool to analyze images (JPG, PNG) or deep-dive into PDF technical papers. The agent extracts high-fidelity visual context natively, making it a true multimodal companion.
|
|
58
34
|
|
|
59
|
-
|
|
35
|
+
### ๐ **Document Engineering Suite**
|
|
36
|
+
Need a report or a presentation? Just ask. Flux Flow features a high-fidelity "Printing Press" that generates professional, branded documents natively:
|
|
37
|
+
- **PDF**: Branded documents from HTML/CSS with automatic watermarking.
|
|
38
|
+
- **DOCX**: Native Word documents with multi-page support and automatic numbering.
|
|
39
|
+
- **PPTX**: High-fidelity PowerPoint presentations using native elements (selectable text, shapes) translated directly from HTML.
|
|
60
40
|
|
|
61
|
-
|
|
41
|
+
### ๐ **Self-Healing Infrastructure**
|
|
42
|
+
Zero setup means zero setup. On first run, Flux Flow performs an integrity check and autonomously installs its own Chromium engine if needed, ensuring features like PDF generation work 100% of the time without manual intervention.
|
|
62
43
|
|
|
63
|
-
- **
|
|
64
|
-
- **
|
|
65
|
-
- **[UI & Interaction Features](./UI_FEATURES.md)**: Details on commands, thinking levels, and human-in-the-loop verification.
|
|
44
|
+
- **Archived Terminal Flow**: See execution outputs transform from live elements into permanent conversation records.
|
|
45
|
+
- **Rich Aesthetics**: High-contrast, sleek design with smooth transitions and micro-animations.
|
|
66
46
|
|
|
67
|
-
|
|
47
|
+
### ๐ง **The Dual-Intelligence System**
|
|
48
|
+
- **Flux Mode (Dev)**: High-speed, agentic problem solving with a 50-turn persistent loop for massive coding tasks.
|
|
49
|
+
- **Flow Mode (Chat)**: Optimized for deep research, high-quality conversation, and web-assisted reasoning.
|
|
68
50
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
- **
|
|
72
|
-
- **
|
|
73
|
-
- **
|
|
51
|
+
### ๐ก๏ธ **Digital Fortress Governance**
|
|
52
|
+
Security isn't an afterthought; it's a boundary.
|
|
53
|
+
- **External Path Hardlock**: Restricts the agent to your Current Working Directory (CWD) unless you explicitly unlock it.
|
|
54
|
+
- **Human-in-the-Loop (HITL)**: Every file write and terminal command requires your high-fidelity approval.
|
|
55
|
+
- **XOR Vaulting**: All local session histories, memories, and API keys are obfuscated and encrypted at rest.
|
|
56
|
+
- **Adaptive Failover**: Automatic multi-stage retry logic with high-concurrency fallback model switching (Gemini 3.1 Flash Lite) during peak API congestion.
|
|
74
57
|
|
|
75
|
-
|
|
58
|
+
### ๐งน **The Background Janitor**
|
|
59
|
+
While you move at high speed, the Janitor follows behindโrefining session titles, compressing data, and ensuring your context window remains at absolute peak performance.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## ๐ ๏ธ Key Capabilities
|
|
64
|
+
- **Deep File-System Interaction**: Edit, move, and refactor code across multiple files with atomic precision.
|
|
65
|
+
- **Real-Time Web Intelligence**: Autonomous web-searching via DuckDuckGo for live news and technical research.
|
|
66
|
+
- **Autonomous Project Alignment**: Automatically detects and adheres to project-specific instructions in `Agent.md`, `Skills.md`, and `Fluxflow.md` for high-fidelity alignment with your coding standards and custom workflows.
|
|
67
|
+
- **High-Reliability Fallback**: Automatic failover to a lighter, high-concurrency model during peak traffic to ensure zero session loss.
|
|
68
|
+
- **Persistent Memory**: The agent learns from your preferences and project requirements across sessions.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## โ๏ธ Configuration
|
|
73
|
+
Type `/settings` in-app to live-configure:
|
|
74
|
+
- **Thinking Level**: Low, Medium, or High (Deep-Reasoning).
|
|
75
|
+
- **Auto-Execution**: For ultimate high-speed flow (Advanced users only).
|
|
76
|
+
- **Security Perimeter**: Toggle External Workspace access.
|
|
77
|
+
|
|
78
|
+
---
|
|
76
79
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- **[chalk](https://www.npmjs.com/package/chalk) & [gradient-string](https://www.npmjs.com/package/gradient-string)**: For terminal styling and aesthetics.
|
|
80
|
-
- **[fs-extra](https://www.npmjs.com/package/fs-extra)**: For robust file system operations.
|
|
81
|
-
- **[pptxgenjs](https://www.npmjs.com/package/pptxgenjs) & [html-to-docx](https://www.npmjs.com/package/html-to-docx)**: For native Office document generation.
|
|
80
|
+
## ๐ License
|
|
81
|
+
MIT ยฉ 2026 Flux Flow Team.
|
|
82
82
|
|
|
83
83
|
---
|
|
84
|
-
*
|
|
84
|
+
*Forged with โก and ๐งฌ. Welcome to the FluxFlow.*
|
package/dist/fluxflow.js
CHANGED
|
@@ -116,21 +116,9 @@ var init_ChatLayout = __esm({
|
|
|
116
116
|
};
|
|
117
117
|
formatThinkText = (cleaned, columns = 80) => {
|
|
118
118
|
if (!cleaned) return null;
|
|
119
|
-
const lines = cleaned.split("\n");
|
|
120
119
|
const availableWidth = columns - 10;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (!trimmed) return /* @__PURE__ */ React2.createElement(Box2, { key: i, height: 1 });
|
|
124
|
-
if (trimmed.startsWith("**") && trimmed.endsWith("**") || trimmed.startsWith("#")) {
|
|
125
|
-
const hText = trimmed.replace(/\*|#/g, "").trim();
|
|
126
|
-
return /* @__PURE__ */ React2.createElement(Box2, { key: i, marginTop: i === 0 ? 0 : 1, marginBottom: 0, width: "100%" }, /* @__PURE__ */ React2.createElement(Text2, { bold: true, color: "white" }, "\u25B8 ", wrapText(hText, availableWidth - 2)));
|
|
127
|
-
}
|
|
128
|
-
const isBullet = trimmed.startsWith("*");
|
|
129
|
-
const bulletPrefix = isBullet ? "\u2022 " : "";
|
|
130
|
-
const cleanText = trimmed.replace(/^\*|\s\*/g, "").trim();
|
|
131
|
-
const wrapped = wrapText(cleanText, availableWidth - (isBullet ? 2 : 0));
|
|
132
|
-
return /* @__PURE__ */ React2.createElement(Box2, { key: i, marginLeft: isBullet ? 2 : 0, width: "100%" }, /* @__PURE__ */ React2.createElement(Text2, { italic: true, color: "gray" }, bulletPrefix, wrapped.split("\n").join("\n" + " ".repeat(bulletPrefix.length))));
|
|
133
|
-
});
|
|
120
|
+
const wrapped = wrapText(cleaned.trim(), availableWidth);
|
|
121
|
+
return /* @__PURE__ */ React2.createElement(Box2, { width: "100%" }, /* @__PURE__ */ React2.createElement(Text2, { italic: true, color: "gray" }, wrapped));
|
|
134
122
|
};
|
|
135
123
|
parseMathSymbols = (content) => {
|
|
136
124
|
return content.replace(/\\multiply|\\mul|\\times/g, "\xD7").replace(/\\div/g, "\xF7").replace(/\\cdot/g, "\u22C5").replace(/\\infty/g, "\u221E").replace(/\\pm/g, "\xB1").replace(/\\leq/g, "\u2264").replace(/\\geq/g, "\u2265").replace(/\\neq/g, "\u2260").replace(/\\sqrt\{?(.*?)\}?/g, (_, p1) => `\u221A(${p1})`).replace(/\\alpha/g, "\u03B1").replace(/\\beta/g, "\u03B2").replace(/\\theta/g, "\u03B8").replace(/\\pi/g, "\u03C0").replace(/\\approx/g, "\u2248").replace(/\\Delta/g, "\u0394").replace(/\\sigma/g, "\u03C3").replace(/\\sum/g, "\u03A3").replace(/\\prod/g, "\u03A0").replace(/\\rightarrow|\\to/g, "\u2192").replace(/\\leftarrow/g, "\u2190").replace(/\\leftrightarrow/g, "\u2194").replace(/\\left\(|\\right\)/g, (match) => match.includes("left") ? "(" : ")").replace(/\\left\[|\\right\]/g, (match) => match.includes("left") ? "[" : "]").replace(/\\\{|\\\}/g, (match) => match.includes("{") ? "{" : "}").replace(/\\text\{?(.*?)\}?/g, "$1");
|
|
@@ -395,14 +383,7 @@ var init_ChatLayout = __esm({
|
|
|
395
383
|
}, [msg.id]);
|
|
396
384
|
const finalContent = React2.useMemo(() => {
|
|
397
385
|
if (msg.role === "think" && !showFullThinking) {
|
|
398
|
-
|
|
399
|
-
const trimmed = line.trim();
|
|
400
|
-
const isHeading = trimmed.startsWith("# ");
|
|
401
|
-
const isActionStep = trimmed.startsWith("**") && trimmed.endsWith("**");
|
|
402
|
-
return isHeading || isActionStep;
|
|
403
|
-
});
|
|
404
|
-
if (lines.length === 0) return "*Reasoning...*";
|
|
405
|
-
return lines.join("\n");
|
|
386
|
+
return "Thinking...";
|
|
406
387
|
}
|
|
407
388
|
return content;
|
|
408
389
|
}, [content, msg.role, showFullThinking]);
|
|
@@ -1071,6 +1052,20 @@ var init_usage = __esm({
|
|
|
1071
1052
|
if (!isDirty || !cachedUsage) return;
|
|
1072
1053
|
try {
|
|
1073
1054
|
await fs5.ensureDir(path5.dirname(USAGE_FILE));
|
|
1055
|
+
let diskData = null;
|
|
1056
|
+
try {
|
|
1057
|
+
if (await fs5.exists(USAGE_FILE)) {
|
|
1058
|
+
diskData = await fs5.readJson(USAGE_FILE);
|
|
1059
|
+
}
|
|
1060
|
+
} catch (e) {
|
|
1061
|
+
}
|
|
1062
|
+
if (diskData && diskData.date === cachedUsage.date && diskData.stats) {
|
|
1063
|
+
for (const key in cachedUsage.stats) {
|
|
1064
|
+
if (diskData.stats[key] !== void 0) {
|
|
1065
|
+
cachedUsage.stats[key] = Math.max(cachedUsage.stats[key], diskData.stats[key]);
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1074
1069
|
const tempFile = USAGE_FILE + ".tmp";
|
|
1075
1070
|
await fs5.writeJson(tempFile, cachedUsage, { spaces: 2 });
|
|
1076
1071
|
const fd = await fs5.open(tempFile, "r+");
|
|
@@ -1091,6 +1086,7 @@ var init_usage = __esm({
|
|
|
1091
1086
|
await flushUsage();
|
|
1092
1087
|
writeTimeout = null;
|
|
1093
1088
|
}, delay);
|
|
1089
|
+
if (writeTimeout.unref) writeTimeout.unref();
|
|
1094
1090
|
};
|
|
1095
1091
|
initUsage = async () => {
|
|
1096
1092
|
cachedUsage = await loadUsageFromFile();
|
|
@@ -1615,7 +1611,11 @@ var init_view_file = __esm({
|
|
|
1615
1611
|
"src/tools/view_file.js"() {
|
|
1616
1612
|
init_arg_parser();
|
|
1617
1613
|
view_file = async (args) => {
|
|
1618
|
-
|
|
1614
|
+
let { path: targetPath, StartLine, EndLine, start_line, end_line } = parseArgs(args);
|
|
1615
|
+
const sLine = parseInt(StartLine || start_line);
|
|
1616
|
+
const eLine = parseInt(EndLine || end_line);
|
|
1617
|
+
const finalStart = sLine || 1;
|
|
1618
|
+
const finalEnd = eLine || (sLine ? sLine + 800 : 800);
|
|
1619
1619
|
if (!targetPath) return 'ERROR: Missing "path" argument for view_file.';
|
|
1620
1620
|
const absolutePath = path9.resolve(process.cwd(), targetPath);
|
|
1621
1621
|
try {
|
|
@@ -1658,8 +1658,8 @@ var init_view_file = __esm({
|
|
|
1658
1658
|
content = content.replace(/\\n/g, "[/n]");
|
|
1659
1659
|
const lines = content.split("\n");
|
|
1660
1660
|
const totalLines = lines.length;
|
|
1661
|
-
const start = Math.max(0,
|
|
1662
|
-
const end = Math.min(totalLines,
|
|
1661
|
+
const start = Math.max(0, finalStart - 1);
|
|
1662
|
+
const end = Math.min(totalLines, finalEnd);
|
|
1663
1663
|
const resultLines = lines.slice(start, end);
|
|
1664
1664
|
const header = `File: [${targetPath}] (Showing lines ${start + 1}-${end} of ${totalLines})`;
|
|
1665
1665
|
const code = resultLines.map((line, i) => `${String(start + i + 1).padStart(4)}: ${line}`).join("\n");
|
|
@@ -1809,15 +1809,20 @@ var init_update_file = __esm({
|
|
|
1809
1809
|
let instances = 0;
|
|
1810
1810
|
let startPos = -1;
|
|
1811
1811
|
let matchRegex = null;
|
|
1812
|
-
const
|
|
1812
|
+
const exactPattern = content_to_replace.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1813
1813
|
if (content_to_replace !== "" && currentContent.includes(content_to_replace)) {
|
|
1814
|
-
matchRegex = new RegExp(
|
|
1814
|
+
matchRegex = new RegExp(exactPattern, "g");
|
|
1815
1815
|
} else {
|
|
1816
|
-
const
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1816
|
+
const fuzzyLines = content_to_replace.split("\n").map((line) => line.trim()).filter((line) => line.length > 0).map((line) => line.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/\s+/g, "\\s*"));
|
|
1817
|
+
if (fuzzyLines.length > 0) {
|
|
1818
|
+
const fuzzyPattern = fuzzyLines.join("\\s*");
|
|
1819
|
+
try {
|
|
1820
|
+
matchRegex = new RegExp(fuzzyPattern, "g");
|
|
1821
|
+
} catch (e) {
|
|
1822
|
+
matchRegex = new RegExp(exactPattern, "g");
|
|
1823
|
+
}
|
|
1824
|
+
} else {
|
|
1825
|
+
matchRegex = new RegExp(exactPattern, "g");
|
|
1821
1826
|
}
|
|
1822
1827
|
}
|
|
1823
1828
|
const matches = matchRegex ? [...currentContent.matchAll(matchRegex)] : [];
|
|
@@ -2650,9 +2655,11 @@ var init_ai = __esm({
|
|
|
2650
2655
|
const url = parseArgs(toolCall.args).url || "...";
|
|
2651
2656
|
label = `\u{1F4D6} READING SITE: ${url}`.toUpperCase();
|
|
2652
2657
|
} else if (toolCall.toolName === "view_file") {
|
|
2653
|
-
const { path: targetPath2,
|
|
2658
|
+
const { path: targetPath2, StartLine, EndLine, start_line, end_line } = parseArgs(toolCall.args);
|
|
2659
|
+
const sLine = parseInt(StartLine || start_line) || 1;
|
|
2660
|
+
const eLine = parseInt(EndLine || end_line) || (StartLine || start_line ? sLine + 800 : 800);
|
|
2654
2661
|
let totalLines = "...";
|
|
2655
|
-
let actualEndLine =
|
|
2662
|
+
let actualEndLine = eLine;
|
|
2656
2663
|
try {
|
|
2657
2664
|
const absPath = path16.resolve(process.cwd(), targetPath2);
|
|
2658
2665
|
if (fs16.existsSync(absPath)) {
|
|
@@ -2671,7 +2678,7 @@ var init_ai = __esm({
|
|
|
2671
2678
|
} else if (isImage) {
|
|
2672
2679
|
label = `\u{1F4F8} ANALYZING IMAGE: ${targetPath2}`.toUpperCase();
|
|
2673
2680
|
} else {
|
|
2674
|
-
label = `\u{1F4C4} READING FILE: ${targetPath2}. LINES ${
|
|
2681
|
+
label = `\u{1F4C4} READING FILE: ${targetPath2}. LINES ${sLine} - ${actualEndLine} FROM ${totalLines}`.toUpperCase();
|
|
2675
2682
|
}
|
|
2676
2683
|
} else if (toolCall.toolName === "list_files" || toolCall.toolName === "read_folder") {
|
|
2677
2684
|
const action = toolCall.toolName === "list_files" ? "LISTING" : "DISCOVERING";
|
|
@@ -3099,6 +3106,7 @@ var init_UpdateProcessor = __esm({
|
|
|
3099
3106
|
const [log, setLog] = useState6("");
|
|
3100
3107
|
const [error, setError] = useState6(null);
|
|
3101
3108
|
useEffect4(() => {
|
|
3109
|
+
let child;
|
|
3102
3110
|
const runUpdate = async () => {
|
|
3103
3111
|
const manager = settings.updateManager || "npm";
|
|
3104
3112
|
if (!settings.updateManager) {
|
|
@@ -3113,7 +3121,7 @@ var init_UpdateProcessor = __esm({
|
|
|
3113
3121
|
else command = `npm install -g fluxflow-cli@${latest}`;
|
|
3114
3122
|
setStatus("downloading");
|
|
3115
3123
|
setLog(`Running: ${command}...`);
|
|
3116
|
-
|
|
3124
|
+
child = exec2(command, (err, stdout, stderr) => {
|
|
3117
3125
|
if (err) {
|
|
3118
3126
|
setError(stderr || err.message);
|
|
3119
3127
|
setStatus("error");
|
|
@@ -3127,6 +3135,14 @@ var init_UpdateProcessor = __esm({
|
|
|
3127
3135
|
});
|
|
3128
3136
|
};
|
|
3129
3137
|
runUpdate();
|
|
3138
|
+
return () => {
|
|
3139
|
+
if (child) {
|
|
3140
|
+
try {
|
|
3141
|
+
child.kill();
|
|
3142
|
+
} catch (e) {
|
|
3143
|
+
}
|
|
3144
|
+
}
|
|
3145
|
+
};
|
|
3130
3146
|
}, []);
|
|
3131
3147
|
if (status === "initializing" || status === "downloading") {
|
|
3132
3148
|
return /* @__PURE__ */ React9.createElement(Box9, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1 }, /* @__PURE__ */ React9.createElement(Box9, null, /* @__PURE__ */ React9.createElement(Text9, { color: "cyan" }, /* @__PURE__ */ React9.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React9.createElement(Text9, { marginLeft: 1, bold: true }, " Updating Flux Flow to v", latest, "...")), /* @__PURE__ */ React9.createElement(Box9, { marginTop: 1, paddingX: 1, borderStyle: "single", borderColor: "#333" }, /* @__PURE__ */ React9.createElement(Text9, { color: "gray", dimColor: true, italic: true }, log || "Preparing environment...")), /* @__PURE__ */ React9.createElement(Text9, { marginTop: 1, dimColor: true }, "(Please do not close the terminal)"));
|
|
@@ -4809,8 +4825,8 @@ var init_app = __esm({
|
|
|
4809
4825
|
init_text();
|
|
4810
4826
|
SESSION_START_TIME = Date.now();
|
|
4811
4827
|
CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
|
|
4812
|
-
versionFluxflow = "1.8.
|
|
4813
|
-
updatedOn = "2026-05-
|
|
4828
|
+
versionFluxflow = "1.8.5";
|
|
4829
|
+
updatedOn = "2026-05-08";
|
|
4814
4830
|
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(
|
|
4815
4831
|
CommandMenu,
|
|
4816
4832
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fluxflow-cli",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.5",
|
|
4
4
|
"description": "A high-fidelity agentic terminal assistant for the Flux Era.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"files": [
|
|
23
23
|
"dist",
|
|
24
|
-
"README
|
|
24
|
+
"README.md",
|
|
25
25
|
"package.json",
|
|
26
26
|
"ARCHITECTURE.md",
|
|
27
27
|
"TOOLS.md",
|
package/README-npm.md
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# ๐ Flux Flow (`fluxflow-cli`)
|
|
2
|
-

|
|
3
|
-
|
|
4
|
-
### *The High-Fidelity Agentic Terminal for the Flux Era.*
|
|
5
|
-
|
|
6
|
-
**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.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## ๐ Instant Ignition (No Setup Required)
|
|
11
|
-
You don't even need to install it. Just fire up your terminal and run:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# Run instantly (Zero Setup)
|
|
15
|
-
npx fluxflow-cli
|
|
16
|
-
|
|
17
|
-
# OR Install Globally
|
|
18
|
-
npm install -g fluxflow-cli
|
|
19
|
-
fluxflow-cli
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
*The agent will prompt you for your Gemini API Key on the first run and store it securely in an XOR-encrypted vault.* Free API Key recomemded to use Gemma 4 (Default Model).
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## โจ Why Flux Flow?
|
|
27
|
-
|
|
28
|
-
### ๐จ **Premium Visual Sovereignty**
|
|
29
|
-
Experience a terminal UI that feels alive. Built with **Ink** and **React**, Flux Flow features:
|
|
30
|
-
- **Dynamic Status Bar**: Real-time telemetry showing your "Neural Headroom" (token usage), Thinking Level, and Session ID.
|
|
31
|
-
|
|
32
|
-
### ๐๏ธ **Native Multimodality**
|
|
33
|
-
Flux Flow can now see! Use the `view_file` tool to analyze images (JPG, PNG) or deep-dive into PDF technical papers. The agent extracts high-fidelity visual context natively, making it a true multimodal companion.
|
|
34
|
-
|
|
35
|
-
### ๐ **Document Engineering Suite**
|
|
36
|
-
Need a report or a presentation? Just ask. Flux Flow features a high-fidelity "Printing Press" that generates professional, branded documents natively:
|
|
37
|
-
- **PDF**: Branded documents from HTML/CSS with automatic watermarking.
|
|
38
|
-
- **DOCX**: Native Word documents with multi-page support and automatic numbering.
|
|
39
|
-
- **PPTX**: High-fidelity PowerPoint presentations using native elements (selectable text, shapes) translated directly from HTML.
|
|
40
|
-
|
|
41
|
-
### ๐ **Self-Healing Infrastructure**
|
|
42
|
-
Zero setup means zero setup. On first run, Flux Flow performs an integrity check and autonomously installs its own Chromium engine if needed, ensuring features like PDF generation work 100% of the time without manual intervention.
|
|
43
|
-
|
|
44
|
-
- **Archived Terminal Flow**: See execution outputs transform from live elements into permanent conversation records.
|
|
45
|
-
- **Rich Aesthetics**: High-contrast, sleek design with smooth transitions and micro-animations.
|
|
46
|
-
|
|
47
|
-
### ๐ง **The Dual-Intelligence System**
|
|
48
|
-
- **Flux Mode (Dev)**: High-speed, agentic problem solving with a 50-turn persistent loop for massive coding tasks.
|
|
49
|
-
- **Flow Mode (Chat)**: Optimized for deep research, high-quality conversation, and web-assisted reasoning.
|
|
50
|
-
|
|
51
|
-
### ๐ก๏ธ **Digital Fortress Governance**
|
|
52
|
-
Security isn't an afterthought; it's a boundary.
|
|
53
|
-
- **External Path Hardlock**: Restricts the agent to your Current Working Directory (CWD) unless you explicitly unlock it.
|
|
54
|
-
- **Human-in-the-Loop (HITL)**: Every file write and terminal command requires your high-fidelity approval.
|
|
55
|
-
- **XOR Vaulting**: All local session histories, memories, and API keys are obfuscated and encrypted at rest.
|
|
56
|
-
- **Adaptive Failover**: Automatic multi-stage retry logic with high-concurrency fallback model switching (Gemini 3.1 Flash Lite) during peak API congestion.
|
|
57
|
-
|
|
58
|
-
### ๐งน **The Background Janitor**
|
|
59
|
-
While you move at high speed, the Janitor follows behindโrefining session titles, compressing data, and ensuring your context window remains at absolute peak performance.
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## ๐ ๏ธ Key Capabilities
|
|
64
|
-
- **Deep File-System Interaction**: Edit, move, and refactor code across multiple files with atomic precision.
|
|
65
|
-
- **Real-Time Web Intelligence**: Autonomous web-searching via DuckDuckGo for live news and technical research.
|
|
66
|
-
- **Autonomous Project Alignment**: Automatically detects and adheres to project-specific instructions in `Agent.md`, `Skills.md`, and `Fluxflow.md` for high-fidelity alignment with your coding standards and custom workflows.
|
|
67
|
-
- **High-Reliability Fallback**: Automatic failover to a lighter, high-concurrency model during peak traffic to ensure zero session loss.
|
|
68
|
-
- **Persistent Memory**: The agent learns from your preferences and project requirements across sessions.
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## โ๏ธ Configuration
|
|
73
|
-
Type `/settings` in-app to live-configure:
|
|
74
|
-
- **Thinking Level**: Low, Medium, or High (Deep-Reasoning).
|
|
75
|
-
- **Auto-Execution**: For ultimate high-speed flow (Advanced users only).
|
|
76
|
-
- **Security Perimeter**: Toggle External Workspace access.
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## ๐ License
|
|
81
|
-
MIT ยฉ 2026 Flux Flow Team.
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
*Forged with โก and ๐งฌ. Welcome to the FluxFlow.*
|