@lvce-editor/chat-view 6.17.0 → 6.19.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/chatViewWorkerMain.js +239 -51
- package/package.json +1 -1
|
@@ -1118,14 +1118,14 @@ const create$2 = rpcId => {
|
|
|
1118
1118
|
};
|
|
1119
1119
|
|
|
1120
1120
|
const {
|
|
1121
|
-
invoke: invoke$
|
|
1121
|
+
invoke: invoke$7,
|
|
1122
1122
|
set: set$7
|
|
1123
1123
|
} = create$2(6007);
|
|
1124
1124
|
const getMathBlockDom = async node => {
|
|
1125
|
-
return invoke$
|
|
1125
|
+
return invoke$7('ChatMath.getMathBlockDom', node);
|
|
1126
1126
|
};
|
|
1127
1127
|
const getMathInlineDom = async node => {
|
|
1128
|
-
return invoke$
|
|
1128
|
+
return invoke$7('ChatMath.getMathInlineDom', node);
|
|
1129
1129
|
};
|
|
1130
1130
|
|
|
1131
1131
|
const Button$2 = 'button';
|
|
@@ -1218,30 +1218,30 @@ const SetPatches = 'Viewlet.setPatches';
|
|
|
1218
1218
|
const FocusChatInput = 8000;
|
|
1219
1219
|
|
|
1220
1220
|
const {
|
|
1221
|
-
invoke: invoke$
|
|
1221
|
+
invoke: invoke$6,
|
|
1222
1222
|
set: set$6
|
|
1223
1223
|
} = create$2(ChatNetworkWorker);
|
|
1224
1224
|
|
|
1225
1225
|
const {
|
|
1226
|
-
invoke: invoke$
|
|
1226
|
+
invoke: invoke$5,
|
|
1227
1227
|
set: set$5
|
|
1228
1228
|
} = create$2(ChatToolWorker);
|
|
1229
1229
|
|
|
1230
1230
|
const {
|
|
1231
|
-
invoke: invoke$
|
|
1231
|
+
invoke: invoke$4,
|
|
1232
1232
|
set: set$4
|
|
1233
1233
|
} = create$2(ExtensionHostWorker);
|
|
1234
1234
|
|
|
1235
1235
|
const {
|
|
1236
|
-
invoke: invoke$
|
|
1236
|
+
invoke: invoke$3,
|
|
1237
1237
|
set: set$3
|
|
1238
1238
|
} = create$2(OpenerWorker);
|
|
1239
1239
|
const openExternal = async url => {
|
|
1240
|
-
return invoke$
|
|
1240
|
+
return invoke$3('Open.openExternal', url);
|
|
1241
1241
|
};
|
|
1242
1242
|
|
|
1243
1243
|
const {
|
|
1244
|
-
invoke: invoke$
|
|
1244
|
+
invoke: invoke$2,
|
|
1245
1245
|
invokeAndTransfer,
|
|
1246
1246
|
set: set$2
|
|
1247
1247
|
} = create$2(RendererWorker);
|
|
@@ -1250,7 +1250,7 @@ const showContextMenu2 = async (uid, menuId, x, y, args) => {
|
|
|
1250
1250
|
number(menuId);
|
|
1251
1251
|
number(x);
|
|
1252
1252
|
number(y);
|
|
1253
|
-
await invoke$
|
|
1253
|
+
await invoke$2('ContextMenu.show2', uid, menuId, x, y, args);
|
|
1254
1254
|
};
|
|
1255
1255
|
const sendMessagePortToOpenerWorker$1 = async (port, rpcId) => {
|
|
1256
1256
|
const command = 'HandleMessagePort.handleMessagePort';
|
|
@@ -1261,7 +1261,7 @@ const sendMessagePortToChatMathWorker$1 = async (port, rpcId) => {
|
|
|
1261
1261
|
await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToChatMathWorker', port, command, rpcId);
|
|
1262
1262
|
};
|
|
1263
1263
|
const readFile = async uri => {
|
|
1264
|
-
return invoke$
|
|
1264
|
+
return invoke$2('FileSystem.readFile', uri);
|
|
1265
1265
|
};
|
|
1266
1266
|
const sendMessagePortToExtensionHostWorker$1 = async (port, rpcId = 0) => {
|
|
1267
1267
|
const command = 'HandleMessagePort.handleMessagePort2';
|
|
@@ -1274,13 +1274,13 @@ const sendMessagePortToChatToolWorker = async port => {
|
|
|
1274
1274
|
await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToChatToolWorker', port, 'HandleMessagePort.handleMessagePort');
|
|
1275
1275
|
};
|
|
1276
1276
|
const activateByEvent$1 = (event, assetDir, platform) => {
|
|
1277
|
-
return invoke$
|
|
1277
|
+
return invoke$2('ExtensionHostManagement.activateByEvent', event, assetDir, platform);
|
|
1278
1278
|
};
|
|
1279
1279
|
const getPreference = async key => {
|
|
1280
|
-
return await invoke$
|
|
1280
|
+
return await invoke$2('Preferences.get', key);
|
|
1281
1281
|
};
|
|
1282
1282
|
const measureTextBlockHeight$1 = async (actualInput, fontFamily, fontSize, lineHeightPx, width) => {
|
|
1283
|
-
return invoke$
|
|
1283
|
+
return invoke$2(`MeasureTextHeight.measureTextBlockHeight`, actualInput, fontFamily, fontSize, lineHeightPx, width);
|
|
1284
1284
|
};
|
|
1285
1285
|
|
|
1286
1286
|
const toCommandId = key => {
|
|
@@ -1473,7 +1473,7 @@ const chatTitle = () => {
|
|
|
1473
1473
|
return i18nString('Chat');
|
|
1474
1474
|
};
|
|
1475
1475
|
const chats = () => {
|
|
1476
|
-
return i18nString('
|
|
1476
|
+
return i18nString('Chat');
|
|
1477
1477
|
};
|
|
1478
1478
|
const newChat = () => {
|
|
1479
1479
|
return i18nString('New Chat');
|
|
@@ -1551,7 +1551,7 @@ const getOpenApiApiKey = () => {
|
|
|
1551
1551
|
return i18nString('Get API Key');
|
|
1552
1552
|
};
|
|
1553
1553
|
const deleteChatSession$1 = () => {
|
|
1554
|
-
return i18nString('
|
|
1554
|
+
return i18nString('Archive');
|
|
1555
1555
|
};
|
|
1556
1556
|
const defaultSessionTitle = () => {
|
|
1557
1557
|
return i18nString('Chat 1');
|
|
@@ -1679,6 +1679,7 @@ const createDefaultState = () => {
|
|
|
1679
1679
|
chatSendAreaPaddingLeft: 8,
|
|
1680
1680
|
chatSendAreaPaddingRight: 8,
|
|
1681
1681
|
chatSendAreaPaddingTop: 10,
|
|
1682
|
+
chatStorageWorkerEnabled: false,
|
|
1682
1683
|
composerDropActive: false,
|
|
1683
1684
|
composerDropEnabled: true,
|
|
1684
1685
|
composerFontFamily: 'system-ui',
|
|
@@ -1793,6 +1794,12 @@ const create = (uid, x, y, width, height, platform, assetDir) => {
|
|
|
1793
1794
|
set$1(uid, state, state);
|
|
1794
1795
|
};
|
|
1795
1796
|
|
|
1797
|
+
const invoke$1 = async (method, ...params) => {
|
|
1798
|
+
{
|
|
1799
|
+
throw new Error('ChatStorageWorker is not initialized');
|
|
1800
|
+
}
|
|
1801
|
+
};
|
|
1802
|
+
|
|
1796
1803
|
const toError = error => {
|
|
1797
1804
|
if (error instanceof Error) {
|
|
1798
1805
|
return error;
|
|
@@ -2369,8 +2376,12 @@ const createDefaultStorage = () => {
|
|
|
2369
2376
|
return new IndexedDbChatSessionStorage();
|
|
2370
2377
|
};
|
|
2371
2378
|
let chatSessionStorage = createDefaultStorage();
|
|
2379
|
+
let chatStorageWorkerEnabled = false;
|
|
2380
|
+
const setChatStorageWorkerEnabled$1 = enabled => {
|
|
2381
|
+
chatStorageWorkerEnabled = enabled;
|
|
2382
|
+
};
|
|
2372
2383
|
const listChatSessions = async () => {
|
|
2373
|
-
const sessions = await chatSessionStorage.listSessions();
|
|
2384
|
+
const sessions = chatStorageWorkerEnabled ? await invoke$1() : await chatSessionStorage.listSessions();
|
|
2374
2385
|
return sessions.map(session => {
|
|
2375
2386
|
const summary = {
|
|
2376
2387
|
id: session.id,
|
|
@@ -2387,7 +2398,7 @@ const listChatSessions = async () => {
|
|
|
2387
2398
|
});
|
|
2388
2399
|
};
|
|
2389
2400
|
const getChatSession = async id => {
|
|
2390
|
-
const session = await chatSessionStorage.getSession(id);
|
|
2401
|
+
const session = chatStorageWorkerEnabled ? await invoke$1('ChatStorage.getSession', id) : await chatSessionStorage.getSession(id);
|
|
2391
2402
|
if (!session) {
|
|
2392
2403
|
return undefined;
|
|
2393
2404
|
}
|
|
@@ -2408,18 +2419,35 @@ const saveChatSession = async session => {
|
|
|
2408
2419
|
messages: [...session.messages],
|
|
2409
2420
|
title: session.title
|
|
2410
2421
|
};
|
|
2411
|
-
|
|
2422
|
+
const sessionValue = session.projectId ? {
|
|
2412
2423
|
...value,
|
|
2413
2424
|
projectId: session.projectId
|
|
2414
|
-
} : value
|
|
2425
|
+
} : value;
|
|
2426
|
+
if (chatStorageWorkerEnabled) {
|
|
2427
|
+
await invoke$1('ChatStorage.setSession', sessionValue);
|
|
2428
|
+
return;
|
|
2429
|
+
}
|
|
2430
|
+
await chatSessionStorage.setSession(sessionValue);
|
|
2415
2431
|
};
|
|
2416
2432
|
const deleteChatSession = async id => {
|
|
2433
|
+
if (chatStorageWorkerEnabled) {
|
|
2434
|
+
await invoke$1('ChatStorage.deleteSession', id);
|
|
2435
|
+
return;
|
|
2436
|
+
}
|
|
2417
2437
|
await chatSessionStorage.deleteSession(id);
|
|
2418
2438
|
};
|
|
2419
2439
|
const clearChatSessions = async () => {
|
|
2440
|
+
if (chatStorageWorkerEnabled) {
|
|
2441
|
+
await invoke$1();
|
|
2442
|
+
return;
|
|
2443
|
+
}
|
|
2420
2444
|
await chatSessionStorage.clear();
|
|
2421
2445
|
};
|
|
2422
2446
|
const appendChatViewEvent = async event => {
|
|
2447
|
+
if (chatStorageWorkerEnabled) {
|
|
2448
|
+
await invoke$1('ChatStorage.appendEvent', event);
|
|
2449
|
+
return;
|
|
2450
|
+
}
|
|
2423
2451
|
await chatSessionStorage.appendEvent(event);
|
|
2424
2452
|
};
|
|
2425
2453
|
|
|
@@ -2943,6 +2971,7 @@ const OpenContainingFolder = 'Open Containing Folder';
|
|
|
2943
2971
|
const OpenInIntegratedTerminal = 'Open in integrated Terminal';
|
|
2944
2972
|
const Paste = 'Paste';
|
|
2945
2973
|
const Rename = 'Rename';
|
|
2974
|
+
const Archive = 'Archive';
|
|
2946
2975
|
|
|
2947
2976
|
const openContainingFolder = () => {
|
|
2948
2977
|
return i18nString(OpenContainingFolder);
|
|
@@ -2968,10 +2997,27 @@ const copyRelativePath = () => {
|
|
|
2968
2997
|
const rename = () => {
|
|
2969
2998
|
return i18nString(Rename);
|
|
2970
2999
|
};
|
|
3000
|
+
const archive = () => {
|
|
3001
|
+
return i18nString(Archive);
|
|
3002
|
+
};
|
|
2971
3003
|
const deleteItem = () => {
|
|
2972
3004
|
return i18nString(Delete);
|
|
2973
3005
|
};
|
|
2974
3006
|
|
|
3007
|
+
const getMenuEntriesChatList = () => {
|
|
3008
|
+
return [{
|
|
3009
|
+
command: 'Chat.handleClickRename',
|
|
3010
|
+
flags: None,
|
|
3011
|
+
id: 'rename',
|
|
3012
|
+
label: rename()
|
|
3013
|
+
}, {
|
|
3014
|
+
command: 'Chat.handleClickArchive',
|
|
3015
|
+
flags: None,
|
|
3016
|
+
id: 'archive',
|
|
3017
|
+
label: archive()
|
|
3018
|
+
}];
|
|
3019
|
+
};
|
|
3020
|
+
|
|
2975
3021
|
const menuEntrySeparator = {
|
|
2976
3022
|
command: '',
|
|
2977
3023
|
flags: Separator,
|
|
@@ -3042,8 +3088,13 @@ const menuEntryDelete = {
|
|
|
3042
3088
|
const getMenuEntriesFile = () => {
|
|
3043
3089
|
return [menuEntryCopyAsE2eTest, menuEntryOpenContainingFolder, menuEntryOpenInIntegratedTerminal, menuEntrySeparator, menuEntryCut, menuEntryCopy, menuEntryPaste, menuEntrySeparator, menuEntryCopyPath, menuEntryCopyRelativePath, menuEntrySeparator, menuEntryRename, menuEntryDelete];
|
|
3044
3090
|
};
|
|
3045
|
-
const getMenuEntries =
|
|
3046
|
-
|
|
3091
|
+
const getMenuEntries = menuId => {
|
|
3092
|
+
switch (menuId) {
|
|
3093
|
+
case 1:
|
|
3094
|
+
return getMenuEntriesChatList();
|
|
3095
|
+
default:
|
|
3096
|
+
return getMenuEntriesFile();
|
|
3097
|
+
}
|
|
3047
3098
|
};
|
|
3048
3099
|
|
|
3049
3100
|
const getMenuEntryIds = () => {
|
|
@@ -3058,6 +3109,14 @@ const getSelectedSessionId = state => {
|
|
|
3058
3109
|
return state.selectedSessionId;
|
|
3059
3110
|
};
|
|
3060
3111
|
|
|
3112
|
+
const handleChatHeaderContextMenu = async state => {
|
|
3113
|
+
return state;
|
|
3114
|
+
};
|
|
3115
|
+
|
|
3116
|
+
const handleChatInputContextMenu = async state => {
|
|
3117
|
+
return state;
|
|
3118
|
+
};
|
|
3119
|
+
|
|
3061
3120
|
const getListIndex = (state, eventX, eventY) => {
|
|
3062
3121
|
const {
|
|
3063
3122
|
headerHeight,
|
|
@@ -3075,18 +3134,29 @@ const getListIndex = (state, eventX, eventY) => {
|
|
|
3075
3134
|
return Math.floor(relativeY / listItemHeight);
|
|
3076
3135
|
};
|
|
3077
3136
|
|
|
3078
|
-
const CHAT_LIST_ITEM_CONTEXT_MENU = 'ChatListItemContextMenu';
|
|
3079
3137
|
const handleChatListContextMenu = async (state, eventX, eventY) => {
|
|
3138
|
+
const {
|
|
3139
|
+
selectedProjectId,
|
|
3140
|
+
sessions,
|
|
3141
|
+
uid
|
|
3142
|
+
} = state;
|
|
3080
3143
|
const index = getListIndex(state, eventX, eventY);
|
|
3081
3144
|
if (index === -1) {
|
|
3082
3145
|
return state;
|
|
3083
3146
|
}
|
|
3084
|
-
const visibleSessions = getVisibleSessions(
|
|
3147
|
+
const visibleSessions = getVisibleSessions(sessions, selectedProjectId);
|
|
3085
3148
|
const item = visibleSessions[index];
|
|
3086
3149
|
if (!item) {
|
|
3087
3150
|
return state;
|
|
3088
3151
|
}
|
|
3089
|
-
await
|
|
3152
|
+
await showContextMenu2(uid, -1, eventX, eventY, {
|
|
3153
|
+
menuId: -1,
|
|
3154
|
+
sessionId: item.id
|
|
3155
|
+
});
|
|
3156
|
+
return state;
|
|
3157
|
+
};
|
|
3158
|
+
|
|
3159
|
+
const handleChatWelcomeContextMenu = async state => {
|
|
3090
3160
|
return state;
|
|
3091
3161
|
};
|
|
3092
3162
|
|
|
@@ -3117,7 +3187,7 @@ const createSession = async (state, projectIdOverride = '') => {
|
|
|
3117
3187
|
|
|
3118
3188
|
const openFolder = async () => {
|
|
3119
3189
|
try {
|
|
3120
|
-
return await invoke$
|
|
3190
|
+
return await invoke$2('FilePicker.showDirectoryPicker');
|
|
3121
3191
|
} catch {
|
|
3122
3192
|
return '';
|
|
3123
3193
|
}
|
|
@@ -3221,7 +3291,7 @@ const get = async key => {
|
|
|
3221
3291
|
return getPreference(key);
|
|
3222
3292
|
};
|
|
3223
3293
|
const update = async settings => {
|
|
3224
|
-
await invoke$
|
|
3294
|
+
await invoke$2('Preferences.update', settings);
|
|
3225
3295
|
};
|
|
3226
3296
|
|
|
3227
3297
|
const trailingSlashesRegex$3 = /\/+$/;
|
|
@@ -3249,12 +3319,12 @@ const handleClickLogin = async state => {
|
|
|
3249
3319
|
};
|
|
3250
3320
|
if (state.uid) {
|
|
3251
3321
|
set$1(state.uid, state, signingInState);
|
|
3252
|
-
await invoke$
|
|
3322
|
+
await invoke$2('Chat.rerender');
|
|
3253
3323
|
}
|
|
3254
3324
|
let usedMockResponse = false;
|
|
3255
3325
|
try {
|
|
3256
3326
|
usedMockResponse = hasPendingMockLoginResponse();
|
|
3257
|
-
const response = usedMockResponse ? await consumeNextLoginResponse() : await invoke$
|
|
3327
|
+
const response = usedMockResponse ? await consumeNextLoginResponse() : await invoke$2('Auth.login', state.backendUrl);
|
|
3258
3328
|
if (!isLoginResponse(response)) {
|
|
3259
3329
|
return {
|
|
3260
3330
|
...signingInState,
|
|
@@ -3288,7 +3358,7 @@ const handleClickLogin = async state => {
|
|
|
3288
3358
|
} catch (error) {
|
|
3289
3359
|
const errorMessage = error instanceof Error && error.message ? error.message : 'Backend authentication failed.';
|
|
3290
3360
|
if (!usedMockResponse) {
|
|
3291
|
-
await invoke$
|
|
3361
|
+
await invoke$2('Main.openUri', `${trimTrailingSlashes(state.backendUrl)}/auth/login`);
|
|
3292
3362
|
}
|
|
3293
3363
|
return {
|
|
3294
3364
|
...signingInState,
|
|
@@ -3300,7 +3370,7 @@ const handleClickLogin = async state => {
|
|
|
3300
3370
|
|
|
3301
3371
|
const handleClickLogout = async state => {
|
|
3302
3372
|
try {
|
|
3303
|
-
await invoke$
|
|
3373
|
+
await invoke$2('Auth.logout', state.backendUrl);
|
|
3304
3374
|
} catch {
|
|
3305
3375
|
// Ignore logout bridge errors and still clear local auth state.
|
|
3306
3376
|
}
|
|
@@ -3321,7 +3391,7 @@ const handleClickLogout = async state => {
|
|
|
3321
3391
|
};
|
|
3322
3392
|
|
|
3323
3393
|
const handleClickOpenApiApiKeySettings = async state => {
|
|
3324
|
-
await invoke$
|
|
3394
|
+
await invoke$2('Main.openUri', 'app://settings.json');
|
|
3325
3395
|
return state;
|
|
3326
3396
|
};
|
|
3327
3397
|
|
|
@@ -3331,7 +3401,7 @@ const handleClickOpenApiApiKeyWebsite = async state => {
|
|
|
3331
3401
|
};
|
|
3332
3402
|
|
|
3333
3403
|
const handleClickOpenRouterApiKeySettings = async state => {
|
|
3334
|
-
await invoke$
|
|
3404
|
+
await invoke$2('Main.openUri', 'app://settings.json');
|
|
3335
3405
|
return state;
|
|
3336
3406
|
};
|
|
3337
3407
|
|
|
@@ -3368,10 +3438,10 @@ const getAiResponse$1 = async options => {
|
|
|
3368
3438
|
};
|
|
3369
3439
|
|
|
3370
3440
|
const execute = async (name, rawArguments, options) => {
|
|
3371
|
-
return invoke$
|
|
3441
|
+
return invoke$5('ChatTool.execute', name, rawArguments, options);
|
|
3372
3442
|
};
|
|
3373
3443
|
const getTools = async () => {
|
|
3374
|
-
return invoke$
|
|
3444
|
+
return invoke$5('ChatTool.getTools');
|
|
3375
3445
|
};
|
|
3376
3446
|
|
|
3377
3447
|
const stringifyToolOutput = output => {
|
|
@@ -3871,7 +3941,7 @@ const executeProvider = async ({
|
|
|
3871
3941
|
}) => {
|
|
3872
3942
|
await activateByEvent(event, assetDir, platform);
|
|
3873
3943
|
// @ts-ignore
|
|
3874
|
-
const result = invoke$
|
|
3944
|
+
const result = invoke$4(method, ...params);
|
|
3875
3945
|
return result;
|
|
3876
3946
|
};
|
|
3877
3947
|
|
|
@@ -4003,10 +4073,10 @@ const getOpenApiApiEndpoint = openApiApiBaseUrl => {
|
|
|
4003
4073
|
};
|
|
4004
4074
|
|
|
4005
4075
|
const makeApiRequest = async options => {
|
|
4006
|
-
return invoke$
|
|
4076
|
+
return invoke$6('ChatNetwork.makeApiRequest', options);
|
|
4007
4077
|
};
|
|
4008
4078
|
const makeStreamingApiRequest = async options => {
|
|
4009
|
-
return invoke$
|
|
4079
|
+
return invoke$6('ChatNetwork.makeStreamingApiRequest', options);
|
|
4010
4080
|
};
|
|
4011
4081
|
|
|
4012
4082
|
const getTextContent = content => {
|
|
@@ -5858,7 +5928,7 @@ const handleClickSaveOpenRouterApiKey = async state => {
|
|
|
5858
5928
|
};
|
|
5859
5929
|
set$1(state.uid, state, optimisticState);
|
|
5860
5930
|
// @ts-ignore
|
|
5861
|
-
await invoke$
|
|
5931
|
+
await invoke$2('Chat.rerender');
|
|
5862
5932
|
const persistedState = await setOpenRouterApiKey(optimisticState, openRouterApiKey);
|
|
5863
5933
|
const updatedState = {
|
|
5864
5934
|
...persistedState,
|
|
@@ -7226,7 +7296,7 @@ const getSelectedSession = (sessions, selectedSessionId) => {
|
|
|
7226
7296
|
const setAndRerenderHandleTextChunkState = async (uid, previousState, nextState) => {
|
|
7227
7297
|
set$1(uid, previousState, nextState);
|
|
7228
7298
|
// @ts-ignore
|
|
7229
|
-
await invoke$
|
|
7299
|
+
await invoke$2('Chat.rerender');
|
|
7230
7300
|
};
|
|
7231
7301
|
|
|
7232
7302
|
const getToolCallMergeKey = toolCall => {
|
|
@@ -7366,7 +7436,7 @@ const handleTextChunkFunction = async (uid, assistantMessageId, chunk, handleTex
|
|
|
7366
7436
|
};
|
|
7367
7437
|
set$1(uid, handleTextChunkState.previousState, nextState);
|
|
7368
7438
|
// @ts-ignore
|
|
7369
|
-
await invoke$
|
|
7439
|
+
await invoke$2('Chat.rerender');
|
|
7370
7440
|
return {
|
|
7371
7441
|
latestState: nextState,
|
|
7372
7442
|
previousState: nextState
|
|
@@ -7568,7 +7638,7 @@ const handleSubmit = async state => {
|
|
|
7568
7638
|
}
|
|
7569
7639
|
set$1(state.uid, state, optimisticState);
|
|
7570
7640
|
// @ts-ignore
|
|
7571
|
-
await invoke$
|
|
7641
|
+
await invoke$2('Chat.rerender');
|
|
7572
7642
|
let handleTextChunkState = {
|
|
7573
7643
|
latestState: optimisticState,
|
|
7574
7644
|
previousState: optimisticState
|
|
@@ -7961,7 +8031,7 @@ const handleClickBack = async state => {
|
|
|
7961
8031
|
|
|
7962
8032
|
const handleClickClose = async () => {
|
|
7963
8033
|
// @ts-ignore
|
|
7964
|
-
await invoke$
|
|
8034
|
+
await invoke$2('Layout.hideSecondarySideBar');
|
|
7965
8035
|
};
|
|
7966
8036
|
|
|
7967
8037
|
const handleClickDelete = async (state, sessionId = '') => {
|
|
@@ -7983,7 +8053,7 @@ const handleClickFileName = async uri => {
|
|
|
7983
8053
|
return;
|
|
7984
8054
|
}
|
|
7985
8055
|
const normalizedUri = normalizeFileReferenceUri(uri);
|
|
7986
|
-
await invoke$
|
|
8056
|
+
await invoke$2('Main.openUri', normalizedUri);
|
|
7987
8057
|
};
|
|
7988
8058
|
|
|
7989
8059
|
const handleClickNew = async state => {
|
|
@@ -7993,12 +8063,12 @@ const handleClickNew = async state => {
|
|
|
7993
8063
|
};
|
|
7994
8064
|
|
|
7995
8065
|
const handleClickSessionDebug = async state => {
|
|
7996
|
-
await invoke$
|
|
8066
|
+
await invoke$2('Main.openUri', `chat-debug://${state.selectedSessionId}`);
|
|
7997
8067
|
return state;
|
|
7998
8068
|
};
|
|
7999
8069
|
|
|
8000
8070
|
const handleClickSettings = async () => {
|
|
8001
|
-
await invoke$
|
|
8071
|
+
await invoke$2('Main.openUri', 'app://settings.json');
|
|
8002
8072
|
};
|
|
8003
8073
|
|
|
8004
8074
|
const handleDragEnter = async (state, name, hasFiles = true) => {
|
|
@@ -8553,6 +8623,15 @@ const loadBackendUrl = async () => {
|
|
|
8553
8623
|
}
|
|
8554
8624
|
};
|
|
8555
8625
|
|
|
8626
|
+
const loadChatStorageWorkerEnabled = async () => {
|
|
8627
|
+
try {
|
|
8628
|
+
const savedChatStorageWorkerEnabled = await get('chatView.chatStorageWorkerEnabled');
|
|
8629
|
+
return typeof savedChatStorageWorkerEnabled === 'boolean' ? savedChatStorageWorkerEnabled : false;
|
|
8630
|
+
} catch {
|
|
8631
|
+
return false;
|
|
8632
|
+
}
|
|
8633
|
+
};
|
|
8634
|
+
|
|
8556
8635
|
const loadComposerDropEnabled = async () => {
|
|
8557
8636
|
try {
|
|
8558
8637
|
const savedComposerDropEnabled = await get('chatView.composerDropEnabled');
|
|
@@ -8679,13 +8758,14 @@ const loadVoiceDictationEnabled = async () => {
|
|
|
8679
8758
|
};
|
|
8680
8759
|
|
|
8681
8760
|
const loadPreferences = async () => {
|
|
8682
|
-
const [aiSessionTitleGenerationEnabled, authAccessToken, authEnabled, authRefreshToken, backendUrl, composerDropEnabled, openApiApiKey, openRouterApiKey, emitStreamingFunctionCallEvents, searchEnabled, streamingEnabled, todoListToolEnabled, passIncludeObfuscation, useChatCoordinatorWorker, useChatMathWorker, useChatNetworkWorkerForRequests, useChatToolWorker, voiceDictationEnabled] = await Promise.all([loadAiSessionTitleGenerationEnabled(), loadBackendAccessToken(), loadAuthEnabled(), loadBackendRefreshToken(), loadBackendUrl(), loadComposerDropEnabled(), loadOpenApiApiKey(), loadOpenRouterApiKey(), loadEmitStreamingFunctionCallEvents(), loadSearchEnabled(), loadStreamingEnabled(), loadTodoListToolEnabled(), loadPassIncludeObfuscation(), loadUseChatCoordinatorWorker(), loadUseChatMathWorker(), loadUseChatNetworkWorkerForRequests(), loadUseChatToolWorker(), loadVoiceDictationEnabled()]);
|
|
8761
|
+
const [aiSessionTitleGenerationEnabled, authAccessToken, authEnabled, authRefreshToken, backendUrl, chatStorageWorkerEnabled, composerDropEnabled, openApiApiKey, openRouterApiKey, emitStreamingFunctionCallEvents, searchEnabled, streamingEnabled, todoListToolEnabled, passIncludeObfuscation, useChatCoordinatorWorker, useChatMathWorker, useChatNetworkWorkerForRequests, useChatToolWorker, voiceDictationEnabled] = await Promise.all([loadAiSessionTitleGenerationEnabled(), loadBackendAccessToken(), loadAuthEnabled(), loadBackendRefreshToken(), loadBackendUrl(), loadChatStorageWorkerEnabled(), loadComposerDropEnabled(), loadOpenApiApiKey(), loadOpenRouterApiKey(), loadEmitStreamingFunctionCallEvents(), loadSearchEnabled(), loadStreamingEnabled(), loadTodoListToolEnabled(), loadPassIncludeObfuscation(), loadUseChatCoordinatorWorker(), loadUseChatMathWorker(), loadUseChatNetworkWorkerForRequests(), loadUseChatToolWorker(), loadVoiceDictationEnabled()]);
|
|
8683
8762
|
return {
|
|
8684
8763
|
aiSessionTitleGenerationEnabled,
|
|
8685
8764
|
authAccessToken,
|
|
8686
8765
|
authEnabled,
|
|
8687
8766
|
authRefreshToken,
|
|
8688
8767
|
backendUrl,
|
|
8768
|
+
chatStorageWorkerEnabled,
|
|
8689
8769
|
composerDropEnabled,
|
|
8690
8770
|
emitStreamingFunctionCallEvents,
|
|
8691
8771
|
openApiApiKey,
|
|
@@ -8743,6 +8823,7 @@ const loadContent = async (state, savedState) => {
|
|
|
8743
8823
|
authEnabled,
|
|
8744
8824
|
authRefreshToken,
|
|
8745
8825
|
backendUrl,
|
|
8826
|
+
chatStorageWorkerEnabled,
|
|
8746
8827
|
composerDropEnabled,
|
|
8747
8828
|
emitStreamingFunctionCallEvents,
|
|
8748
8829
|
openApiApiKey,
|
|
@@ -8757,6 +8838,7 @@ const loadContent = async (state, savedState) => {
|
|
|
8757
8838
|
useChatToolWorker,
|
|
8758
8839
|
voiceDictationEnabled
|
|
8759
8840
|
} = await loadPreferences();
|
|
8841
|
+
setChatStorageWorkerEnabled$1(chatStorageWorkerEnabled);
|
|
8760
8842
|
const legacySavedSessions = getSavedSessions(savedState);
|
|
8761
8843
|
const storedSessions = await listChatSessions();
|
|
8762
8844
|
let sessions = storedSessions;
|
|
@@ -8812,6 +8894,7 @@ const loadContent = async (state, savedState) => {
|
|
|
8812
8894
|
authStatus: authAccessToken ? 'signed-in' : 'signed-out',
|
|
8813
8895
|
backendUrl,
|
|
8814
8896
|
chatListScrollTop,
|
|
8897
|
+
chatStorageWorkerEnabled,
|
|
8815
8898
|
composerDropActive: false,
|
|
8816
8899
|
composerDropEnabled,
|
|
8817
8900
|
composerValue: savedComposerValue ?? state.composerValue,
|
|
@@ -8956,6 +9039,7 @@ const registerMockResponse = (state, mockResponse) => {
|
|
|
8956
9039
|
return state;
|
|
8957
9040
|
};
|
|
8958
9041
|
|
|
9042
|
+
/* eslint-disable @cspell/spellchecker */
|
|
8959
9043
|
const getCss = (composerHeight, listItemHeight, chatMessageFontSize, chatMessageLineHeight, chatMessageFontFamily, textAreaPaddingTop, textAreaPaddingLeft, textAreaPaddingRight, textAreaPaddingBottom, chatSendAreaPaddingTop, chatSendAreaPaddingLeft, chatSendAreaPaddingRight, chatSendAreaPaddingBottom, renderHtmlCss) => {
|
|
8960
9044
|
const buttonsHeight = 20;
|
|
8961
9045
|
const gap = 10;
|
|
@@ -8982,6 +9066,46 @@ const getCss = (composerHeight, listItemHeight, chatMessageFontSize, chatMessage
|
|
|
8982
9066
|
.ChatSendAreaBottom{
|
|
8983
9067
|
height: ${buttonsHeight}px;
|
|
8984
9068
|
}
|
|
9069
|
+
|
|
9070
|
+
.ChatSendArea:focus-within{
|
|
9071
|
+
border-color: darkcyan;
|
|
9072
|
+
}
|
|
9073
|
+
|
|
9074
|
+
.ChatListItem{
|
|
9075
|
+
display:flex;
|
|
9076
|
+
align-items:center;
|
|
9077
|
+
}
|
|
9078
|
+
|
|
9079
|
+
.ChatListItemStatusRow{
|
|
9080
|
+
width: 16px;
|
|
9081
|
+
min-width: 16px;
|
|
9082
|
+
display:flex;
|
|
9083
|
+
align-items:center;
|
|
9084
|
+
justify-content:center;
|
|
9085
|
+
}
|
|
9086
|
+
|
|
9087
|
+
.ChatListItemStatusIcon{
|
|
9088
|
+
font-size: 10px;
|
|
9089
|
+
}
|
|
9090
|
+
|
|
9091
|
+
.ChatListItemStatusStopped{
|
|
9092
|
+
color: var(--vscode-disabledForeground);
|
|
9093
|
+
}
|
|
9094
|
+
|
|
9095
|
+
.ChatListItemStatusInProgress{
|
|
9096
|
+
color: var(--vscode-charts-blue);
|
|
9097
|
+
}
|
|
9098
|
+
|
|
9099
|
+
.ChatListItemStatusFinished{
|
|
9100
|
+
color: var(--vscode-testing-iconPassed);
|
|
9101
|
+
.ChatListItem .SessionArchiveButton{
|
|
9102
|
+
opacity: 0;
|
|
9103
|
+
}
|
|
9104
|
+
|
|
9105
|
+
.ChatListItem:hover .SessionArchiveButton,
|
|
9106
|
+
.ChatListItem:focus-within .SessionArchiveButton{
|
|
9107
|
+
opacity: 1;
|
|
9108
|
+
}
|
|
8985
9109
|
`;
|
|
8986
9110
|
return `${baseCss}
|
|
8987
9111
|
|
|
@@ -9081,7 +9205,13 @@ const LabelDetail = 'LabelDetail';
|
|
|
9081
9205
|
const ChatList = 'ChatList';
|
|
9082
9206
|
const ChatListEmpty = 'ChatListEmpty';
|
|
9083
9207
|
const ChatListItem = 'ChatListItem';
|
|
9208
|
+
const ChatListItemStatusRow = 'ChatListItemStatusRow';
|
|
9209
|
+
const ChatListItemStatusIcon = 'ChatListItemStatusIcon';
|
|
9210
|
+
const ChatListItemStatusStopped = 'ChatListItemStatusStopped';
|
|
9211
|
+
const ChatListItemStatusInProgress = 'ChatListItemStatusInProgress';
|
|
9212
|
+
const ChatListItemStatusFinished = 'ChatListItemStatusFinished';
|
|
9084
9213
|
const ChatListItemLabel = 'ChatListItemLabel';
|
|
9214
|
+
const SessionArchiveButton = 'SessionArchiveButton';
|
|
9085
9215
|
const ProjectAddButton = 'ProjectAddButton';
|
|
9086
9216
|
const ProjectList = 'ProjectList';
|
|
9087
9217
|
const ProjectListChevron = 'ProjectListChevron';
|
|
@@ -9169,6 +9299,9 @@ const HandleClickDictationButton = 34;
|
|
|
9169
9299
|
const HandleMissingApiKeySubmit = 35;
|
|
9170
9300
|
const HandleRunModeChange = 36;
|
|
9171
9301
|
const HandleSearchInput = 37;
|
|
9302
|
+
const HandleChatWelcomeContextMenu = 39;
|
|
9303
|
+
const HandleChatHeaderContextMenu = 40;
|
|
9304
|
+
const HandleChatInputContextMenu = 41;
|
|
9172
9305
|
|
|
9173
9306
|
const getModelLabel = model => {
|
|
9174
9307
|
if (model.provider === 'openRouter') {
|
|
@@ -9408,6 +9541,7 @@ const getChatSendAreaDom = (composerValue, modelPickerOpen, modelPickerSearchVal
|
|
|
9408
9541
|
childCount: 0,
|
|
9409
9542
|
className: MultilineInputBox,
|
|
9410
9543
|
name: Composer,
|
|
9544
|
+
onContextMenu: HandleChatInputContextMenu,
|
|
9411
9545
|
onFocus: HandleFocus,
|
|
9412
9546
|
onInput: HandleInput,
|
|
9413
9547
|
placeholder: composePlaceholder(),
|
|
@@ -10701,6 +10835,7 @@ const getEmptyMessagesDom = () => {
|
|
|
10701
10835
|
return [{
|
|
10702
10836
|
childCount: 1,
|
|
10703
10837
|
className: ChatWelcomeMessage,
|
|
10838
|
+
onContextMenu: HandleChatWelcomeContextMenu,
|
|
10704
10839
|
type: Div
|
|
10705
10840
|
}, text(startConversation())];
|
|
10706
10841
|
};
|
|
@@ -10998,6 +11133,7 @@ const getChatHeaderDomDetailMode = (selectedSessionTitle, authEnabled = false, a
|
|
|
10998
11133
|
return [{
|
|
10999
11134
|
childCount: hasAuthError ? 3 : 2,
|
|
11000
11135
|
className: ChatHeader,
|
|
11136
|
+
onContextMenu: HandleChatHeaderContextMenu,
|
|
11001
11137
|
type: Div
|
|
11002
11138
|
}, {
|
|
11003
11139
|
childCount: 2,
|
|
@@ -11079,6 +11215,7 @@ const getChatHeaderListModeDom = (authEnabled = false, authStatus = 'signed-out'
|
|
|
11079
11215
|
return [{
|
|
11080
11216
|
childCount: headerChildCount,
|
|
11081
11217
|
className: ChatHeader,
|
|
11218
|
+
onContextMenu: HandleChatHeaderContextMenu,
|
|
11082
11219
|
type: Div
|
|
11083
11220
|
}, {
|
|
11084
11221
|
childCount: 1,
|
|
@@ -11116,18 +11253,37 @@ const getEmptyChatSessionsDom = () => {
|
|
|
11116
11253
|
}, text(clickToOpenNewChat())];
|
|
11117
11254
|
};
|
|
11118
11255
|
|
|
11256
|
+
const getSessionStatusClassName = session => {
|
|
11257
|
+
const hasInProgressAssistantMessage = session.messages.some(message => message.role === 'assistant' && message.inProgress);
|
|
11258
|
+
if (hasInProgressAssistantMessage) {
|
|
11259
|
+
return ChatListItemStatusInProgress;
|
|
11260
|
+
}
|
|
11261
|
+
const hasAssistantMessage = session.messages.some(message => message.role === 'assistant');
|
|
11262
|
+
if (hasAssistantMessage) {
|
|
11263
|
+
return ChatListItemStatusFinished;
|
|
11264
|
+
}
|
|
11265
|
+
return ChatListItemStatusStopped;
|
|
11266
|
+
};
|
|
11119
11267
|
const getSessionDom = session => {
|
|
11120
11268
|
const sessionClassName = ChatListItem;
|
|
11269
|
+
const sessionStatusClassName = getSessionStatusClassName(session);
|
|
11121
11270
|
return [{
|
|
11122
|
-
childCount:
|
|
11271
|
+
childCount: 3,
|
|
11123
11272
|
className: sessionClassName,
|
|
11124
11273
|
type: Li
|
|
11274
|
+
}, {
|
|
11275
|
+
childCount: 1,
|
|
11276
|
+
className: ChatListItemStatusRow,
|
|
11277
|
+
type: Div
|
|
11278
|
+
}, {
|
|
11279
|
+
childCount: 0,
|
|
11280
|
+
className: `${ChatListItemStatusIcon} codicon codicon-circle-filled ${sessionStatusClassName}`,
|
|
11281
|
+
type: Div
|
|
11125
11282
|
}, {
|
|
11126
11283
|
childCount: 1,
|
|
11127
11284
|
className: ChatListItemLabel,
|
|
11128
11285
|
name: getSessionInputName(session.id),
|
|
11129
11286
|
onContextMenu: HandleListContextMenu,
|
|
11130
|
-
tabIndex: 0,
|
|
11131
11287
|
type: Div
|
|
11132
11288
|
}, text(session.title), {
|
|
11133
11289
|
childCount: 1,
|
|
@@ -11135,14 +11291,18 @@ const getSessionDom = session => {
|
|
|
11135
11291
|
type: Div
|
|
11136
11292
|
}, {
|
|
11137
11293
|
childCount: 1,
|
|
11138
|
-
className: IconButton,
|
|
11294
|
+
className: mergeClassNames(IconButton, SessionArchiveButton),
|
|
11139
11295
|
'data-id': session.id,
|
|
11140
11296
|
name: SessionDelete,
|
|
11141
11297
|
onClick: HandleClickDelete,
|
|
11142
11298
|
tabIndex: 0,
|
|
11143
11299
|
title: deleteChatSession$1(),
|
|
11144
11300
|
type: Button$1
|
|
11145
|
-
},
|
|
11301
|
+
}, {
|
|
11302
|
+
childCount: 0,
|
|
11303
|
+
className: 'MaskIcon MaskIconTrash',
|
|
11304
|
+
type: Div
|
|
11305
|
+
}];
|
|
11146
11306
|
};
|
|
11147
11307
|
|
|
11148
11308
|
const getChatListDom = (sessions, selectedSessionId, chatListScrollTop = 0) => {
|
|
@@ -11770,9 +11930,20 @@ const renderEventListeners = () => {
|
|
|
11770
11930
|
name: HandleMessagesContextMenu,
|
|
11771
11931
|
params: ['handleMessagesContextMenu'],
|
|
11772
11932
|
preventDefault: true
|
|
11933
|
+
}, {
|
|
11934
|
+
name: HandleChatWelcomeContextMenu,
|
|
11935
|
+
params: ['handleChatWelcomeContextMenu']
|
|
11936
|
+
}, {
|
|
11937
|
+
name: HandleChatHeaderContextMenu,
|
|
11938
|
+
params: ['handleChatHeaderContextMenu'],
|
|
11939
|
+
preventDefault: true
|
|
11773
11940
|
}, {
|
|
11774
11941
|
name: HandleFocus,
|
|
11775
11942
|
params: ['handleInputFocus', TargetName]
|
|
11943
|
+
}, {
|
|
11944
|
+
name: HandleChatInputContextMenu,
|
|
11945
|
+
params: ['handleChatInputContextMenu'],
|
|
11946
|
+
preventDefault: true
|
|
11776
11947
|
}, {
|
|
11777
11948
|
name: HandleKeyDown,
|
|
11778
11949
|
params: ['handleKeyDown', Key, ShiftKey]
|
|
@@ -11901,6 +12072,19 @@ const setChatList = state => {
|
|
|
11901
12072
|
};
|
|
11902
12073
|
};
|
|
11903
12074
|
|
|
12075
|
+
const setChatStorageWorkerEnabled = async (state, chatStorageWorkerEnabled, persist = true) => {
|
|
12076
|
+
if (persist) {
|
|
12077
|
+
await update({
|
|
12078
|
+
'chatView.chatStorageWorkerEnabled': chatStorageWorkerEnabled
|
|
12079
|
+
});
|
|
12080
|
+
}
|
|
12081
|
+
setChatStorageWorkerEnabled$1(chatStorageWorkerEnabled);
|
|
12082
|
+
return {
|
|
12083
|
+
...state,
|
|
12084
|
+
chatStorageWorkerEnabled
|
|
12085
|
+
};
|
|
12086
|
+
};
|
|
12087
|
+
|
|
11904
12088
|
const setEmitStreamingFunctionCallEvents = (state, emitStreamingFunctionCallEvents) => {
|
|
11905
12089
|
return {
|
|
11906
12090
|
...state,
|
|
@@ -12018,8 +12202,11 @@ const commandMap = {
|
|
|
12018
12202
|
'Chat.getMenuEntryIds': getMenuEntryIds,
|
|
12019
12203
|
'Chat.getQuickPickMenuEntries': getQuickPickMenuEntries,
|
|
12020
12204
|
'Chat.getSelectedSessionId': wrapGetter(getSelectedSessionId),
|
|
12205
|
+
'Chat.handleChatHeaderContextMenu': wrapCommand(handleChatHeaderContextMenu),
|
|
12206
|
+
'Chat.handleChatInputContextMenu': wrapCommand(handleChatInputContextMenu),
|
|
12021
12207
|
'Chat.handleChatListContextMenu': handleChatListContextMenu,
|
|
12022
12208
|
'Chat.handleChatListScroll': wrapCommand(handleChatListScroll),
|
|
12209
|
+
'Chat.handleChatWelcomeContextMenu': wrapCommand(handleChatWelcomeContextMenu),
|
|
12023
12210
|
'Chat.handleClick': wrapCommand(handleClick),
|
|
12024
12211
|
'Chat.handleClickBack': wrapCommand(handleClickBack),
|
|
12025
12212
|
'Chat.handleClickClose': handleClickClose,
|
|
@@ -12070,6 +12257,7 @@ const commandMap = {
|
|
|
12070
12257
|
'Chat.setAuthEnabled': wrapCommand(setAuthEnabled),
|
|
12071
12258
|
'Chat.setBackendUrl': wrapCommand(setBackendUrl),
|
|
12072
12259
|
'Chat.setChatList': wrapCommand(setChatList),
|
|
12260
|
+
'Chat.setChatStorageWorkerEnabled': wrapCommand(setChatStorageWorkerEnabled),
|
|
12073
12261
|
'Chat.setEmitStreamingFunctionCallEvents': wrapCommand(setEmitStreamingFunctionCallEvents),
|
|
12074
12262
|
'Chat.setNewChatModelPickerEnabled': wrapCommand(setNewChatModelPickerEnabled),
|
|
12075
12263
|
'Chat.setOpenRouterApiKey': wrapCommand(setOpenRouterApiKey),
|