fluxflow-cli 3.12.1 → 3.13.0
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 +600 -176
- package/model_config.json +1 -1
- package/package.json +2 -2
package/dist/fluxflow.js
CHANGED
|
@@ -466,7 +466,8 @@ var init_settings = __esm({
|
|
|
466
466
|
preserveThinking: true,
|
|
467
467
|
loadingPhrases: true,
|
|
468
468
|
progressiveRendering: true,
|
|
469
|
-
showTPMEstimate: false
|
|
469
|
+
showTPMEstimate: false,
|
|
470
|
+
subAgents: true
|
|
470
471
|
},
|
|
471
472
|
profileData: {
|
|
472
473
|
name: null,
|
|
@@ -3730,7 +3731,7 @@ var init_MultilineInput = __esm({
|
|
|
3730
3731
|
});
|
|
3731
3732
|
|
|
3732
3733
|
// src/utils/theme.js
|
|
3733
|
-
var CHAOS_PRESETS, THEMES, getThemeColors;
|
|
3734
|
+
var CHAOS_PRESETS, THEMES, cachedChaosPreset, getThemeColors;
|
|
3734
3735
|
var init_theme = __esm({
|
|
3735
3736
|
"src/utils/theme.js"() {
|
|
3736
3737
|
CHAOS_PRESETS = [
|
|
@@ -3978,6 +3979,153 @@ var init_theme = __esm({
|
|
|
3978
3979
|
logoBodyAnsi: "\x1B[35m",
|
|
3979
3980
|
logoMutedAnsi: "\x1B[90m",
|
|
3980
3981
|
logoGradient: ["#ffb3d9", "#ff3399"]
|
|
3982
|
+
},
|
|
3983
|
+
{
|
|
3984
|
+
name: "Radioactive Slime",
|
|
3985
|
+
text: "#ccff00",
|
|
3986
|
+
textMuted: "#99cc00",
|
|
3987
|
+
textDim: "#669900",
|
|
3988
|
+
textInverted: "#0a0f00",
|
|
3989
|
+
border: "#ccff00",
|
|
3990
|
+
borderMuted: "#99cc00",
|
|
3991
|
+
borderDim: "#669900",
|
|
3992
|
+
bg: void 0,
|
|
3993
|
+
cardBg: "#0f1400",
|
|
3994
|
+
highlightBg: "#1a2400",
|
|
3995
|
+
activeBg: "#2a3b00",
|
|
3996
|
+
inputBg: "#1a2400",
|
|
3997
|
+
inputBorder: "#1a2400",
|
|
3998
|
+
inputText: "#ccff00",
|
|
3999
|
+
inputPlaceholder: "#669900",
|
|
4000
|
+
inputPrompt: "#cc00ff",
|
|
4001
|
+
codeBg: "#050a00",
|
|
4002
|
+
codeBorder: "#99cc00",
|
|
4003
|
+
userMsgBg: "#1a2400",
|
|
4004
|
+
userMsgBorder: "#1a2400",
|
|
4005
|
+
userMsgText: "#ccff00",
|
|
4006
|
+
diffRemovalBg: "#2a0033",
|
|
4007
|
+
diffAdditionBg: "#0f3300",
|
|
4008
|
+
diffRemovalText: "#ff00cc",
|
|
4009
|
+
diffAdditionText: "#00ff33",
|
|
4010
|
+
diffRemovalHighlightColor: "#ff33cc",
|
|
4011
|
+
diffRemovalHighlightBg: "#4d0066",
|
|
4012
|
+
diffAdditionHighlightColor: "#33ff66",
|
|
4013
|
+
diffAdditionHighlightBg: "#1a6600",
|
|
4014
|
+
diffRemovalNum: "#ff00cc",
|
|
4015
|
+
diffAdditionNum: "#00ff33",
|
|
4016
|
+
diffRemovalPrefix: "#ff33cc",
|
|
4017
|
+
diffAdditionPrefix: "#33ff66",
|
|
4018
|
+
primary: "#ccff00",
|
|
4019
|
+
secondary: "#cc00ff",
|
|
4020
|
+
accent: "#ff00cc",
|
|
4021
|
+
success: "#00ff33",
|
|
4022
|
+
warning: "#ffcc00",
|
|
4023
|
+
danger: "#ff0033",
|
|
4024
|
+
info: "#00ccff",
|
|
4025
|
+
statusOn: "#ccff00",
|
|
4026
|
+
statusOff: "#669900",
|
|
4027
|
+
logoTextAnsi: "\x1B[1;38;5;190m",
|
|
4028
|
+
logoBodyAnsi: "\x1B[38;5;190m",
|
|
4029
|
+
logoMutedAnsi: "\x1B[90m",
|
|
4030
|
+
logoGradient: ["#ccff00", "#cc00ff"]
|
|
4031
|
+
},
|
|
4032
|
+
{
|
|
4033
|
+
name: "Cosmic Void",
|
|
4034
|
+
text: "#f0f8ff",
|
|
4035
|
+
textMuted: "#a6aeb5",
|
|
4036
|
+
textDim: "#5e656e",
|
|
4037
|
+
textInverted: "#010103",
|
|
4038
|
+
border: "#f0f8ff",
|
|
4039
|
+
borderMuted: "#a6aeb5",
|
|
4040
|
+
borderDim: "#5e656e",
|
|
4041
|
+
bg: void 0,
|
|
4042
|
+
cardBg: "#05030d",
|
|
4043
|
+
highlightBg: "#0b081a",
|
|
4044
|
+
activeBg: "#171133",
|
|
4045
|
+
inputBg: "#0b081a",
|
|
4046
|
+
inputBorder: "#0b081a",
|
|
4047
|
+
inputText: "#f0f8ff",
|
|
4048
|
+
inputPlaceholder: "#5e656e",
|
|
4049
|
+
inputPrompt: "#ff007f",
|
|
4050
|
+
codeBg: "#020108",
|
|
4051
|
+
codeBorder: "#a6aeb5",
|
|
4052
|
+
userMsgBg: "#0b081a",
|
|
4053
|
+
userMsgBorder: "#0b081a",
|
|
4054
|
+
userMsgText: "#f0f8ff",
|
|
4055
|
+
diffRemovalBg: "#2e0a29",
|
|
4056
|
+
diffAdditionBg: "#091c33",
|
|
4057
|
+
diffRemovalText: "#ff33a6",
|
|
4058
|
+
diffAdditionText: "#33d6ff",
|
|
4059
|
+
diffRemovalHighlightColor: "#ff66c2",
|
|
4060
|
+
diffRemovalHighlightBg: "#5c1452",
|
|
4061
|
+
diffAdditionHighlightColor: "#66e0ff",
|
|
4062
|
+
diffAdditionHighlightBg: "#123866",
|
|
4063
|
+
diffRemovalNum: "#ff33a6",
|
|
4064
|
+
diffAdditionNum: "#33d6ff",
|
|
4065
|
+
diffRemovalPrefix: "#ff66c2",
|
|
4066
|
+
diffAdditionPrefix: "#66e0ff",
|
|
4067
|
+
primary: "#f0f8ff",
|
|
4068
|
+
secondary: "#ff007f",
|
|
4069
|
+
accent: "#9d00ff",
|
|
4070
|
+
success: "#33d6ff",
|
|
4071
|
+
warning: "#ffcc00",
|
|
4072
|
+
danger: "#ff0040",
|
|
4073
|
+
info: "#9d00ff",
|
|
4074
|
+
statusOn: "#f0f8ff",
|
|
4075
|
+
statusOff: "#5e656e",
|
|
4076
|
+
logoTextAnsi: "\x1B[1;38;5;231m",
|
|
4077
|
+
logoBodyAnsi: "\x1B[38;5;231m",
|
|
4078
|
+
logoMutedAnsi: "\x1B[38;5;240m",
|
|
4079
|
+
logoGradient: ["#ffffff", "#9d00ff"]
|
|
4080
|
+
},
|
|
4081
|
+
{
|
|
4082
|
+
name: "Magma Eruption",
|
|
4083
|
+
text: "#ff4d00",
|
|
4084
|
+
textMuted: "#cc3d00",
|
|
4085
|
+
textDim: "#802600",
|
|
4086
|
+
textInverted: "#0d0300",
|
|
4087
|
+
border: "#ff4d00",
|
|
4088
|
+
borderMuted: "#cc3d00",
|
|
4089
|
+
borderDim: "#802600",
|
|
4090
|
+
bg: void 0,
|
|
4091
|
+
cardBg: "#1a0600",
|
|
4092
|
+
highlightBg: "#260a00",
|
|
4093
|
+
activeBg: "#401100",
|
|
4094
|
+
inputBg: "#260a00",
|
|
4095
|
+
inputBorder: "#260a00",
|
|
4096
|
+
inputText: "#ff4d00",
|
|
4097
|
+
inputPlaceholder: "#802600",
|
|
4098
|
+
inputPrompt: "#ffcc00",
|
|
4099
|
+
codeBg: "#080200",
|
|
4100
|
+
codeBorder: "#cc3d00",
|
|
4101
|
+
userMsgBg: "#260a00",
|
|
4102
|
+
userMsgBorder: "#260a00",
|
|
4103
|
+
userMsgText: "#ff4d00",
|
|
4104
|
+
diffRemovalBg: "#2e0a0a",
|
|
4105
|
+
diffAdditionBg: "#1f1400",
|
|
4106
|
+
diffRemovalText: "#ff3333",
|
|
4107
|
+
diffAdditionText: "#ffaa00",
|
|
4108
|
+
diffRemovalHighlightColor: "#ff6666",
|
|
4109
|
+
diffRemovalHighlightBg: "#5c1414",
|
|
4110
|
+
diffAdditionHighlightColor: "#ffcc33",
|
|
4111
|
+
diffAdditionHighlightBg: "#3d2900",
|
|
4112
|
+
diffRemovalNum: "#ff3333",
|
|
4113
|
+
diffAdditionNum: "#ffaa00",
|
|
4114
|
+
diffRemovalPrefix: "#ff6666",
|
|
4115
|
+
diffAdditionPrefix: "#ffcc33",
|
|
4116
|
+
primary: "#ff4d00",
|
|
4117
|
+
secondary: "#ffcc00",
|
|
4118
|
+
accent: "#ff0040",
|
|
4119
|
+
success: "#ffaa00",
|
|
4120
|
+
warning: "#ffff00",
|
|
4121
|
+
danger: "#ff0000",
|
|
4122
|
+
info: "#ff8800",
|
|
4123
|
+
statusOn: "#ff4d00",
|
|
4124
|
+
statusOff: "#802600",
|
|
4125
|
+
logoTextAnsi: "\x1B[1;38;5;202m",
|
|
4126
|
+
logoBodyAnsi: "\x1B[38;5;202m",
|
|
4127
|
+
logoMutedAnsi: "\x1B[38;5;236m",
|
|
4128
|
+
logoGradient: ["#ff4d00", "#ff0000"]
|
|
3981
4129
|
}
|
|
3982
4130
|
];
|
|
3983
4131
|
THEMES = {
|
|
@@ -4336,17 +4484,129 @@ var init_theme = __esm({
|
|
|
4336
4484
|
logoBodyAnsi: "\x1B[30m",
|
|
4337
4485
|
logoMutedAnsi: "\x1B[38;5;244m",
|
|
4338
4486
|
logoGradient: ["#0077ff", "#ff00ff"]
|
|
4487
|
+
},
|
|
4488
|
+
"Synthwave 84": {
|
|
4489
|
+
id: "Synthwave 84",
|
|
4490
|
+
name: "Synthwave 84",
|
|
4491
|
+
text: "#fdfdfd",
|
|
4492
|
+
textMuted: "#a08eb7",
|
|
4493
|
+
textDim: "#705c8a",
|
|
4494
|
+
textInverted: "#1a1025",
|
|
4495
|
+
textExclusive: "#e3dcf0",
|
|
4496
|
+
textMutedExclusive: "#b9abc9",
|
|
4497
|
+
border: "#fc28a8",
|
|
4498
|
+
borderMuted: "#a21568",
|
|
4499
|
+
borderDim: "#5c0a3a",
|
|
4500
|
+
bg: void 0,
|
|
4501
|
+
cardBg: "#261b38",
|
|
4502
|
+
highlightBg: "#35254d",
|
|
4503
|
+
activeBg: "#4c3570",
|
|
4504
|
+
inputBg: "#35254d",
|
|
4505
|
+
inputBorder: "#35254d",
|
|
4506
|
+
inputText: "#fdfdfd",
|
|
4507
|
+
inputPlaceholder: "#a08eb7",
|
|
4508
|
+
inputPrompt: "#03e8fc",
|
|
4509
|
+
codeBg: "#1e142b",
|
|
4510
|
+
codeBorder: "#a21568",
|
|
4511
|
+
userMsgBg: "#35254d",
|
|
4512
|
+
userMsgBorder: "#35254d",
|
|
4513
|
+
userMsgText: "#fdfdfd",
|
|
4514
|
+
diffRemovalBg: "#471434",
|
|
4515
|
+
diffAdditionBg: "#144743",
|
|
4516
|
+
diffRemovalText: "#ff4081",
|
|
4517
|
+
diffAdditionText: "#00e5ff",
|
|
4518
|
+
diffRemovalHighlightColor: "#ff79a1",
|
|
4519
|
+
diffRemovalHighlightBg: "#6b1e4e",
|
|
4520
|
+
diffAdditionHighlightColor: "#66f5ff",
|
|
4521
|
+
diffAdditionHighlightBg: "#1e6b65",
|
|
4522
|
+
diffRemovalNum: "#ff4081",
|
|
4523
|
+
diffAdditionNum: "#00e5ff",
|
|
4524
|
+
diffRemovalPrefix: "#ff79a1",
|
|
4525
|
+
diffAdditionPrefix: "#66f5ff",
|
|
4526
|
+
primary: "#fdfdfd",
|
|
4527
|
+
secondary: "#03e8fc",
|
|
4528
|
+
accent: "#fc28a8",
|
|
4529
|
+
success: "#00e5ff",
|
|
4530
|
+
warning: "#ffc107",
|
|
4531
|
+
danger: "#ff4081",
|
|
4532
|
+
info: "#b388ff",
|
|
4533
|
+
statusOn: "#03e8fc",
|
|
4534
|
+
statusOff: "#a08eb7",
|
|
4535
|
+
logoTextAnsi: "\x1B[1;35m",
|
|
4536
|
+
logoBodyAnsi: "\x1B[35m",
|
|
4537
|
+
logoMutedAnsi: "\x1B[90m",
|
|
4538
|
+
logoGradient: ["#fc28a8", "#03e8fc"]
|
|
4539
|
+
},
|
|
4540
|
+
"Forest Sprite": {
|
|
4541
|
+
id: "Forest Sprite",
|
|
4542
|
+
name: "Forest Sprite",
|
|
4543
|
+
text: "#d6e6d1",
|
|
4544
|
+
textMuted: "#95b38d",
|
|
4545
|
+
textDim: "#628059",
|
|
4546
|
+
textInverted: "#161c14",
|
|
4547
|
+
textExclusive: "#eaf2e8",
|
|
4548
|
+
textMutedExclusive: "#a9c7a2",
|
|
4549
|
+
border: "#74a862",
|
|
4550
|
+
borderMuted: "#477038",
|
|
4551
|
+
borderDim: "#2b4720",
|
|
4552
|
+
bg: void 0,
|
|
4553
|
+
cardBg: "#1f291c",
|
|
4554
|
+
highlightBg: "#2a3826",
|
|
4555
|
+
activeBg: "#3a4d35",
|
|
4556
|
+
inputBg: "#2a3826",
|
|
4557
|
+
inputBorder: "#2a3826",
|
|
4558
|
+
inputText: "#d6e6d1",
|
|
4559
|
+
inputPlaceholder: "#95b38d",
|
|
4560
|
+
inputPrompt: "#8feb73",
|
|
4561
|
+
codeBg: "#161e14",
|
|
4562
|
+
codeBorder: "#477038",
|
|
4563
|
+
userMsgBg: "#2a3826",
|
|
4564
|
+
userMsgBorder: "#2a3826",
|
|
4565
|
+
userMsgText: "#d6e6d1",
|
|
4566
|
+
diffRemovalBg: "#3b231c",
|
|
4567
|
+
diffAdditionBg: "#203b1c",
|
|
4568
|
+
diffRemovalText: "#db6242",
|
|
4569
|
+
diffAdditionText: "#59cc3f",
|
|
4570
|
+
diffRemovalHighlightColor: "#f0896c",
|
|
4571
|
+
diffRemovalHighlightBg: "#5c362a",
|
|
4572
|
+
diffAdditionHighlightColor: "#80e368",
|
|
4573
|
+
diffAdditionHighlightBg: "#305929",
|
|
4574
|
+
diffRemovalNum: "#db6242",
|
|
4575
|
+
diffAdditionNum: "#59cc3f",
|
|
4576
|
+
diffRemovalPrefix: "#f0896c",
|
|
4577
|
+
diffAdditionPrefix: "#80e368",
|
|
4578
|
+
primary: "#d6e6d1",
|
|
4579
|
+
secondary: "#8feb73",
|
|
4580
|
+
accent: "#e69835",
|
|
4581
|
+
success: "#59cc3f",
|
|
4582
|
+
warning: "#e69835",
|
|
4583
|
+
danger: "#db6242",
|
|
4584
|
+
info: "#73b4eb",
|
|
4585
|
+
statusOn: "#8feb73",
|
|
4586
|
+
statusOff: "#95b38d",
|
|
4587
|
+
logoTextAnsi: "\x1B[1;32m",
|
|
4588
|
+
logoBodyAnsi: "\x1B[32m",
|
|
4589
|
+
logoMutedAnsi: "\x1B[90m",
|
|
4590
|
+
logoGradient: ["#8feb73", "#e69835"]
|
|
4339
4591
|
}
|
|
4340
4592
|
};
|
|
4593
|
+
cachedChaosPreset = null;
|
|
4341
4594
|
getThemeColors = (themeName = "Dark") => {
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
|
|
4349
|
-
|
|
4595
|
+
let colors;
|
|
4596
|
+
if (themeName === "Mystery" || themeName === "Chaos") {
|
|
4597
|
+
if (!cachedChaosPreset) {
|
|
4598
|
+
cachedChaosPreset = CHAOS_PRESETS[Math.floor(Math.random() * CHAOS_PRESETS.length)];
|
|
4599
|
+
}
|
|
4600
|
+
colors = { ...cachedChaosPreset, id: "Mystery" };
|
|
4601
|
+
} else {
|
|
4602
|
+
cachedChaosPreset = null;
|
|
4603
|
+
if (THEMES[themeName]) colors = THEMES[themeName];
|
|
4604
|
+
else if (themeName === "GitHub") colors = THEMES["GitHub Dark"];
|
|
4605
|
+
else if (themeName === "Transparent") colors = THEMES["Transparent Dark"];
|
|
4606
|
+
else colors = THEMES.Dark;
|
|
4607
|
+
}
|
|
4608
|
+
const codeColor = colors.codeText || colors.secondary || colors.info || colors.logoGradient && colors.logoGradient[0] || "cyan";
|
|
4609
|
+
return { ...colors, codeText: codeColor };
|
|
4350
4610
|
};
|
|
4351
4611
|
}
|
|
4352
4612
|
});
|
|
@@ -4787,7 +5047,7 @@ var init_terminal = __esm({
|
|
|
4787
5047
|
return `${coloredArt[0]}
|
|
4788
5048
|
${coloredArt[1]} ${textColor}Selected Provider: ${provider}${reset}
|
|
4789
5049
|
${coloredArt[2]}
|
|
4790
|
-
${coloredArt[3]} ${textColor}
|
|
5050
|
+
${coloredArt[3]} ${textColor}FluxFlow ${grey("v" + version)}${reset}
|
|
4791
5051
|
${coloredArt[4]}
|
|
4792
5052
|
${coloredArt[5]} ${bodyColor}See /help for additional commands.${reset}
|
|
4793
5053
|
${coloredArt[6]} ${grey(quote)}
|
|
@@ -4800,7 +5060,7 @@ ${coloredArt[7]}`;
|
|
|
4800
5060
|
import React4, { useState as useState4, useEffect as useEffect3, useRef as useRef2 } from "react";
|
|
4801
5061
|
import { Box as Box3, Text as Text4 } from "ink";
|
|
4802
5062
|
import { diffWordsWithSpace } from "diff";
|
|
4803
|
-
var useStreamingText, formatThinkText, REGEX_MD_TOKENS, REGEX_LATEX_FRAC, REGEX_LATEX_STYLE, parseMathSymbols, SYNTAX_KEYWORDS, SYNTAX_RULES, REGEX_SYNTAX, tokenCache, MAX_TOKEN_CACHE_SIZE, tokenizeLine, renderHighlightedLine, renderLatexText, InlineMarkdown, TableRenderer, MarkdownText, DiffLine, DiffBlock, CodeRenderer, formatThinkingDuration, MessageItem, BlockItem, ChatLayout;
|
|
5063
|
+
var useStreamingText, formatThinkText, REGEX_MD_TOKENS, REGEX_LATEX_FRAC, REGEX_LATEX_STYLE, REGEX_MATH_MULT, REGEX_MATH_DIV, REGEX_MATH_CDOT, REGEX_MATH_INFTY, REGEX_MATH_PM, REGEX_MATH_LEQ, REGEX_MATH_GEQ, REGEX_MATH_NEQ, REGEX_MATH_SQRT1, REGEX_MATH_SQRT2, REGEX_MATH_ALPHA, REGEX_MATH_BETA, REGEX_MATH_THETA, REGEX_MATH_PI, REGEX_MATH_APPROX, REGEX_MATH_DELTA, REGEX_MATH_SIGMA, REGEX_MATH_SUM, REGEX_MATH_PROD, REGEX_MATH_ARROW, REGEX_MATH_LONE_LR, REGEX_MATH_LR_PAREN, REGEX_MATH_LR_BRACK, REGEX_MATH_LR_CURLY, REGEX_MATH_TEXT1, REGEX_MATH_TEXT2, REGEX_MATH_PCT, REGEX_MATH_BARE_PAREN, REGEX_MATH_BARE_BRACK, REGEX_AT_REF, REGEX_COLON_L, REGEX_MD_LINK_PAREN, REGEX_MD_LINK_BRACKET, REGEX_LATEX_CMD, parseMathSymbols, SYNTAX_KEYWORDS, SYNTAX_RULES, REGEX_SYNTAX, tokenCache, MAX_TOKEN_CACHE_SIZE, tokenizeLine, renderHighlightedLine, renderLatexText, InlineMarkdown, TableRenderer, MarkdownText, DiffLine, DiffBlock, CodeRenderer, formatThinkingDuration, MessageItem, BlockItem, ChatLayout;
|
|
4804
5064
|
var init_ChatLayout = __esm({
|
|
4805
5065
|
"src/components/ChatLayout.jsx"() {
|
|
4806
5066
|
init_TerminalBox();
|
|
@@ -4836,11 +5096,45 @@ var init_ChatLayout = __esm({
|
|
|
4836
5096
|
return /* @__PURE__ */ React4.createElement(MarkdownText, { key: i, text: cleanPart, color: "gray", columns: availableWidth, italic: true });
|
|
4837
5097
|
}));
|
|
4838
5098
|
};
|
|
4839
|
-
REGEX_MD_TOKENS = /(```[\s\S]*?```|`[^`]+`|@\[.*?\]
|
|
5099
|
+
REGEX_MD_TOKENS = /(```[\s\S]*?```|`[^`]+`|@\[.*?\]|\*\*.*?\*\*|\*.*?\*|\\\(.*?\\\)|\\\[.*?\\\]|\$.*?\$|\[.*?\]\s*\(.*?\)|\[.*?\]\s*\[.*?\]|https?:\/\/[^\s]+)/g;
|
|
4840
5100
|
REGEX_LATEX_FRAC = /\\frac\s*\{([^{}]*)\}\s*\{([^{}]*)\}/g;
|
|
4841
5101
|
REGEX_LATEX_STYLE = /(\\(?:mathbf|textbf|textit|underline|texttt)\{[^{}]*\})/g;
|
|
5102
|
+
REGEX_MATH_MULT = /\\multiply|\\mul|\\times/g;
|
|
5103
|
+
REGEX_MATH_DIV = /\\div/g;
|
|
5104
|
+
REGEX_MATH_CDOT = /\\cdot/g;
|
|
5105
|
+
REGEX_MATH_INFTY = /\\infty/g;
|
|
5106
|
+
REGEX_MATH_PM = /\\pm/g;
|
|
5107
|
+
REGEX_MATH_LEQ = /\\leq/g;
|
|
5108
|
+
REGEX_MATH_GEQ = /\\geq/g;
|
|
5109
|
+
REGEX_MATH_NEQ = /\\neq/g;
|
|
5110
|
+
REGEX_MATH_SQRT1 = /\\sqrt\s*\{([^}]+)\}/g;
|
|
5111
|
+
REGEX_MATH_SQRT2 = /\\sqrt\s*(\w+|\d+)/g;
|
|
5112
|
+
REGEX_MATH_ALPHA = /\\alpha/g;
|
|
5113
|
+
REGEX_MATH_BETA = /\\beta/g;
|
|
5114
|
+
REGEX_MATH_THETA = /\\theta/g;
|
|
5115
|
+
REGEX_MATH_PI = /\\pi/g;
|
|
5116
|
+
REGEX_MATH_APPROX = /\\approx/g;
|
|
5117
|
+
REGEX_MATH_DELTA = /\\Delta/g;
|
|
5118
|
+
REGEX_MATH_SIGMA = /\\sigma/g;
|
|
5119
|
+
REGEX_MATH_SUM = /\\sum/g;
|
|
5120
|
+
REGEX_MATH_PROD = /\\prod/g;
|
|
5121
|
+
REGEX_MATH_ARROW = /\\rightarrow|\\to/g;
|
|
5122
|
+
REGEX_MATH_LONE_LR = /\\left\b|\\right\b/g;
|
|
5123
|
+
REGEX_MATH_LR_PAREN = /\\left\(|\\right\)/g;
|
|
5124
|
+
REGEX_MATH_LR_BRACK = /\\left\[|\\right\]/g;
|
|
5125
|
+
REGEX_MATH_LR_CURLY = /\\\{|\\\}/g;
|
|
5126
|
+
REGEX_MATH_TEXT1 = /\\text\s*\{([^}]+)\}/g;
|
|
5127
|
+
REGEX_MATH_TEXT2 = /\\text\s+(\w+)/g;
|
|
5128
|
+
REGEX_MATH_PCT = /\\%/g;
|
|
5129
|
+
REGEX_MATH_BARE_PAREN = /\\\(|\\\)/g;
|
|
5130
|
+
REGEX_MATH_BARE_BRACK = /\\\[|\\\]/g;
|
|
5131
|
+
REGEX_AT_REF = /@\[(.*?)\]/g;
|
|
5132
|
+
REGEX_COLON_L = /:L/gi;
|
|
5133
|
+
REGEX_MD_LINK_PAREN = /\[(.*?)\]\s*\((.*?)\)/;
|
|
5134
|
+
REGEX_MD_LINK_BRACKET = /\[(.*?)\]\s*\[(.*?)\]/;
|
|
5135
|
+
REGEX_LATEX_CMD = /\\(\w+)\{([^{}]*)\}/;
|
|
4842
5136
|
parseMathSymbols = (content) => {
|
|
4843
|
-
return content.replace(
|
|
5137
|
+
return content.replace(REGEX_MATH_BARE_PAREN, (match) => match.includes("(") ? "(" : ")").replace(REGEX_MATH_BARE_BRACK, (match) => match.includes("[") ? "[" : "]").replace(REGEX_MATH_MULT, "\xD7").replace(REGEX_MATH_DIV, "\xF7").replace(REGEX_MATH_CDOT, "\u22C5").replace(REGEX_MATH_INFTY, "\u221E").replace(REGEX_MATH_PM, "\xB1").replace(REGEX_MATH_LEQ, "\u2264").replace(REGEX_MATH_GEQ, "\u2265").replace(REGEX_MATH_NEQ, "\u2260").replace(REGEX_MATH_SQRT1, "\u221A($1)").replace(REGEX_MATH_SQRT2, "\u221A($1)").replace(REGEX_MATH_ALPHA, "\u03B1").replace(REGEX_MATH_BETA, "\u03B2").replace(REGEX_MATH_THETA, "\u03B8").replace(REGEX_MATH_PI, "\u03C0").replace(REGEX_MATH_APPROX, "\u2248").replace(REGEX_MATH_DELTA, "\u0394").replace(REGEX_MATH_SIGMA, "\u03C3").replace(REGEX_MATH_SUM, "\u03A3").replace(REGEX_MATH_PROD, "\u03A0").replace(REGEX_MATH_ARROW, "\u2192").replace(REGEX_MATH_LONE_LR, "").replace(REGEX_MATH_LR_PAREN, (match) => match.includes("left") ? "(" : ")").replace(REGEX_MATH_LR_BRACK, (match) => match.includes("left") ? "[" : "]").replace(REGEX_MATH_LR_CURLY, (match) => match.includes("{") ? "{" : "}").replace(REGEX_MATH_TEXT1, "$1").replace(REGEX_MATH_TEXT2, "$1").replace(REGEX_MATH_PCT, "%");
|
|
4844
5138
|
};
|
|
4845
5139
|
SYNTAX_KEYWORDS = /\b(const|let|var|function|return|if|else|for|while|do|switch|case|break|continue|import|export|from|default|class|extends|new|this|typeof|instanceof|try|catch|finally|throw|async|await|yield|public|private|protected|static|void|int|float|double|char|bool|boolean|def|elif|fn|pub|mut|struct|impl|enum|type|interface|package|namespace|using|include|define|nil|None|self|lambda)\b/;
|
|
4846
5140
|
SYNTAX_RULES = [
|
|
@@ -4917,7 +5211,7 @@ var init_ChatLayout = __esm({
|
|
|
4917
5211
|
const parts = formatted.split(REGEX_LATEX_STYLE);
|
|
4918
5212
|
return /* @__PURE__ */ React4.createElement(React4.Fragment, { key }, parts.map((p, idx) => {
|
|
4919
5213
|
if (p.startsWith("\\")) {
|
|
4920
|
-
const match = p.match(
|
|
5214
|
+
const match = p.match(REGEX_LATEX_CMD);
|
|
4921
5215
|
if (match) {
|
|
4922
5216
|
const cmd = match[1];
|
|
4923
5217
|
const inner = match[2];
|
|
@@ -4935,12 +5229,13 @@ var init_ChatLayout = __esm({
|
|
|
4935
5229
|
if (!text) return null;
|
|
4936
5230
|
const colors = getThemeColors(theme);
|
|
4937
5231
|
const textColor = color || colors.text;
|
|
5232
|
+
const highlightColor = colors.codeText || colors.logoGradient && colors.logoGradient[0] || colors.info || colors.secondary || "cyan";
|
|
4938
5233
|
const parts = text.split(REGEX_MD_TOKENS);
|
|
4939
5234
|
return /* @__PURE__ */ React4.createElement(Text4, { color: textColor, wrap: "anywhere", italic }, parts.map((part, j) => {
|
|
4940
5235
|
if (!part) return null;
|
|
4941
5236
|
if (part.startsWith("```") && part.endsWith("```")) {
|
|
4942
5237
|
const content = part.slice(3, -3);
|
|
4943
|
-
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color:
|
|
5238
|
+
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color: highlightColor }, content);
|
|
4944
5239
|
}
|
|
4945
5240
|
if (part.startsWith("**") && part.endsWith("**")) {
|
|
4946
5241
|
return /* @__PURE__ */ React4.createElement(Text4, { key: j, bold: true, color: textColor }, /* @__PURE__ */ React4.createElement(InlineMarkdown, { text: part.slice(2, -2), color: textColor, theme }));
|
|
@@ -4950,31 +5245,35 @@ var init_ChatLayout = __esm({
|
|
|
4950
5245
|
}
|
|
4951
5246
|
if (part.startsWith("`") && part.endsWith("`")) {
|
|
4952
5247
|
const content = part.slice(1, -1);
|
|
4953
|
-
const formatted = content.replace(
|
|
4954
|
-
return p1.split("/").pop().split("\\").pop().replace(
|
|
5248
|
+
const formatted = content.replace(REGEX_AT_REF, (match, p1) => {
|
|
5249
|
+
return p1.split("/").pop().split("\\").pop().replace(REGEX_COLON_L, "#L");
|
|
4955
5250
|
});
|
|
4956
5251
|
const hasFileRef = content.includes("@[");
|
|
4957
|
-
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color:
|
|
5252
|
+
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color: highlightColor, bold: hasFileRef }, formatted);
|
|
4958
5253
|
}
|
|
4959
5254
|
if (part.startsWith("@[") && part.endsWith("]")) {
|
|
4960
5255
|
const filePath = part.slice(2, -1);
|
|
4961
|
-
const basename = filePath.split("/").pop().split("\\").pop().replace(
|
|
4962
|
-
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color:
|
|
5256
|
+
const basename = filePath.split("/").pop().split("\\").pop().replace(REGEX_COLON_L, "#L");
|
|
5257
|
+
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color: highlightColor, bold: true }, basename);
|
|
5258
|
+
}
|
|
5259
|
+
if (part.startsWith("\\(") && part.endsWith("\\)") || part.startsWith("\\[") && part.endsWith("\\]")) {
|
|
5260
|
+
const content = part.slice(2, -2);
|
|
5261
|
+
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color: "yellow" }, renderLatexText(content, j));
|
|
4963
5262
|
}
|
|
4964
5263
|
if (part.startsWith("$") && part.endsWith("$")) {
|
|
4965
5264
|
const content = part.slice(1, -1);
|
|
4966
5265
|
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color: "yellow" }, renderLatexText(content, j));
|
|
4967
5266
|
}
|
|
4968
5267
|
if (part.startsWith("[") && (part.includes("](") || part.includes("] ("))) {
|
|
4969
|
-
const match = part.match(
|
|
4970
|
-
if (match) return /* @__PURE__ */ React4.createElement(Text4, { key: j }, /* @__PURE__ */ React4.createElement(Text4, { color:
|
|
5268
|
+
const match = part.match(REGEX_MD_LINK_PAREN);
|
|
5269
|
+
if (match) return /* @__PURE__ */ React4.createElement(Text4, { key: j }, /* @__PURE__ */ React4.createElement(Text4, { color: highlightColor, underline: true, bold: true }, match[1]), /* @__PURE__ */ React4.createElement(Text4, { color: "gray", italic: true }, " (", match[2], ")"));
|
|
4971
5270
|
}
|
|
4972
5271
|
if (part.startsWith("[") && (part.includes("][") || part.includes("] ["))) {
|
|
4973
|
-
const match = part.match(
|
|
4974
|
-
if (match) return /* @__PURE__ */ React4.createElement(Text4, { key: j }, /* @__PURE__ */ React4.createElement(Text4, { color:
|
|
5272
|
+
const match = part.match(REGEX_MD_LINK_BRACKET);
|
|
5273
|
+
if (match) return /* @__PURE__ */ React4.createElement(Text4, { key: j }, /* @__PURE__ */ React4.createElement(Text4, { color: highlightColor, underline: true, bold: true }, match[1]), /* @__PURE__ */ React4.createElement(Text4, { color: "gray", italic: true }, " [", match[2], "]"));
|
|
4975
5274
|
}
|
|
4976
5275
|
if (part.startsWith("http")) {
|
|
4977
|
-
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color:
|
|
5276
|
+
return /* @__PURE__ */ React4.createElement(Text4, { key: j, color: highlightColor, underline: true, italic: true }, part);
|
|
4978
5277
|
}
|
|
4979
5278
|
return renderLatexText(part, j);
|
|
4980
5279
|
}));
|
|
@@ -4982,6 +5281,7 @@ var init_ChatLayout = __esm({
|
|
|
4982
5281
|
TableRenderer = React4.memo(({ buffer, terminalWidth = 80, theme = "Dark" }) => {
|
|
4983
5282
|
if (buffer.length < 2) return null;
|
|
4984
5283
|
const colors = getThemeColors(theme);
|
|
5284
|
+
const headerColor = colors.codeText || colors.secondary || colors.info || "cyan";
|
|
4985
5285
|
const rows = buffer.map((line) => {
|
|
4986
5286
|
const parts = line.split("|");
|
|
4987
5287
|
if (parts[0] !== void 0 && parts[0].trim() === "") parts.shift();
|
|
@@ -4995,7 +5295,7 @@ var init_ChatLayout = __esm({
|
|
|
4995
5295
|
const colChars = Math.floor(availableWidth / header.length) - 2;
|
|
4996
5296
|
return (
|
|
4997
5297
|
// Table MarginY here
|
|
4998
|
-
/* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", borderStyle: "round", borderColor: colors.borderMuted, paddingX: 1, marginY: 0, width: terminalWidth - 2 }, /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "row", borderStyle: "single", borderBottom: true, borderTop: false, borderLeft: false, borderRight: false, borderColor: colors.borderMuted, marginBottom: 1, paddingBottom: 0, width: "100%" }, header.map((cell, i) => /* @__PURE__ */ React4.createElement(Box3, { key: i, flexBasis: `${colPercentage}%`, flexGrow: 1, flexShrink: 0, paddingRight: 2 }, /* @__PURE__ */ React4.createElement(InlineMarkdown, { text: wrapText(cell, colChars), color:
|
|
5298
|
+
/* @__PURE__ */ React4.createElement(Box3, { flexDirection: "column", borderStyle: "round", borderColor: colors.borderMuted, paddingX: 1, marginY: 0, width: terminalWidth - 2 }, /* @__PURE__ */ React4.createElement(Box3, { flexDirection: "row", borderStyle: "single", borderBottom: true, borderTop: false, borderLeft: false, borderRight: false, borderColor: colors.borderMuted, marginBottom: 1, paddingBottom: 0, width: "100%" }, header.map((cell, i) => /* @__PURE__ */ React4.createElement(Box3, { key: i, flexBasis: `${colPercentage}%`, flexGrow: 1, flexShrink: 0, paddingRight: 2 }, /* @__PURE__ */ React4.createElement(InlineMarkdown, { text: wrapText(cell, colChars), color: headerColor, theme })))), data.map((row, ri) => /* @__PURE__ */ React4.createElement(Box3, { key: ri, flexDirection: "row", marginBottom: ri === data.length - 1 ? 0 : 1, width: "100%" }, row.map((cell, ci) => /* @__PURE__ */ React4.createElement(Box3, { key: ci, flexBasis: `${colPercentage}%`, flexGrow: 1, flexShrink: 0, paddingRight: 2, flexDirection: "column" }, /* @__PURE__ */ React4.createElement(InlineMarkdown, { text: wrapText(cell, colChars), color: colors.text, theme }))))))
|
|
4999
5299
|
);
|
|
5000
5300
|
});
|
|
5001
5301
|
MarkdownText = React4.memo(({ text, color, columns = 80, italic = false, theme = "Dark" }) => {
|
|
@@ -5373,7 +5673,9 @@ var init_ChatLayout = __esm({
|
|
|
5373
5673
|
{ cmd: "/mode", desc: "Toggle Flux/Flow modes" },
|
|
5374
5674
|
{ cmd: "/thinking", desc: "Set AI reasoning depth" },
|
|
5375
5675
|
{ cmd: "/model", desc: "Switch AI model" },
|
|
5676
|
+
{ cmd: "/provider", desc: "Select AI Provider" },
|
|
5376
5677
|
{ cmd: "/settings", desc: "Configure system prefs" },
|
|
5678
|
+
{ cmd: "/theme", desc: "Customize UI color theme" },
|
|
5377
5679
|
{ cmd: "/key", desc: "Manage API keys" },
|
|
5378
5680
|
{ cmd: "/profile", desc: "Edit developer persona" },
|
|
5379
5681
|
{ cmd: "/memory", desc: "Manage agent memory" },
|
|
@@ -6029,7 +6331,7 @@ var init_arg_parser = __esm({
|
|
|
6029
6331
|
|
|
6030
6332
|
// src/data/main_tools.js
|
|
6031
6333
|
import { execSync } from "child_process";
|
|
6032
|
-
var _isPsAvailable, isPsAvailable, TOOL_PROTOCOL;
|
|
6334
|
+
var _isPsAvailable, isPsAvailable, _cachedAdvanceRollback, TOOL_PROTOCOL;
|
|
6033
6335
|
var init_main_tools = __esm({
|
|
6034
6336
|
async "src/data/main_tools.js"() {
|
|
6035
6337
|
await init_exec_command();
|
|
@@ -6045,45 +6347,49 @@ var init_main_tools = __esm({
|
|
|
6045
6347
|
}
|
|
6046
6348
|
return _isPsAvailable;
|
|
6047
6349
|
};
|
|
6048
|
-
|
|
6350
|
+
_cachedAdvanceRollback = null;
|
|
6351
|
+
TOOL_PROTOCOL = (mode, osDetected, isMultiModal, aiProvider, advanceRollback = false, enableSubAgents = true) => {
|
|
6352
|
+
if (_cachedAdvanceRollback === null) {
|
|
6353
|
+
_cachedAdvanceRollback = advanceRollback;
|
|
6354
|
+
}
|
|
6355
|
+
return `
|
|
6049
6356
|
-- TOOL DEFINITIONS --
|
|
6050
|
-
|
|
6357
|
+
Tool calls: ONLY use [tool:functions.ToolName(args)]
|
|
6051
6358
|
**NO OTHER SYNTAX/MARKERS/BOUNDARY ALLOWED**
|
|
6052
6359
|
|
|
6053
6360
|
**TOOL USAGE POLICY:**
|
|
6054
|
-
-
|
|
6055
|
-
${mode === "Flux" ? "-
|
|
6361
|
+
- MAX 3 TOOL CALLS/TURN${mode === "Flux" ? " (Todo: 3+, Run: max 1 or 2 consecutive)" : ""}
|
|
6362
|
+
${mode === "Flux" ? "- Same file, many edits? Prefer multi search-replace in Patch \u2190 **HIGHLY RECOMMENDED**\n- Tool denied?Use Ask immediately for user guidance.NEVER proceed blindly/end turn \u2190 ** MANDATORY **\n- FileMap \u2192 ReadFile for efficient file understanding\n- Need specific text ? SearchKeyword > Guessing/ReadFile\n- Huge files ? SearchKeyword > FileMap/Full Read\n- No tool spamming\n- **Update/complete Todos from realtime progress EVERY TURN**" : ""}
|
|
6056
6363
|
${mode === "Flux" ? "- **File Tools >> Code in chat**\n\n" : ""}- COMMUNICATION TOOLS -
|
|
6057
|
-
1. [tool:functions.Ask(question="...", optionA="option::description", ...MAX 4)]. Ambiguity
|
|
6364
|
+
1. [tool:functions.Ask(question="...", optionA="option::description", ...MAX 4)]. Ambiguity: MUST ask for path divergence, security or risk. Ask, don't finish/guess. Suggest best options; no preferences. Keep options short
|
|
6058
6365
|
|
|
6059
6366
|
- WEB TOOLS -
|
|
6060
|
-
1. [tool:functions.WebSearch(query="...", aiMode="true optional", limit=number)]. Limit 3-10 (
|
|
6367
|
+
1. [tool:functions.WebSearch(query="...", aiMode="true optional", limit=number)]. Limit 3-10 (aiMode ignores). Usage: unknown info/docs. aiMode: LLM search (default: false)
|
|
6061
6368
|
2. [tool:functions.WebScrape(url="...")]. Proactive use for specific webpage/docs/api
|
|
6062
6369
|
|
|
6063
|
-
${mode === "Flux" ? `- WORKSPACE TOOLS (path = relative
|
|
6370
|
+
${mode === "Flux" ? `- WORKSPACE TOOLS (path = relative; FIRST ARGUMENT, path separator: '/') -
|
|
6064
6371
|
1. [tool:functions.ReadFile(path="...", startLine=number, endLine=number)]. ${aiProvider !== "Google" ? `${isMultiModal ? `Supports images/docs. **User gives image/doc: VIEW FIRST**` : `No Multimodal support`}` : `Supports images/docs. **User gives image/doc: VIEW FIRST**`}
|
|
6065
6372
|
2. [tool:functions.ReadFolder(path="...")]. Detailed DIR stats including File Sizes
|
|
6066
6373
|
3. [tool:functions.FileMap(path="path/file")]. Shows file structure, functions, class, import/export, variables
|
|
6067
|
-
4. [tool:functions.PatchFile(path="...", replaceContent1="full
|
|
6374
|
+
4. [tool:functions.PatchFile(path="...", replaceContent1="full lines", newContent1="...", ...MAX 10)]. Surgical patch. Multiple patches same file? Use replaceContent2/newContent2... Unsure? ReadFile. MUST VERIFY DIFF
|
|
6068
6375
|
5. [tool:functions.WriteFile(path="...", content="...")]. Creates/Overwrites. File Exist? PatchFile > WriteFile. Verify Imports
|
|
6069
|
-
6. [tool:functions.SearchKeyword(keyword="...",
|
|
6070
|
-
7. [tool:functions.Run(command="...")]. Runs ${osDetected === "Windows" ? isPsAvailable() ? `WINDOWS POWERSHELL
|
|
6071
|
-
8. [tool:functions.Todo(method="create/append/get", tasks=[ARRAY OF STRINGS], markDone=[ARRAY OF TASK STRINGS])]. Task
|
|
6072
|
-
|
|
6073
|
-
${advanceRollback ? `
|
|
6376
|
+
6. [tool:functions.SearchKeyword(keyword="...", path="optional, target directory or filename", subString="true optional", regex="false for keyword, optional")]. Project-wide search. path limits scope to a file/dir. Find definitions/logic without full reads. Locate relevant code. Defaults: subString=false, regex=true
|
|
6377
|
+
7. [tool:functions.Run(command="...")]. Runs ${osDetected === "Windows" ? isPsAvailable() ? `WINDOWS POWERSHELL` : `WINDOWS CMD ONLY` : `BASH`} command. Destructive/Irreversible ops \u2192 Ask user
|
|
6378
|
+
8. [tool:functions.Todo(method="create/append/get", tasks=[ARRAY OF STRINGS], markDone=[ARRAY OF TASK STRINGS])]. Task list, no Markdown in arrays. Analyze request: if multi-task, break it down & create Todos BEFORE starting. \`tasks\` & \`markDone\` optional with \`get\`. Use \`get + markDone\` to complete tasks, or \`create + markDone\` to create completed tasks. **UPDATE EVERY TURN**${enableSubAgents ? '\n9. [tool:functions.Await(time="seconds")]. For waiting without exiting agent loop, 15s - 180s' : ""}
|
|
6379
|
+
${_cachedAdvanceRollback ? `
|
|
6074
6380
|
- EMERGENCY SAFETY TOOLS -
|
|
6075
|
-
Info:
|
|
6076
|
-
1. [tool:functions.EmergencyRollback(method="getCheckpoint/forceRevert", id="...")]. Rollback workspace to a
|
|
6077
|
-
|
|
6078
|
-
` : ""}
|
|
6381
|
+
Info: \`initial\` = user prompt for current task. Revert \`id\` = turn BEFORE the disaster tool (e.g. disaster:\`turn_3\` \u2192 revert:\`turn_2\`). Reason explicitly if needed.
|
|
6382
|
+
1. [tool:functions.EmergencyRollback(method="getCheckpoint/forceRevert", id="...")]. Rollback workspace to a checkpoint in THIS agent loop.
|
|
6383
|
+
Use ONLY for catastrophic/codebase corruption. Before ending loop, verify no catastrophe. \`id\` not required with \`getCheckPoint\`.
|
|
6384
|
+
` : ""}${enableSubAgents ? `
|
|
6079
6385
|
- SUB AGENT TOOLS -
|
|
6080
|
-
**PROACTIVE
|
|
6081
|
-
|
|
6082
|
-
- Invoke (async
|
|
6083
|
-
- InvokeSync (sync
|
|
6084
|
-
1. [agent:generalist.InvokeSync/Invoke(title="...", task="...")]. Task must
|
|
6085
|
-
2. [agent:generalist.GetProgress(id="...")].
|
|
6086
|
-
3. [agent:generalist.Cancel(id="...")].
|
|
6386
|
+
**PROACTIVE sub-agent use HIGHLY RECOMMENDED. Prefer for any task with even slight benefit, no user nudge needed.**
|
|
6387
|
+
Invocations:
|
|
6388
|
+
- Invoke (async/background, \u22647 parallel). Parallelize long tasks. NEVER repeat while active
|
|
6389
|
+
- InvokeSync (sync/blocking). Sequential, repetitive or delegated tasks. Saves tokens/cost
|
|
6390
|
+
1. [agent:generalist.InvokeSync/Invoke(title="...", task="...")]. Task must be detailed: exact file paths, imports/exports, dependencies & folder structure
|
|
6391
|
+
2. [agent:generalist.GetProgress(id="...")]. Check async task progress. If still running, continue your work. Wait exponentially longer between checks. NEVER spam GetProgress
|
|
6392
|
+
3. [agent:generalist.Cancel(id="...")]. Cancel async task ONLY if stalled (2m+) or clearly incorrect` : ""}`.trim() : `- CREATIVE TOOLS (path = relative to CWD & WILL BE FIRST ARGUMENT, path separator: '/') -
|
|
6087
6393
|
1. [tool:functions.WritePDF(path="...", content="...", orientation="...")]. PROACTIVE A4 PAGE BREAKS MUST IN CSS. HTML/CSS for PREMIUM layout, stable margins & headers/footers, NO WATERMARKS
|
|
6088
6394
|
2. [tool:functions.WriteDoc(path="...", content="...")]. A4 Word document, NO WATERMARKS, stable margins & headers/footers
|
|
6089
6395
|
- WORKSPACE & SUB AGENT TOOLS ARE NOT AVAILABLE IN FLOW`.trim()}
|
|
@@ -6092,6 +6398,7 @@ Invocation Types:
|
|
|
6092
6398
|
- **Escape quotes: \\" for code strings**
|
|
6093
6399
|
- **Literal escapes: Double-escape sequences (e.g., \\\\n)**
|
|
6094
6400
|
- **File structure: Real newlines for code formatting**`.trim();
|
|
6401
|
+
};
|
|
6095
6402
|
}
|
|
6096
6403
|
});
|
|
6097
6404
|
|
|
@@ -6784,13 +7091,21 @@ function SettingsMenu({
|
|
|
6784
7091
|
saveSettings: saveSettings2,
|
|
6785
7092
|
quotas,
|
|
6786
7093
|
setMessages,
|
|
6787
|
-
aiProvider
|
|
7094
|
+
aiProvider,
|
|
7095
|
+
initialSelectingTheme = false,
|
|
7096
|
+
onCloseTheme = null,
|
|
7097
|
+
setProviderReturnView = null
|
|
6788
7098
|
}) {
|
|
7099
|
+
const activeTheme = systemSettings.theme === "Chaos" || systemSettings.theme === "Mystery" ? "Mystery" : systemSettings.theme || "Dark";
|
|
7100
|
+
const defaultIdx = themeOptions.indexOf(activeTheme);
|
|
6789
7101
|
const [activeColumn, setActiveColumn] = useState6("categories");
|
|
6790
7102
|
const [selectedCategoryIndex, setSelectedCategoryIndex] = useState6(0);
|
|
6791
7103
|
const [selectedItemIndex, setSelectedItemIndex] = useState6(0);
|
|
6792
7104
|
const [editingItem, setEditingItem] = useState6(null);
|
|
6793
7105
|
const [editValue, setEditValue] = useState6("");
|
|
7106
|
+
const [isSelectingTheme, setIsSelectingTheme] = useState6(initialSelectingTheme);
|
|
7107
|
+
const [themeIndex, setThemeIndex] = useState6(defaultIdx >= 0 ? defaultIdx : 0);
|
|
7108
|
+
const [initialTheme, setInitialTheme] = useState6(systemSettings.theme || "Dark");
|
|
6794
7109
|
const [currentMemory, setCurrentMemory] = useState6(0);
|
|
6795
7110
|
const [maxMemory, setMaxMemory] = useState6(0);
|
|
6796
7111
|
const [memoryUnit, setMemoryUnit] = useState6("MB");
|
|
@@ -6854,6 +7169,7 @@ function SettingsMenu({
|
|
|
6854
7169
|
];
|
|
6855
7170
|
case "other":
|
|
6856
7171
|
return [
|
|
7172
|
+
{ label: "Sub-Agents", value: "subAgents", status: systemSettings.subAgents !== false ? "ON" : "OFF" },
|
|
6857
7173
|
{ label: "Preserve Thinking", value: "preserveThinking", status: systemSettings.preserveThinking !== false ? "ON" : "OFF" },
|
|
6858
7174
|
{ label: "Download Language Parsers", value: "parserDownload", status: "ACTION" }
|
|
6859
7175
|
];
|
|
@@ -6864,6 +7180,28 @@ function SettingsMenu({
|
|
|
6864
7180
|
const currentCatId = CATEGORIES[selectedCategoryIndex].id;
|
|
6865
7181
|
const currentItems = getCategoryItems(currentCatId);
|
|
6866
7182
|
useInput3((input, key) => {
|
|
7183
|
+
if (isSelectingTheme) {
|
|
7184
|
+
if (key.upArrow) {
|
|
7185
|
+
const nextIdx = (themeIndex - 1 + themeOptions.length) % themeOptions.length;
|
|
7186
|
+
setThemeIndex(nextIdx);
|
|
7187
|
+
} else if (key.downArrow) {
|
|
7188
|
+
const nextIdx = (themeIndex + 1) % themeOptions.length;
|
|
7189
|
+
setThemeIndex(nextIdx);
|
|
7190
|
+
} else if (key.return) {
|
|
7191
|
+
const selectedTheme = themeOptions[themeIndex];
|
|
7192
|
+
setSystemSettings((s) => {
|
|
7193
|
+
const newSysSettings = { ...s, theme: selectedTheme };
|
|
7194
|
+
saveSettings2({ systemSettings: newSysSettings, apiTier, quotas });
|
|
7195
|
+
return newSysSettings;
|
|
7196
|
+
});
|
|
7197
|
+
if (onCloseTheme) onCloseTheme();
|
|
7198
|
+
else setIsSelectingTheme(false);
|
|
7199
|
+
} else if (key.escape) {
|
|
7200
|
+
if (onCloseTheme) onCloseTheme();
|
|
7201
|
+
else setIsSelectingTheme(false);
|
|
7202
|
+
}
|
|
7203
|
+
return;
|
|
7204
|
+
}
|
|
6867
7205
|
if (editingItem) {
|
|
6868
7206
|
if (key.escape) {
|
|
6869
7207
|
setEditingItem(null);
|
|
@@ -6973,6 +7311,7 @@ function SettingsMenu({
|
|
|
6973
7311
|
} else if (item.value === "apiTier") {
|
|
6974
7312
|
setActiveView("apiTier");
|
|
6975
7313
|
} else if (item.value === "aiProvider") {
|
|
7314
|
+
if (setProviderReturnView) setProviderReturnView("settings");
|
|
6976
7315
|
setActiveView("selectProvider");
|
|
6977
7316
|
} else if (item.value === "advanceRollback") {
|
|
6978
7317
|
if (!systemSettings.advanceRollback) {
|
|
@@ -7011,6 +7350,12 @@ function SettingsMenu({
|
|
|
7011
7350
|
setActiveView("updateManager");
|
|
7012
7351
|
} else if (item.value === "parserDownload") {
|
|
7013
7352
|
setActiveView("parserDownload");
|
|
7353
|
+
} else if (item.value === "subAgents") {
|
|
7354
|
+
setSystemSettings((s) => {
|
|
7355
|
+
const newSysSettings = { ...s, subAgents: s.subAgents === false ? true : false };
|
|
7356
|
+
saveSettings2({ systemSettings: newSysSettings, apiTier, quotas });
|
|
7357
|
+
return newSysSettings;
|
|
7358
|
+
});
|
|
7014
7359
|
} else if (item.value === "preserveThinking") {
|
|
7015
7360
|
setSystemSettings((s) => {
|
|
7016
7361
|
const newSysSettings = { ...s, preserveThinking: s.preserveThinking === false ? true : false };
|
|
@@ -7036,18 +7381,24 @@ function SettingsMenu({
|
|
|
7036
7381
|
return newSysSettings;
|
|
7037
7382
|
});
|
|
7038
7383
|
} else if (item.value === "theme") {
|
|
7039
|
-
const
|
|
7040
|
-
const
|
|
7041
|
-
|
|
7042
|
-
|
|
7043
|
-
|
|
7044
|
-
const newSysSettings = { ...s, theme: options[nextIndex] };
|
|
7045
|
-
saveSettings2({ systemSettings: newSysSettings, apiTier, quotas });
|
|
7046
|
-
return newSysSettings;
|
|
7047
|
-
});
|
|
7384
|
+
const activeTheme2 = systemSettings.theme === "Chaos" || systemSettings.theme === "Mystery" ? "Mystery" : systemSettings.theme || "Dark";
|
|
7385
|
+
const idx = themeOptions.indexOf(activeTheme2);
|
|
7386
|
+
setThemeIndex(idx >= 0 ? idx : 0);
|
|
7387
|
+
setInitialTheme(systemSettings.theme || "Dark");
|
|
7388
|
+
setIsSelectingTheme(true);
|
|
7048
7389
|
}
|
|
7049
7390
|
};
|
|
7050
7391
|
const colors = getThemeColors(systemSettings.theme);
|
|
7392
|
+
if (isSelectingTheme) {
|
|
7393
|
+
const previewThemeName = themeOptions[themeIndex];
|
|
7394
|
+
const previewColors = getThemeColors(previewThemeName);
|
|
7395
|
+
return /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column", borderStyle: "round", borderColor: previewColors.border, padding: 1, width: "100%", minHeight: 32 }, /* @__PURE__ */ React7.createElement(Box6, { marginBottom: 1 }, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.text, bold: true }, "Choose your color scheme:")), /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "row", width: "100%", flexGrow: 1 }, /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column", width: "30%", paddingRight: 1 }, themeOptions.map((tName, index) => {
|
|
7396
|
+
const isSelected = themeIndex === index;
|
|
7397
|
+
const isSaved = (systemSettings.theme || "Dark") === tName;
|
|
7398
|
+
const isForest = tName === "Forest Sprite";
|
|
7399
|
+
return /* @__PURE__ */ React7.createElement(Box6, { key: tName, paddingX: 0 }, /* @__PURE__ */ React7.createElement(Text7, { color: isSelected ? previewColors.text : previewColors.textDim, bold: isSelected }, isSelected ? "> " : " ", tName, isForest && /* @__PURE__ */ React7.createElement(Text7, { color: isSelected ? previewColors.success || "#52b788" : "green", bold: true }, " \u2605"), isSaved ? /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.primary || "cyan", italic: true }, " (saved)") : ""));
|
|
7400
|
+
})), /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column", flexGrow: 1, borderStyle: "round", borderColor: previewColors.borderMuted, paddingX: 2, paddingY: 1, backgroundColor: previewColors.cardBg }, /* @__PURE__ */ React7.createElement(Box6, { marginBottom: 1 }, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.secondary || "cyan", bold: true }, "> ", "you: "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.text }, "add a greeting function")), /* @__PURE__ */ React7.createElement(Box6, { marginBottom: 1 }, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.success || "green" }, " Here's the change:")), /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column", marginLeft: 2, marginBottom: 1 }, /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.textDim }, "3 "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.textDim }, ' import "fmt"')), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.textDim }, "4"), /* @__PURE__ */ React7.createElement(Box6, { backgroundColor: previewColors.diffRemovalBg }, /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffRemovalNum || previewColors.diffRemovalText }, "5 "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffRemovalPrefix || previewColors.diffRemovalText }, "- "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffRemovalText }, "func "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffRemovalHighlightColor || previewColors.diffRemovalText, backgroundColor: previewColors.diffRemovalHighlightBg, bold: true }, "main()"), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffRemovalText }, " {"))), /* @__PURE__ */ React7.createElement(Box6, { backgroundColor: previewColors.diffAdditionBg }, /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionNum || previewColors.diffAdditionText }, "5 "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionPrefix || previewColors.diffAdditionText }, "+ "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionText }, "func "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionHighlightColor || previewColors.diffAdditionText, backgroundColor: previewColors.diffAdditionHighlightBg, bold: true }, "greet(name string)"), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionText }, " {"))), /* @__PURE__ */ React7.createElement(Box6, { backgroundColor: previewColors.diffAdditionBg }, /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionNum || previewColors.diffAdditionText }, "6 "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionPrefix || previewColors.diffAdditionText }, "+ "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionText }, " "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.diffAdditionHighlightColor || previewColors.diffAdditionText, backgroundColor: previewColors.diffAdditionHighlightBg }, 'fmt.Printf("Hello, %s!\\n", name)'))), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.textDim }, "7 }")), /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column", marginTop: 1, marginBottom: 1 }, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.textDim }, "\u25BE Thought Process"), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.textMuted }, " I need to add a greeting function. I'll use fmt.Printf.")), /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column" }, /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.warning || "yellow" }, "\u2699 tool: "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.text }, "write_file main.go")), /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.accent || "magenta" }, "\u29BF task: "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.text }, "Implementing greeting")), /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.danger || "red" }, "X error: "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.text }, "compilation failed")), /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.warning || "yellow" }, "\u26A0 warning: "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.text }, "deprecation warning")), /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.info || "blue" }, "\u2192 link: "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.info || "blue", underline: true }, "file:///path/to/main.go")), /* @__PURE__ */ React7.createElement(Text7, null, /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.accent || "magenta" }, "\u2605 accent: "), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.text }, "highlighted text")), /* @__PURE__ */ React7.createElement(Text7, { color: previewColors.textDim }, "\xB7 dim: press Enter to continue")))), /* @__PURE__ */ React7.createElement(Box6, { paddingX: 1, marginTop: 1, flexDirection: "row", justifyContent: "space-between" }, /* @__PURE__ */ React7.createElement(Text7, { color: "gray", italic: true }, "\u25B2\u25BC Navigate \u2022 ENTER to Select \u2022 ESC to Cancel"), /* @__PURE__ */ React7.createElement(Text7, { color: "gray" }, "Previewing: ", themeOptions[themeIndex], themeOptions[themeIndex] === "Forest Sprite" ? " \u2605" : "")));
|
|
7401
|
+
}
|
|
7051
7402
|
return /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column", borderStyle: "round", borderColor: colors.border, padding: 0, width: "100%", minHeight: 32 }, /* @__PURE__ */ React7.createElement(Box6, { paddingX: 1, paddingY: 0, marginBottom: 0, borderStyle: "single", borderColor: colors.borderMuted, width: "100%" }, /* @__PURE__ */ React7.createElement(Text7, { color: colors.text, bold: true }, "SYSTEM CONFIGURATION")), /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "row", width: "100%", minHeight: 26 }, /* @__PURE__ */ React7.createElement(Box6, { flexDirection: "column", width: "30%", maxWidth: 40, borderStyle: "round", borderColor: activeColumn === "categories" ? colors.border : colors.borderMuted, padding: 1, paddingY: 0 }, /* @__PURE__ */ React7.createElement(Box6, { marginBottom: 1 }, /* @__PURE__ */ React7.createElement(Text7, { color: activeColumn === "categories" ? colors.text : colors.textDim, bold: true, underline: true }, "CATEGORIES")), CATEGORIES.map((cat, index) => {
|
|
7052
7403
|
const isSelected = selectedCategoryIndex === index;
|
|
7053
7404
|
const isExit = cat.id === "exit";
|
|
@@ -7136,11 +7487,12 @@ function SettingsMenu({
|
|
|
7136
7487
|
return elements;
|
|
7137
7488
|
})() : /* @__PURE__ */ React7.createElement(Box6, { paddingX: 1, flexDirection: "column", width: "100%" }, /* @__PURE__ */ React7.createElement(Text7, { color: "gray", italic: true }, CATEGORIES[selectedCategoryIndex].desc), currentCatId === "exit" && /* @__PURE__ */ React7.createElement(React7.Fragment, null, /* @__PURE__ */ React7.createElement(Box6, { key: "pty-notice", marginTop: 19, paddingX: 0 }, /* @__PURE__ */ React7.createElement(Text7, { color: colors.text }, isPtyAvailable ? "\u2713 Advance Interactive Terminal Supported" : "\u26A0 Interactive Terminal is Limited")), /* @__PURE__ */ React7.createElement(Box6, { key: "memory-load-2026", paddingX: 0 }, /* @__PURE__ */ React7.createElement(Text7, { color: "gray" }, "Memory Load: ", currentMemory, "/", maxMemory, " ", memoryUnit)))))), /* @__PURE__ */ React7.createElement(Box6, { paddingX: 1, marginTop: 0, flexDirection: "row", justifyContent: "space-between" }, /* @__PURE__ */ React7.createElement(Text7, { color: "gray", italic: true }, activeColumn === "categories" ? "\u25B2\u25BC Select Category \u2022 Enter/\u25BA to configure" : "\u25B2\u25BC Select Option \u2022 Enter to Toggle \u2022 \u25C4/ESC to go back"), activeColumn === "categories" && /* @__PURE__ */ React7.createElement(Text7, { color: "gray" }, CATEGORIES[selectedCategoryIndex].desc)));
|
|
7138
7489
|
}
|
|
7139
|
-
var CATEGORIES, getActivePreset, truncateCSV;
|
|
7490
|
+
var themeOptions, CATEGORIES, getActivePreset, truncateCSV;
|
|
7140
7491
|
var init_SettingsMenu = __esm({
|
|
7141
7492
|
async "src/components/SettingsMenu.jsx"() {
|
|
7142
7493
|
await init_exec_command();
|
|
7143
7494
|
init_theme();
|
|
7495
|
+
themeOptions = [...Object.keys(THEMES), "Mystery"];
|
|
7144
7496
|
CATEGORIES = [
|
|
7145
7497
|
{ id: "appearance", label: "Appearance", desc: "Customize UI theme & rendering options" },
|
|
7146
7498
|
{ id: "memory", label: "Memory", desc: "Manage system context & agent's memory" },
|
|
@@ -7376,8 +7728,6 @@ Explicit Triggers for permanent memory:
|
|
|
7376
7728
|
Usage Rules:
|
|
7377
7729
|
- Frequency for 'user' action: Based on explicit triggers.
|
|
7378
7730
|
- IF YOU WANT TO SAVE SOMETHING, BUT SIMILAR MEMORY ALREADY EXISTS, USE THE UPDATE METHOD NOT ADD
|
|
7379
|
-
|
|
7380
|
-
Usage Rules:
|
|
7381
7731
|
- Chat Title is MANDATORY
|
|
7382
7732
|
- TEMPORARY Memory is MANDATORY
|
|
7383
7733
|
- WHEN Called User Memory, STILL use Temporary Memory
|
|
@@ -7390,11 +7740,11 @@ var thinking_prompts_default;
|
|
|
7390
7740
|
var init_thinking_prompts = __esm({
|
|
7391
7741
|
"src/data/thinking_prompts.json"() {
|
|
7392
7742
|
thinking_prompts_default = {
|
|
7393
|
-
xHigh: "EFFORT LEVEL: HIGH\
|
|
7394
|
-
High: "EFFORT LEVEL: HIGH\nThink in a rigorous
|
|
7395
|
-
Medium: "EFFORT LEVEL: MEDIUM\nThink in a focused,
|
|
7396
|
-
Minimal: "EFFORT LEVEL: LOW\nThink in a quick, focused monologue within <think>...</think>.
|
|
7397
|
-
Off: "EFFORT LEVEL: LOWEST\nNo thinking. Immediate response\nRULES:\n- Verify
|
|
7743
|
+
xHigh: "EFFORT LEVEL: HIGH\nChallenge assumptions. Verify before concluding\nPrefer the simplest correct solution\nAssess architecture, scalability & trade-offs\nVerify dependencies, regressions, failure modes & modularity\nPlan implementation: files, modules, interfaces & tests\nRULES:\n- Continuous analytical flow\n- Verify via first principles\n- Actively seek failure paths\n- Verify imports & system stability, avoid syntax errors, recheck tool results\n- MANDATORY THINKING: Full technical verification",
|
|
7744
|
+
High: "EFFORT LEVEL: HIGH\nThink in a rigorous monologue within <think>...</think>\nPrefer the simplest correct solution\nAssess architecture, performance & maintainability\nVerify error handling, assumptions, edge cases, dependencies & regressions\nPlan: files, functions, logic & interactions\nRULES:\n- Continuous analytical flow\n- Verify via first principles\n- Actively seek failure paths\n- Verify imports & system stability, avoid syntax errors, recheck tool results\n- MANDATORY THINKING: Full technical verification",
|
|
7745
|
+
Medium: "EFFORT LEVEL: MEDIUM\nThink in a focused, technical monologue within <think>...</think>\nFind the simplest solution meeting requirements\nScan for missing error handling, invalid assumptions, edge cases & dependencies\nVerify cohesive, modular changes\nOutline changes: files, functions & key logic\nRULES:\n- Clean logical flow\n- Efficient, deliberate, implementation-focused\n- Verify imports & system stability, avoid syntax errors, recheck tool results\n- MANDATORY THINKING: Brief verification for technical tasks/greetings",
|
|
7746
|
+
Minimal: "EFFORT LEVEL: LOW\nThink in a quick, focused monologue within <think>...</think>. Verify Basics:\nConfirm intent & complexity\nIdentify required tools/files/actions\nVerify before acting\nRULES:\n- Brief thoughts\n- Think only enough to avoid obvious mistakes\n- Verify imports & system stability, avoid syntax errors, recheck tool results",
|
|
7747
|
+
Off: "EFFORT LEVEL: LOWEST\nNo thinking. Immediate response\nRULES:\n- Verify imports & system stability, avoid syntax errors, recheck tool results"
|
|
7398
7748
|
};
|
|
7399
7749
|
}
|
|
7400
7750
|
});
|
|
@@ -7443,8 +7793,7 @@ var init_prompts = __esm({
|
|
|
7443
7793
|
if (!isMemoryEnabled) return "";
|
|
7444
7794
|
const tempMemoriesStr = tempMemories?.length > 0 && !isContext32k ? `-- RECENT CONTEXT FROM OTHER CHATS (PRIORITY: DYNAMIC-LOW, FOCUS: Chat Context > Recent) --
|
|
7445
7795
|
${tempMemories}` : "";
|
|
7446
|
-
return tempMemoriesStr ?
|
|
7447
|
-
${tempMemoriesStr}
|
|
7796
|
+
return tempMemoriesStr ? `${tempMemoriesStr}
|
|
7448
7797
|
` : "";
|
|
7449
7798
|
};
|
|
7450
7799
|
getSystemInstruction = (profile, thinkingLevel, mode, systemSettings, isMemoryEnabled = true, isFirstPrompt = false, aiProvider = "Google", isMultiModal = false, isGemini, chatId) => {
|
|
@@ -7468,10 +7817,11 @@ ${tempMemoriesStr}
|
|
|
7468
7817
|
"Max": "HIGH"
|
|
7469
7818
|
};
|
|
7470
7819
|
thinkingConfig = thinking_prompts_default["xHigh"];
|
|
7471
|
-
thinkingConfig = thinkingConfig.replace("EFFORT LEVEL: HIGH
|
|
7472
|
-
`).replace("- MANDATORY THINKING: Full reasoning required for ALL requests/greetings", "");
|
|
7820
|
+
thinkingConfig = thinkingConfig.replace("EFFORT LEVEL: HIGH", `EFFORT LEVEL: ${MAP_FOR_NON_GOOGLE_OR_GEMINI[thinkingLevel]}`).replace("\n- MANDATORY THINKING: Full technical verification", "");
|
|
7473
7821
|
if (thinkingLevel === "Fast") {
|
|
7474
|
-
thinkingConfig = "EFFORT LEVEL: LOWEST\nNo thinking. Immediate response\nRULES:\n- Verify
|
|
7822
|
+
thinkingConfig = "EFFORT LEVEL: LOWEST\nNo thinking. Immediate response\nRULES:\n- Verify imports & system stability, avoid syntax errors, recheck tool results";
|
|
7823
|
+
} else if (thinkingLevel === "Low") {
|
|
7824
|
+
thinkingConfig = "EFFORT LEVEL: LOW\nConfirm intent & complexity\nIdentify required tools/files/actions\nVerify before acting\nRULES:\n- Brief thoughts\n- Think only enough to avoid obvious mistakes\n- Verify imports & system stability, avoid syntax errors, recheck tool results";
|
|
7475
7825
|
}
|
|
7476
7826
|
}
|
|
7477
7827
|
const osDetected = process.platform === "win32" ? "Windows" : process.platform === "darwin" ? "macOS" : "Linux";
|
|
@@ -7484,7 +7834,7 @@ ${userInstrStr.length ? "" : "\n"}` : "";
|
|
|
7484
7834
|
${nicknameStr.length || userInstrStr.length ? "" : "\n"}` : "";
|
|
7485
7835
|
const cwdStr = process.cwd();
|
|
7486
7836
|
const userMemories = getCachedUserMemories(chatId, isMemoryEnabled);
|
|
7487
|
-
const userMemoriesStr = userMemories?.length > 0 ? `--- SAVED MEMORIES (
|
|
7837
|
+
const userMemoriesStr = userMemories?.length > 0 ? `--- SAVED MEMORIES (USER PREFERENCES) ---
|
|
7488
7838
|
${userMemories}
|
|
7489
7839
|
|
|
7490
7840
|
` : "";
|
|
@@ -7518,8 +7868,8 @@ Check these first; These Files > Training Data. Safety rules apply
|
|
|
7518
7868
|
}
|
|
7519
7869
|
const projectContextBlock = cachedProjectContextBlock;
|
|
7520
7870
|
return `=== SYSTEM PROMPT ===
|
|
7521
|
-
Identity: Flux Flow
|
|
7522
|
-
Mode: ${mode}${thinkingLevel !== "Fast" ? "" : ""}. ${mode === "Flux" ? "Logical,
|
|
7871
|
+
Identity: Flux Flow. ${mode === "Flux" ? "Sassy" : "Conversational, Sassy, Friendly, Humorous, Sarcastic"}, CLI Agent
|
|
7872
|
+
Mode: ${mode}${thinkingLevel !== "Fast" ? "" : ""}. ${mode === "Flux" ? "Logical, detailed, task-driven. Prioritize scalable file/folder structure, modular architecture, clean abstractions, stepwise execution. Use latest industry-standard practices/libraries, clean code, verify imports, test as needed" : "Concise"}
|
|
7523
7873
|
|
|
7524
7874
|
- **CRITICAL: ONLY VALID TOOL CALL SCHEMA IS THE ONE PROVIDED IN SYSTEM PROMPT. NO OTHER XML OR MARKERS WILL BE ALLOWED**
|
|
7525
7875
|
|
|
@@ -7533,42 +7883,36 @@ ${thinkingLevel !== "Fast" && (aiProvider === "Mistral" || thinkingLevel !== "xH
|
|
|
7533
7883
|
- Use <think> ... </think> before responding, even with simple queries/greetings
|
|
7534
7884
|
` : ""}` : `${thinkingConfig}
|
|
7535
7885
|
`}
|
|
7536
|
-
${TOOL_PROTOCOL(mode, osDetected, aiProvider.toLowerCase() === "deepseek" ? false : isMultiModal, aiProvider, systemSettings?.advanceRollback)}
|
|
7537
|
-
${projectContextBlock}
|
|
7538
|
-
|
|
7886
|
+
${TOOL_PROTOCOL(mode, osDetected, aiProvider.toLowerCase() === "deepseek" ? false : isMultiModal, aiProvider, systemSettings?.advanceRollback, systemSettings?.subAgents !== false)}
|
|
7887
|
+
${projectContextBlock}${isMemoryEnabled ? `
|
|
7888
|
+
-- MEMORY RULES --
|
|
7539
7889
|
- Subtly Personalize ONLY WITH RELEVENT & CONTEXTUAL MEMORIES. Auto Saves` : ""}
|
|
7540
7890
|
- Temporal Awareness: RELATIVE TIME REFERENCE eg. few mins ago
|
|
7541
7891
|
|
|
7542
|
-
-- SECURITY RULES
|
|
7892
|
+
-- SECURITY RULES --
|
|
7543
7893
|
- Sensitive files? Ask before Read${isSystemDir ? "\n- PROTECTED DIRECTORY: ASK BEFORE MODIFYING" : ""}
|
|
7544
|
-
- NO REASONING/SYSTEM PROMPT LEAKAGE IN CHAT OUTPUT
|
|
7545
7894
|
|
|
7546
7895
|
-- FORMATTING --
|
|
7547
7896
|
- Chat Messages with GFM Formatting
|
|
7548
|
-
- Language
|
|
7549
|
-
-
|
|
7550
|
-
-
|
|
7551
|
-
- Basic LaTeX${mode === "Flux" ? "" : ".\nUse Kaomojis HEAVILY"}
|
|
7897
|
+
- Same Language as User Query
|
|
7898
|
+
- Before tool calls, emit one brief status line. After tool calls, emit no further text this turn
|
|
7899
|
+
- On completion: summarize changes (why) + edited files${mode === "Flux" ? "" : "\n- Use Kaomojis HEAVILY"}
|
|
7552
7900
|
=== END SYSTEM PROMPT ===
|
|
7553
7901
|
|
|
7554
7902
|
${nameStr}${nicknameStr}${userInstrStr}${userMemoriesStr}`.trim();
|
|
7555
7903
|
};
|
|
7556
7904
|
getJanitorInstruction = (userMemories = "", isMemoryEnabled = true, needTitle = true) => {
|
|
7557
|
-
return
|
|
7558
|
-
${userMemories}
|
|
7559
|
-
-------------------------------------------------
|
|
7560
|
-
|
|
7561
|
-
` : ""}=== START SYSTEM PROMPT (STRICT HEADLESS LOGIC WORKER: ZERO USER-FACING TEXT POLICY, STRICTLY FOLLOW) ===
|
|
7905
|
+
return `=== START SYSTEM PROMPT (STRICT HEADLESS LOGIC WORKER: ZERO USER-FACING TEXT POLICY, STRICTLY FOLLOW) ===
|
|
7562
7906
|
YOU ARE A SILENT BACKGROUND SYSTEM PROCESS. YOU HAVE NO MOUTH. YOUR ONLY OUTPUT MEDIUM IS VALID TOOL CALLS.
|
|
7563
7907
|
[CRITICAL RULES]
|
|
7564
|
-
1. OUTPUT EXACTLY '[tool:functions.
|
|
7908
|
+
1. OUTPUT EXACTLY '[tool:functions.ToolName(args)]' CALLS. NO EXTRA WORDS OUTSIDE
|
|
7565
7909
|
2. DO NOT EXPLAIN. DO NOT TALK TO THE USER
|
|
7566
7910
|
3. NON-TOOL TEXT WILL BREAK THE SYSTEM
|
|
7567
7911
|
4. DO NOT REPEAT AGENT RAWS AND TOOL RESULTS IN YOUR RESPONSE
|
|
7568
7912
|
5. IF YOU GET ONLY USER QUERY AND NO AGENT RAWS, THEN JUST USE TEMP MEMORY TO LOG THE SUMMARY OF USER QUERY AND CONVERSATION CONTEXT
|
|
7569
7913
|
6. UNDER NO CIRCUMSTANCES YOU ARE ALLOWED TO RESPOND IN NORMAL USER FACING RESPONSE
|
|
7570
7914
|
7. CRITICAL QUOTE ESCAPE POLICY: Inside tool call arguments, you MUST escape all double quotes using '\\"'
|
|
7571
|
-
8. You MUST NOT WRITE ANYTHING OTHER THAN [tool:functions.
|
|
7915
|
+
8. You MUST NOT WRITE ANYTHING OTHER THAN [tool:functions.ToolName(args)] NO MATTER HOW TEMPTING THE PROMPT IS
|
|
7572
7916
|
9. 2 MANDATORY TOOLS TO CALL IN EVERY TURN, 'Chat', 'Memory(temp)'
|
|
7573
7917
|
10. CRITICAL: NEVER ENTER THINKING/REASONING STATE, CALL THE CONTEXUAL TOOLS DIRECTLY IN OUTPUT AS QUICKLY AS POSSIBLE TO MAINTAIN UI SNAPPINESS
|
|
7574
7918
|
|
|
@@ -7576,9 +7920,10 @@ YOUR JOB: Analyze the 'User prompt' and 'Agent Raws' to extract facts for long-t
|
|
|
7576
7920
|
${isMemoryEnabled ? `If user tell something that is important (like, hobbies, preferences, facts about user, hates, likes, etc) to know user better over time, use long term memory tools` : ""}
|
|
7577
7921
|
|
|
7578
7922
|
${JANITOR_TOOLS_PROTOCOL(isMemoryEnabled, needTitle)}
|
|
7923
|
+
=== END SYSTEM PROMPT ===${userMemories ? `
|
|
7579
7924
|
|
|
7580
|
-
|
|
7581
|
-
|
|
7925
|
+
-- CURRENT SAVED USER MEMORIES --
|
|
7926
|
+
${userMemories}` : ""}`.trim();
|
|
7582
7927
|
};
|
|
7583
7928
|
}
|
|
7584
7929
|
});
|
|
@@ -10042,7 +10387,7 @@ var init_search_keyword = __esm({
|
|
|
10042
10387
|
"src/tools/search_keyword.js"() {
|
|
10043
10388
|
init_arg_parser();
|
|
10044
10389
|
search_keyword = async (args) => {
|
|
10045
|
-
const { keyword: rawKeyword,
|
|
10390
|
+
const { keyword: rawKeyword, path: pathArg, subString, regex } = parseArgs(args);
|
|
10046
10391
|
if (rawKeyword === void 0 || rawKeyword === null) return 'ERROR: Missing "keyword" argument.';
|
|
10047
10392
|
const keyword = String(rawKeyword);
|
|
10048
10393
|
const toBool = (v) => v === true || v === "true" || v === 1 || v === "1" || v === "yes";
|
|
@@ -10092,15 +10437,23 @@ var init_search_keyword = __esm({
|
|
|
10092
10437
|
try {
|
|
10093
10438
|
let filesToSearch = [];
|
|
10094
10439
|
const rootDir = process.cwd();
|
|
10095
|
-
|
|
10096
|
-
|
|
10440
|
+
let pathArgType = null;
|
|
10441
|
+
if (pathArg) {
|
|
10442
|
+
const normalised = pathArg.replace(/[\/\\]+$/, "");
|
|
10443
|
+
const fullPath = path18.resolve(rootDir, normalised);
|
|
10097
10444
|
try {
|
|
10098
10445
|
const stat = await fs19.stat(fullPath);
|
|
10099
|
-
if (stat.
|
|
10446
|
+
if (stat.isDirectory()) {
|
|
10447
|
+
pathArgType = "dir";
|
|
10448
|
+
filesToSearch = await getFilesRecursively(fullPath, excludes, rootDir);
|
|
10449
|
+
} else if (stat.isFile()) {
|
|
10450
|
+
pathArgType = "file";
|
|
10100
10451
|
filesToSearch.push({ fullPath, relativePath: path18.relative(rootDir, fullPath) });
|
|
10452
|
+
} else {
|
|
10453
|
+
return `ERROR: Path is neither a file nor a directory: ${pathArg}`;
|
|
10101
10454
|
}
|
|
10102
10455
|
} catch {
|
|
10103
|
-
return `ERROR:
|
|
10456
|
+
return `ERROR: Path not found: ${pathArg}`;
|
|
10104
10457
|
}
|
|
10105
10458
|
} else {
|
|
10106
10459
|
filesToSearch = await getFilesRecursively(rootDir, excludes);
|
|
@@ -10140,9 +10493,23 @@ var init_search_keyword = __esm({
|
|
|
10140
10493
|
}
|
|
10141
10494
|
const modeLabel = matchRegex ? isAutoRegex ? "(regex mode)" : "(keyword mode)" : matchSubstring ? "(subString mode)" : "";
|
|
10142
10495
|
if (fileGroups.length === 0) {
|
|
10143
|
-
|
|
10496
|
+
const zeroLocation = pathArgType === "file" ? ` in '${pathArg}'` : pathArgType === "dir" ? ` in '${pathArg}'` : ". Try to specify files";
|
|
10497
|
+
const dirPrefix2 = pathArgType === "dir" ? "[DIR]" : "";
|
|
10498
|
+
return `${dirPrefix2}Found 0 matches of '${keyword}'${zeroLocation}${modeLabel ? ` ${modeLabel}` : ""}`;
|
|
10499
|
+
}
|
|
10500
|
+
const ml = modeLabel ? ` ${modeLabel}` : "";
|
|
10501
|
+
const fileCount = `${fileGroups.length} file${fileGroups.length === 1 ? "" : "s"}`;
|
|
10502
|
+
const matchCount = `${totalMatches} match${totalMatches === 1 ? "" : "es"}`;
|
|
10503
|
+
let outputHeader;
|
|
10504
|
+
if (pathArgType === "file") {
|
|
10505
|
+
outputHeader = `Found ${matchCount} of '${keyword}' in '${pathArg}'${ml}:`;
|
|
10506
|
+
} else if (pathArgType === "dir") {
|
|
10507
|
+
outputHeader = `Found ${matchCount} of '${keyword}' in '${pathArg}' across ${fileCount}${ml}:`;
|
|
10508
|
+
} else {
|
|
10509
|
+
outputHeader = `Found ${matchCount} of '${keyword}' across ${fileCount}${ml}:`;
|
|
10144
10510
|
}
|
|
10145
|
-
|
|
10511
|
+
const dirPrefix = pathArgType === "dir" ? "[DIR]" : "";
|
|
10512
|
+
let output = `${dirPrefix}${outputHeader}
|
|
10146
10513
|
|
|
10147
10514
|
`;
|
|
10148
10515
|
for (const group of fileGroups) {
|
|
@@ -11890,7 +12257,7 @@ __export(ai_exports, {
|
|
|
11890
12257
|
import { GoogleGenAI, ThinkingLevel, HarmBlockThreshold, HarmCategory } from "@google/genai";
|
|
11891
12258
|
import path24, { normalize } from "path";
|
|
11892
12259
|
import fs25 from "fs";
|
|
11893
|
-
var client, globalSettings, colorMainWords, withRetry, TERMINATION_SIGNAL, getCleanGroupedLength, stripAnsi2, fetchWithBackoff, getDeepSeekStream, getMistralStream, getNVIDIAStream, wrapNvidiaStreamWithQueueDepth, getOpenRouterStream, signalTermination, isTerminationSignaled, TOOL_LABELS2, getToolDetail, runJanitorTask, getActiveToolContext, getContextSafeText, contextSafeReplace, getSanitizedText, translateKimiToolCalls, detectToolCalls, initAI, generateSimpleContent, consolidatePastMemories, compressHistory, deleteChatSummary, getAIStream, runSubagent;
|
|
12260
|
+
var RE_STUTTER_CODE_BLOCK_CLOSED, RE_STUTTER_CODE_BLOCK_OPEN, RE_STUTTER_INLINE_CODE, RE_STUTTER_TABLE_ROW, RE_STUTTER_WORD_BOUNDARY, RE_STUTTER_NON_ALNUM, RE_TOOL_CALL_FUNC, RE_TOOL_PARTIAL_ARGS_FALLBACK, RE_STRIP_QUOTES, RE_BACKSLASH_SLASH, client, globalSettings, colorMainWords, withRetry, TERMINATION_SIGNAL, getCleanGroupedLength, stripAnsi2, fetchWithBackoff, getDeepSeekStream, getMistralStream, getNVIDIAStream, wrapNvidiaStreamWithQueueDepth, getOpenRouterStream, signalTermination, isTerminationSignaled, TOOL_LABELS2, getToolDetail, runJanitorTask, getActiveToolContext, getContextSafeText, contextSafeReplace, getSanitizedText, translateKimiToolCalls, detectToolCalls, initAI, generateSimpleContent, consolidatePastMemories, compressHistory, deleteChatSummary, getAIStream, runSubagent;
|
|
11894
12261
|
var init_ai = __esm({
|
|
11895
12262
|
async "src/utils/ai.js"() {
|
|
11896
12263
|
await init_prompts();
|
|
@@ -11910,6 +12277,16 @@ var init_ai = __esm({
|
|
|
11910
12277
|
init_revert();
|
|
11911
12278
|
init_advanceRevert();
|
|
11912
12279
|
init_editor();
|
|
12280
|
+
RE_STUTTER_CODE_BLOCK_CLOSED = /```[\s\S]*?```/g;
|
|
12281
|
+
RE_STUTTER_CODE_BLOCK_OPEN = /```[\s\S]*$/g;
|
|
12282
|
+
RE_STUTTER_INLINE_CODE = /`[^`]+`/g;
|
|
12283
|
+
RE_STUTTER_TABLE_ROW = /^\|.*\|$/gm;
|
|
12284
|
+
RE_STUTTER_WORD_BOUNDARY = /^[^\w]+|[^\w]+$/g;
|
|
12285
|
+
RE_STUTTER_NON_ALNUM = /[^a-z0-9]/gi;
|
|
12286
|
+
RE_TOOL_CALL_FUNC = /\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi;
|
|
12287
|
+
RE_TOOL_PARTIAL_ARGS_FALLBACK = /(?:path|targetFile|TargetFile|directory|keyword|id|taskId|title|task)\s*=\s*\\?["']?([^\\"' \),]+)/;
|
|
12288
|
+
RE_STRIP_QUOTES = /["']/g;
|
|
12289
|
+
RE_BACKSLASH_SLASH = /\\/g;
|
|
11913
12290
|
client = null;
|
|
11914
12291
|
globalSettings = {};
|
|
11915
12292
|
colorMainWords = (label) => {
|
|
@@ -12465,18 +12842,19 @@ var init_ai = __esm({
|
|
|
12465
12842
|
let attempts = 0;
|
|
12466
12843
|
const maxAttempts = 6;
|
|
12467
12844
|
let hasYielded = false;
|
|
12468
|
-
let
|
|
12469
|
-
|
|
12470
|
-
|
|
12845
|
+
let _baseUrl = process.env.NVIDIA_BASE_URL || "https://integrate.api.nvidia.com/v1/chat/completions";
|
|
12846
|
+
let _apiKey = process.env.NVIDIA_API_KEY && process.env.NVIDIA_BASE_URL ? process.env.NVIDIA_API_KEY : apiKey;
|
|
12847
|
+
if (!_baseUrl.endsWith("/chat/completions")) {
|
|
12848
|
+
_baseUrl = _baseUrl.replace(/\/+$/, "") + "/chat/completions";
|
|
12471
12849
|
}
|
|
12472
12850
|
while (attempts < maxAttempts) {
|
|
12473
12851
|
attempts++;
|
|
12474
12852
|
try {
|
|
12475
|
-
const response = await fetchWithBackoff(
|
|
12853
|
+
const response = await fetchWithBackoff(_baseUrl, {
|
|
12476
12854
|
method: "POST",
|
|
12477
12855
|
headers: {
|
|
12478
12856
|
"Content-Type": "application/json",
|
|
12479
|
-
"Authorization": `Bearer ${
|
|
12857
|
+
"Authorization": `Bearer ${_apiKey}`
|
|
12480
12858
|
},
|
|
12481
12859
|
body: JSON.stringify(body),
|
|
12482
12860
|
signal
|
|
@@ -12900,7 +13278,9 @@ var init_ai = __esm({
|
|
|
12900
13278
|
}
|
|
12901
13279
|
let originalTextProcessed = agentText.replace(/\[Prompted on:.*?\]/g, "").trim();
|
|
12902
13280
|
agentRes = agentRes.replace(/\r?\n\r?\n/g, "\n").replace(/\n\n/g, "\n").replace(/\\n\\n/g, "").trim();
|
|
12903
|
-
let userPrompt = `[
|
|
13281
|
+
let userPrompt = `[METADATA] Current date and Time: ${(/* @__PURE__ */ new Date()).toLocaleString([], { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", hour12: true })}
|
|
13282
|
+
|
|
13283
|
+
[USER]: ${originalTextProcessed.substring(0, USER_CONTEXT_LENGTH)}
|
|
12904
13284
|
${originalTextProcessed.length > USER_CONTEXT_LENGTH ? "... (truncated) ...\n\n" : ""}
|
|
12905
13285
|
[AGENT (current turn)]: ${agentRes}`;
|
|
12906
13286
|
janitorContents.push({ role: "user", parts: [{ text: userPrompt }] });
|
|
@@ -13150,9 +13530,9 @@ ${originalTextProcessed.length > USER_CONTEXT_LENGTH ? "... (truncated) ...\n\n"
|
|
|
13150
13530
|
}
|
|
13151
13531
|
};
|
|
13152
13532
|
getActiveToolContext = (text) => {
|
|
13153
|
-
|
|
13533
|
+
RE_TOOL_CALL_FUNC.lastIndex = 0;
|
|
13154
13534
|
let match;
|
|
13155
|
-
while ((match =
|
|
13535
|
+
while ((match = RE_TOOL_CALL_FUNC.exec(text)) !== null) {
|
|
13156
13536
|
const startIdx = match.index + match[0].length - 1;
|
|
13157
13537
|
let balance = 0;
|
|
13158
13538
|
let inString = null;
|
|
@@ -13174,7 +13554,7 @@ ${originalTextProcessed.length > USER_CONTEXT_LENGTH ? "... (truncated) ...\n\n"
|
|
|
13174
13554
|
while (j < text.length && /\s/.test(text[j])) j++;
|
|
13175
13555
|
if (j < text.length && text[j] === "]") {
|
|
13176
13556
|
closed = true;
|
|
13177
|
-
|
|
13557
|
+
RE_TOOL_CALL_FUNC.lastIndex = j + 1;
|
|
13178
13558
|
break;
|
|
13179
13559
|
}
|
|
13180
13560
|
}
|
|
@@ -13854,7 +14234,7 @@ Provide a consolidated summary of the entire session.`;
|
|
|
13854
14234
|
const otherMemories = [...cachedSummaries, ...otherRawMemories].map((mem) => `- ${mem}`).join("\n");
|
|
13855
14235
|
const persistentStorage = readEncryptedJson(MEMORIES_FILE, []);
|
|
13856
14236
|
const mainUserMemories = persistentStorage.map((m) => `- ${m.memory}`).join("\n");
|
|
13857
|
-
const isContext32k = (sessionStats?.tokens || 0) >=
|
|
14237
|
+
const isContext32k = (sessionStats?.tokens || 0) >= 12e3;
|
|
13858
14238
|
const memoryPrompt = getMemoryPrompt(otherMemories, mainUserMemories, isMemoryEnabled, isContext32k);
|
|
13859
14239
|
const dateTimeStr = (/* @__PURE__ */ new Date()).toLocaleString([], { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", minute: "2-digit", hour12: true });
|
|
13860
14240
|
const COLLAPSED_DIRS_GLOBAL = [
|
|
@@ -14085,15 +14465,15 @@ Provide a consolidated summary of the entire session.`;
|
|
|
14085
14465
|
};
|
|
14086
14466
|
const totalFolders = countFolders(process.cwd());
|
|
14087
14467
|
let dynamicMaxDepth = 12;
|
|
14088
|
-
if (totalFolders >
|
|
14089
|
-
else if (totalFolders >
|
|
14090
|
-
else if (totalFolders >
|
|
14091
|
-
else if (totalFolders >
|
|
14092
|
-
else if (totalFolders >
|
|
14093
|
-
else if (totalFolders >
|
|
14094
|
-
else if (totalFolders >
|
|
14095
|
-
else if (totalFolders >
|
|
14096
|
-
else if (totalFolders >
|
|
14468
|
+
if (totalFolders > 3072) dynamicMaxDepth = 1;
|
|
14469
|
+
else if (totalFolders > 2304) dynamicMaxDepth = 2;
|
|
14470
|
+
else if (totalFolders > 1536) dynamicMaxDepth = 3;
|
|
14471
|
+
else if (totalFolders > 768) dynamicMaxDepth = 4;
|
|
14472
|
+
else if (totalFolders > 384) dynamicMaxDepth = 6;
|
|
14473
|
+
else if (totalFolders > 192) dynamicMaxDepth = 7;
|
|
14474
|
+
else if (totalFolders > 96) dynamicMaxDepth = 8;
|
|
14475
|
+
else if (totalFolders > 48) dynamicMaxDepth = 9;
|
|
14476
|
+
else if (totalFolders > 24) dynamicMaxDepth = 10;
|
|
14097
14477
|
const chatPaths = readEncryptedJson(PATHS_FILE, {});
|
|
14098
14478
|
const lastCwd = chatPaths[chatId];
|
|
14099
14479
|
const cwdMismatch = lastCwd ? lastCwd !== process.cwd() : false;
|
|
@@ -14412,8 +14792,7 @@ OS: ${osDetected}
|
|
|
14412
14792
|
CWD: ${process.cwd()}${isPlayground ? " [PLAYGROUND MODE]" : ""}${cwdMismatch ? ` (WARNING: CWD Mismatch! Previous Path: ${lastCwd})` : ""}
|
|
14413
14793
|
**DIRECTORY STRUCTURE**
|
|
14414
14794
|
${dirStructure}${memoryPrompt}${ideBlock}
|
|
14415
|
-
${activeSummaryBlock}${thinkingLevel !== "Fast" && (aiProvider === "Mistral" || thinkingLevel !== "xHigh" && aiProvider === "Google") ? `${aiProvider === "Mistral" || modelName.toLowerCase().startsWith("gemma") ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]\n" : ""}` : ""}[SYSTEM Priority
|
|
14416
|
-
eg: [tool:functions.ReadFolder(path = ".")]. NO OTHER FORMAT/TOKEN IS ALLOWED [/SYSTEM]
|
|
14795
|
+
${activeSummaryBlock}${thinkingLevel !== "Fast" && (aiProvider === "Mistral" || thinkingLevel !== "xHigh" && aiProvider === "Google") ? `${aiProvider === "Mistral" || modelName.toLowerCase().startsWith("gemma") ? "[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS HIGH PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]\n" : ""}` : ""}[SYSTEM Priority: HIGH] ONLY use the system tool schema. eg: [tool:functions.ReadFolder(path=".")] [/SYSTEM]
|
|
14417
14796
|
${taggedContextStr}[USER PROMPT] ${cleanPromptForModel.trim()} [/USER PROMPT]`.trim();
|
|
14418
14797
|
const userMsgObj = { role: "user", text: firstUserMsg };
|
|
14419
14798
|
if (attachedBinaryPart) {
|
|
@@ -15054,15 +15433,15 @@ ${ideErr} [/ERROR]`;
|
|
|
15054
15433
|
const id = pArgs.id || pArgs.taskId;
|
|
15055
15434
|
const timeVal = pArgs.time;
|
|
15056
15435
|
if (keyword !== void 0 && keyword !== null) {
|
|
15057
|
-
detail = String(keyword).replace(
|
|
15436
|
+
detail = String(keyword).replace(RE_STRIP_QUOTES, "");
|
|
15058
15437
|
} else if (filePath) {
|
|
15059
|
-
detail = path24.basename(String(filePath).replace(
|
|
15438
|
+
detail = path24.basename(String(filePath).replace(RE_STRIP_QUOTES, "").replace(RE_BACKSLASH_SLASH, "/"));
|
|
15060
15439
|
} else if (title && (potentialTool === "invoke" || potentialTool === "invoke_sync")) {
|
|
15061
|
-
detail = String(title).replace(
|
|
15440
|
+
detail = String(title).replace(RE_STRIP_QUOTES, "").substring(0, 30);
|
|
15062
15441
|
} else if (id && potentialTool === "get_progress") {
|
|
15063
|
-
detail = String(id).replace(
|
|
15442
|
+
detail = String(id).replace(RE_STRIP_QUOTES, "");
|
|
15064
15443
|
} else if (timeVal && potentialTool === "await") {
|
|
15065
|
-
let sec = parseFloat(String(timeVal).replace(
|
|
15444
|
+
let sec = parseFloat(String(timeVal).replace(RE_STRIP_QUOTES, ""));
|
|
15066
15445
|
if (!isNaN(sec)) {
|
|
15067
15446
|
if (sec < 5) sec = 5;
|
|
15068
15447
|
if (sec > 120) sec = 120;
|
|
@@ -15076,16 +15455,16 @@ ${ideErr} [/ERROR]`;
|
|
|
15076
15455
|
};
|
|
15077
15456
|
detail = formatTime(sec);
|
|
15078
15457
|
} else {
|
|
15079
|
-
detail = String(timeVal).replace(
|
|
15458
|
+
detail = String(timeVal).replace(RE_STRIP_QUOTES, "");
|
|
15080
15459
|
}
|
|
15081
15460
|
} else {
|
|
15082
|
-
const m = partialArgs.match(
|
|
15461
|
+
const m = partialArgs.match(RE_TOOL_PARTIAL_ARGS_FALLBACK);
|
|
15083
15462
|
if (m) {
|
|
15084
|
-
const val = m[1].replace(
|
|
15463
|
+
const val = m[1].replace(RE_STRIP_QUOTES, "");
|
|
15085
15464
|
if (potentialTool === "invoke" || potentialTool === "invoke_sync" || potentialTool === "get_progress") {
|
|
15086
15465
|
detail = val.substring(0, 30);
|
|
15087
15466
|
} else {
|
|
15088
|
-
detail = potentialTool === "search_keyword" || potentialTool === "file_map" ? val : path24.basename(val.replace(
|
|
15467
|
+
detail = potentialTool === "search_keyword" || potentialTool === "file_map" ? val : path24.basename(val.replace(RE_BACKSLASH_SLASH, "/"));
|
|
15089
15468
|
}
|
|
15090
15469
|
}
|
|
15091
15470
|
}
|
|
@@ -15178,15 +15557,19 @@ ${ideErr} [/ERROR]`;
|
|
|
15178
15557
|
await new Promise((resolve) => setTimeout(resolve, 3e3));
|
|
15179
15558
|
break;
|
|
15180
15559
|
}
|
|
15181
|
-
const
|
|
15560
|
+
const proseText = contextSafeText.replace(RE_STUTTER_CODE_BLOCK_CLOSED, "").replace(RE_STUTTER_CODE_BLOCK_OPEN, "").replace(RE_STUTTER_INLINE_CODE, "").replace(RE_STUTTER_TABLE_ROW, "");
|
|
15561
|
+
const allWords = proseText.toLowerCase().split(/\s+/).map((w) => w.replace(RE_STUTTER_WORD_BOUNDARY, "")).filter((w) => w.length > 0);
|
|
15182
15562
|
let stutterDetected = false;
|
|
15183
|
-
if (allWords.length
|
|
15563
|
+
if (allWords.length >= 10) {
|
|
15184
15564
|
for (let p = 1; p <= 15; p++) {
|
|
15185
|
-
const R = Math.max(3, Math.ceil(
|
|
15565
|
+
const R = Math.max(3, Math.ceil(10 / p));
|
|
15186
15566
|
if (allWords.length < p * R) continue;
|
|
15187
|
-
let isRepeating = true;
|
|
15188
15567
|
const pattern = allWords.slice(allWords.length - p);
|
|
15189
15568
|
const patternStr = pattern.join(" ");
|
|
15569
|
+
if (p > 1 && patternStr === pattern.slice(0, Math.floor(p / 2)).join(" ").repeat(2).trim()) {
|
|
15570
|
+
continue;
|
|
15571
|
+
}
|
|
15572
|
+
let isRepeating = true;
|
|
15190
15573
|
for (let r = 1; r < R; r++) {
|
|
15191
15574
|
const prevPattern = allWords.slice(allWords.length - p * (r + 1), allWords.length - p * r);
|
|
15192
15575
|
if (prevPattern.join(" ") !== patternStr) {
|
|
@@ -15201,10 +15584,10 @@ ${ideErr} [/ERROR]`;
|
|
|
15201
15584
|
}
|
|
15202
15585
|
}
|
|
15203
15586
|
if (!stutterDetected) {
|
|
15204
|
-
const cleanChars =
|
|
15205
|
-
if (cleanChars.length >=
|
|
15587
|
+
const cleanChars = proseText.toLowerCase().replace(RE_STUTTER_NON_ALNUM, "");
|
|
15588
|
+
if (cleanChars.length >= 20) {
|
|
15206
15589
|
for (let p = 1; p <= 10; p++) {
|
|
15207
|
-
const R = Math.max(
|
|
15590
|
+
const R = Math.max(5, Math.ceil(16 / p));
|
|
15208
15591
|
if (cleanChars.length < p * R) continue;
|
|
15209
15592
|
const pattern = cleanChars.substring(cleanChars.length - p);
|
|
15210
15593
|
let isRepeating = true;
|
|
@@ -16037,7 +16420,9 @@ ${snippet2}
|
|
|
16037
16420
|
result = result.text;
|
|
16038
16421
|
}
|
|
16039
16422
|
if (normToolName === "search_keyword") {
|
|
16040
|
-
const { keyword,
|
|
16423
|
+
const { keyword, path: path26 } = parseArgs(toolCall.args);
|
|
16424
|
+
const _isDir = typeof result === "string" && result.startsWith("[DIR]");
|
|
16425
|
+
if (_isDir) result = result.slice(5);
|
|
16041
16426
|
let matchCount = 0;
|
|
16042
16427
|
if (result) {
|
|
16043
16428
|
const m = result.match(/Found (\d+) match/i);
|
|
@@ -16045,7 +16430,9 @@ ${snippet2}
|
|
|
16045
16430
|
matchCount = parseInt(m[1]);
|
|
16046
16431
|
}
|
|
16047
16432
|
}
|
|
16048
|
-
const
|
|
16433
|
+
const _sp = path26 ? path26.replace(/[\/\\]+$/, "") : null;
|
|
16434
|
+
const displayPath = _sp && _sp !== "." ? `"${_isDir ? `${_sp}/*` : _sp}"` : "./";
|
|
16435
|
+
const postLabel = `\u2714 Searched: "${keyword}" in ${displayPath} \u2192 ${matchCount} Match${matchCount === 1 ? "" : "es"}`;
|
|
16049
16436
|
let terminalWidth = 115;
|
|
16050
16437
|
if (process.stdout.isTTY) {
|
|
16051
16438
|
terminalWidth = process.stdout.columns - 5 || 120;
|
|
@@ -16508,8 +16895,8 @@ Error Log can be found in ${path24.join(LOGS_DIR, "agent", "error.log")}`);
|
|
|
16508
16895
|
"filemap": '- [tool:functions.FileMap(path="path/file")]. Shows file structure, functions, class, import/export, variables',
|
|
16509
16896
|
"patchfile": '- [tool:functions.PatchFile(path="...", replaceContent1="full line/block", newContent1="...", ...MAX 10)]. Surgical Patch. **Multiple patch on same file/path? Use replaceContent2, newContent2 etc >>> multiple spams**. Unsure? ReadFile >> guessing. **MUST VERIFY DIFF**',
|
|
16510
16897
|
"writefile": '- [tool:functions.WriteFile(path="...", content="...")]. Creates/Overwrites. File Exist? PatchFile > WriteFile. Verify Imports',
|
|
16511
|
-
"searchkeyword":
|
|
16512
|
-
"websearch":
|
|
16898
|
+
"searchkeyword": '- [tool:functions.SearchKeyword(keyword="...", path="optional, target directory or filename", subString="true optional", regex="false for keyword, optional")]. Project-wide search. path limits scope to a file/dir. Find definitions/logic without full reads. Locate relevant code. Defaults: subString=false, regex=true',
|
|
16899
|
+
"websearch": '- [tool:functions.WebSearch(query="...", aiMode="true optional", limit=number)]. Limit 3-10 (aiMode ignores). Usage: unknown info/docs. aiMode: LLM search (default: false)',
|
|
16513
16900
|
"webscrape": '- [tool:functions.WebScrape(url="...")]. Proactive use for specific webpage/docs/api',
|
|
16514
16901
|
"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`
|
|
16515
16902
|
};
|
|
@@ -16518,11 +16905,11 @@ TO ACCESS TOOLS **STRICTLY USE THE EXACT FORMAT IN CHAT OUTPUT:** [tool:function
|
|
|
16518
16905
|
**NO OTHER SYNTAX/MARKERS/BOUNDARY ALLOWED**
|
|
16519
16906
|
|
|
16520
16907
|
TOOL POLICY:
|
|
16521
|
-
- MAX 3 TOOL CALLS PER TURN
|
|
16522
|
-
-
|
|
16523
|
-
- FileMap
|
|
16524
|
-
-
|
|
16525
|
-
-
|
|
16908
|
+
- MAX 3 TOOL CALLS PER TURN
|
|
16909
|
+
- Same file, many edits? Prefer multi search-replace in Patch \u2190 **HIGHLY RECOMMENDED**
|
|
16910
|
+
- FileMap \u2192 ReadFile for efficient file understanding
|
|
16911
|
+
- Need specific text ? SearchKeyword > Guessing/ReadFile
|
|
16912
|
+
- Huge files ? SearchKeyword > FileMap/Full Read
|
|
16526
16913
|
- NO Terminal Access
|
|
16527
16914
|
|
|
16528
16915
|
-- PROVIDED TOOLS --
|
|
@@ -16541,11 +16928,10 @@ ${providedToolsSection.trimEnd()}
|
|
|
16541
16928
|
-- THINKING GUIDANCE --
|
|
16542
16929
|
NO EXPLICIT THINKING REQUIRED. FOCUS ON COMPLETING THE TASK DIRECTLY
|
|
16543
16930
|
|
|
16544
|
-
|
|
16545
|
-
Once you have fully completed the task, provide a detailed
|
|
16931
|
+
Keep main focus on tools and task, not chatting
|
|
16932
|
+
Once you have fully completed the task, provide a detailed structured summary preferebly in Tables/Bullet Points with file modified info, if any task failed report back in detail, no hallucination
|
|
16546
16933
|
|
|
16547
16934
|
CWD: ${process.cwd()}
|
|
16548
|
-
Current Time: ${(/* @__PURE__ */ new Date()).toLocaleString("en-US", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", hour12: true }).replace(/(\d+)\/(\d+)\/(\d+),/, "$3-$1-$2").replace(":", "-")}
|
|
16549
16935
|
=== END SYSTEM PROMPT ===`;
|
|
16550
16936
|
const subagentHistory = [
|
|
16551
16937
|
{ role: "user", text: `Complete this task: ${task}` }
|
|
@@ -17538,7 +17924,8 @@ var init_witty_phrases = __esm({
|
|
|
17538
17924
|
// src/components/RevertModal.jsx
|
|
17539
17925
|
import React14, { useState as useState13 } from "react";
|
|
17540
17926
|
import { Box as Box13, Text as Text14, useInput as useInput8 } from "ink";
|
|
17541
|
-
function RevertModal({ prompts, onSelect, onClose }) {
|
|
17927
|
+
function RevertModal({ prompts, onSelect, onClose, theme = "Dark" }) {
|
|
17928
|
+
const colors = getThemeColors(theme);
|
|
17542
17929
|
const [selectedIndex, setSelectedIndex] = useState13(0);
|
|
17543
17930
|
useInput8((input, key) => {
|
|
17544
17931
|
if (key.escape) onClose();
|
|
@@ -17559,7 +17946,7 @@ function RevertModal({ prompts, onSelect, onClose }) {
|
|
|
17559
17946
|
}
|
|
17560
17947
|
}
|
|
17561
17948
|
const visiblePrompts = prompts.slice(startIndex, startIndex + MAX_VISIBLE);
|
|
17562
|
-
return /* @__PURE__ */ React14.createElement(Box13, { flexDirection: "column", borderStyle: "round", borderColor:
|
|
17949
|
+
return /* @__PURE__ */ React14.createElement(Box13, { flexDirection: "column", borderStyle: "round", borderColor: colors.borderMuted, padding: 0, width: "100%" }, /* @__PURE__ */ React14.createElement(Box13, { paddingX: 1, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: colors.text, bold: true }, "CODEBASE TIME TRAVEL: SELECT UNDO POINT")), /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: colors.text }, "Select a prompt to revert the codebase back to the state ", /* @__PURE__ */ React14.createElement(Text14, { bold: true, color: colors.secondary || "cyan" }, "immediately before"), " it was executed:")), prompts.length === 0 ? /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, paddingY: 1 }, /* @__PURE__ */ React14.createElement(Text14, { italic: true, color: colors.textMuted }, "No prompt checkpoints found for this session.")) : /* @__PURE__ */ React14.createElement(Box13, { flexDirection: "column", width: "100%" }, startIndex > 0 && /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, marginBottom: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: colors.textMuted }, "\u25B2 (+", startIndex, " more prompts above)")), visiblePrompts.map((p, index) => {
|
|
17563
17950
|
const actualIndex = startIndex + index;
|
|
17564
17951
|
const isSelected = actualIndex === selectedIndex;
|
|
17565
17952
|
const dateStr = formatDate2(p.timestamp);
|
|
@@ -17569,12 +17956,12 @@ function RevertModal({ prompts, onSelect, onClose }) {
|
|
|
17569
17956
|
{
|
|
17570
17957
|
key: p.id,
|
|
17571
17958
|
paddingX: 1,
|
|
17572
|
-
backgroundColor: isSelected ?
|
|
17959
|
+
backgroundColor: isSelected ? colors.highlightBg : void 0,
|
|
17573
17960
|
width: "100%"
|
|
17574
17961
|
},
|
|
17575
|
-
/* @__PURE__ */ React14.createElement(Box13, { flexGrow: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: isSelected ?
|
|
17962
|
+
/* @__PURE__ */ React14.createElement(Box13, { flexGrow: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: isSelected ? colors.text : colors.textMuted, bold: isSelected }, isSelected ? "\u276F " : " ", '"', formatPromptPreview(p.prompt), '"', /* @__PURE__ */ React14.createElement(Text14, { color: colors.textMuted }, " [", dateStr, " \u2022 ", fileCount, " file(s) changed]")))
|
|
17576
17963
|
);
|
|
17577
|
-
}), startIndex + MAX_VISIBLE < prompts.length && /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, marginTop: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color:
|
|
17964
|
+
}), startIndex + MAX_VISIBLE < prompts.length && /* @__PURE__ */ React14.createElement(Box13, { paddingX: 2, marginTop: 1 }, /* @__PURE__ */ React14.createElement(Text14, { color: colors.textMuted }, "\u25BC (+", prompts.length - (startIndex + MAX_VISIBLE), " more prompts below)"))), /* @__PURE__ */ React14.createElement(
|
|
17578
17965
|
Box13,
|
|
17579
17966
|
{
|
|
17580
17967
|
marginTop: 1,
|
|
@@ -17583,9 +17970,9 @@ function RevertModal({ prompts, onSelect, onClose }) {
|
|
|
17583
17970
|
borderLeft: false,
|
|
17584
17971
|
borderRight: false,
|
|
17585
17972
|
borderBottom: false,
|
|
17586
|
-
borderColor:
|
|
17973
|
+
borderColor: colors.borderMuted
|
|
17587
17974
|
},
|
|
17588
|
-
/* @__PURE__ */ React14.createElement(Text14, { color:
|
|
17975
|
+
/* @__PURE__ */ React14.createElement(Text14, { color: colors.textMuted, italic: true }, "\u2191\u2193 navigate \u2022 Enter select undo point \u2022 Esc close")
|
|
17589
17976
|
));
|
|
17590
17977
|
}
|
|
17591
17978
|
function formatPromptPreview(prompt) {
|
|
@@ -17616,6 +18003,7 @@ function formatDate2(timestamp) {
|
|
|
17616
18003
|
var init_RevertModal = __esm({
|
|
17617
18004
|
"src/components/RevertModal.jsx"() {
|
|
17618
18005
|
init_terminal();
|
|
18006
|
+
init_theme();
|
|
17619
18007
|
}
|
|
17620
18008
|
});
|
|
17621
18009
|
|
|
@@ -18102,6 +18490,7 @@ function App({ args = [] }) {
|
|
|
18102
18490
|
const [quotas, setQuotas] = useState15({ limitMode: "Daily", agentLimit: 99999999, tokenLimit: 99999999999999, backgroundLimit: 999999, searchLimit: 100, customModelId: "", customLimit: 0, providerBudgets: {} });
|
|
18103
18491
|
const [inputConfig, setInputConfig] = useState15(null);
|
|
18104
18492
|
const [budgetReturnView, setBudgetReturnView] = useState15("chat");
|
|
18493
|
+
const [providerReturnView, setProviderReturnView] = useState15("settings");
|
|
18105
18494
|
const [providerBudgetQueue, setProviderBudgetQueue] = useState15([]);
|
|
18106
18495
|
const [providerBudgetCursor, setProviderBudgetCursor] = useState15(0);
|
|
18107
18496
|
const [pbsCursor, setPbsCursor] = useState15(0);
|
|
@@ -19145,23 +19534,23 @@ function App({ args = [] }) {
|
|
|
19145
19534
|
] : aiProvider === "NVIDIA" ? [
|
|
19146
19535
|
{ cmd: "Fast", desc: "Reasoning Disabled" },
|
|
19147
19536
|
{ cmd: "Standard", desc: "Balanced Reasoning" },
|
|
19148
|
-
{ cmd: "High", desc: "
|
|
19537
|
+
{ cmd: "High", desc: "Extended Reasoning" }
|
|
19149
19538
|
] : aiProvider === "OpenRouter" ? [
|
|
19150
19539
|
{ cmd: "Fast", desc: "Fastest" },
|
|
19151
19540
|
{ cmd: "Low", desc: "Quick Reasoning" },
|
|
19152
|
-
{ cmd: "
|
|
19541
|
+
{ cmd: "Standard", desc: "Balanced Reasoning" },
|
|
19153
19542
|
{ cmd: "High", desc: "Deep Reasoning" },
|
|
19154
19543
|
{ cmd: "xHigh", desc: "Extended Reasoning" }
|
|
19155
19544
|
] : aiProvider === "Mistral" ? [
|
|
19156
19545
|
{ cmd: "Fast", desc: "None (No Reasoning)" },
|
|
19157
19546
|
{ cmd: "Low", desc: "Minimal Reasoning" },
|
|
19158
|
-
{ cmd: "
|
|
19159
|
-
{ cmd: "High", desc: "
|
|
19547
|
+
{ cmd: "Standard", desc: "Balanced Reasoning" },
|
|
19548
|
+
{ cmd: "High", desc: "Deep Reasoning" },
|
|
19160
19549
|
{ cmd: "xHigh", desc: "Extended Reasoning" }
|
|
19161
19550
|
] : activeModel && activeModel.toLowerCase().startsWith("gemini-3") ? [
|
|
19162
19551
|
{ cmd: "Fast", desc: "Fastest" },
|
|
19163
19552
|
{ cmd: "Low", desc: "Quick Reasoning" },
|
|
19164
|
-
{ cmd: "
|
|
19553
|
+
{ cmd: "Standard", desc: "Balanced Reasoning" },
|
|
19165
19554
|
{ cmd: "High", desc: "Deep Reasoning" }
|
|
19166
19555
|
] : [
|
|
19167
19556
|
// Google General / Gemma
|
|
@@ -19177,6 +19566,10 @@ function App({ args = [] }) {
|
|
|
19177
19566
|
desc: "Select Agent Model",
|
|
19178
19567
|
subs: getModels(aiProvider, apiTier)
|
|
19179
19568
|
},
|
|
19569
|
+
{
|
|
19570
|
+
cmd: "/provider",
|
|
19571
|
+
desc: "Select AI Provider"
|
|
19572
|
+
},
|
|
19180
19573
|
{
|
|
19181
19574
|
cmd: "/mode",
|
|
19182
19575
|
desc: "Toggle Flux/Flow modes",
|
|
@@ -19186,6 +19579,7 @@ function App({ args = [] }) {
|
|
|
19186
19579
|
]
|
|
19187
19580
|
},
|
|
19188
19581
|
{ cmd: "/settings", desc: "Configure system prefs" },
|
|
19582
|
+
{ cmd: "/theme", desc: "Customize UI color theme" },
|
|
19189
19583
|
{ cmd: "/key", desc: "Manage API keys" },
|
|
19190
19584
|
{ cmd: "/profile", desc: "Edit developer persona" },
|
|
19191
19585
|
{ cmd: "/memory", desc: "Manage agent memory" },
|
|
@@ -19693,6 +20087,16 @@ ${cleanText}`, color: "magenta" }];
|
|
|
19693
20087
|
setActiveView("settings");
|
|
19694
20088
|
break;
|
|
19695
20089
|
}
|
|
20090
|
+
case "/provider":
|
|
20091
|
+
case "/providers": {
|
|
20092
|
+
setProviderReturnView("chat");
|
|
20093
|
+
setActiveView("selectProvider");
|
|
20094
|
+
break;
|
|
20095
|
+
}
|
|
20096
|
+
case "/theme": {
|
|
20097
|
+
setActiveView("theme");
|
|
20098
|
+
break;
|
|
20099
|
+
}
|
|
19696
20100
|
case "/key": {
|
|
19697
20101
|
setActiveView("key");
|
|
19698
20102
|
break;
|
|
@@ -21027,7 +21431,26 @@ Selection: ${val}`,
|
|
|
21027
21431
|
saveSettings,
|
|
21028
21432
|
quotas,
|
|
21029
21433
|
setMessages,
|
|
21030
|
-
aiProvider
|
|
21434
|
+
aiProvider,
|
|
21435
|
+
setProviderReturnView
|
|
21436
|
+
}
|
|
21437
|
+
);
|
|
21438
|
+
case "theme":
|
|
21439
|
+
return /* @__PURE__ */ React16.createElement(
|
|
21440
|
+
SettingsMenu,
|
|
21441
|
+
{
|
|
21442
|
+
systemSettings,
|
|
21443
|
+
setSystemSettings,
|
|
21444
|
+
apiTier,
|
|
21445
|
+
setActiveView,
|
|
21446
|
+
setInputConfig,
|
|
21447
|
+
saveSettings,
|
|
21448
|
+
quotas,
|
|
21449
|
+
setMessages,
|
|
21450
|
+
aiProvider,
|
|
21451
|
+
initialSelectingTheme: true,
|
|
21452
|
+
onCloseTheme: () => setActiveView("chat"),
|
|
21453
|
+
setProviderReturnView
|
|
21031
21454
|
}
|
|
21032
21455
|
);
|
|
21033
21456
|
case "selectProvider":
|
|
@@ -21041,12 +21464,12 @@ Selection: ${val}`,
|
|
|
21041
21464
|
{ label: "DeepSeek (Paid)", value: "DeepSeek" },
|
|
21042
21465
|
{ label: "Mistral (Free/Paid) [EXPERIMENTAL]", value: "Mistral" },
|
|
21043
21466
|
{ label: "OpenRouter (Free/Paid) [EXPERIMENTAL]", value: "OpenRouter" },
|
|
21044
|
-
{ label: "Back", value:
|
|
21467
|
+
{ label: "Back", value: providerReturnView }
|
|
21045
21468
|
],
|
|
21046
21469
|
theme: systemSettings.theme,
|
|
21047
21470
|
onSelect: async (item) => {
|
|
21048
|
-
if (item.value === "settings" || item.value === "Back") {
|
|
21049
|
-
setActiveView(
|
|
21471
|
+
if (item.value === providerReturnView || item.value === "settings" || item.value === "Back") {
|
|
21472
|
+
setActiveView(providerReturnView);
|
|
21050
21473
|
return;
|
|
21051
21474
|
}
|
|
21052
21475
|
const selectedProvider = item.value;
|
|
@@ -21073,19 +21496,19 @@ Selection: ${val}`,
|
|
|
21073
21496
|
isMeta: true
|
|
21074
21497
|
}
|
|
21075
21498
|
]);
|
|
21076
|
-
setActiveView(
|
|
21499
|
+
setActiveView(providerReturnView);
|
|
21077
21500
|
} else {
|
|
21078
21501
|
setInputConfig({
|
|
21079
21502
|
label: `Enter ${selectedProvider} API Key:`,
|
|
21080
21503
|
key: "providerKey",
|
|
21081
21504
|
provider: selectedProvider,
|
|
21082
21505
|
value: "",
|
|
21083
|
-
returnView:
|
|
21506
|
+
returnView: providerReturnView
|
|
21084
21507
|
});
|
|
21085
21508
|
setActiveView("input");
|
|
21086
21509
|
}
|
|
21087
21510
|
},
|
|
21088
|
-
onClose: () => setActiveView(
|
|
21511
|
+
onClose: () => setActiveView(providerReturnView)
|
|
21089
21512
|
}
|
|
21090
21513
|
);
|
|
21091
21514
|
case "apiTier": {
|
|
@@ -21444,7 +21867,7 @@ Selection: ${val}`,
|
|
|
21444
21867
|
}
|
|
21445
21868
|
)));
|
|
21446
21869
|
case "advanceRollbackDanger":
|
|
21447
|
-
return /* @__PURE__ */ React16.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, paddingTop: 0, width: "100%" }, /* @__PURE__ */ React16.createElement(Text16, { color: "white", bold: true }, "\u26A0 Emergency Rollback Notice"), /* @__PURE__ */ React16.createElement(Text16, { marginTop: 1 }, "When enabled, full repo snapshots exist only during active AI turns."), /* @__PURE__ */ React16.createElement(Text16, { marginTop: 1 }, "If catastrophic changes occur during a turn, avoid abruptly stopping the agent unless absolutely necessary (external damages out of codebase)."), /* @__PURE__ */ React16.createElement(Text16, null, "The agent may be able to automatically restore the repo to a safe state."), /* @__PURE__ */ React16.createElement(Text16, { marginTop: 1 }, "Once the turn ends, emergency snapshots are deleted and standard /revert takes over which may not retain full repo content."), /* @__PURE__ */ React16.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React16.createElement(
|
|
21870
|
+
return /* @__PURE__ */ React16.createElement(Box14, { flexDirection: "column", borderStyle: "round", borderColor: "grey", paddingX: 2, paddingY: 1, paddingTop: 0, width: "100%" }, /* @__PURE__ */ React16.createElement(Text16, { color: "white", bold: true }, "\u26A0 Emergency Rollback Notice"), /* @__PURE__ */ React16.createElement(Text16, { marginTop: 1 }, "When enabled, full repo snapshots exist only during active AI turns."), /* @__PURE__ */ React16.createElement(Text16, { marginTop: 1 }, "If catastrophic changes occur during a turn, avoid abruptly stopping the agent unless absolutely necessary (external damages out of codebase)."), /* @__PURE__ */ React16.createElement(Text16, null, "The agent may be able to automatically restore the repo to a safe state."), /* @__PURE__ */ React16.createElement(Text16, { marginTop: 1 }, "Once the turn ends, emergency snapshots are deleted and standard /revert takes over which may not retain full repo content."), /* @__PURE__ */ React16.createElement(Text16, { marginTop: 1 }, "(Requires Restart to take effect)"), /* @__PURE__ */ React16.createElement(Box14, { marginTop: 1 }, /* @__PURE__ */ React16.createElement(
|
|
21448
21871
|
CommandMenu,
|
|
21449
21872
|
{
|
|
21450
21873
|
title: "Confirm",
|
|
@@ -21630,7 +22053,8 @@ Selection: ${val}`,
|
|
|
21630
22053
|
setActiveView("chat");
|
|
21631
22054
|
}
|
|
21632
22055
|
},
|
|
21633
|
-
onClose: () => setActiveView("chat")
|
|
22056
|
+
onClose: () => setActiveView("chat"),
|
|
22057
|
+
theme: systemSettings.theme
|
|
21634
22058
|
}
|
|
21635
22059
|
));
|
|
21636
22060
|
case "resume":
|
|
@@ -22596,12 +23020,12 @@ if (isBundled && !process.execArgv.some((arg) => arg.includes("max-old-space-siz
|
|
|
22596
23020
|
/btw <question> Send raw inquiry to the agent mid-turn
|
|
22597
23021
|
/image setup key <default|custom> Configure image API key strategy
|
|
22598
23022
|
/budget Set or View budget limits
|
|
22599
|
-
/image setup quality <low...premium> Configure default image generation quality
|
|
22600
|
-
/image stats Show image quota stats
|
|
22601
23023
|
/mode <flux|flow> Toggle Flux/Flow modes
|
|
22602
23024
|
/thinking <Fast|Low|Medium|High|xHigh> Set AI reasoning depth
|
|
22603
23025
|
/model <model_name> Switch Model for Agent
|
|
23026
|
+
/provider Select AI Provider
|
|
22604
23027
|
/settings Configure system preferences
|
|
23028
|
+
/theme Customize UI color theme
|
|
22605
23029
|
/key Manage API keys
|
|
22606
23030
|
/profile Edit developer persona
|
|
22607
23031
|
/memory Manage agent memory
|