fluxflow-cli 1.9.22 → 1.9.24
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 +113 -55
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -950,20 +950,21 @@ var init_thinking_prompts = __esm({
|
|
|
950
950
|
thinking_prompts_default = {
|
|
951
951
|
Max: `EFFORT_LEVEL: MAX
|
|
952
952
|
Think in a continuous, fluid analytical monologue within the <think>...</think> block. Do NOT use headings, bullet points, or artificial sections. Engage in a deep "Stream of Consciousness" that follows this cognitive path:
|
|
953
|
-
Deep Analysis: Deconstruct the request into its core technical and logic requirements
|
|
954
|
-
Hypothesis & Test: Propose multiple solutions mentally and critique them for edge cases or security risks
|
|
955
|
-
Architectural Planning: Consider the long-term impact on the project structure and maintainability
|
|
956
|
-
Refinement: Iterate on the chosen path until it is bulletproof
|
|
953
|
+
Deep Analysis: Deconstruct the request into its core technical and logic requirements
|
|
954
|
+
Hypothesis & Test: Propose multiple solutions mentally and critique them for edge cases or security risks
|
|
955
|
+
Architectural Planning: Consider the long-term impact on the project structure and maintainability
|
|
956
|
+
Refinement: Iterate on the chosen path until it is bulletproof
|
|
957
957
|
RULES:
|
|
958
|
-
- NO HEADINGS. Just a solid, stable analytical monologue
|
|
959
|
-
- Be thorough and exhaustive. Explore the 'why' behind every decision, depth and nuances
|
|
958
|
+
- NO HEADINGS. Just a solid, stable analytical monologue
|
|
959
|
+
- Be thorough and exhaustive. Explore the 'why' behind every decision, depth and nuances
|
|
960
960
|
Question your own logic as you go,
|
|
961
961
|
|
|
962
|
-
DO NOT GET STUCK IN RE-VERIFICATION LOOP
|
|
962
|
+
DO NOT GET STUCK IN RE-VERIFICATION LOOP
|
|
963
963
|
- MANDATORY THINKING: You MUST engage in full reasoning regardless of perceived simplicity.`,
|
|
964
|
-
High: "EFFORT_LEVEL: HIGH\nThink in a stable, analytical monologue within the <think>...</think> block. Avoid headings or structured formatting. Your thinking should be a continuous stream of logical deduction:\nAnalyze the immediate task and its dependencies
|
|
965
|
-
Medium: "EFFORT_LEVEL: MEDIUM\nThink in a concise, stable monologue within the <think>...</think> block. No headings needed. Focus on the core logic required to solve the task efficiently:\nIdentify the most direct path to the solution
|
|
966
|
-
Minimal: "EFFORT_LEVEL: LOW\nThink in a brief, focused monologue within the <think>...</think> block. No headings. Just a quick mental check before acting:\nVerify the objective
|
|
964
|
+
High: "EFFORT_LEVEL: HIGH\nThink in a stable, analytical monologue within the <think>...</think> block. Avoid headings or structured formatting. Your thinking should be a continuous stream of logical deduction:\nAnalyze the immediate task and its dependencies\nMentally simulate the execution to identify potential failure points\nStructure a precise plan that addresses both primary goals and secondary constraints\nRULES:\n- NO HEADINGS. Maintain a fluid monologue style\n- Be detailed and rigorous in your self-questioning\n- Focus on accuracy, technical correctness, depth and nuances\n- MANDATORY THINKING: You MUST enter reasoning to verify the path forward.",
|
|
965
|
+
Medium: "EFFORT_LEVEL: MEDIUM\nThink in a concise, stable monologue within the <think>...</think> block. No headings needed. Focus on the core logic required to solve the task efficiently:\nIdentify the most direct path to the solution\nBriefly consider and discard obvious alternatives\nConfirm the plan meets the user's immediate requirements\nRULES:\n- NO HEADINGS. Keep it as a simple, logical stream\n- Be efficient. Spend energy only on what matters for the task\n- MANDATORY THINKING: Engage in a baseline mental check for all technical tasks.",
|
|
966
|
+
Minimal: "EFFORT_LEVEL: LOW\nThink in a brief, focused monologue within the <think>...</think> block. No headings. Just a quick mental check before acting:\nVerify the objective\nNote the target files/tools\nRULES:\n- NO HEADINGS. Just a few lines of clear, linear thought\n- Use minimal thinking for simple or conversational requests",
|
|
967
|
+
Off: "EFFORT_LEVEL: FAST\nNo internal thinking process required. Respond directly"
|
|
967
968
|
};
|
|
968
969
|
}
|
|
969
970
|
});
|
|
@@ -989,6 +990,7 @@ ${parts.join("\n\n")}
|
|
|
989
990
|
};
|
|
990
991
|
getSystemInstruction = (profile, thinkingLevel, mode, systemSettings, isMemoryEnabled = true) => {
|
|
991
992
|
let levelKey = thinkingLevel;
|
|
993
|
+
if (thinkingLevel === "Fast") levelKey = "Off";
|
|
992
994
|
if (thinkingLevel === "Low") levelKey = "Minimal";
|
|
993
995
|
if (thinkingLevel === "xHigh" || thinkingLevel === "Max") levelKey = "Max";
|
|
994
996
|
const thinkingConfig = thinking_prompts_default[levelKey] || thinking_prompts_default["Medium"];
|
|
@@ -1026,30 +1028,30 @@ ${parts.join("\n\n")}
|
|
|
1026
1028
|
${foundFiles.map((f) => `- ${f.name}: ${f.desc}`).join("\n")}
|
|
1027
1029
|
Check these first; these files > training data for project consistency. Safety rules still apply` : "";
|
|
1028
1030
|
return `${nameStr}${nicknameStr}${userInstrStr}
|
|
1029
|
-
|
|
1031
|
+
[SYSTEM (OVERRIDES EVERYTHING)]
|
|
1030
1032
|
Identity: Flux Flow (by Kushal Roy Chowdhury). Sassy, Friendly CLI Agent. No flirting
|
|
1031
1033
|
Mode: ${mode}. ${mode === "Flux" ? "Goal-oriented" : "Conversational & UX-focused"}
|
|
1032
|
-
CWD: ${cwdStr}.${isSystemDir ? " [PROTECTED: ASK BEFORE MODIFYING]" : ""} OS: ${osDetected}${osDetected === "Windows" ? ".
|
|
1033
|
-
High Priority: [SYSTEM]
|
|
1034
|
+
CWD: ${cwdStr}.${isSystemDir ? " [PROTECTED: ASK BEFORE MODIFYING]" : ""} OS: ${osDetected}${osDetected === "Windows" ? ". PS via CMD" : ""}
|
|
1035
|
+
High Priority: [SYSTEM], [STEERING HINT]
|
|
1034
1036
|
|
|
1035
1037
|
-- THINKING RULES --
|
|
1036
1038
|
${thinkingConfig}
|
|
1037
|
-
|
|
1039
|
+
${!thinkingLevel === "Fast" ? `***THINKING POLICY***
|
|
1038
1040
|
- Always use <think> ... </think> before responding
|
|
1039
1041
|
- Never skip thinking, even for simple tasks, code, or greetings
|
|
1040
|
-
- Never jump to responses
|
|
1041
|
-
|
|
1042
|
+
- Never jump to responses, regardless of task complexity
|
|
1043
|
+
` : ""}
|
|
1042
1044
|
${TOOL_PROTOCOL(mode)}
|
|
1043
1045
|
${projectContextBlock}
|
|
1044
1046
|
|
|
1045
1047
|
-- MEMORY RULES --
|
|
1046
1048
|
- Memory: ${isMemoryEnabled ? "Use memories to subtly personalize" : "OFF (tell user to enable in /settings if needed)"}
|
|
1047
|
-
- Time: Logs are timestamped. RELATIVE TIME REFERENCE e.g. few mins ago
|
|
1049
|
+
- Time: Logs are timestamped. RELATIVE TIME REFERENCE e.g. few mins ago <dd/mm/yyyy>
|
|
1048
1050
|
|
|
1049
1051
|
-- SECURITY RULES --
|
|
1050
|
-
- EXTERNAL ACCESS: ${systemSettings.allowExternalAccess ? "ENABLED" : "RESTRICTED
|
|
1051
|
-
-
|
|
1052
|
-
-
|
|
1052
|
+
- EXTERNAL ACCESS: ${systemSettings.allowExternalAccess ? "ENABLED" : "RESTRICTED CWD only"}
|
|
1053
|
+
- Sensitive files? Ask before Read
|
|
1054
|
+
- [SYSTEM] >>> [USER]
|
|
1053
1055
|
|
|
1054
1056
|
-- FORMATTING --
|
|
1055
1057
|
- Clean, concise responses
|
|
@@ -1060,7 +1062,7 @@ ${projectContextBlock}
|
|
|
1060
1062
|
- End with [turn: continue] for more steps or [turn: finish] when done
|
|
1061
1063
|
- Stack tools if needed, but always end with [turn: continue] if called any tools
|
|
1062
1064
|
TO END THE LOOP, **MUST** WRITE [turn: finish] AT END OF RESPONSE
|
|
1063
|
-
|
|
1065
|
+
[/SYSTEM]`.trim();
|
|
1064
1066
|
};
|
|
1065
1067
|
getJanitorInstruction = (originalText, agentRaws, userMemories = "", isMemoryEnabled = true, needTitle = true) => {
|
|
1066
1068
|
let agentRes = `${agentRaws.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, 3500)}`;
|
|
@@ -2129,6 +2131,11 @@ var init_exec_command = __esm({
|
|
|
2129
2131
|
continue;
|
|
2130
2132
|
}
|
|
2131
2133
|
if (char === "\\") {
|
|
2134
|
+
if (command[i + 1] === " ") {
|
|
2135
|
+
current += " ";
|
|
2136
|
+
i++;
|
|
2137
|
+
continue;
|
|
2138
|
+
}
|
|
2132
2139
|
current += char;
|
|
2133
2140
|
isEscaped = true;
|
|
2134
2141
|
continue;
|
|
@@ -2142,6 +2149,18 @@ var init_exec_command = __esm({
|
|
|
2142
2149
|
if (char === '"' || char === "'") {
|
|
2143
2150
|
inQuote = char;
|
|
2144
2151
|
current += char;
|
|
2152
|
+
} else if (char === ";" && !current.includes("://")) {
|
|
2153
|
+
if (current.length > 0) {
|
|
2154
|
+
tokens.push(current);
|
|
2155
|
+
current = "";
|
|
2156
|
+
}
|
|
2157
|
+
tokens.push("&");
|
|
2158
|
+
} else if (char === "|" && !current.includes("://")) {
|
|
2159
|
+
if (current.length > 0) {
|
|
2160
|
+
tokens.push(current);
|
|
2161
|
+
current = "";
|
|
2162
|
+
}
|
|
2163
|
+
tokens.push("|");
|
|
2145
2164
|
} else if (/\s/.test(char)) {
|
|
2146
2165
|
if (current.length > 0) {
|
|
2147
2166
|
tokens.push(current);
|
|
@@ -2156,26 +2175,71 @@ var init_exec_command = __esm({
|
|
|
2156
2175
|
tokens.push(current);
|
|
2157
2176
|
}
|
|
2158
2177
|
const looksLikePath = (str) => {
|
|
2159
|
-
if (!str.includes("/")
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
const firstSlashIdx = str.indexOf("/");
|
|
2163
|
-
const lastSlashIdx = str.lastIndexOf("/");
|
|
2164
|
-
if (firstSlashIdx === 0 && lastSlashIdx === 0) {
|
|
2178
|
+
if (!str.includes("/")) return false;
|
|
2179
|
+
if (/^(https?|file|ftp):\/\//i.test(str)) return false;
|
|
2180
|
+
if (str.startsWith("/") && (str.match(/\//g) || []).length === 1) {
|
|
2165
2181
|
return false;
|
|
2166
2182
|
}
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
const hasExtension = /\.[a-zA-Z0-9_-]+$/.test(str);
|
|
2171
|
-
return hasDriveLetter || hasRelativeStart || hasMultipleSlashes || hasExtension;
|
|
2183
|
+
if (/\s\/|\/\s/.test(str)) return false;
|
|
2184
|
+
if (/[\(\)\{\}\;\<\>\=\'\"]/.test(str)) return false;
|
|
2185
|
+
return true;
|
|
2172
2186
|
};
|
|
2173
|
-
const
|
|
2174
|
-
|
|
2187
|
+
const translatedTokens = [];
|
|
2188
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
2189
|
+
const token = tokens[i];
|
|
2190
|
+
if (token === "|" && tokens[i + 1] === "tee") {
|
|
2191
|
+
if (tokens[i + 2] === "-a") {
|
|
2192
|
+
translatedTokens.push(">>");
|
|
2193
|
+
i += 2;
|
|
2194
|
+
} else {
|
|
2195
|
+
translatedTokens.push(">");
|
|
2196
|
+
i += 1;
|
|
2197
|
+
}
|
|
2198
|
+
continue;
|
|
2199
|
+
}
|
|
2200
|
+
if (token === "|" && tokens[i + 1] === "cat" && tokens[i + 2] === ">") {
|
|
2201
|
+
translatedTokens.push(">");
|
|
2202
|
+
i += 2;
|
|
2203
|
+
continue;
|
|
2204
|
+
}
|
|
2205
|
+
if (token === "|") {
|
|
2206
|
+
const nextToken = tokens[i + 1];
|
|
2207
|
+
if (nextToken) {
|
|
2208
|
+
const nextUnquoted = nextToken.replace(/^['"]|['"]$/g, "");
|
|
2209
|
+
const isWritableFile = /\.(txt|md|json|log|csv|html|css|py|js|xml|yaml|yml|pdf|docx|pptx|xlsx)$/i.test(nextUnquoted);
|
|
2210
|
+
if (looksLikePath(nextUnquoted) && isWritableFile) {
|
|
2211
|
+
translatedTokens.push(">");
|
|
2212
|
+
continue;
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
}
|
|
2216
|
+
translatedTokens.push(token);
|
|
2217
|
+
}
|
|
2218
|
+
let inEchoArguments = false;
|
|
2219
|
+
const processedTokens = translatedTokens.map((token) => {
|
|
2220
|
+
if (token === "echo") {
|
|
2221
|
+
inEchoArguments = true;
|
|
2222
|
+
return token;
|
|
2223
|
+
}
|
|
2224
|
+
const controlOperators = [">", ">>", "<", "&", "&&", "|", "||", ";"];
|
|
2225
|
+
if (controlOperators.includes(token)) {
|
|
2226
|
+
inEchoArguments = false;
|
|
2227
|
+
}
|
|
2228
|
+
const hasOuterQuotes = /^['"]|['"]$/.test(token);
|
|
2229
|
+
let processed = token;
|
|
2230
|
+
if (inEchoArguments && hasOuterQuotes) {
|
|
2231
|
+
processed = token.replace(/^['"]|['"]$/g, "");
|
|
2232
|
+
}
|
|
2233
|
+
const currentHasOuterQuotes = /^['"]|['"]$/.test(processed);
|
|
2234
|
+
const unquoted = processed.replace(/^['"]|['"]$/g, "");
|
|
2175
2235
|
if (looksLikePath(unquoted)) {
|
|
2176
|
-
|
|
2236
|
+
processed = processed.replace(/\//g, "\\");
|
|
2177
2237
|
}
|
|
2178
|
-
|
|
2238
|
+
const finalUnquoted = processed.replace(/^['"]|['"]$/g, "");
|
|
2239
|
+
if (finalUnquoted.includes(" ") && !currentHasOuterQuotes) {
|
|
2240
|
+
processed = `"${finalUnquoted}"`;
|
|
2241
|
+
}
|
|
2242
|
+
return processed;
|
|
2179
2243
|
});
|
|
2180
2244
|
return processedTokens.join(" ");
|
|
2181
2245
|
};
|
|
@@ -2223,18 +2287,18 @@ ${stderr}`);
|
|
|
2223
2287
|
if (code !== 0) result.push(`EXIT CODE: ${code}`);
|
|
2224
2288
|
const finalOutput = result.join("\n\n") || "Command executed with no output.";
|
|
2225
2289
|
if (code !== 0) {
|
|
2226
|
-
resolve(`ERROR: Command [${
|
|
2290
|
+
resolve(`ERROR: Command [${rawCommand}] failed with exit code [${code}].
|
|
2227
2291
|
|
|
2228
2292
|
${finalOutput}`);
|
|
2229
2293
|
} else {
|
|
2230
|
-
resolve(`SUCCESS: Command [${
|
|
2294
|
+
resolve(`SUCCESS: Command [${rawCommand}] completed.
|
|
2231
2295
|
|
|
2232
2296
|
${finalOutput}`);
|
|
2233
2297
|
}
|
|
2234
2298
|
});
|
|
2235
2299
|
child.on("error", (err) => {
|
|
2236
2300
|
activeChildProcess = null;
|
|
2237
|
-
resolve(`ERROR: Failed to start command [${
|
|
2301
|
+
resolve(`ERROR: Failed to start command [${rawCommand}]: ${err.message}`);
|
|
2238
2302
|
});
|
|
2239
2303
|
});
|
|
2240
2304
|
};
|
|
@@ -3006,8 +3070,7 @@ DEBUG [${date}]: ${finalSynthesis}
|
|
|
3006
3070
|
const dateTimeStr = (/* @__PURE__ */ new Date()).toLocaleString([], { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", minute: "2-digit", hour12: true });
|
|
3007
3071
|
const firstUserMsg = `${memoryPrompt}
|
|
3008
3072
|
[METADATA (PRIORITY: DYNAMIC)] Time: ${dateTimeStr} | v${versionFluxflow2}
|
|
3009
|
-
[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING
|
|
3010
|
-
[USER] ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
|
|
3073
|
+
${thinkingLevel != "Fast" ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**\n" : ""}[USER] ${agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim()}`.trim();
|
|
3011
3074
|
modifiedHistory.push({ role: "user", text: firstUserMsg });
|
|
3012
3075
|
let lastUsage = null;
|
|
3013
3076
|
const MAX_LOOPS = mode === "Flux" ? 70 : 7;
|
|
@@ -3037,9 +3100,7 @@ DEBUG [${date}]: ${finalSynthesis}
|
|
|
3037
3100
|
|
|
3038
3101
|
[STEERING HINT]: ${hint}`;
|
|
3039
3102
|
} else {
|
|
3040
|
-
modifiedHistory.push({ role: "user", text:
|
|
3041
|
-
|
|
3042
|
-
[STEERING HINT]: ${hint}` });
|
|
3103
|
+
modifiedHistory.push({ role: "user", text: `${thinkingLevel != "Fast" ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**\n" : ""}[STEERING HINT]: ${hint}` });
|
|
3043
3104
|
}
|
|
3044
3105
|
yield { type: "status", content: "Steering Hint Injected." };
|
|
3045
3106
|
}
|
|
@@ -3093,7 +3154,7 @@ DEBUG [${date}]: ${finalSynthesis}
|
|
|
3093
3154
|
const currentSystemInstruction = getSystemInstruction(profile, thinkingLevel, mode, systemSettings, isMemoryEnabled, MAX_LOOPS, loop + 1);
|
|
3094
3155
|
const jitInstruction = `
|
|
3095
3156
|
|
|
3096
|
-
[SYSTEM] Tool result received. Analyze output and proceed with your turn
|
|
3157
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn.${thinkingLevel != "Fast" ? "**STRICTLY MAINTAIN THINKING PROTOCOL. NEVER START A RESPONSE WITHOUT THINKING**" : ""}`;
|
|
3097
3158
|
const lastUserMsg = contents[contents.length - 1];
|
|
3098
3159
|
let addedMarker = false;
|
|
3099
3160
|
if (lastUserMsg && lastUserMsg.role === "user" && lastUserMsg.parts?.[0]?.text?.startsWith("[TOOL RESULT]")) {
|
|
@@ -3387,9 +3448,7 @@ ${boxBottom}` };
|
|
|
3387
3448
|
const absoluteCwd = path15.resolve(process.cwd());
|
|
3388
3449
|
if (isExternalOff && !absoluteTarget.startsWith(absoluteCwd)) {
|
|
3389
3450
|
const denyMsg = `Access Denied. You are not allowed to access files outside the current workspace. To enable this, ask the user to turn on "External Workspace Access" in /settings.`;
|
|
3390
|
-
toolResults.push({ role: "user", text: `[TOOL RESULT]: ERROR: ${denyMsg}
|
|
3391
|
-
|
|
3392
|
-
[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**.` });
|
|
3451
|
+
toolResults.push({ role: "user", text: `[TOOL RESULT]: ERROR: ${denyMsg}${thinkingLevel != "Fast" ? "\n\n[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**" : ""}` });
|
|
3393
3452
|
yield { type: "tool_result", content: `[TOOL RESULT]: ERROR: ${denyMsg}` };
|
|
3394
3453
|
toolCallPointer++;
|
|
3395
3454
|
continue;
|
|
@@ -3402,9 +3461,7 @@ ${boxBottom}` };
|
|
|
3402
3461
|
if (approval === "deny") {
|
|
3403
3462
|
if (normToolName === "exec_command" && settings.onExecEnd) settings.onExecEnd();
|
|
3404
3463
|
const denyMsg = `Permission Denied: User rejected the ${normToolName === "exec_command" ? "terminal execution" : "file edit"}.`;
|
|
3405
|
-
toolResults.push({ role: "user", text: `[TOOL RESULT]: DENIED: ${denyMsg}
|
|
3406
|
-
|
|
3407
|
-
[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**.` });
|
|
3464
|
+
toolResults.push({ role: "user", text: `[TOOL RESULT]: DENIED: ${denyMsg}${thinkingLevel != "Fast" ? "\n\n[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGHEST PRIORITY. NEVER START A RESPONSE WITHOUT THINKING**" : ""}` });
|
|
3408
3465
|
yield { type: "tool_result", content: `[TOOL RESULT]: DENIED: ${denyMsg}` };
|
|
3409
3466
|
await incrementUsage("toolDenied");
|
|
3410
3467
|
if (settings.onToolResult) settings.onToolResult("denied");
|
|
@@ -4382,10 +4439,11 @@ function App() {
|
|
|
4382
4439
|
cmd: "/thinking",
|
|
4383
4440
|
desc: "Set AI reasoning depth",
|
|
4384
4441
|
subs: [
|
|
4385
|
-
{ cmd: "
|
|
4386
|
-
{ cmd: "
|
|
4387
|
-
{ cmd: "
|
|
4388
|
-
{ cmd: "
|
|
4442
|
+
{ cmd: "fast", desc: "No Reasoning (Fastest)" },
|
|
4443
|
+
{ cmd: "low", desc: "Quick Reasoning" },
|
|
4444
|
+
{ cmd: "medium", desc: "Balanced Reasoning" },
|
|
4445
|
+
{ cmd: "high", desc: "Deep Reasoning" },
|
|
4446
|
+
{ cmd: "max", desc: "Deepest Reasoning" }
|
|
4389
4447
|
]
|
|
4390
4448
|
},
|
|
4391
4449
|
{
|