bingocode 1.1.145 → 1.1.147
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/package.json
CHANGED
|
@@ -115,8 +115,11 @@ const i18nMap = {
|
|
|
115
115
|
settingsTitle: '设置',
|
|
116
116
|
langLabel: '语言',
|
|
117
117
|
langPickerTitle: '选择语言',
|
|
118
|
-
settingsHint: '↑/k ↓/j 滚动 · ↩
|
|
118
|
+
settingsHint: '↑/k ↓/j 滚动 · ↩ 切换 · ESC 返回',
|
|
119
119
|
langOptions: LANG_OPTIONS,
|
|
120
|
+
autoModeLabel: 'Auto Mode',
|
|
121
|
+
autoModeOn: '已开启',
|
|
122
|
+
autoModeOff: '已关闭',
|
|
120
123
|
},
|
|
121
124
|
en: {
|
|
122
125
|
menu: {
|
|
@@ -148,8 +151,11 @@ const i18nMap = {
|
|
|
148
151
|
settingsTitle: 'Settings',
|
|
149
152
|
langLabel: 'Language',
|
|
150
153
|
langPickerTitle: 'Select Language',
|
|
151
|
-
settingsHint: '↑/k ↓/j scroll · ↩
|
|
154
|
+
settingsHint: '↑/k ↓/j scroll · ↩ toggle · ESC back',
|
|
152
155
|
langOptions: LANG_OPTIONS,
|
|
156
|
+
autoModeLabel: 'Auto Mode',
|
|
157
|
+
autoModeOn: 'Enabled',
|
|
158
|
+
autoModeOff: 'Disabled',
|
|
153
159
|
},
|
|
154
160
|
ja: {
|
|
155
161
|
menu: {
|
|
@@ -181,8 +187,11 @@ const i18nMap = {
|
|
|
181
187
|
settingsTitle: '設定',
|
|
182
188
|
langLabel: '言語',
|
|
183
189
|
langPickerTitle: '言語を選択',
|
|
184
|
-
settingsHint: '↑/k ↓/j スクロール · ↩
|
|
190
|
+
settingsHint: '↑/k ↓/j スクロール · ↩ 切替 · ESC 戻る',
|
|
185
191
|
langOptions: LANG_OPTIONS,
|
|
192
|
+
autoModeLabel: 'Auto Mode',
|
|
193
|
+
autoModeOn: '有効',
|
|
194
|
+
autoModeOff: '無効',
|
|
186
195
|
},
|
|
187
196
|
};
|
|
188
197
|
|
|
@@ -299,6 +308,9 @@ export const CliMenuManager: React.FC = () => {
|
|
|
299
308
|
}
|
|
300
309
|
if (typeof cfg.uiAnimEnabled === 'boolean') setAnimEnabled(cfg.uiAnimEnabled);
|
|
301
310
|
if (typeof cfg.uiTipsEnabled === 'boolean') setTipsEnabled(cfg.uiTipsEnabled);
|
|
311
|
+
const gbFeatures = cfg.cachedGrowthBookFeatures ?? {};
|
|
312
|
+
const autoModeCfg = gbFeatures['tengu_auto_mode_config'] as { enabled?: string } | undefined;
|
|
313
|
+
setAutoModeEnabled(autoModeCfg?.enabled === 'enabled');
|
|
302
314
|
} catch (e) {
|
|
303
315
|
// Silently fail if config has issues
|
|
304
316
|
}
|
|
@@ -349,6 +361,7 @@ export const CliMenuManager: React.FC = () => {
|
|
|
349
361
|
const [setErr, setSetErr] = useState<string | null>(null);
|
|
350
362
|
const [settingsStage, setSettingsStage] = useState<'list' | 'langPicker'>('list');
|
|
351
363
|
const [settingsCursor, setSettingsCursor] = useState(0);
|
|
364
|
+
const [autoModeEnabled, setAutoModeEnabled] = useState(false);
|
|
352
365
|
|
|
353
366
|
// Top toolbar state
|
|
354
367
|
const [animEnabled, setAnimEnabled] = useState(true);
|
|
@@ -744,7 +757,7 @@ export const CliMenuManager: React.FC = () => {
|
|
|
744
757
|
if (!showHelp && page === 'settings') {
|
|
745
758
|
if (settingsStage === 'list') {
|
|
746
759
|
// +1 for the fixed Language row prepended before settingData entries
|
|
747
|
-
const totalRows =
|
|
760
|
+
const totalRows = 2 + (settingData && typeof settingData === 'object' ? Object.keys(settingData).length : 0);
|
|
748
761
|
const visible = Math.max(1, MID_H - 2);
|
|
749
762
|
if (key.downArrow || input === 'j') {
|
|
750
763
|
setSettingsCursor(c => Math.min(totalRows - 1, c + 1));
|
|
@@ -758,12 +771,29 @@ export const CliMenuManager: React.FC = () => {
|
|
|
758
771
|
// Row 0 is the interactive Language row
|
|
759
772
|
if (settingsCursor === 0) {
|
|
760
773
|
setSettingsStage('langPicker');
|
|
774
|
+
} else if (settingsCursor === 1) {
|
|
775
|
+
// Row 1: toggle Auto Mode, persist to ~/.claude.json
|
|
776
|
+
setAutoModeEnabled(prev => {
|
|
777
|
+
const next = !prev;
|
|
778
|
+
try {
|
|
779
|
+
saveGlobalConfig(current => ({
|
|
780
|
+
...current,
|
|
781
|
+
cachedGrowthBookFeatures: {
|
|
782
|
+
...current.cachedGrowthBookFeatures,
|
|
783
|
+
tengu_auto_mode_config: next
|
|
784
|
+
? { enabled: 'enabled', allowModels: ['*'] }
|
|
785
|
+
: { enabled: 'disabled' },
|
|
786
|
+
},
|
|
787
|
+
}));
|
|
788
|
+
} catch {}
|
|
789
|
+
return next;
|
|
790
|
+
});
|
|
761
791
|
}
|
|
762
792
|
}
|
|
763
793
|
}
|
|
764
794
|
// langPicker stage: ESC handled above; selection via SelectInput onSelect
|
|
765
795
|
}
|
|
766
|
-
}, [menuItems, page, historyMenuStage, historyList, historyHasMore, navIndex, sessionMessages, settingData, MID_H, MSGS_PAGE_SIZE, showHelp, theme, settingsStage, settingsCursor]);
|
|
796
|
+
}, [menuItems, page, historyMenuStage, historyList, historyHasMore, navIndex, sessionMessages, settingData, MID_H, MSGS_PAGE_SIZE, showHelp, theme, settingsStage, settingsCursor, autoModeEnabled]);
|
|
767
797
|
|
|
768
798
|
function cleanText(text: string): string {
|
|
769
799
|
return String(text ?? '').replace(/[\n\r]+/g, ' ').replace(/\u001b\[[0-9;]*m/g, '').trim();
|
|
@@ -1249,6 +1279,7 @@ export const CliMenuManager: React.FC = () => {
|
|
|
1249
1279
|
type SettingRow = { key: string; label: string; value: string; interactive: boolean };
|
|
1250
1280
|
const fixedRows: SettingRow[] = [
|
|
1251
1281
|
{ key: '__lang', label: tS.langLabel, value: currentLangLabel, interactive: true },
|
|
1282
|
+
{ key: '__autoMode', label: tS.autoModeLabel, value: autoModeEnabled ? tS.autoModeOn : tS.autoModeOff, interactive: true },
|
|
1252
1283
|
];
|
|
1253
1284
|
const dataEntries = settingData && typeof settingData === 'object' ? Object.entries(settingData) : [];
|
|
1254
1285
|
const dataRows: SettingRow[] = dataEntries.map(([k, v]) => ({
|
|
@@ -685,6 +685,11 @@ async function getFeatureValueInternal<T>(
|
|
|
685
685
|
}
|
|
686
686
|
|
|
687
687
|
if (!isGrowthBookEnabled()) {
|
|
688
|
+
// No network-based GrowthBook; fall back to disk cache via GlobalConfig.
|
|
689
|
+
try {
|
|
690
|
+
const cc = getGlobalConfig().cachedGrowthBookFeatures
|
|
691
|
+
if (cc && feature in cc) return cc[feature] as T
|
|
692
|
+
} catch {}
|
|
688
693
|
return defaultValue
|
|
689
694
|
}
|
|
690
695
|
|
|
@@ -748,6 +753,11 @@ export function getFeatureValue_CACHED_MAY_BE_STALE<T>(
|
|
|
748
753
|
}
|
|
749
754
|
|
|
750
755
|
if (!isGrowthBookEnabled()) {
|
|
756
|
+
// No network-based GrowthBook; fall back to disk cache via GlobalConfig.
|
|
757
|
+
try {
|
|
758
|
+
const cc = getGlobalConfig().cachedGrowthBookFeatures
|
|
759
|
+
if (cc && feature in cc) return cc[feature] as T
|
|
760
|
+
} catch {}
|
|
751
761
|
return defaultValue
|
|
752
762
|
}
|
|
753
763
|
|
package/src/utils/betas.ts
CHANGED
|
@@ -176,7 +176,7 @@ export function modelSupportsAutoMode(model: string): boolean {
|
|
|
176
176
|
const rawLower = model.toLowerCase()
|
|
177
177
|
if (
|
|
178
178
|
config?.allowModels?.some(
|
|
179
|
-
am => am.toLowerCase() === rawLower || am.toLowerCase() === m,
|
|
179
|
+
am => am === '*' || am.toLowerCase() === rawLower || am.toLowerCase() === m,
|
|
180
180
|
)
|
|
181
181
|
) {
|
|
182
182
|
return true
|