fluxflow-cli 1.12.4 → 1.12.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/dist/fluxflow.js +20 -10
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -992,13 +992,20 @@ Your tool syntax is: '[tool:functions.ToolName(args...)]'
|
|
|
992
992
|
[tool:functions.Chat(title='<short creative title of FULL conversation in 3-5 words>')]. Consider full chat context to generate title NOT just latest message.
|
|
993
993
|
[tool:functions.Memory(action='temp', content='<summary of the user prompt & model responses ONLY FROM LATEST PROMPT UNDER 40 WORDS>. [Talked on: <date> <hour>]')]
|
|
994
994
|
|
|
995
|
-
${isMemoryEnabled ? `-- User-specific long-term memory (USE BASED ON CONVERSATION CONTEXT) --
|
|
995
|
+
${isMemoryEnabled ? `-- User-specific long-term/permanent memory (USE BASED ON CONVERSATION CONTEXT, PROACTIVE USAGE) --
|
|
996
996
|
- Add: [tool:functions.Memory(action='user', method='add', content='<string to add>. [Saved on: <date ONLY>]')]
|
|
997
997
|
- Delete: [tool:functions.Memory(action='user', method='delete', content='exact memory id')]
|
|
998
998
|
- Update: [tool:functions.Memory(action='user', method='update', content-new='string to update', content-old='exact memory id')]
|
|
999
999
|
|
|
1000
|
+
Explicit Triggers for permanent memory:
|
|
1001
|
+
- User explicitly asks to 'remember' something.
|
|
1002
|
+
- User mentions something important that should be remembered.
|
|
1003
|
+
- User provides information that could be useful for future reference.
|
|
1004
|
+
- User shares personal information or preferences.
|
|
1005
|
+
- User talks about a specific topic that should be remembered.
|
|
1006
|
+
|
|
1000
1007
|
Usage Rules:
|
|
1001
|
-
- Frequency for 'user' action:
|
|
1008
|
+
- Frequency for 'user' action: Based on explicit triggers.
|
|
1002
1009
|
- IF YOU WANT TO SAVE SOMETHING, BUT SIMILAR MEMORY ALREADY EXISTS, USE THE UPDATE METHOD NOT THE ADD METHOD` : ""}`.trim();
|
|
1003
1010
|
}
|
|
1004
1011
|
});
|
|
@@ -1087,8 +1094,8 @@ ${foundFiles.map((f) => `- ${f.name}: ${f.desc}`).join("\n")}
|
|
|
1087
1094
|
Check these first; these files > training data for project consistency. Safety rules apply` : "";
|
|
1088
1095
|
return `${nameStr}${nicknameStr}${userInstrStr}
|
|
1089
1096
|
[SYSTEM (OVERRIDES EVERYTHING)]
|
|
1090
|
-
Identity: Flux Flow (by Kushal Roy Chowdhury). Sassy, Friendly, CLI Agent. No flirting ${mode === "Flux" ? "" : ""}
|
|
1091
|
-
Mode: ${mode}${thinkingLevel !== "Fast" ? "(Thinking Mode)" : ""}. ${mode === "Flux" ? "Goal-oriented" : "Conversational & UX-focused"}
|
|
1097
|
+
Identity: Flux Flow (by Kushal Roy Chowdhury). Sassy, Friendly, Humorous, CLI Agent. No flirting ${mode === "Flux" ? "" : ""}
|
|
1098
|
+
Mode: ${mode}${thinkingLevel !== "Fast" ? "(Thinking Mode)" : ""}. ${mode === "Flux" ? "Goal-oriented, Logical" : "Conversational & UX-focused"}
|
|
1092
1099
|
CWD: ${cwdStr}.${isSystemDir ? " [PROTECTED: ASK BEFORE MODIFYING]" : ""} OS: ${osDetected}${osDetected === "Windows" && mode === "Flux" ? ". PS via CMD" : ""}
|
|
1093
1100
|
High Priority: [SYSTEM], [STEERING HINT]
|
|
1094
1101
|
|
|
@@ -3510,6 +3517,8 @@ var init_ai = __esm({
|
|
|
3510
3517
|
if (process.stdout.isTTY) {
|
|
3511
3518
|
process.stdout.write(`\x1B]0;Finalizing...\x07`);
|
|
3512
3519
|
}
|
|
3520
|
+
const USER_CONTEXT_LENGTH = 4 * (1024 * 2);
|
|
3521
|
+
const AGENT_CONTEXT_LENGTH = 4 * (1024 * 8);
|
|
3513
3522
|
const { onStatus, onMemoryUpdated, onBackgroundIncrement } = callbacks;
|
|
3514
3523
|
const { profile, thinkingLevel, mode, janitorModel, chatId, systemSettings, sessionStats } = settings;
|
|
3515
3524
|
const isMemoryEnabled = systemSettings?.memory !== false;
|
|
@@ -3517,7 +3526,7 @@ var init_ai = __esm({
|
|
|
3517
3526
|
const janitorUserMemories = persistentStorage.map((m) => `- [${m.id}]: ${m.memory}`).join("\n");
|
|
3518
3527
|
const janitorContents = history.slice(-12).filter((msg) => msg.text && !msg.text.includes("[TOOL RESULT]") && !msg.text.includes("OBSERVATION:")).map((msg) => {
|
|
3519
3528
|
let processedText = msg.text.replace(/\[tool:functions\..*?\]/g, "").replace(/<think>[\s\S]*?<\/think>/g, "").replace(/\[Prompted on:.*?\]/g, "").replace(/\[turn: continue\]/g, "").replace(/\[turn: finish\]/g, "").replace(/\[TOOL RESULTS\]/g, "").replace(/\[tool results\]/g, "").replace(/\r?\n\r?\n/g, "\n").replace(/\n\n/g, "\n").replace(/\\n\\n/g, "").trim();
|
|
3520
|
-
const limit = msg.role === "user" ?
|
|
3529
|
+
const limit = msg.role === "user" ? USER_CONTEXT_LENGTH : AGENT_CONTEXT_LENGTH;
|
|
3521
3530
|
let truncatedText = processedText.substring(0, limit);
|
|
3522
3531
|
if (processedText.length > limit) {
|
|
3523
3532
|
truncatedText += "\n... (truncated) ...";
|
|
@@ -3535,14 +3544,14 @@ var init_ai = __esm({
|
|
|
3535
3544
|
isMemoryEnabled,
|
|
3536
3545
|
true
|
|
3537
3546
|
);
|
|
3538
|
-
let agentRes = `${cleanedFullResponse.replace(/\[tool:functions\..*?\]/g, "").replace(/<think>.*<\/think>/g, "").replace(/\[Prompted on:.*?\]/g, "").replace(/\[turn: continue\]/g, "").replace(/\[turn: finish\]/g, "").replace(/\[TOOL RESULTS\]/g, "").replace(/\[tool results\]/g, "").substring(0,
|
|
3539
|
-
if (agentRes.length >
|
|
3547
|
+
let agentRes = `${cleanedFullResponse.replace(/\[tool:functions\..*?\]/g, "").replace(/<think>.*<\/think>/g, "").replace(/\[Prompted on:.*?\]/g, "").replace(/\[turn: continue\]/g, "").replace(/\[turn: finish\]/g, "").replace(/\[TOOL RESULTS\]/g, "").replace(/\[tool results\]/g, "").substring(0, AGENT_CONTEXT_LENGTH)}`;
|
|
3548
|
+
if (agentRes.length > AGENT_CONTEXT_LENGTH) {
|
|
3540
3549
|
agentRes += "\n... (truncated) ...";
|
|
3541
3550
|
}
|
|
3542
3551
|
let originalTextProcessed = agentText.replace(/\[Prompted on:.*?\]/g, "").trim();
|
|
3543
3552
|
agentRes = agentRes.replace(/\r?\n\r?\n/g, "\n").replace(/\n\n/g, "\n").replace(/\\n\\n/g, "").trim();
|
|
3544
|
-
let userPrompt = `[USER]: ${originalTextProcessed.substring(0,
|
|
3545
|
-
${originalTextProcessed.length >
|
|
3553
|
+
let userPrompt = `[USER]: ${originalTextProcessed.substring(0, USER_CONTEXT_LENGTH)}
|
|
3554
|
+
${originalTextProcessed.length > USER_CONTEXT_LENGTH ? "... (truncated) ...\n\n" : ""}
|
|
3546
3555
|
[AGENT (current turn)]: ${agentRes}`;
|
|
3547
3556
|
janitorContents.push({ role: "user", parts: [{ text: userPrompt }] });
|
|
3548
3557
|
let finalSynthesis = "";
|
|
@@ -4737,7 +4746,8 @@ function MemoryModal({ onClose }) {
|
|
|
4737
4746
|
}
|
|
4738
4747
|
});
|
|
4739
4748
|
const cleanDisplay = (text) => {
|
|
4740
|
-
|
|
4749
|
+
if (!text) return "";
|
|
4750
|
+
return text.replace(/\[Saved on: .*?\]/g, "").replace(/\\+'/g, "'").trim();
|
|
4741
4751
|
};
|
|
4742
4752
|
const s = emojiSpace(2);
|
|
4743
4753
|
return /* @__PURE__ */ React8.createElement(Box8, { flexDirection: "column", borderStyle: "round", borderColor: "gray", padding: 0, width: 80 }, /* @__PURE__ */ React8.createElement(Box8, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React8.createElement(Text8, { color: "cyan", bold: true }, "\u{1F9E0} AGENT MEMORY: LONG-TERM KNOWLEDGE")), !isMemoryOn && memories.length > 0 ? /* @__PURE__ */ React8.createElement(Box8, { paddingX: 2, paddingY: 1 }, /* @__PURE__ */ React8.createElement(Text8, { italic: true, color: "gray" }, "Memory is currently Off...")) : memories.length === 0 ? /* @__PURE__ */ React8.createElement(Box8, { paddingX: 2, paddingY: 1 }, /* @__PURE__ */ React8.createElement(Text8, { italic: true, color: "gray" }, isMemoryOn ? "Learning..." : "Memory not available...")) : /* @__PURE__ */ React8.createElement(Box8, { flexDirection: "column" }, memories.map((mem, idx) => {
|