fluxflow-cli 2.13.0 → 2.13.1
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 +133 -133
- package/dist/fluxflow.js +50 -29
- package/package.json +67 -67
package/README.md
CHANGED
|
@@ -1,133 +1,133 @@
|
|
|
1
|
-
# 🌌 Flux Flow (`fluxflow-cli`)
|
|
2
|
-

|
|
3
|
-
|
|
4
|
-
<p align="left">
|
|
5
|
-
<a href="https://github.com/KushalRoyChowdhury/fluxflow-cli"><img src="https://img.shields.io/badge/FluxFlow-v2-blue?style=plastic" alt="FluxFlow Version"></a>
|
|
6
|
-
<a href="https://deepmind.google"><img src="https://img.shields.io/badge/Engine-Gemma%204-red?style=plastic" alt="Engine Gemma 4"></a>
|
|
7
|
-
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=plastic" alt="License MIT"></a>
|
|
8
|
-
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-%3E%3D20-green?style=plastic" alt="Node Compatibility"></a>
|
|
9
|
-
</p>
|
|
10
|
-
|
|
11
|
-
### *The High-Fidelity Agentic Terminal for the Flux Era.*
|
|
12
|
-
|
|
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
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 🚀 Instant Ignition (No Setup Required)
|
|
18
|
-
You don't even need to install it. Just fire up your terminal and run:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
# Run instantly (Zero Setup)
|
|
22
|
-
npx fluxflow-cli
|
|
23
|
-
|
|
24
|
-
# OR Install Globally
|
|
25
|
-
npm install -g fluxflow-cli
|
|
26
|
-
fluxflow-cli
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
*The agent will prompt you for your API Key on the first run and store it securely in an encrypted vault.* Choose from multiple supported AI providers:
|
|
30
|
-
- **Google GenAI** (Gemini & Gemma models)
|
|
31
|
-
- **DeepSeek** (Native DeepSeek API)
|
|
32
|
-
- **OpenRouter** (Access to hundreds of models; *Experimental*)
|
|
33
|
-
- **NVIDIA** (Access to selected models; *Experimental*)
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## ✨ Why Flux Flow?
|
|
38
|
-
|
|
39
|
-
### 🎨 **Premium Visual Sovereignty**
|
|
40
|
-
Experience a terminal UI that feels alive. Built with **Ink** and **React**, Flux Flow features:
|
|
41
|
-
- **Dynamic Status Bar**: Real-time telemetry showing your "Neural Headroom" (token usage), Thinking Level, and Session ID.
|
|
42
|
-
|
|
43
|
-
### 🔌 **High-Fidelity IDE Companion**
|
|
44
|
-
Flux Flow now pairs with a dedicated VS Code extension to bridge the gap between terminal and editor:
|
|
45
|
-
- **Surgical Diagnostic Sync**: Proactive background scanning for errors. If your project breaks, a "Magic Wand" icon $(\text{sparkle})$ appears in your editor title bar for an instant AI fix.
|
|
46
|
-
- **Live Status Heartbeat**: The VS Code Status Bar acts as a live feed, showing the agent's current task (*Thinking*, *Web Searching*, *Patching*, etc.).
|
|
47
|
-
- **Clickable Terminal Links**: Jump from the terminal output straight to your code with clickable file:line links.
|
|
48
|
-
- **Right-Click Integration**: "FluxFlow > Chat" is available in the editor, explorer, and tab bars, even when no files are open.
|
|
49
|
-
- **Selection-Driven Reasoning**: Select a block of code and ask "What does this do?"—the agent receives your selection instantly.
|
|
50
|
-
- **Universal Compatibility**: Works flawlessly with VS Code, Cursor, VSCodium, Trae, and Antigravity.
|
|
51
|
-
|
|
52
|
-
### 👁️ **Native Multimodality**
|
|
53
|
-
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.
|
|
54
|
-
|
|
55
|
-
### 📑 **Document Engineering Suite**
|
|
56
|
-
Need a report or a presentation? Just ask. Flux Flow features a high-fidelity "Printing Press" that generates professional, branded documents natively:
|
|
57
|
-
- **PDF**: Branded documents from HTML/CSS with automatic watermarking.
|
|
58
|
-
- **DOCX**: Native Word documents with multi-page support and automatic numbering.
|
|
59
|
-
|
|
60
|
-
### ⏱️ **Codebase Time Travel (Git-less Reversion)**
|
|
61
|
-
Refactor and build with absolute fearlessness. Flux Flow maintains transaction-based secure snapshots of files before they are generated or edited:
|
|
62
|
-
- **Instant Rollback**: Revert your workspace files (source code, generated documents, images) to their exact state prior to any selected prompt in the history.
|
|
63
|
-
- **Double-ESC Shortcut**: Press `ESC` twice while idle to pop open a sleek selection modal.
|
|
64
|
-
- **`/revert` Command**: Run the `/revert` command directly in the chat to open the checkpoint viewer.
|
|
65
|
-
|
|
66
|
-
### 🚑 **Self-Healing Infrastructure**
|
|
67
|
-
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.
|
|
68
|
-
|
|
69
|
-
- **Archived Terminal Flow**: See execution outputs transform from live elements into permanent conversation records.
|
|
70
|
-
- **Rich Aesthetics**: High-contrast, sleek design with smooth transitions and micro-animations.
|
|
71
|
-
|
|
72
|
-
### 🧠 **The Dual-Intelligence System**
|
|
73
|
-
- **Flux Mode (Dev)**: High-speed, agentic problem solving with a 70-turn persistent loop for massive coding tasks.
|
|
74
|
-
- **Flow Mode (Chat)**: Optimized for high-quality conversation and web-assisted reasoning.
|
|
75
|
-
|
|
76
|
-
### 🛡️ **Digital Fortress Governance**
|
|
77
|
-
Security isn't an afterthought; it's a boundary.
|
|
78
|
-
- **Sandbox Presets**: Choose from **Strict**, **Balanced**, **Autonomous**, or **Custom** security profiles to control agent autonomy.
|
|
79
|
-
- **Granular Command Policies**: Configure Auto-Approve (`Auto` / `Read-Only` / `None`), Auto-Disallow (`Auto` / `Destructive` / `None`), Network Access toggle, and Auto-Approve Git Commits independently.
|
|
80
|
-
- **External Path Hardlock**: Restricts the agent to your Current Working Directory (CWD) unless you explicitly unlock it.
|
|
81
|
-
- **Human-in-the-Loop (HITL)**: Every file write and terminal command requires your high-fidelity approval.
|
|
82
|
-
- **XOR Vaulting**: All local session histories, memories, and API keys are obfuscated and encrypted at rest.
|
|
83
|
-
- **Adaptive Failover**: Automatic multi-stage retry logic with high-concurrency fallback model switching (Gemini 3.1 Flash Lite) during peak API congestion.
|
|
84
|
-
|
|
85
|
-
### 🧹 **The Background Janitor**
|
|
86
|
-
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.
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 🛠️ Key Capabilities
|
|
91
|
-
- **Deep File-System Interaction**: Edit, move, and refactor code across multiple files with atomic precision.
|
|
92
|
-
- **Real-Time Web Intelligence**: Autonomous web-searching via DuckDuckGo for live news and technical research.
|
|
93
|
-
- **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.
|
|
94
|
-
- **High-Reliability Fallback**: Automatic failover to a lighter, high-concurrency model during peak traffic to ensure zero session loss.
|
|
95
|
-
- **Persistent Memory**: The agent learns from your preferences and project requirements across sessions.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 💻 CLI Startup Arguments
|
|
100
|
-
Customize your session parameters directly from your console launch command:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
fluxflow [options]
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Supported Flags:
|
|
107
|
-
- `--model <model-name>`: Temporary override for the active AI model (e.g., `gemini-2.5-pro`). Keeps settings file untouched.
|
|
108
|
-
- `--memory <on | off>`: Toggle persistent long-term agent memory for the session.
|
|
109
|
-
- `--resume <session-id>`: Resume a previous chat session programmatically.
|
|
110
|
-
- `--update <check | latest>`: Manually run an update check (`check`) or execute latest update setup (`latest`).
|
|
111
|
-
- `--package <npm | pnpm | yarn | bun>`: Override default package manager to run core application updates.
|
|
112
|
-
- `--auto-del <1d | 7d | 30d>`: Set automated chat log deletion schedule.
|
|
113
|
-
- `--yolo <on | off>`: Toggle autonomous execution permission.
|
|
114
|
-
- `--external-access <on | off>`: Toggle permission to let agent read files outside CWD.
|
|
115
|
-
- `--thinking <Fast | Low | Medium/Standard | High | xHigh>`: Override thinking level for reasoning depth. `Medium` and `Standard` is the same (Deepseek compatibility).
|
|
116
|
-
- `--key <key@google | key@deepseek | key@openrouter>`: Set API key and provider.
|
|
117
|
-
- `--provider <google | deepseek | openrouter>`: Override default provider.
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## ⚙️ Configuration
|
|
122
|
-
Type `/settings` in-app to live-configure:
|
|
123
|
-
- **Thinking Level**: Fast (No Reasoning), Low, Medium, High, xHigh (Extended Reasoning).
|
|
124
|
-
- **Sandbox Preset**: Strict, Balanced, Autonomous, or Custom security profiles.
|
|
125
|
-
- **Security Perimeter**: Toggle External Workspace access, Network Access, and Git Commit auto-approval.
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## 🏁 License
|
|
130
|
-
MIT © 2026 Flux Flow.
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
*Forged with ⚡ and 🧬. Welcome to the FluxFlow.*
|
|
1
|
+
# 🌌 Flux Flow (`fluxflow-cli`)
|
|
2
|
+

|
|
3
|
+
|
|
4
|
+
<p align="left">
|
|
5
|
+
<a href="https://github.com/KushalRoyChowdhury/fluxflow-cli"><img src="https://img.shields.io/badge/FluxFlow-v2-blue?style=plastic" alt="FluxFlow Version"></a>
|
|
6
|
+
<a href="https://deepmind.google"><img src="https://img.shields.io/badge/Engine-Gemma%204-red?style=plastic" alt="Engine Gemma 4"></a>
|
|
7
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=plastic" alt="License MIT"></a>
|
|
8
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-%3E%3D20-green?style=plastic" alt="Node Compatibility"></a>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
### *The High-Fidelity Agentic Terminal for the Flux Era.*
|
|
12
|
+
|
|
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
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 🚀 Instant Ignition (No Setup Required)
|
|
18
|
+
You don't even need to install it. Just fire up your terminal and run:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Run instantly (Zero Setup)
|
|
22
|
+
npx fluxflow-cli
|
|
23
|
+
|
|
24
|
+
# OR Install Globally
|
|
25
|
+
npm install -g fluxflow-cli
|
|
26
|
+
fluxflow-cli
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
*The agent will prompt you for your API Key on the first run and store it securely in an encrypted vault.* Choose from multiple supported AI providers:
|
|
30
|
+
- **Google GenAI** (Gemini & Gemma models)
|
|
31
|
+
- **DeepSeek** (Native DeepSeek API)
|
|
32
|
+
- **OpenRouter** (Access to hundreds of models; *Experimental*)
|
|
33
|
+
- **NVIDIA** (Access to selected models; *Experimental*)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## ✨ Why Flux Flow?
|
|
38
|
+
|
|
39
|
+
### 🎨 **Premium Visual Sovereignty**
|
|
40
|
+
Experience a terminal UI that feels alive. Built with **Ink** and **React**, Flux Flow features:
|
|
41
|
+
- **Dynamic Status Bar**: Real-time telemetry showing your "Neural Headroom" (token usage), Thinking Level, and Session ID.
|
|
42
|
+
|
|
43
|
+
### 🔌 **High-Fidelity IDE Companion**
|
|
44
|
+
Flux Flow now pairs with a dedicated VS Code extension to bridge the gap between terminal and editor:
|
|
45
|
+
- **Surgical Diagnostic Sync**: Proactive background scanning for errors. If your project breaks, a "Magic Wand" icon $(\text{sparkle})$ appears in your editor title bar for an instant AI fix.
|
|
46
|
+
- **Live Status Heartbeat**: The VS Code Status Bar acts as a live feed, showing the agent's current task (*Thinking*, *Web Searching*, *Patching*, etc.).
|
|
47
|
+
- **Clickable Terminal Links**: Jump from the terminal output straight to your code with clickable file:line links.
|
|
48
|
+
- **Right-Click Integration**: "FluxFlow > Chat" is available in the editor, explorer, and tab bars, even when no files are open.
|
|
49
|
+
- **Selection-Driven Reasoning**: Select a block of code and ask "What does this do?"—the agent receives your selection instantly.
|
|
50
|
+
- **Universal Compatibility**: Works flawlessly with VS Code, Cursor, VSCodium, Trae, and Antigravity.
|
|
51
|
+
|
|
52
|
+
### 👁️ **Native Multimodality**
|
|
53
|
+
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.
|
|
54
|
+
|
|
55
|
+
### 📑 **Document Engineering Suite**
|
|
56
|
+
Need a report or a presentation? Just ask. Flux Flow features a high-fidelity "Printing Press" that generates professional, branded documents natively:
|
|
57
|
+
- **PDF**: Branded documents from HTML/CSS with automatic watermarking.
|
|
58
|
+
- **DOCX**: Native Word documents with multi-page support and automatic numbering.
|
|
59
|
+
|
|
60
|
+
### ⏱️ **Codebase Time Travel (Git-less Reversion)**
|
|
61
|
+
Refactor and build with absolute fearlessness. Flux Flow maintains transaction-based secure snapshots of files before they are generated or edited:
|
|
62
|
+
- **Instant Rollback**: Revert your workspace files (source code, generated documents, images) to their exact state prior to any selected prompt in the history.
|
|
63
|
+
- **Double-ESC Shortcut**: Press `ESC` twice while idle to pop open a sleek selection modal.
|
|
64
|
+
- **`/revert` Command**: Run the `/revert` command directly in the chat to open the checkpoint viewer.
|
|
65
|
+
|
|
66
|
+
### 🚑 **Self-Healing Infrastructure**
|
|
67
|
+
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.
|
|
68
|
+
|
|
69
|
+
- **Archived Terminal Flow**: See execution outputs transform from live elements into permanent conversation records.
|
|
70
|
+
- **Rich Aesthetics**: High-contrast, sleek design with smooth transitions and micro-animations.
|
|
71
|
+
|
|
72
|
+
### 🧠 **The Dual-Intelligence System**
|
|
73
|
+
- **Flux Mode (Dev)**: High-speed, agentic problem solving with a 70-turn persistent loop for massive coding tasks.
|
|
74
|
+
- **Flow Mode (Chat)**: Optimized for high-quality conversation and web-assisted reasoning.
|
|
75
|
+
|
|
76
|
+
### 🛡️ **Digital Fortress Governance**
|
|
77
|
+
Security isn't an afterthought; it's a boundary.
|
|
78
|
+
- **Sandbox Presets**: Choose from **Strict**, **Balanced**, **Autonomous**, or **Custom** security profiles to control agent autonomy.
|
|
79
|
+
- **Granular Command Policies**: Configure Auto-Approve (`Auto` / `Read-Only` / `None`), Auto-Disallow (`Auto` / `Destructive` / `None`), Network Access toggle, and Auto-Approve Git Commits independently.
|
|
80
|
+
- **External Path Hardlock**: Restricts the agent to your Current Working Directory (CWD) unless you explicitly unlock it.
|
|
81
|
+
- **Human-in-the-Loop (HITL)**: Every file write and terminal command requires your high-fidelity approval.
|
|
82
|
+
- **XOR Vaulting**: All local session histories, memories, and API keys are obfuscated and encrypted at rest.
|
|
83
|
+
- **Adaptive Failover**: Automatic multi-stage retry logic with high-concurrency fallback model switching (Gemini 3.1 Flash Lite) during peak API congestion.
|
|
84
|
+
|
|
85
|
+
### 🧹 **The Background Janitor**
|
|
86
|
+
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.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 🛠️ Key Capabilities
|
|
91
|
+
- **Deep File-System Interaction**: Edit, move, and refactor code across multiple files with atomic precision.
|
|
92
|
+
- **Real-Time Web Intelligence**: Autonomous web-searching via DuckDuckGo for live news and technical research.
|
|
93
|
+
- **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.
|
|
94
|
+
- **High-Reliability Fallback**: Automatic failover to a lighter, high-concurrency model during peak traffic to ensure zero session loss.
|
|
95
|
+
- **Persistent Memory**: The agent learns from your preferences and project requirements across sessions.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 💻 CLI Startup Arguments
|
|
100
|
+
Customize your session parameters directly from your console launch command:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
fluxflow [options]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Supported Flags:
|
|
107
|
+
- `--model <model-name>`: Temporary override for the active AI model (e.g., `gemini-2.5-pro`). Keeps settings file untouched.
|
|
108
|
+
- `--memory <on | off>`: Toggle persistent long-term agent memory for the session.
|
|
109
|
+
- `--resume <session-id>`: Resume a previous chat session programmatically.
|
|
110
|
+
- `--update <check | latest>`: Manually run an update check (`check`) or execute latest update setup (`latest`).
|
|
111
|
+
- `--package <npm | pnpm | yarn | bun>`: Override default package manager to run core application updates.
|
|
112
|
+
- `--auto-del <1d | 7d | 30d>`: Set automated chat log deletion schedule.
|
|
113
|
+
- `--yolo <on | off>`: Toggle autonomous execution permission.
|
|
114
|
+
- `--external-access <on | off>`: Toggle permission to let agent read files outside CWD.
|
|
115
|
+
- `--thinking <Fast | Low | Medium/Standard | High | xHigh>`: Override thinking level for reasoning depth. `Medium` and `Standard` is the same (Deepseek compatibility).
|
|
116
|
+
- `--key <key@google | key@deepseek | key@openrouter>`: Set API key and provider.
|
|
117
|
+
- `--provider <google | deepseek | openrouter>`: Override default provider.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## ⚙️ Configuration
|
|
122
|
+
Type `/settings` in-app to live-configure:
|
|
123
|
+
- **Thinking Level**: Fast (No Reasoning), Low, Medium, High, xHigh (Extended Reasoning).
|
|
124
|
+
- **Sandbox Preset**: Strict, Balanced, Autonomous, or Custom security profiles.
|
|
125
|
+
- **Security Perimeter**: Toggle External Workspace access, Network Access, and Git Commit auto-approval.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 🏁 License
|
|
130
|
+
MIT © 2026 Flux Flow.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
*Forged with ⚡ and 🧬. Welcome to the FluxFlow.*
|
package/dist/fluxflow.js
CHANGED
|
@@ -3214,6 +3214,7 @@ var init_TerminalBox = __esm({
|
|
|
3214
3214
|
paddingLeft: 2,
|
|
3215
3215
|
paddingRight: 0,
|
|
3216
3216
|
paddingY: completed ? 0 : 1,
|
|
3217
|
+
marginTop: 1,
|
|
3217
3218
|
width: "100%"
|
|
3218
3219
|
},
|
|
3219
3220
|
/* @__PURE__ */ React3.createElement(Box2, { marginBottom: 1, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React3.createElement(Box2, { flexShrink: 1, paddingRight: 2 }, /* @__PURE__ */ React3.createElement(Text3, null, /* @__PURE__ */ React3.createElement(Text3, { color: "gray", bold: true }, completed ? "\u{1F3C1} FINISHED:" : "\u26A1 EXECUTING:", " "), /* @__PURE__ */ React3.createElement(Text3, { color: "white" }, command))), isPty && /* @__PURE__ */ React3.createElement(Box2, { flexShrink: 0, paddingX: 1 }, /* @__PURE__ */ React3.createElement(Text3, { color: "gray", bold: true }, "ADVANCE"))),
|
|
@@ -3709,9 +3710,9 @@ var init_ChatLayout = __esm({
|
|
|
3709
3710
|
const prefix = content.substring(0, prefixLen);
|
|
3710
3711
|
const delta = content.substring(prefixLen, content.length - suffixLen);
|
|
3711
3712
|
const suffix = content.substring(content.length - suffixLen);
|
|
3712
|
-
return /* @__PURE__ */ React4.createElement(Box3, { backgroundColor: rowBgColor, paddingX: 1, width: columns }, /* @__PURE__ */ React4.createElement(Box3, { width:
|
|
3713
|
+
return /* @__PURE__ */ React4.createElement(Box3, { backgroundColor: rowBgColor, paddingX: 1, width: columns }, /* @__PURE__ */ React4.createElement(Box3, { width: 3, flexShrink: 0, justifyContent: "flex-end" }, /* @__PURE__ */ React4.createElement(Text4, { color: numColor, dimColor: isContext }, lineNum)), /* @__PURE__ */ React4.createElement(Box3, { width: 1, flexShrink: 0, marginLeft: 1 }, /* @__PURE__ */ React4.createElement(Text4, { color: textColor, bold: true }, isRemoval ? "-" : isAddition ? "+" : " ")), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1, marginLeft: 1 }, /* @__PURE__ */ React4.createElement(Text4, { color: textColor, dimColor: isContext }, prefix, /* @__PURE__ */ React4.createElement(Text4, { backgroundColor: bgColor }, delta), suffix)));
|
|
3713
3714
|
}
|
|
3714
|
-
return /* @__PURE__ */ React4.createElement(Box3, { backgroundColor: rowBgColor, paddingX: 1, width: columns }, /* @__PURE__ */ React4.createElement(Box3, { width:
|
|
3715
|
+
return /* @__PURE__ */ React4.createElement(Box3, { backgroundColor: rowBgColor, paddingX: 1, width: columns }, /* @__PURE__ */ React4.createElement(Box3, { width: 3, flexShrink: 0, justifyContent: "flex-end" }, /* @__PURE__ */ React4.createElement(Text4, { color: numColor, dimColor: isContext }, lineNum)), /* @__PURE__ */ React4.createElement(Box3, { width: 1, flexShrink: 0, marginLeft: 1 }, /* @__PURE__ */ React4.createElement(Text4, { color: textColor, bold: true }, isRemoval ? "-" : isAddition ? "+" : " ")), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1, marginLeft: 1 }, /* @__PURE__ */ React4.createElement(Text4, { color: textColor, dimColor: isContext }, wrapText(content, columns - 14))));
|
|
3715
3716
|
});
|
|
3716
3717
|
DiffBlock = React4.memo(({ text, columns = 80 }) => {
|
|
3717
3718
|
const match = text.match(/\[DIFF_START\]([\s\S]*?)\[DIFF_END\]/);
|
|
@@ -3775,7 +3776,7 @@ var init_ChatLayout = __esm({
|
|
|
3775
3776
|
}
|
|
3776
3777
|
return infos;
|
|
3777
3778
|
}, [diffLines]);
|
|
3778
|
-
return /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", width: columns - 3, marginBottom: 1 }, /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", paddingY: 0, width: "100%" }, diffLines.map((line, i) => /* @__PURE__ */ React4.createElement(DiffLine, { key: i, line, columns: columns - 3, highlightInfo: highlightInfos[i] }))));
|
|
3779
|
+
return /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", width: columns - 3, marginBottom: 1 }, /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", paddingY: 0, width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { backgroundColor: "#1a1a1a", paddingX: 1, width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { width: 5, flexShrink: 0 }), /* @__PURE__ */ React4.createElement(Box3, { width: 2, flexShrink: 0, marginLeft: 1 }), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1, marginLeft: 1 }, /* @__PURE__ */ React4.createElement(Text4, null, " "))), diffLines.map((line, i) => /* @__PURE__ */ React4.createElement(DiffLine, { key: i, line, columns: columns - 3, highlightInfo: highlightInfos[i] })), /* @__PURE__ */ React4.createElement(Box3, { backgroundColor: "#1a1a1a", paddingX: 1, width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { width: 5, flexShrink: 0 }), /* @__PURE__ */ React4.createElement(Box3, { width: 2, flexShrink: 0, marginLeft: 1 }), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1, marginLeft: 1 }, /* @__PURE__ */ React4.createElement(Text4, null, " ")))));
|
|
3779
3780
|
});
|
|
3780
3781
|
CodeRenderer = React4.memo(({ text, columns = 80 }) => {
|
|
3781
3782
|
if (!text) return null;
|
|
@@ -3808,7 +3809,7 @@ var init_ChatLayout = __esm({
|
|
|
3808
3809
|
marginBottom: 1,
|
|
3809
3810
|
backgroundColor: "#1a1a1a"
|
|
3810
3811
|
},
|
|
3811
|
-
/* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", width: "100%" }, codeLines.map((line, idx) => /* @__PURE__ */ React4.createElement(Box3, { key: idx, width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { width: gutterWidth + 2, flexShrink: 0 }, /* @__PURE__ */ React4.createElement(Text4, { color: "gray", dimColor: true }, String(idx + 1).padStart(gutterWidth, " "), " ")), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1 }, /* @__PURE__ */ React4.createElement(Text4, { color: "white" }, line)))))
|
|
3812
|
+
/* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { width: gutterWidth + 2, flexShrink: 0 }, /* @__PURE__ */ React4.createElement(Text4, null, " ")), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1 }, /* @__PURE__ */ React4.createElement(Text4, null, " "))), codeLines.map((line, idx) => /* @__PURE__ */ React4.createElement(Box3, { key: idx, width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { width: gutterWidth + 2, flexShrink: 0 }, /* @__PURE__ */ React4.createElement(Text4, { color: "gray", dimColor: true }, String(idx + 1).padStart(gutterWidth, " "), " ")), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1 }, /* @__PURE__ */ React4.createElement(Text4, { color: "white" }, line)))), /* @__PURE__ */ React4.createElement(Box3, { width: "100%" }, /* @__PURE__ */ React4.createElement(Box3, { width: gutterWidth + 2, flexShrink: 0 }, /* @__PURE__ */ React4.createElement(Text4, null, " ")), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1 }, /* @__PURE__ */ React4.createElement(Text4, null, " "))))
|
|
3812
3813
|
));
|
|
3813
3814
|
}
|
|
3814
3815
|
if (text.includes("```")) {
|
|
@@ -4022,21 +4023,23 @@ var init_ChatLayout = __esm({
|
|
|
4022
4023
|
return /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", paddingX: 1, width: "100%" }, /* @__PURE__ */ React4.createElement(TableRenderer, { buffer: text.split("\n"), terminalWidth: columns }));
|
|
4023
4024
|
}
|
|
4024
4025
|
if (type === "diff-line") {
|
|
4025
|
-
|
|
4026
|
+
const { isFirstLine, isLastLine } = block;
|
|
4027
|
+
const renderPaddingLine = (isEnd = false) => /* @__PURE__ */ React4.createElement(Box3, { backgroundColor: "#1a1a1a", paddingX: 1, width: columns, marginBottom: isEnd ? 1 : 0 }, /* @__PURE__ */ React4.createElement(Box3, { width: 3, flexShrink: 0 }), /* @__PURE__ */ React4.createElement(Box3, { width: 1, flexShrink: 0, marginLeft: 1 }), /* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1, marginLeft: 1 }, /* @__PURE__ */ React4.createElement(Text4, null, " ")));
|
|
4028
|
+
return /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column" }, isFirstLine && renderPaddingLine(false), /* @__PURE__ */ React4.createElement(
|
|
4026
4029
|
DiffLine,
|
|
4027
4030
|
{
|
|
4028
4031
|
line: text,
|
|
4029
4032
|
columns,
|
|
4030
4033
|
highlightInfo: block.highlightInfo
|
|
4031
4034
|
}
|
|
4032
|
-
);
|
|
4035
|
+
), isLastLine && renderPaddingLine(true));
|
|
4033
4036
|
}
|
|
4034
4037
|
if (type === "write-header") {
|
|
4035
4038
|
return /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", paddingX: 1, width: columns }, /* @__PURE__ */ React4.createElement(MarkdownText, { text, columns }));
|
|
4036
4039
|
}
|
|
4037
4040
|
if (type === "write-line") {
|
|
4038
|
-
const { gutterWidth, lineNum, isLastLine } = block;
|
|
4039
|
-
|
|
4041
|
+
const { gutterWidth, lineNum, isFirstLine, isLastLine } = block;
|
|
4042
|
+
const renderPaddingLine = (isEnd = false) => /* @__PURE__ */ React4.createElement(
|
|
4040
4043
|
Box3,
|
|
4041
4044
|
{
|
|
4042
4045
|
flexDirection: "row",
|
|
@@ -4050,11 +4053,29 @@ var init_ChatLayout = __esm({
|
|
|
4050
4053
|
paddingLeft: 2,
|
|
4051
4054
|
paddingRight: 0,
|
|
4052
4055
|
backgroundColor: "#1a1a1a",
|
|
4053
|
-
marginBottom:
|
|
4056
|
+
marginBottom: isEnd ? 1 : 0
|
|
4057
|
+
},
|
|
4058
|
+
/* @__PURE__ */ React4.createElement(Box3, { width: gutterWidth + 2, flexShrink: 0 }, /* @__PURE__ */ React4.createElement(Text4, null, " ".repeat(gutterWidth + 2))),
|
|
4059
|
+
/* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1 }, /* @__PURE__ */ React4.createElement(Text4, null, " "))
|
|
4060
|
+
);
|
|
4061
|
+
return /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column" }, isFirstLine && renderPaddingLine(false), /* @__PURE__ */ React4.createElement(
|
|
4062
|
+
Box3,
|
|
4063
|
+
{
|
|
4064
|
+
flexDirection: "row",
|
|
4065
|
+
width: columns,
|
|
4066
|
+
borderStyle: "single",
|
|
4067
|
+
borderLeft: true,
|
|
4068
|
+
borderRight: false,
|
|
4069
|
+
borderTop: false,
|
|
4070
|
+
borderBottom: false,
|
|
4071
|
+
borderColor: "#444444",
|
|
4072
|
+
paddingLeft: 2,
|
|
4073
|
+
paddingRight: 0,
|
|
4074
|
+
backgroundColor: "#1a1a1a"
|
|
4054
4075
|
},
|
|
4055
4076
|
/* @__PURE__ */ React4.createElement(Box3, { width: gutterWidth + 2, flexShrink: 0 }, /* @__PURE__ */ React4.createElement(Text4, { color: "gray", dimColor: true }, String(lineNum).padStart(gutterWidth, " "), " ")),
|
|
4056
4077
|
/* @__PURE__ */ React4.createElement(Box3, { flexGrow: 1 }, /* @__PURE__ */ React4.createElement(Text4, { color: "white" }, text))
|
|
4057
|
-
);
|
|
4078
|
+
), isLastLine && renderPaddingLine(true));
|
|
4058
4079
|
}
|
|
4059
4080
|
if (type === "write-footer") {
|
|
4060
4081
|
return /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", paddingX: 1, width: columns, marginTop: 1, marginBottom: 1 }, /* @__PURE__ */ React4.createElement(MarkdownText, { text, columns }));
|
|
@@ -10461,10 +10482,10 @@ ${boxBottom}`) };
|
|
|
10461
10482
|
if (!isError) {
|
|
10462
10483
|
let label2 = "";
|
|
10463
10484
|
if (isImage) {
|
|
10464
|
-
label2 = `\u2714
|
|
10485
|
+
label2 = `\u2714 Viewed: ${filePath}`;
|
|
10465
10486
|
attachedBinaryPart = binPart;
|
|
10466
10487
|
} else if (isPdf || isOfficeFile) {
|
|
10467
|
-
label2 = `\u2714
|
|
10488
|
+
label2 = `\u2714 Viewed: ${filePath}`;
|
|
10468
10489
|
attachedBinaryPart = binPart;
|
|
10469
10490
|
} else {
|
|
10470
10491
|
let totalLines = "...";
|
|
@@ -10473,7 +10494,7 @@ ${boxBottom}`) };
|
|
|
10473
10494
|
totalLines = content.split("\n").length;
|
|
10474
10495
|
} catch (e) {
|
|
10475
10496
|
}
|
|
10476
|
-
label2 = `\u2714
|
|
10497
|
+
label2 = `\u2714 Auto-Read: ${filePath} \u2192 Lines ${finalStart} - ${Math.min(finalEnd, totalLines)} of ${totalLines}`;
|
|
10477
10498
|
taggedContextBlocks.push(textResult);
|
|
10478
10499
|
}
|
|
10479
10500
|
if (label2) {
|
|
@@ -11237,10 +11258,10 @@ ${ideErr} [/ERROR]`;
|
|
|
11237
11258
|
let label2 = "";
|
|
11238
11259
|
if (normToolName === "web_search") {
|
|
11239
11260
|
const { query, limit = 10 } = parseArgs(toolCall.args);
|
|
11240
|
-
label2 = `\u2714
|
|
11261
|
+
label2 = `\u2714 Searched: ${query}`;
|
|
11241
11262
|
} else if (normToolName === "web_scrape") {
|
|
11242
11263
|
const url = parseArgs(toolCall.args).url || "...";
|
|
11243
|
-
label2 = `\u2714
|
|
11264
|
+
label2 = `\u2714 Visited: ${url}`;
|
|
11244
11265
|
} else if (normToolName === "view_file") {
|
|
11245
11266
|
const { path: targetPath2, StartLine, EndLine, start_line, end_line, startLine, endLine } = parseArgs(toolCall.args);
|
|
11246
11267
|
const rawStart = StartLine || start_line || startLine;
|
|
@@ -11264,30 +11285,30 @@ ${ideErr} [/ERROR]`;
|
|
|
11264
11285
|
const isOfficeFile = pathLower.endsWith(".docx") || pathLower.endsWith(".doc") || pathLower.endsWith(".ppt") || pathLower.endsWith(".pptx") || pathLower.endsWith(".xls") || pathLower.endsWith(".xlsx");
|
|
11265
11286
|
const isImage = /\.(png|jpg|jpeg|webp|gif|bmp)$/.test(pathLower);
|
|
11266
11287
|
if (isPdf || isOfficeFile) {
|
|
11267
|
-
label2 = `\u2714
|
|
11288
|
+
label2 = `\u2714 Viewed: ${targetPath2}`;
|
|
11268
11289
|
} else if (isImage) {
|
|
11269
|
-
label2 = `\u2714
|
|
11290
|
+
label2 = `\u2714 Viewed: ${targetPath2}`;
|
|
11270
11291
|
} else {
|
|
11271
|
-
label2 = `\u2714
|
|
11292
|
+
label2 = `\u2714 Read: ${targetPath2} \u2192 Lines ${sLine} - ${actualEndLine} of ${totalLines}`;
|
|
11272
11293
|
}
|
|
11273
11294
|
} else if (normToolName === "list_files" || normToolName === "read_folder") {
|
|
11274
11295
|
const action = normToolName === "list_files" ? "List" : "Viewed";
|
|
11275
11296
|
const path21 = parseArgs(toolCall.args).path;
|
|
11276
|
-
label2 = `\u2714
|
|
11297
|
+
label2 = `\u2714 ${action}: ${path21 === "." ? "./" : path21}`;
|
|
11277
11298
|
} else if (normToolName === "write_file" || normToolName === "update_file") {
|
|
11278
11299
|
const action = normToolName === "write_file" ? "Created" : "Edited";
|
|
11279
|
-
label2 = `\u2714
|
|
11300
|
+
label2 = `\u2714 ${action}: ${parseArgs(toolCall.args).path || "..."}`;
|
|
11280
11301
|
} else if (normToolName === "write_pdf") {
|
|
11281
|
-
label2 = `\u2714
|
|
11302
|
+
label2 = `\u2714 Created: ${parseArgs(toolCall.args).path || "..."}`;
|
|
11282
11303
|
} else if (normToolName === "write_docx") {
|
|
11283
|
-
label2 = `\u2714
|
|
11304
|
+
label2 = `\u2714 Created: ${parseArgs(toolCall.args).path || "..."}`;
|
|
11284
11305
|
} else if (normToolName === "file_map") {
|
|
11285
|
-
label2 = `\u2714
|
|
11306
|
+
label2 = `\u2714 Get Map: ${parseArgs(toolCall.args).path || "..."}`;
|
|
11286
11307
|
} else if (normToolName.toLowerCase() === "search_keyword" || normToolName.toLowerCase() === "todo") {
|
|
11287
11308
|
label2 = "";
|
|
11288
11309
|
} else if (normToolName.toLowerCase() === "generate_image") {
|
|
11289
11310
|
const { path: argPath, outputPath, output } = parseArgs(toolCall.args);
|
|
11290
|
-
label2 = `\u2714
|
|
11311
|
+
label2 = `\u2714 Generated: ${argPath || outputPath || output || "generated_image.png"}`;
|
|
11291
11312
|
} else if (normToolName.toLowerCase() === "exec_command" || normToolName.toLowerCase() === "ask") {
|
|
11292
11313
|
label2 = "";
|
|
11293
11314
|
} else {
|
|
@@ -11657,7 +11678,7 @@ ${boxBottom}`) };
|
|
|
11657
11678
|
if (successes.length === 0) {
|
|
11658
11679
|
const errorMsg = `[TOOL RESULT]: ERROR: Failed to apply patches to [${path19.basename(absPath)}].
|
|
11659
11680
|
${failures.map((f) => ` \u2022 ${f.error}`).join("\n")}`;
|
|
11660
|
-
const errorLabel = `\u2714
|
|
11681
|
+
const errorLabel = `\u2714 Edited: ${path19.basename(absPath)}`.toUpperCase();
|
|
11661
11682
|
let terminalWidth = 115;
|
|
11662
11683
|
if (process.stdout.isTTY) {
|
|
11663
11684
|
terminalWidth = process.stdout.columns - 5 || 120;
|
|
@@ -11809,7 +11830,7 @@ ${snippet2}
|
|
|
11809
11830
|
[SYSTEM] Check the content preview for verification [/SYSTEM]`;
|
|
11810
11831
|
}
|
|
11811
11832
|
const action = normToolName === "write_file" ? "Created" : "Edited";
|
|
11812
|
-
const feedbackLabel = `\u2714
|
|
11833
|
+
const feedbackLabel = `\u2714 ${action}: ${filePath || "..."}`;
|
|
11813
11834
|
let terminalWidth = 115;
|
|
11814
11835
|
if (process.stdout.isTTY) {
|
|
11815
11836
|
terminalWidth = process.stdout.columns - 5 || 120;
|
|
@@ -11842,7 +11863,7 @@ ${snippet2}
|
|
|
11842
11863
|
}
|
|
11843
11864
|
if (normToolName === "write_file" || normToolName === "update_file") {
|
|
11844
11865
|
const action = normToolName === "write_file" ? "Write Cancelled" : "Edit Denied";
|
|
11845
|
-
const deniedLabel = `\u2714
|
|
11866
|
+
const deniedLabel = `\u2714 ${action}: ${parseArgs(toolCall.args).path || "..."}`.toUpperCase();
|
|
11846
11867
|
let terminalWidth = 115;
|
|
11847
11868
|
if (process.stdout.isTTY) {
|
|
11848
11869
|
terminalWidth = process.stdout.columns - 5 || 120;
|
|
@@ -11938,7 +11959,7 @@ ${boxBottom}`}`) };
|
|
|
11938
11959
|
matchCount = parseInt(m[1]);
|
|
11939
11960
|
}
|
|
11940
11961
|
}
|
|
11941
|
-
const postLabel = `\u2714
|
|
11962
|
+
const postLabel = `\u2714 Searched: "${keyword}" in ${file ? `"${file}"` : "./"} \u2192 ${matchCount} Match${matchCount === 1 ? "" : "es"}`;
|
|
11942
11963
|
let terminalWidth = 115;
|
|
11943
11964
|
if (process.stdout.isTTY) {
|
|
11944
11965
|
terminalWidth = process.stdout.columns - 5 || 120;
|
|
@@ -13508,7 +13529,7 @@ function App({ args = [] }) {
|
|
|
13508
13529
|
if (manual) {
|
|
13509
13530
|
setMessages((prev) => {
|
|
13510
13531
|
setCompletedIndex(prev.length + 1);
|
|
13511
|
-
return [...prev, { id: "check-" + Date.now(), role: "system", text: "
|
|
13532
|
+
return [...prev, { id: "check-" + Date.now(), role: "system", text: "[SYSTEM] Checking for updates...", isMeta: true }];
|
|
13512
13533
|
});
|
|
13513
13534
|
}
|
|
13514
13535
|
try {
|
package/package.json
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "fluxflow-cli",
|
|
3
|
+
"version": "2.13.1",
|
|
4
|
+
"date": "2026-06-26",
|
|
5
|
+
"description": "A high-fidelity agentic terminal assistant for the Flux Era.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"ai",
|
|
8
|
+
"agent",
|
|
9
|
+
"terminal",
|
|
10
|
+
"cli",
|
|
11
|
+
"gemini",
|
|
12
|
+
"ink",
|
|
13
|
+
"flux",
|
|
14
|
+
"fluxflow"
|
|
15
|
+
],
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/KushalRoyChowdhury/fluxflow-cli.git"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=20",
|
|
23
|
+
"vscode": "^1.90.0"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"README.md",
|
|
28
|
+
"package.json",
|
|
29
|
+
"ARCHITECTURE.md",
|
|
30
|
+
"TOOLS.md",
|
|
31
|
+
"UI_FEATURES.md"
|
|
32
|
+
],
|
|
33
|
+
"type": "module",
|
|
34
|
+
"bin": {
|
|
35
|
+
"fluxflow-cli": "dist/fluxflow.js",
|
|
36
|
+
"fluxflow": "dist/fluxflow.js"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"start": "tsx ./src/cli.jsx",
|
|
40
|
+
"build": "esbuild ./src/cli.jsx --bundle --platform=node --format=esm --outfile=./dist/fluxflow.js --external:react --external:ink --external:chalk --external:fs-extra --external:gradient-string --external:ink-text-input --external:ink-select-input --external:@google/genai --external:zod --external:nanoid --external:puppeteer --external:pdf-lib --external:node-pty --external:html-to-docx --external:typescript --external:ws --external:web-tree-sitter"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@google/genai": "^1.52.0",
|
|
44
|
+
"chalk": "^5.6.2",
|
|
45
|
+
"fs-extra": "^11.3.4",
|
|
46
|
+
"gradient-string": "^3.0.0",
|
|
47
|
+
"html-to-docx": "^1.8.0",
|
|
48
|
+
"ink": "^7.0.1",
|
|
49
|
+
"ink-gradient": "^4.0.1",
|
|
50
|
+
"ink-select-input": "^6.2.0",
|
|
51
|
+
"ink-spinner": "^5.0.0",
|
|
52
|
+
"ink-text-input": "^6.0.0",
|
|
53
|
+
"nanoid": "^5.1.9",
|
|
54
|
+
"node-pty": "^1.1.0",
|
|
55
|
+
"pdf-lib": "^1.17.1",
|
|
56
|
+
"puppeteer": "24.43.1",
|
|
57
|
+
"react": "^19.2.5",
|
|
58
|
+
"web-tree-sitter": "^0.25.10",
|
|
59
|
+
"ws": "^8.21.0",
|
|
60
|
+
"zod": "^4.3.6"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/react": "^19.2.14",
|
|
64
|
+
"esbuild": "^0.28.0",
|
|
65
|
+
"tsx": "^4.21.0"
|
|
66
|
+
}
|
|
67
|
+
}
|