bingocode 1.1.200-beta.0 → 1.1.200-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -97,9 +97,6 @@ export const ProviderPanel: React.FC<{
|
|
|
97
97
|
const [currentSlotName, setCurrentSlotName] = useState<string>('main');
|
|
98
98
|
const [slotLoadingMsg, setSlotLoadingMsg] = useState<string>('');
|
|
99
99
|
|
|
100
|
-
// VS Code link status
|
|
101
|
-
const [vscodeLinked, setVscodeLinked] = useState(false);
|
|
102
|
-
const [vscodeLinkedPaths, setVscodeLinkedPaths] = useState<string[]>([]);
|
|
103
100
|
|
|
104
101
|
|
|
105
102
|
const base = apiUrl.replace(/\/+$/, '');
|
|
@@ -147,16 +144,6 @@ export const ProviderPanel: React.FC<{
|
|
|
147
144
|
loadPresets();
|
|
148
145
|
}, [loadProviders, loadPresets]);
|
|
149
146
|
|
|
150
|
-
// Fetch VS Code link status on mount
|
|
151
|
-
useEffect(() => {
|
|
152
|
-
axios.get(`${base}/api/providers/link-vscode`)
|
|
153
|
-
.then(r => {
|
|
154
|
-
setVscodeLinked(r.data.linked);
|
|
155
|
-
setVscodeLinkedPaths(r.data.paths || []);
|
|
156
|
-
})
|
|
157
|
-
.catch(() => {});
|
|
158
|
-
}, [base]);
|
|
159
|
-
|
|
160
147
|
// Key processing for Page Up/Down and Arrow keys in scrolling lists
|
|
161
148
|
useEffect(() => {
|
|
162
149
|
const handler = (buf: Buffer) => {
|
|
@@ -331,7 +318,6 @@ export const ProviderPanel: React.FC<{
|
|
|
331
318
|
{ label: 'Add Provider', value: 'add' },
|
|
332
319
|
{ label: 'Edit Provider (Name/Key)', value: 'edit' },
|
|
333
320
|
{ label: 'Configure Slots', value: 'slots' },
|
|
334
|
-
{ label: vscodeLinked ? `Disconnect from VS Code (${vscodeLinkedPaths.length} editor(s))` : 'Connect to VS Code', value: 'link_vscode' },
|
|
335
321
|
{ label: 'Connectivity Test', value: 'test' },
|
|
336
322
|
{ label: 'Delete Provider', value: 'delete' },
|
|
337
323
|
{ label: 'Refresh', value: 'refresh' },
|
|
@@ -360,34 +346,7 @@ export const ProviderPanel: React.FC<{
|
|
|
360
346
|
setStage('slot_config');
|
|
361
347
|
setListOffset(0);
|
|
362
348
|
break;
|
|
363
|
-
|
|
364
|
-
setOpMsg(null);
|
|
365
|
-
setErr(null);
|
|
366
|
-
if (vscodeLinked) {
|
|
367
|
-
// Unlink
|
|
368
|
-
axios.delete(`${base}/api/providers/link-vscode`)
|
|
369
|
-
.then(() => {
|
|
370
|
-
setVscodeLinked(false);
|
|
371
|
-
setVscodeLinkedPaths([]);
|
|
372
|
-
setOpMsg('Disconnected from VS Code.');
|
|
373
|
-
})
|
|
374
|
-
.catch(e => {
|
|
375
|
-
setErr((e as any)?.response?.data?.message || (e as any)?.message || 'Failed to disconnect VS Code');
|
|
376
|
-
});
|
|
377
|
-
} else {
|
|
378
|
-
// Link
|
|
379
|
-
axios.post(`${base}/api/providers/link-vscode`)
|
|
380
|
-
.then(r => {
|
|
381
|
-
setVscodeLinked(true);
|
|
382
|
-
setVscodeLinkedPaths(r.data.paths || []);
|
|
383
|
-
setOpMsg(`Connected to VS Code (${(r.data.paths || []).length} editor(s)).`);
|
|
384
|
-
})
|
|
385
|
-
.catch(e => {
|
|
386
|
-
setErr((e as any)?.response?.data?.message || (e as any)?.message || 'Failed to connect VS Code');
|
|
387
|
-
});
|
|
388
|
-
}
|
|
389
|
-
break;
|
|
390
|
-
case 'test':
|
|
349
|
+
case 'test':
|
|
391
350
|
setStage('test_select');
|
|
392
351
|
setListOffset(0);
|
|
393
352
|
break;
|
|
@@ -229,6 +229,9 @@ const i18nMap = {
|
|
|
229
229
|
bypassPermsLabel: 'Bypass',
|
|
230
230
|
bypassPermsOn: '已开启',
|
|
231
231
|
bypassPermsOff: '已关闭',
|
|
232
|
+
vscodeLabel: 'Connect to VS Code',
|
|
233
|
+
vscodeOn: '已连接',
|
|
234
|
+
vscodeOff: '未连接',
|
|
232
235
|
},
|
|
233
236
|
en: {
|
|
234
237
|
menu: {
|
|
@@ -268,6 +271,9 @@ const i18nMap = {
|
|
|
268
271
|
bypassPermsLabel: 'Bypass',
|
|
269
272
|
bypassPermsOn: 'Enabled',
|
|
270
273
|
bypassPermsOff: 'Disabled',
|
|
274
|
+
vscodeLabel: 'Connect to VS Code',
|
|
275
|
+
vscodeOn: 'Connected',
|
|
276
|
+
vscodeOff: 'Disconnected',
|
|
271
277
|
},
|
|
272
278
|
ja: {
|
|
273
279
|
menu: {
|
|
@@ -307,6 +313,9 @@ const i18nMap = {
|
|
|
307
313
|
bypassPermsLabel: 'Bypass',
|
|
308
314
|
bypassPermsOn: '有効',
|
|
309
315
|
bypassPermsOff: '無効',
|
|
316
|
+
vscodeLabel: 'Connect to VS Code',
|
|
317
|
+
vscodeOn: '接続済',
|
|
318
|
+
vscodeOff: '未接続',
|
|
310
319
|
},
|
|
311
320
|
};
|
|
312
321
|
|
|
@@ -429,6 +438,9 @@ export const CliMenuManager: React.FC = () => {
|
|
|
429
438
|
if (typeof bSettings.bypassPermsEnabled === 'boolean') {
|
|
430
439
|
setBypassPermsEnabled(bSettings.bypassPermsEnabled);
|
|
431
440
|
}
|
|
441
|
+
if (typeof bSettings.vscodeLinked === 'boolean') {
|
|
442
|
+
setVscodeLinked(bSettings.vscodeLinked);
|
|
443
|
+
}
|
|
432
444
|
} catch {}
|
|
433
445
|
}, []);
|
|
434
446
|
|
|
@@ -488,6 +500,7 @@ export const CliMenuManager: React.FC = () => {
|
|
|
488
500
|
const [settingsCursor, setSettingsCursor] = useState(0);
|
|
489
501
|
const [autoModeEnabled, setAutoModeEnabled] = useState(false);
|
|
490
502
|
const [bypassPermsEnabled, setBypassPermsEnabled] = useState(false);
|
|
503
|
+
const [vscodeLinked, setVscodeLinked] = useState(false);
|
|
491
504
|
|
|
492
505
|
// Top toolbar state
|
|
493
506
|
const [animEnabled, setAnimEnabled] = useState(true);
|
|
@@ -875,7 +888,7 @@ export const CliMenuManager: React.FC = () => {
|
|
|
875
888
|
if (!showHelp && page === 'settings') {
|
|
876
889
|
if (settingsStage === 'list') {
|
|
877
890
|
// +1 for the fixed Language row prepended before settingData entries
|
|
878
|
-
const totalRows =
|
|
891
|
+
const totalRows = 4 + (settingData && typeof settingData === 'object' ? Object.keys(settingData).length : 0);
|
|
879
892
|
const visible = Math.max(1, MID_H - 2);
|
|
880
893
|
if (key.downArrow || input === 'j') {
|
|
881
894
|
setSettingsCursor(c => Math.min(totalRows - 1, c + 1));
|
|
@@ -923,12 +936,33 @@ export const CliMenuManager: React.FC = () => {
|
|
|
923
936
|
}
|
|
924
937
|
return next;
|
|
925
938
|
});
|
|
939
|
+
} else if (settingsCursor === 3) {
|
|
940
|
+
// Row 3: toggle VS Code link
|
|
941
|
+
const port = (process.env.BINGO_PORT ? parseInt(process.env.BINGO_PORT) : 3456) || 3456;
|
|
942
|
+
const apiBase = process.env.BASE_API_URL || `http://127.0.0.1:${port}`;
|
|
943
|
+
setVscodeLinked(prev => {
|
|
944
|
+
const next = !prev;
|
|
945
|
+
try {
|
|
946
|
+
writeBingoSettings({ vscodeLinked: next });
|
|
947
|
+
} catch {
|
|
948
|
+
return prev;
|
|
949
|
+
}
|
|
950
|
+
const http = require('http');
|
|
951
|
+
if (next) {
|
|
952
|
+
http.request(`${apiBase}/api/providers/link-vscode`, { method: 'POST' })
|
|
953
|
+
.on('error', () => {}).end();
|
|
954
|
+
} else {
|
|
955
|
+
http.request(`${apiBase}/api/providers/link-vscode`, { method: 'DELETE' })
|
|
956
|
+
.on('error', () => {}).end();
|
|
957
|
+
}
|
|
958
|
+
return next;
|
|
959
|
+
});
|
|
926
960
|
}
|
|
927
961
|
}
|
|
928
962
|
}
|
|
929
963
|
// langPicker stage: ESC handled above; selection via SelectInput onSelect
|
|
930
964
|
}
|
|
931
|
-
}, [menuItems, page, historyMenuStage, historyList, historyHasMore, navIndex, sessionMessages, settingData, MID_H, MSGS_PAGE_SIZE, showHelp, theme, settingsStage, settingsCursor, autoModeEnabled, bypassPermsEnabled]);
|
|
965
|
+
}, [menuItems, page, historyMenuStage, historyList, historyHasMore, navIndex, sessionMessages, settingData, MID_H, MSGS_PAGE_SIZE, showHelp, theme, settingsStage, settingsCursor, autoModeEnabled, bypassPermsEnabled, vscodeLinked]);
|
|
932
966
|
|
|
933
967
|
function cleanText(text: string): string {
|
|
934
968
|
return String(text ?? '').replace(/[\n\r]+/g, ' ').replace(/\u001b\[[0-9;]*m/g, '').trim();
|
|
@@ -1412,6 +1446,7 @@ export const CliMenuManager: React.FC = () => {
|
|
|
1412
1446
|
{ key: '__lang', label: tS.langLabel, value: currentLangLabel, interactive: true },
|
|
1413
1447
|
{ key: '__autoMode', label: tS.autoModeLabel, value: autoModeEnabled ? tS.autoModeOn : tS.autoModeOff, interactive: true },
|
|
1414
1448
|
{ key: '__bypassPerms', label: tS.bypassPermsLabel, value: bypassPermsEnabled ? tS.bypassPermsOn : tS.bypassPermsOff, interactive: true },
|
|
1449
|
+
{ key: '__vscode', label: tS.vscodeLabel, value: vscodeLinked ? tS.vscodeOn : tS.vscodeOff, interactive: true },
|
|
1415
1450
|
];
|
|
1416
1451
|
const dataEntries = settingData && typeof settingData === 'object' ? Object.entries(settingData) : [];
|
|
1417
1452
|
const dataRows: SettingRow[] = dataEntries.map(([k, v]) => ({
|