fluxflow-cli 3.5.1 → 3.6.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/dist/fluxflow.js +93 -38
- package/model_config.json +1 -1
- package/package.json +2 -2
package/dist/fluxflow.js
CHANGED
|
@@ -5336,7 +5336,7 @@ var init_main_tools = __esm({
|
|
|
5336
5336
|
};
|
|
5337
5337
|
TOOL_PROTOCOL = (mode, osDetected, isMultiModal, aiProvider, advanceRollback = false) => `
|
|
5338
5338
|
-- TOOL DEFINITIONS --
|
|
5339
|
-
|
|
5339
|
+
Access Tools. **STRICTLY use the EXACT syntax** [tool:functions.ToolName(args)]. **NO OTHER SYNTAX/MARKERS/BOUNDARY ALLOWED**
|
|
5340
5340
|
|
|
5341
5341
|
**TOOL USAGE POLICY:**
|
|
5342
5342
|
- **MAX 3 TOOL CALLS PER TURN${mode === "Flux" ? " (EXCEPTION FOR Todo TOOL: 3+ CALLS ALLOWED, Run TOOL: Limit 1, OR 2 CONSECUTIVE Run TOOL)" : ""}. Next Turn, verify tool results, plan next**
|
|
@@ -6118,7 +6118,7 @@ function SettingsMenu({
|
|
|
6118
6118
|
{ label: "Auto Approve Commands", value: "autoApprove", status: truncateCSV(systemSettings.autoApproveCommands), section: "Sandbox" },
|
|
6119
6119
|
{ label: "Auto Disapprove Commands", value: "autoDisallow", status: truncateCSV(systemSettings.autoDisallowCommands), section: "Sandbox" },
|
|
6120
6120
|
{ label: "Auto Approve Git Commits", value: "autoApproveGit", status: systemSettings.autoApproveGit ? "ON" : "OFF", section: "Sandbox" },
|
|
6121
|
-
{ label: "Advanced
|
|
6121
|
+
{ label: "Advanced Recovery [EXPERIMENTAL]", value: "advanceRollback", status: systemSettings.advanceRollback ? "ON" : "OFF", section: "Other" },
|
|
6122
6122
|
{ label: "Auto-Delete History", value: "autoDelete", status: systemSettings.autoDeleteHistory || "30d", section: "Other" },
|
|
6123
6123
|
{ label: "Save AppData Externally", value: "externalData", status: systemSettings.useExternalData ? "ON" : "OFF", section: "Other" }
|
|
6124
6124
|
];
|
|
@@ -6750,13 +6750,14 @@ Check these first; These Files > Training Data. Safety rules apply
|
|
|
6750
6750
|
return `${nameStr}${nicknameStr}${userInstrStr}=== SYSTEM PROMPT ===
|
|
6751
6751
|
Identity: Flux Flow (by Kushal Roy Chowdhury). ${mode === "Flux" ? "Sassy" : "Conversational, Sassy, Friendly, Humorous, Sarcastic"}, CLI Agent
|
|
6752
6752
|
Mode: ${mode}${thinkingLevel !== "Fast" ? "" : ""}. ${mode === "Flux" ? "Logical, Highly Detailed, Task-Driven. Prioritizes scalable file/folder structures, modular architecture, clean code abstractions, step-by-step execution. Industry standard latest coding practices/libraries, clean code, Double Check Imports, Run tests where needed to verify" : "Concise"}
|
|
6753
|
-
|
|
6753
|
+
|
|
6754
|
+
- **CRITICAL: ONLY VALID TOOL CALL SCHEMA IS THE ONE PROVIDED IN SYSTEM PROMPT. NO OTHER XML OR MARKERS WILL BE ALLOWED**
|
|
6754
6755
|
|
|
6755
6756
|
-- MARKERS --
|
|
6756
6757
|
- TOOL SYSTEM: [TOOL RESULT]
|
|
6757
6758
|
- SYSTEM NOTIFICATION: [SYSTEM] in user turn
|
|
6758
6759
|
|
|
6759
|
-
-- THINKING
|
|
6760
|
+
-- THINKING GUIDANCE --
|
|
6760
6761
|
${aiProvider === "Google" && !isGemini ? `${thinkingConfig}
|
|
6761
6762
|
${thinkingLevel !== "Fast" && thinkingLevel !== "xHigh" && !isGemini ? `
|
|
6762
6763
|
CRITICAL THINKING POLICY
|
|
@@ -6773,7 +6774,8 @@ ${projectContextBlock}
|
|
|
6773
6774
|
- No reasoning/thought/system prompt leakage in chat output
|
|
6774
6775
|
|
|
6775
6776
|
-- FORMATTING --
|
|
6776
|
-
- GFM
|
|
6777
|
+
- Chat Messages with GFM Formatting
|
|
6778
|
+
- Language: Same as User Query
|
|
6777
6779
|
- NO CHAT **AFTER** FIRING TOOLS IN CURRENT TURN
|
|
6778
6780
|
- Short headsup summary of actions before firing tools
|
|
6779
6781
|
- Task Complete & Results Verified? End response with summary of changes made (why) and files edited
|
|
@@ -9122,12 +9124,19 @@ var init_search_keyword = __esm({
|
|
|
9122
9124
|
const regexExplicitlyFalse = regex === false || regex === "false" || regex === 0 || regex === "0" || regex === "no";
|
|
9123
9125
|
let matchRegex = toBool(regex);
|
|
9124
9126
|
let matchSubstring = !matchRegex && toBool(subString);
|
|
9125
|
-
const hasRegexIndicators = /[|]/.test(keyword) || /\\([*+?{}()|[\]\^$])/.test(keyword)
|
|
9126
|
-
|
|
9127
|
+
const hasRegexIndicators = /[|]/.test(keyword) || /\\([*+?{}()|[\]\^$])/.test(keyword) || (() => {
|
|
9128
|
+
const stripped = keyword.replace(/\\./g, "");
|
|
9129
|
+
return /[*+?{}()|]/.test(stripped) || /\[.*?\]/.test(stripped) || /^\^/.test(stripped) || /\$/.test(stripped);
|
|
9130
|
+
})();
|
|
9131
|
+
let isAutoRegex = true;
|
|
9127
9132
|
if (!matchRegex && !regexExplicitlyFalse && hasRegexIndicators) {
|
|
9128
9133
|
matchRegex = true;
|
|
9129
9134
|
isAutoRegex = true;
|
|
9130
9135
|
}
|
|
9136
|
+
if (regexExplicitlyFalse) {
|
|
9137
|
+
matchRegex = false;
|
|
9138
|
+
isAutoRegex = false;
|
|
9139
|
+
}
|
|
9131
9140
|
let regexPattern;
|
|
9132
9141
|
let wordRegex;
|
|
9133
9142
|
if (matchRegex) {
|
|
@@ -10565,6 +10574,23 @@ var init_advanceRevert = __esm({
|
|
|
10565
10574
|
throw new Error(`Rollback failed: ${err.message}`);
|
|
10566
10575
|
}
|
|
10567
10576
|
},
|
|
10577
|
+
async getLatestFileChanges(chatId) {
|
|
10578
|
+
try {
|
|
10579
|
+
const ledger = readEncryptedJson(LEDGER_ADVANCE_FILE, {});
|
|
10580
|
+
const session = ledger[chatId];
|
|
10581
|
+
if (!session || !session.checkpoints || session.checkpoints.length === 0) {
|
|
10582
|
+
return { newFiles: [], modifiedFiles: [], deletedFiles: [] };
|
|
10583
|
+
}
|
|
10584
|
+
const lastCp = session.checkpoints[session.checkpoints.length - 1];
|
|
10585
|
+
return {
|
|
10586
|
+
newFiles: lastCp.newFiles || [],
|
|
10587
|
+
modifiedFiles: lastCp.modifiedFiles || [],
|
|
10588
|
+
deletedFiles: lastCp.deletedFiles || []
|
|
10589
|
+
};
|
|
10590
|
+
} catch (err) {
|
|
10591
|
+
return { newFiles: [], modifiedFiles: [], deletedFiles: [] };
|
|
10592
|
+
}
|
|
10593
|
+
},
|
|
10568
10594
|
async cleanup(chatId) {
|
|
10569
10595
|
try {
|
|
10570
10596
|
const snapshotsDir = path21.join(DATA_DIR, "snapshots", chatId);
|
|
@@ -12628,6 +12654,8 @@ Provide a consolidated summary of the entire session.`;
|
|
|
12628
12654
|
const needTitle = isFirstPrompt || hasTitleSignal;
|
|
12629
12655
|
let agentText = originalText.replace(/\[TITLE-UPDATE\]/g, "").trim();
|
|
12630
12656
|
agentText = agentText.replace(/\s*\[Prompted on:.*?\]/g, "").trim();
|
|
12657
|
+
yield { type: "status", content: "[start]" };
|
|
12658
|
+
yield { type: "status", content: "Gathering Context" };
|
|
12631
12659
|
await RevertManager.startTransaction(chatId, agentText);
|
|
12632
12660
|
if (systemSettings?.advanceRollback) {
|
|
12633
12661
|
await AdvanceRevertManager.takeInitialSnapshot(chatId);
|
|
@@ -12935,8 +12963,6 @@ Provide a consolidated summary of the entire session.`;
|
|
|
12935
12963
|
});
|
|
12936
12964
|
return result;
|
|
12937
12965
|
};
|
|
12938
|
-
yield { type: "status", content: "[start]" };
|
|
12939
|
-
yield { type: "status", content: "Gathering Context" };
|
|
12940
12966
|
const totalFolders = countFolders(process.cwd());
|
|
12941
12967
|
let dynamicMaxDepth = 12;
|
|
12942
12968
|
if (totalFolders > 4096) dynamicMaxDepth = 1;
|
|
@@ -13253,7 +13279,7 @@ OS: ${osDetected}
|
|
|
13253
13279
|
CWD: ${process.cwd()}${isPlayground ? " [PLAYGROUND MODE]" : ""}${cwdMismatch ? ` (WARNING: CWD Mismatch! Previous Path: ${lastCwd})` : ""}
|
|
13254
13280
|
**DIRECTORY STRUCTURE**
|
|
13255
13281
|
${dirStructure}${memoryPrompt}${ideBlock}
|
|
13256
|
-
${activeSummaryBlock}${thinkingLevel !== "Fast" && thinkingLevel !== "xHigh" && aiProvider === "Google" ? `${modelName.toLowerCase().startsWith("gemma") ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think
|
|
13282
|
+
${activeSummaryBlock}${thinkingLevel !== "Fast" && thinkingLevel !== "xHigh" && aiProvider === "Google" ? `${modelName.toLowerCase().startsWith("gemma") ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>**\nSTRICTLY FOLLOW VALID TOOL CALLING SCHEMA [/SYSTEM]\n" : ""}` : '[SYSTEM Priority : HIGH] STRICTLY FOLLOW VALID TOOL CALLING SCHEMA eg. `[tool:functions.ReadFolder(path=".")]` NO OTHER FORMAT/TOKEN IS ALLOWED [/SYSTEM]\n'}${taggedContextStr}[USER PROMPT] ${cleanPromptForModel.trim()} [/USER PROMPT]`.trim();
|
|
13257
13283
|
const userMsgObj = { role: "user", text: firstUserMsg };
|
|
13258
13284
|
if (attachedBinaryPart) {
|
|
13259
13285
|
userMsgObj.binaryPart = attachedBinaryPart;
|
|
@@ -13442,6 +13468,33 @@ ${ideErr} [/ERROR]`;
|
|
|
13442
13468
|
lastUserMsg.parts[0].text += jitInstruction;
|
|
13443
13469
|
}
|
|
13444
13470
|
}
|
|
13471
|
+
if (systemSettings?.advanceRollback && lastUserMsg && lastUserMsg.role === "user" && lastUserMsg.parts?.[0]?.text?.startsWith("[TOOL RESULT]")) {
|
|
13472
|
+
try {
|
|
13473
|
+
const fileChanges = await AdvanceRevertManager.getLatestFileChanges(chatId);
|
|
13474
|
+
if (fileChanges && (fileChanges.newFiles.length > 0 || fileChanges.modifiedFiles.length > 0 || fileChanges.deletedFiles.length > 0)) {
|
|
13475
|
+
let changesStr = "\n[SYSTEM] File Changes:\n";
|
|
13476
|
+
for (const f of fileChanges.newFiles) changesStr += `* ${f} (created)
|
|
13477
|
+
`;
|
|
13478
|
+
for (const f of fileChanges.modifiedFiles) changesStr += `* ${f} (modified)
|
|
13479
|
+
`;
|
|
13480
|
+
for (const f of fileChanges.deletedFiles) changesStr += `* ${f} (deleted)
|
|
13481
|
+
`;
|
|
13482
|
+
changesStr += "[/SYSTEM]";
|
|
13483
|
+
lastUserMsg.parts[0].text += changesStr;
|
|
13484
|
+
let lastHistIdx = -1;
|
|
13485
|
+
for (let hi = modifiedHistory.length - 1; hi >= 0; hi--) {
|
|
13486
|
+
if (modifiedHistory[hi].role === "user" && modifiedHistory[hi].text?.startsWith("[TOOL RESULT]")) {
|
|
13487
|
+
lastHistIdx = hi;
|
|
13488
|
+
break;
|
|
13489
|
+
}
|
|
13490
|
+
}
|
|
13491
|
+
if (lastHistIdx !== -1) {
|
|
13492
|
+
modifiedHistory[lastHistIdx].text += changesStr;
|
|
13493
|
+
}
|
|
13494
|
+
}
|
|
13495
|
+
} catch (err) {
|
|
13496
|
+
}
|
|
13497
|
+
}
|
|
13445
13498
|
if (isGemma) {
|
|
13446
13499
|
const stepThreshold = Math.floor(MAX_LOOPS * (mode === "Flux" ? 0.98 : 0.8));
|
|
13447
13500
|
const currentStep = loop + 1;
|
|
@@ -13471,7 +13524,7 @@ ${ideErr} [/ERROR]`;
|
|
|
13471
13524
|
mode,
|
|
13472
13525
|
isMultiModal,
|
|
13473
13526
|
abortController.signal,
|
|
13474
|
-
|
|
13527
|
+
1
|
|
13475
13528
|
);
|
|
13476
13529
|
} else if (aiProvider === "DeepSeek") {
|
|
13477
13530
|
stream = getDeepSeekStream(
|
|
@@ -13483,7 +13536,7 @@ ${ideErr} [/ERROR]`;
|
|
|
13483
13536
|
mode,
|
|
13484
13537
|
isMultiModal,
|
|
13485
13538
|
abortController.signal,
|
|
13486
|
-
|
|
13539
|
+
1.05
|
|
13487
13540
|
);
|
|
13488
13541
|
} else if (aiProvider === "NVIDIA") {
|
|
13489
13542
|
const rawStream = getNVIDIAStream(
|
|
@@ -13495,7 +13548,7 @@ ${ideErr} [/ERROR]`;
|
|
|
13495
13548
|
mode,
|
|
13496
13549
|
isMultiModal,
|
|
13497
13550
|
abortController.signal,
|
|
13498
|
-
|
|
13551
|
+
1.05
|
|
13499
13552
|
);
|
|
13500
13553
|
stream = wrapNvidiaStreamWithQueueDepth(rawStream, targetModel);
|
|
13501
13554
|
} else {
|
|
@@ -13505,7 +13558,7 @@ ${ideErr} [/ERROR]`;
|
|
|
13505
13558
|
config: {
|
|
13506
13559
|
systemInstruction: currentSystemInstruction,
|
|
13507
13560
|
mediaResolution: "MEDIA_RESOLUTION_MEDIUM",
|
|
13508
|
-
temperature: 1,
|
|
13561
|
+
temperature: 1.05,
|
|
13509
13562
|
safetySettings: [
|
|
13510
13563
|
{ category: HarmCategory.HARM_CATEGORY_HARASSMENT, threshold: HarmBlockThreshold.BLOCK_NONE },
|
|
13511
13564
|
{ category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold: HarmBlockThreshold.BLOCK_NONE },
|
|
@@ -15203,6 +15256,29 @@ Error Log can be found in ${path22.join(LOGS_DIR, "agent", "error.log")}`);
|
|
|
15203
15256
|
} else {
|
|
15204
15257
|
modifiedHistory.push({ role: "agent", text: cleanedFullResponse });
|
|
15205
15258
|
}
|
|
15259
|
+
modifiedHistory.forEach((msg) => {
|
|
15260
|
+
if (msg.role === "user" && msg.text) {
|
|
15261
|
+
msg.text = msg.text.replace(/\n\[COMPILE ERROR\][\s\S]*?\[\/ERROR\]/g, "");
|
|
15262
|
+
msg.text = msg.text.replaceAll(`
|
|
15263
|
+
|
|
15264
|
+
[SYSTEM] USER QUESTION. RESOLVE THIS SPECIFIC QUERY WITHIN '[ANSWER] ... [/ANSWER]' CONCISELY, NATURALLY [/SYSTEM]
|
|
15265
|
+
`, "").replaceAll(`[SYSTEM] USER QUESTION. RESOLVE THIS SPECIFIC QUERY WITHIN '[ANSWER] ... [/ANSWER]' CONCISELY, NATURALLY
|
|
15266
|
+
**STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]
|
|
15267
|
+
`, "").replaceAll(`[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]
|
|
15268
|
+
`, "").replaceAll(
|
|
15269
|
+
/\n\[SYSTEM\] WARNING, Turn Limit Impending: Step \d+\/\d+\. Wrap up quickly\/prompt user to continue & use \[\[END\]\] quickly\. \[\/SYSTEM\]/g,
|
|
15270
|
+
""
|
|
15271
|
+
);
|
|
15272
|
+
msg.text = msg.text.replaceAll(/\n\[SYSTEM\] File Changes:\n(?:\* .+ \(created|modified|deleted\)\n)*\[\/SYSTEM\]/g, "");
|
|
15273
|
+
if (modelName && modelName.toLowerCase().startsWith("gemma") && aiProvider === "Google" && msg.text.startsWith("[TOOL RESULT]")) {
|
|
15274
|
+
const jitInstructionFast = `
|
|
15275
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn [/SYSTEM]`;
|
|
15276
|
+
const jitInstructionThinking = `
|
|
15277
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]`;
|
|
15278
|
+
msg.text = msg.text.replaceAll(jitInstructionThinking, "").replaceAll(jitInstructionFast, "").trim();
|
|
15279
|
+
}
|
|
15280
|
+
}
|
|
15281
|
+
});
|
|
15206
15282
|
yield { type: "status", content: "[end]" };
|
|
15207
15283
|
}
|
|
15208
15284
|
if (isActuallyFinished) break;
|
|
@@ -15236,28 +15312,6 @@ Error Log can be found in ${path22.join(LOGS_DIR, "agent", "error.log")}`);
|
|
|
15236
15312
|
}
|
|
15237
15313
|
wasToolCalledInLastLoop = toolCallPointer > 0 || anyToolExecutedInThisTurn;
|
|
15238
15314
|
}
|
|
15239
|
-
modifiedHistory.forEach((msg) => {
|
|
15240
|
-
if (msg.role === "user" && msg.text) {
|
|
15241
|
-
msg.text = msg.text.replace(/\n\[COMPILE ERROR\][\s\S]*?\[\/ERROR\]/g, "");
|
|
15242
|
-
msg.text = msg.text.replace(`
|
|
15243
|
-
|
|
15244
|
-
[SYSTEM] USER QUESTION. RESOLVE THIS SPECIFIC QUERY WITHIN '[ANSWER] ... [/ANSWER]' CONCISELY, NATURALLY [/SYSTEM]
|
|
15245
|
-
`, "").replace(`[SYSTEM] USER QUESTION. RESOLVE THIS SPECIFIC QUERY WITHIN '[ANSWER] ... [/ANSWER]' CONCISELY, NATURALLY
|
|
15246
|
-
**STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]
|
|
15247
|
-
`, "").replace(`[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]
|
|
15248
|
-
`, "").replaceAll(
|
|
15249
|
-
/\n\[SYSTEM\] WARNING, Turn Limit Impending: Step \d+\/\d+\. Wrap up quickly\/prompt user to continue & use \[\[END\]\] quickly\. \[\/SYSTEM\]/g,
|
|
15250
|
-
""
|
|
15251
|
-
);
|
|
15252
|
-
if (modelName && modelName.toLowerCase().startsWith("gemma") && aiProvider === "Google" && msg.text.startsWith("[TOOL RESULT]")) {
|
|
15253
|
-
const jitInstructionFast = `
|
|
15254
|
-
[SYSTEM] Tool result received. Analyze output and proceed with your turn [/SYSTEM]`;
|
|
15255
|
-
const jitInstructionThinking = `
|
|
15256
|
-
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]`;
|
|
15257
|
-
msg.text = msg.text.replace(jitInstructionThinking, "").replace(jitInstructionFast, "").trim();
|
|
15258
|
-
}
|
|
15259
|
-
}
|
|
15260
|
-
});
|
|
15261
15315
|
} catch (err) {
|
|
15262
15316
|
const errLog = err instanceof Error ? (() => {
|
|
15263
15317
|
try {
|
|
@@ -15311,7 +15365,8 @@ Error Log can be found in ${path22.join(LOGS_DIR, "agent", "error.log")}`);
|
|
|
15311
15365
|
"ask": `- [tool:functions.Ask(question="...", optionA="option::description", ...MAX 4)]. Ambiguity Resolution. Mandatory Triggers: Path Divergence, Security, Risk Mitigation. ask >> finish/guess. Suggest best options; don't ask for preferences. 'option' SHOULD be short`
|
|
15312
15366
|
};
|
|
15313
15367
|
const providedToolsSection = `-- TOOL DEFINITIONS (path = relative to CWD, path separator: '/') --
|
|
15314
|
-
To call tools USE THIS EXACT SYNTAX: [tool:functions.ToolName(args)]. **NO OTHER SYNTAX/MARKERS/BOUNDARY ALLOWED, ONLY VALID TOOL CALL SCHEMA IS THE ONE PROVIDED IN SYSTEM PROMPT**
|
|
15368
|
+
To call tools USE THIS EXACT SYNTAX: [tool:functions.ToolName(args)]. **CRITICAL: NO OTHER SYNTAX/MARKERS/BOUNDARY ALLOWED, ONLY VALID TOOL CALL SCHEMA IS THE ONE PROVIDED IN SYSTEM PROMPT. NO OTHER XML OR MARKERS WILL BE ALLOWED**
|
|
15369
|
+
**
|
|
15315
15370
|
TOOL POLICY:
|
|
15316
15371
|
- MAX 3 TOOL CALLS PER TURN. Next Turn, verify tool results, plan next
|
|
15317
15372
|
- USE multiple search & replace on patch tool if editing same file/path with many changes \u2190 HIGHLY RECOMMENDED
|
|
@@ -20592,7 +20647,7 @@ Selection: ${val}`,
|
|
|
20592
20647
|
width: "100%",
|
|
20593
20648
|
marginBottom: 1
|
|
20594
20649
|
},
|
|
20595
|
-
/* @__PURE__ */ React16.createElement(Box14, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React16.createElement(Text16, { color: "white", bold: true }, suggestions[0]?.cmd?.startsWith("@") || suggestions[0]?.cmd?.startsWith("\\@") ? "FILE SUGGESTIONS" : "COMMAND SUGGESTIONS"), suggestions[0]?.cmd?.startsWith("@") || suggestions[0]?.cmd?.startsWith("\\@") ? /* @__PURE__ */ React16.createElement(Text16, { color: "gray", italic: true }, "(Use
|
|
20650
|
+
/* @__PURE__ */ React16.createElement(Box14, { paddingX: 1, marginBottom: 0, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React16.createElement(Text16, { color: "white", bold: true }, suggestions[0]?.cmd?.startsWith("@") || suggestions[0]?.cmd?.startsWith("\\@") ? "FILE SUGGESTIONS" : "COMMAND SUGGESTIONS"), suggestions[0]?.cmd?.startsWith("@") || suggestions[0]?.cmd?.startsWith("\\@") ? /* @__PURE__ */ React16.createElement(Text16, { color: "gray", italic: true }, "(Use #Lstart-Lend to specify line numbers)") : input.startsWith("/model") && apiTier === "Free" ? (() => {
|
|
20596
20651
|
let url = "https://aistudio.google.com/billing";
|
|
20597
20652
|
let label = "billing";
|
|
20598
20653
|
if (aiProvider === "DeepSeek") {
|
package/model_config.json
CHANGED