fluxflow-cli 1.7.17 → 1.7.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fluxflow.js +74 -33
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -362,18 +362,58 @@ var init_ChatLayout = __esm({
|
|
|
362
362
|
}
|
|
363
363
|
if (msg.isHelpRecord) {
|
|
364
364
|
const commandList = [
|
|
365
|
-
{ cmd: "/
|
|
366
|
-
{ cmd: "/
|
|
367
|
-
{ cmd: "/
|
|
368
|
-
{ cmd: "/
|
|
369
|
-
{ cmd: "/
|
|
370
|
-
{ cmd: "/
|
|
371
|
-
{
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
365
|
+
{ cmd: "/quit", desc: "Exit and shutdown Flux" },
|
|
366
|
+
{ cmd: "/help", desc: "Show all available commands" },
|
|
367
|
+
{ cmd: "/clear", desc: "Clear terminal screen" },
|
|
368
|
+
{ cmd: "/resume", desc: "Load previous session" },
|
|
369
|
+
{ cmd: "/save", desc: "Force save current chat" },
|
|
370
|
+
{ cmd: "/chats", desc: "List all chat sessions" },
|
|
371
|
+
{
|
|
372
|
+
cmd: "/mode",
|
|
373
|
+
desc: "Toggle Flux/Flow modes",
|
|
374
|
+
subs: [
|
|
375
|
+
{ cmd: "flux", desc: "Enable Dev toolset" },
|
|
376
|
+
{ cmd: "flow", desc: "Enable Chat mode" }
|
|
377
|
+
]
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
cmd: "/thinking",
|
|
381
|
+
desc: "Set AI reasoning depth",
|
|
382
|
+
subs: [
|
|
383
|
+
{ cmd: "low", desc: "Fastest reasoning" },
|
|
384
|
+
{ cmd: "medium", desc: "Balanced depth" },
|
|
385
|
+
{ cmd: "high", desc: "Complex coding" },
|
|
386
|
+
{ cmd: "max", desc: "Architectural depth" },
|
|
387
|
+
{ cmd: "show", desc: "Show full thoughts" },
|
|
388
|
+
{ cmd: "hide", desc: "Show concise thoughts" }
|
|
389
|
+
]
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
cmd: "/model",
|
|
393
|
+
desc: "Switch AI model",
|
|
394
|
+
subs: [
|
|
395
|
+
{ cmd: "gemma-4-31b-it", desc: "Standard Default (Free, Recommended)" },
|
|
396
|
+
{ cmd: "gemini-3.1-pro-preview", desc: "Most Capable (Paid)" },
|
|
397
|
+
{ cmd: "gemini-3-flash-preview", desc: "Fast & Lightweight (Paid, Free limited quota)" },
|
|
398
|
+
{ cmd: "gemini-3.1-flash-lite-preview", desc: "Ultra Fast (Paid, Free limited quota)" }
|
|
399
|
+
]
|
|
400
|
+
},
|
|
401
|
+
{ cmd: "/settings", desc: "Configure system prefs" },
|
|
402
|
+
{ cmd: "/key", desc: "Manage API keys" },
|
|
403
|
+
{ cmd: "/profile", desc: "Edit developer persona" },
|
|
404
|
+
{ cmd: "/memory", desc: "Manage agent memory" },
|
|
405
|
+
{ cmd: "/stats", desc: "Show session usage" },
|
|
406
|
+
{ cmd: "/reset", desc: "Wipe all project data" },
|
|
407
|
+
{ cmd: "/about", desc: "Project info & credits" },
|
|
408
|
+
{ cmd: "/changelog", desc: "View latest updates" },
|
|
409
|
+
{
|
|
410
|
+
cmd: "/update",
|
|
411
|
+
desc: "Check/Install updates",
|
|
412
|
+
subs: [
|
|
413
|
+
{ cmd: "check", desc: "Check for new version" },
|
|
414
|
+
{ cmd: "latest", desc: "Install latest release" }
|
|
415
|
+
]
|
|
416
|
+
}
|
|
377
417
|
];
|
|
378
418
|
return /* @__PURE__ */ React2.createElement(Box2, { marginBottom: 1, paddingX: 1, width: "100%" }, /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: 2, paddingY: 1, width: "100%" }, /* @__PURE__ */ React2.createElement(Text2, { color: "magenta", bold: true, underline: true }, "\u{1F4DC} COMMAND REFERENCE"), /* @__PURE__ */ React2.createElement(Box2, { flexDirection: "column", marginTop: 1 }, commandList.map((c, i) => /* @__PURE__ */ React2.createElement(Box2, { key: i, flexDirection: "row" }, /* @__PURE__ */ React2.createElement(Box2, { width: 15 }, /* @__PURE__ */ React2.createElement(Text2, { color: "cyan", bold: true }, c.cmd)), /* @__PURE__ */ React2.createElement(Text2, { color: "gray" }, " - ", c.desc))))));
|
|
379
419
|
}
|
|
@@ -725,9 +765,9 @@ tool:functions.tool_name(arguments)
|
|
|
725
765
|
2. Web Scrape: tool:functions.web_scrape(url="<url>"). provides detail from a URL.
|
|
726
766
|
${mode === "Flux" ? `
|
|
727
767
|
- DEV & FILE TOOLS (Available in FLUX MODE ONLY) -
|
|
728
|
-
1. View File: tool:functions.view_file(path="relative/path", start_line=number, end_line=number). Reads file content. Auto-truncates at 500 lines unless start_line and end_line are provided. YOU CAN ALSO USE THIS TOOL TO SEE IMAGES AND DOCUMENTS IN A FOLDER. IF USER ASK HOW TO SHARE A IMAGE TELL THEM TO PASTE THE IMAGE IN THE CURRENT FOLDER.
|
|
768
|
+
1. View File: tool:functions.view_file(path="relative/path", start_line=number, end_line=number). Reads file content. Auto-truncates at 500 lines unless start_line and end_line are provided. YOU CAN ALSO USE THIS TOOL TO SEE IMAGES AND DOCUMENTS IN A FOLDER. IF USER ASK HOW TO SHARE A IMAGE TELL THEM TO PASTE THE IMAGE IN THE CURRENT FOLDER. IF USER GIVES A IMAGE/DOCUMENT, YOU MUST SEE IT FIRST BEFORE DOING ANYTHING.
|
|
729
769
|
2. List Files: tool:functions.list_files(path="relative/path"). Lists content of a directory.
|
|
730
|
-
3. Read Folder: tool:functions.read_folder(path="relative/path"). Detailed stats of a directory.
|
|
770
|
+
3. Read Folder: tool:functions.read_folder(path="relative/path"). Detailed stats of a directory. Prefer this one over list_files.
|
|
731
771
|
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. Escape your double quotes '"' using backslash.
|
|
732
772
|
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.
|
|
733
773
|
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. Keep generous margins for better redability.
|
|
@@ -739,9 +779,9 @@ ${mode === "Flux" ? `
|
|
|
739
779
|
- Supported Styles: background-color, color, font-family, font-size (use 'pt'), font-style (italic), font-weight (bold), margin, text-align, text-shadow.
|
|
740
780
|
9. Execution: tool:functions.exec_command(command="terminal command"). Runs a shell command. Use ask tool to confirm before executing any destructive or irreversible operations.
|
|
741
781
|
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
782
|
+
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.
|
|
783
|
+
NEVER GUESS A CODE, IF UNSURE READ THE FILE FIRST BEFORE EDITING IT.
|
|
784
|
+
**CRITICAL POLICY: WHEN WRITING/UPDATING FILES, ALWAYS USE ACTUAL NEW LINE CONTROL CHARACTER (LF) FOR LINE BREAKS.**`.trim() : `
|
|
745
785
|
- 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()}
|
|
746
786
|
-----------------
|
|
747
787
|
|
|
@@ -789,9 +829,9 @@ var thinking_prompts_default;
|
|
|
789
829
|
var init_thinking_prompts = __esm({
|
|
790
830
|
"src/data/thinking_prompts.json"() {
|
|
791
831
|
thinking_prompts_default = {
|
|
792
|
-
Max: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: MAX\nThink Step by Step in Chain-of-Thought. Provide the thinking in <think>...</think> block, length given. Thinking should be structured in this format:\n\n<think>\n\\n\\n\n**Heading**\n\\n\\n\nSELF-MONOLOGUE\n\\n\\n\n**Heading**\n\\n\\n\nSelf MONOLOGUE\ncontinue.\n\\n\\n\n</think>\n\nRULES OF THINKING: -HEADING COUNT SHOULD BE
|
|
793
|
-
High: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: HIGH\nThink Step by Step in Chain-of-Thought. Provide the thinking in <think>...</think> block, length given. Thinking should be structured in this format:\n\n<think>\n\\n\\n\n**Heading**\n\\n\\n\nSELF-MONOLOGUE\n\\n\\n\n**Heading**\n\\n\\n\nSelf MONOLOGUE\ncontinue.\n\\n\\n\n</think>\n\nnRULES OF THINKING: -HEADING COUNT SHOULD BE
|
|
794
|
-
Medium: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: MEDIUM\nThink Step by Step in Chain-of-Thought. Provide the thinking in <think>...</think> block, length given. Thinking should be structured in this format:\n\n<think>\n\\n\\n\n**Heading**\n\\n\\n\nSELF-MONOLOGUE\n\\n\\n\n**Heading**\n\\n\\n\nSelf MONOLOGUE\ncontinue.\n\\n\\n\n</think>\n\nnRULES OF THINKING: -HEADING COUNT SHOULD BE 2 - 4. SELF-MONOLOGUE SHOULD BE SHORT YET THROROUGH. MONOLOGUES **MUST** BE **
|
|
832
|
+
Max: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: MAX\nThink Step by Step in Chain-of-Thought. Provide the thinking in <think>...</think> block, length given. Thinking should be structured in this format:\n\n<think>\n\\n\\n\n**Heading**\n\\n\\n\nSELF-MONOLOGUE\n\\n\\n\n**Heading**\n\\n\\n\nSelf MONOLOGUE\ncontinue.\n\\n\\n\n</think>\n\nRULES OF THINKING: -HEADING COUNT SHOULD BE 8 - 16. SELF-MONOLOGUE SHOULD BE DETAILED AND THROROUGH. MONOLOGUES **MUST** BE **8 - 10** LINES EACH REGARDLESS OF QUERY COMPLEXITY.\n- YOU MUST **NOT** EXCREED YOUR ALLOTED THINKING BUDGET UNDER **ANY** CIRCUMSTANCES.\n- IF THE QUERY IS SIMPLE, YOU CAN KEEP HEADING COUNT LESS THAN MIN COUNT.\n- CONSIDER ABOUT EDGE CASES BEFORE COMMITING.\n- SHOULD PLAN ARCHITECHTURALLY.\n- SHOULD PLAN LOGICALLY.\n\n-- END THINKING INSTRUCTIONS --",
|
|
833
|
+
High: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: HIGH\nThink Step by Step in Chain-of-Thought. Provide the thinking in <think>...</think> block, length given. Thinking should be structured in this format:\n\n<think>\n\\n\\n\n**Heading**\n\\n\\n\nSELF-MONOLOGUE\n\\n\\n\n**Heading**\n\\n\\n\nSelf MONOLOGUE\ncontinue.\n\\n\\n\n</think>\n\nnRULES OF THINKING: -HEADING COUNT SHOULD BE 4 - 8. SELF-MONOLOGUE SHOULD BE DETAILED AND THROROUGH. MONOLOGUES **MUST** BE **4 - 8** LINES EACH REGARDLESS OF QUERY COMPLEXITY.\n- YOU MUST **NOT** EXCREED YOUR ALLOTED THINKING BUDGET UNDER **ANY** CIRCUMSTANCES.\n- IF THE QUERY IS SIMPLE, YOU CAN KEEP HEADING COUNT LESS THAN MIN COUNT.\n- CONSIDER ABOUT EDGE CASES BEFORE COMMITING.\n\n-- END THINKING INSTRUCTIONS --",
|
|
834
|
+
Medium: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: MEDIUM\nThink Step by Step in Chain-of-Thought. Provide the thinking in <think>...</think> block, length given. Thinking should be structured in this format:\n\n<think>\n\\n\\n\n**Heading**\n\\n\\n\nSELF-MONOLOGUE\n\\n\\n\n**Heading**\n\\n\\n\nSelf MONOLOGUE\ncontinue.\n\\n\\n\n</think>\n\nnRULES OF THINKING: -HEADING COUNT SHOULD BE 2 - 4. SELF-MONOLOGUE SHOULD BE SHORT YET THROROUGH. MONOLOGUES **MUST** BE **2 - 4** LINES EACH REGARDLESS OF QUERY COMPLEXITY.\n- YOU MUST **NOT** EXCREED YOUR ALLOTED THINKING BUDGET UNDER **ANY** CIRCUMSTANCES.\n- IF THE QUERY IS SIMPLE, YOU CAN KEEP HEADING COUNT LESS THAN MIN COUNT.\n- LITTLE TO NO THINKING IS PREFFERED IF QUERY IS CONVERSATIONAL AND SIMPLE.\n\n-- END THINKING INSTRUCTIONS --",
|
|
795
835
|
Minimal: "-- START THINKING INSTRUCTIONS --\nEFFORT_LEVEL: LOW\nThink Step by Step in Chain-of-Thought. Provide the thinking in <think>...</think> block, length given. Thinking should be structured in this format:\n\n<think>\n\\n\\n\n**Heading**\n\\n\\n\nSELF-MONOLOGUE\n\\n\\n\n**Heading**\n\\n\\n\nSelf MONOLOGUE\ncontinue.\n\\n\\n\n</think>\n\nnRULES OF THINKING: -HEADING COUNT SHOULD BE 0 - 2. SELF-MONOLOGUE SHOULD BE SHORT AND CONCISE. MONOLOGUES **MUST** BE **1 - 2** LINES EACH REGARDLESS OF QUERY COMPLEXITY.\n- YOU MUST **NOT** EXCREED YOUR ALLOTED THINKING BUDGET UNDER **ANY** CIRCUMSTANCES.\n- IF THE QUERY IS SIMPLE, YOU CAN KEEP HEADING COUNT LESS THAN MIN COUNT.\n- NO THINKING IS PREFFERED IF QUERY IS CONVERSATIONAL AND SIMPLE.\n\n-- END THINKING INSTRUCTIONS --"
|
|
796
836
|
};
|
|
797
837
|
}
|
|
@@ -1317,7 +1357,7 @@ Snippet: ${snippet}`;
|
|
|
1317
1357
|
const finalResults = results.join("\n\n");
|
|
1318
1358
|
const toolLogDir = path6.join(LOGS_DIR, "tools");
|
|
1319
1359
|
if (!fs6.existsSync(toolLogDir)) fs6.mkdirSync(toolLogDir, { recursive: true });
|
|
1320
|
-
fs6.appendFileSync(path6.join(toolLogDir, "search-results.log"), `SEARCH ${(/* @__PURE__ */ new Date()).
|
|
1360
|
+
fs6.appendFileSync(path6.join(toolLogDir, "search-results.log"), `SEARCH ${(/* @__PURE__ */ new Date()).toLocaleString()} - Query: [${query}]. Count: ${results.length}.
|
|
1321
1361
|
Content:
|
|
1322
1362
|
${finalResults}
|
|
1323
1363
|
|
|
@@ -1415,7 +1455,7 @@ var init_web_scrape = __esm({
|
|
|
1415
1455
|
const cleanedHtml = htmlContent.replace(/\s+/g, " ").replace(/>\s+</g, "><").trim().substring(0, 3e4);
|
|
1416
1456
|
const toolLogDir = path7.join(LOGS_DIR, "tools");
|
|
1417
1457
|
if (!fs7.existsSync(toolLogDir)) fs7.mkdirSync(toolLogDir, { recursive: true });
|
|
1418
|
-
fs7.appendFileSync(path7.join(toolLogDir, "search-scraped.log"), `PUPPETEER ${(/* @__PURE__ */ new Date()).
|
|
1458
|
+
fs7.appendFileSync(path7.join(toolLogDir, "search-scraped.log"), `PUPPETEER ${(/* @__PURE__ */ new Date()).toLocaleString()} - URL: [${url}]. Length: ${cleanedHtml.length}.
|
|
1419
1459
|
Content:
|
|
1420
1460
|
${cleanedHtml}${htmlContent.length > 3e4 ? "\n\n[TRUNCATED AT 30K CHARS]" : ""}
|
|
1421
1461
|
|
|
@@ -1463,7 +1503,7 @@ var init_memory = __esm({
|
|
|
1463
1503
|
if (!content) return "ERROR: Missing 'content' for temp memory.";
|
|
1464
1504
|
const tempStorage = readEncryptedJson(TEMP_MEM_FILE, {});
|
|
1465
1505
|
if (!tempStorage[chatId]) tempStorage[chatId] = [];
|
|
1466
|
-
const MAX_CHARS =
|
|
1506
|
+
const MAX_CHARS = 2500 * 4;
|
|
1467
1507
|
let currentTotalLength = tempStorage[chatId].reduce((acc, m) => acc + m.length, 0);
|
|
1468
1508
|
while (tempStorage[chatId].length > 0 && currentTotalLength + content.length > MAX_CHARS) {
|
|
1469
1509
|
const removed = tempStorage[chatId].shift();
|
|
@@ -1477,7 +1517,7 @@ var init_memory = __esm({
|
|
|
1477
1517
|
const memories = readEncryptedJson(MEMORIES_FILE, []);
|
|
1478
1518
|
if (method === "add") {
|
|
1479
1519
|
if (!content) return "ERROR: Missing 'content' for memory addition.";
|
|
1480
|
-
const MAX_CHARS =
|
|
1520
|
+
const MAX_CHARS = 2e3 * 4;
|
|
1481
1521
|
let currentTotalLength = memories.reduce((acc, m) => acc + (m.memory?.length || 0), 0);
|
|
1482
1522
|
while (memories.length > 0 && currentTotalLength + content.length > MAX_CHARS) {
|
|
1483
1523
|
const removed = memories.shift();
|
|
@@ -2463,6 +2503,7 @@ USER_PROMPT: ${agentText}`.trim();
|
|
|
2463
2503
|
}
|
|
2464
2504
|
if (TERMINATION_SIGNAL) {
|
|
2465
2505
|
yield { type: "status", content: "Termination Signal Received." };
|
|
2506
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
2466
2507
|
break;
|
|
2467
2508
|
}
|
|
2468
2509
|
if (steeringCallback) {
|
|
@@ -2500,10 +2541,10 @@ USER_PROMPT: ${agentText}`.trim();
|
|
|
2500
2541
|
let targetModel = modelName;
|
|
2501
2542
|
if (retryCount === 5) {
|
|
2502
2543
|
targetModel = "gemini-3-flash-preview";
|
|
2503
|
-
yield { type: "model_update", content: "Trying with fallback model
|
|
2544
|
+
yield { type: "model_update", content: "Trying with fallback model" };
|
|
2504
2545
|
} else if (retryCount >= 6) {
|
|
2505
2546
|
targetModel = "gemini-3.1-flash-lite-preview";
|
|
2506
|
-
yield { type: "model_update", content: "Trying with fallback model
|
|
2547
|
+
yield { type: "model_update", content: "Trying with fallback model lite" };
|
|
2507
2548
|
} else if (retryCount > 0) {
|
|
2508
2549
|
yield { type: "model_update", content: null };
|
|
2509
2550
|
}
|
|
@@ -2522,7 +2563,7 @@ USER_PROMPT: ${agentText}`.trim();
|
|
|
2522
2563
|
yield { type: "status", content: "Working..." };
|
|
2523
2564
|
} catch (err) {
|
|
2524
2565
|
const errMsg = err.status || err.error && err.error.message || String(err);
|
|
2525
|
-
const date = (/* @__PURE__ */ new Date()).
|
|
2566
|
+
const date = (/* @__PURE__ */ new Date()).toLocaleString();
|
|
2526
2567
|
const agentErrDir = path16.join(LOGS_DIR, "agent");
|
|
2527
2568
|
if (!fs16.existsSync(agentErrDir)) fs16.mkdirSync(agentErrDir, { recursive: true });
|
|
2528
2569
|
fs16.appendFileSync(path16.join(agentErrDir, "error.log"), `ERROR [${date}]: ${errMsg}
|
|
@@ -2742,7 +2783,7 @@ ${boxBottom}
|
|
|
2742
2783
|
const hasFinish = /\[\s*(turn\s*:)?\s*finish\s*\]/i.test(turnText.toLowerCase());
|
|
2743
2784
|
const shouldContinue = toolCallPointer > 0;
|
|
2744
2785
|
yield { type: "status", content: "Working..." };
|
|
2745
|
-
const cleanedTurnText = turnText.replace(
|
|
2786
|
+
const cleanedTurnText = turnText.replace(/\[\s*(turn\s*:)?\s*(continue|finish)\s*\]/gi, "").trim();
|
|
2746
2787
|
let isActuallyFinished = hasFinish && !shouldContinue;
|
|
2747
2788
|
if (isActuallyFinished) {
|
|
2748
2789
|
yield { type: "status", content: "Finalizing..." };
|
|
@@ -2779,7 +2820,7 @@ ${boxBottom}
|
|
|
2779
2820
|
const parts = janitorResult.candidates?.[0]?.content?.parts;
|
|
2780
2821
|
if (parts && parts[1]?.text) {
|
|
2781
2822
|
finalSynthesis = parts[1].text;
|
|
2782
|
-
const date = (/* @__PURE__ */ new Date()).
|
|
2823
|
+
const date = (/* @__PURE__ */ new Date()).toLocaleString();
|
|
2783
2824
|
const janitorLogDir = path16.join(LOGS_DIR, "janitor");
|
|
2784
2825
|
if (!fs16.existsSync(janitorLogDir)) {
|
|
2785
2826
|
fs16.mkdirSync(janitorLogDir, { recursive: true });
|
|
@@ -2798,7 +2839,7 @@ ${boxBottom}
|
|
|
2798
2839
|
for (const janitorToolCall of janitorToolCalls) {
|
|
2799
2840
|
const toolContext = { chatId, sessionId: chatId, history };
|
|
2800
2841
|
const result = await dispatchTool(janitorToolCall.toolName, janitorToolCall.args, toolContext);
|
|
2801
|
-
const date = (/* @__PURE__ */ new Date()).
|
|
2842
|
+
const date = (/* @__PURE__ */ new Date()).toLocaleString();
|
|
2802
2843
|
const janitorLogDir = path16.join(LOGS_DIR, "janitor");
|
|
2803
2844
|
fs16.appendFileSync(path16.join(janitorLogDir, "debug.log"), `DEBUG [${date}]: RESULT [${janitorToolCall.toolName}]: ${result}
|
|
2804
2845
|
`);
|
|
@@ -2807,7 +2848,7 @@ ${boxBottom}
|
|
|
2807
2848
|
}
|
|
2808
2849
|
}
|
|
2809
2850
|
} catch (janitorErr) {
|
|
2810
|
-
const date = (/* @__PURE__ */ new Date()).
|
|
2851
|
+
const date = (/* @__PURE__ */ new Date()).toLocaleString();
|
|
2811
2852
|
const janitorErrDir = path16.join(LOGS_DIR, "janitor");
|
|
2812
2853
|
if (!fs16.existsSync(janitorErrDir)) {
|
|
2813
2854
|
fs16.mkdirSync(janitorErrDir, { recursive: true });
|
|
@@ -4732,8 +4773,8 @@ var init_app = __esm({
|
|
|
4732
4773
|
init_text();
|
|
4733
4774
|
SESSION_START_TIME = Date.now();
|
|
4734
4775
|
CHANGELOG_URL = "https://fluxflow-cli.onrender.com/changelog.html";
|
|
4735
|
-
versionFluxflow = "1.7.
|
|
4736
|
-
updatedOn = "2026-05-
|
|
4776
|
+
versionFluxflow = "1.7.19";
|
|
4777
|
+
updatedOn = "2026-05-06";
|
|
4737
4778
|
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(
|
|
4738
4779
|
CommandMenu,
|
|
4739
4780
|
{
|