@lvce-editor/chat-view 6.62.0 → 6.64.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 +193 -121
- package/package.json +1 -1
|
@@ -1198,6 +1198,7 @@ const Reference = 100;
|
|
|
1198
1198
|
|
|
1199
1199
|
const ClientX = 'event.clientX';
|
|
1200
1200
|
const ClientY = 'event.clientY';
|
|
1201
|
+
const DataTransferFiles2 = 'event.dataTransfer.files2';
|
|
1201
1202
|
const DefaultPrevented = 'event.defaultPrevented';
|
|
1202
1203
|
const Key = 'event.key';
|
|
1203
1204
|
const ShiftKey = 'event.shiftKey';
|
|
@@ -1307,6 +1308,10 @@ const showContextMenu2 = async (uid, menuId, x, y, args) => {
|
|
|
1307
1308
|
number(y);
|
|
1308
1309
|
await invoke('ContextMenu.show2', uid, menuId, x, y, args);
|
|
1309
1310
|
};
|
|
1311
|
+
const getFileHandles = async fileIds => {
|
|
1312
|
+
const files = await invoke('FileSystemHandle.getFileHandles', fileIds);
|
|
1313
|
+
return files;
|
|
1314
|
+
};
|
|
1310
1315
|
const sendMessagePortToClipBoardWorker$1 = async (port, rpcId) => {
|
|
1311
1316
|
const command = 'ClipBoard.handleMessagePort';
|
|
1312
1317
|
await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToClipBoardWorker', port, command, rpcId);
|
|
@@ -2034,15 +2039,18 @@ const getDefaultModelsOpenAi = () => {
|
|
|
2034
2039
|
id: 'openapi/codex-5.3',
|
|
2035
2040
|
name: 'Codex 5.3',
|
|
2036
2041
|
provider: 'openApi',
|
|
2042
|
+
supportsReasoningEffort: true,
|
|
2037
2043
|
usageCost: 1
|
|
2038
2044
|
}, {
|
|
2039
2045
|
id: 'openapi/gpt-5.4-mini',
|
|
2040
2046
|
name: 'GPT-5.4 Mini',
|
|
2041
|
-
provider: 'openApi'
|
|
2047
|
+
provider: 'openApi',
|
|
2048
|
+
supportsReasoningEffort: true
|
|
2042
2049
|
}, {
|
|
2043
2050
|
id: 'openapi/gpt-5-mini',
|
|
2044
2051
|
name: 'GPT-5 Mini',
|
|
2045
|
-
provider: 'openApi'
|
|
2052
|
+
provider: 'openApi',
|
|
2053
|
+
supportsReasoningEffort: true
|
|
2046
2054
|
}, {
|
|
2047
2055
|
id: 'openapi/gpt-4o-mini',
|
|
2048
2056
|
name: 'GPT-4o Mini',
|
|
@@ -4659,7 +4667,7 @@ const getOpenAiTools = tools => {
|
|
|
4659
4667
|
};
|
|
4660
4668
|
});
|
|
4661
4669
|
};
|
|
4662
|
-
const getOpenAiParams = (input, modelId, stream, includeObfuscation, tools, webSearchEnabled, maxToolCalls, systemPrompt = '', previousResponseId, reasoningEffort) => {
|
|
4670
|
+
const getOpenAiParams = (input, modelId, stream, includeObfuscation, tools, webSearchEnabled, maxToolCalls, systemPrompt = '', previousResponseId, reasoningEffort, supportsReasoningEffort = false) => {
|
|
4663
4671
|
const openAiTools = getOpenAiTools(tools);
|
|
4664
4672
|
return {
|
|
4665
4673
|
input,
|
|
@@ -4678,7 +4686,7 @@ const getOpenAiParams = (input, modelId, stream, includeObfuscation, tools, webS
|
|
|
4678
4686
|
...(previousResponseId ? {
|
|
4679
4687
|
previous_response_id: previousResponseId
|
|
4680
4688
|
} : {}),
|
|
4681
|
-
...(reasoningEffort ? {
|
|
4689
|
+
...(reasoningEffort && supportsReasoningEffort ? {
|
|
4682
4690
|
reasoning: {
|
|
4683
4691
|
effort: reasoningEffort
|
|
4684
4692
|
}
|
|
@@ -5285,6 +5293,7 @@ const getOpenApiAssistantText = async (messages, modelId, openApiApiKey, openApi
|
|
|
5285
5293
|
questionToolEnabled = false,
|
|
5286
5294
|
reasoningEffort,
|
|
5287
5295
|
stream,
|
|
5296
|
+
supportsReasoningEffort = false,
|
|
5288
5297
|
systemPrompt = '',
|
|
5289
5298
|
toolEnablement,
|
|
5290
5299
|
useChatNetworkWorkerForRequests = false,
|
|
@@ -5303,7 +5312,7 @@ const getOpenApiAssistantText = async (messages, modelId, openApiApiKey, openApi
|
|
|
5303
5312
|
const maxToolIterations = safeMaxToolCalls - 1;
|
|
5304
5313
|
let previousResponseId;
|
|
5305
5314
|
for (let i = 0; i <= maxToolIterations; i++) {
|
|
5306
|
-
const postBody = getOpenAiParams(openAiInput, modelId, stream, includeObfuscation, tools, webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort);
|
|
5315
|
+
const postBody = getOpenAiParams(openAiInput, modelId, stream, includeObfuscation, tools, webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort, supportsReasoningEffort);
|
|
5307
5316
|
if (stream) {
|
|
5308
5317
|
const streamResult = useChatNetworkWorkerForRequests ? await (async () => {
|
|
5309
5318
|
const requestResult = await makeStreamingApiRequest({
|
|
@@ -6313,6 +6322,8 @@ const getAiResponse = async ({
|
|
|
6313
6322
|
}
|
|
6314
6323
|
const usesOpenApiModel = isOpenApiModel(selectedModelId, models);
|
|
6315
6324
|
const usesOpenRouterModel = isOpenRouterModel(selectedModelId, models);
|
|
6325
|
+
const selectedModel = models.find(model => model.id === selectedModelId);
|
|
6326
|
+
const supportsReasoningEffort = selectedModel?.supportsReasoningEffort ?? false;
|
|
6316
6327
|
if (!text && usesOpenApiModel) {
|
|
6317
6328
|
const safeMaxToolCalls = Math.max(1, maxToolCalls);
|
|
6318
6329
|
if (useMockApi) {
|
|
@@ -6332,7 +6343,7 @@ const getAiResponse = async ({
|
|
|
6332
6343
|
capture({
|
|
6333
6344
|
headers,
|
|
6334
6345
|
method: 'POST',
|
|
6335
|
-
payload: getOpenAiParams(openAiInput, modelId, streamingEnabled, passIncludeObfuscation, await getBasicChatTools(agentMode, questionToolEnabled, toolEnablement), agentMode === 'plan' ? false : webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort),
|
|
6346
|
+
payload: getOpenAiParams(openAiInput, modelId, streamingEnabled, passIncludeObfuscation, await getBasicChatTools(agentMode, questionToolEnabled, toolEnablement), agentMode === 'plan' ? false : webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort, supportsReasoningEffort),
|
|
6336
6347
|
url: getOpenApiApiEndpoint(openApiApiBaseUrl)
|
|
6337
6348
|
});
|
|
6338
6349
|
const result = await getMockOpenApiAssistantText(streamingEnabled, onTextChunk, onToolCallsChunk, onDataEvent, onEventStreamFinished);
|
|
@@ -6412,6 +6423,7 @@ const getAiResponse = async ({
|
|
|
6412
6423
|
reasoningEffort
|
|
6413
6424
|
} : {}),
|
|
6414
6425
|
stream: streamingEnabled,
|
|
6426
|
+
supportsReasoningEffort,
|
|
6415
6427
|
systemPrompt,
|
|
6416
6428
|
...(toolEnablement ? {
|
|
6417
6429
|
toolEnablement
|
|
@@ -6512,6 +6524,7 @@ const ChatModelPickerItemSelected = 'ChatModelPickerItemSelected';
|
|
|
6512
6524
|
const ChatModelPickerItemUsageCost = 'ChatModelPickerItemUsageCost';
|
|
6513
6525
|
const ChatModelPickerList = 'ChatModelPickerList';
|
|
6514
6526
|
const ChatName = 'ChatName';
|
|
6527
|
+
const ChatOverlays = 'ChatOverlays';
|
|
6515
6528
|
const ChatOrderedList = 'ChatOrderedList';
|
|
6516
6529
|
const ChatOrderedListItem = 'ChatOrderedListItem';
|
|
6517
6530
|
const ChatOrderedListItemContent = 'ChatOrderedListItemContent';
|
|
@@ -9481,7 +9494,23 @@ const handleDragOver = async (state, name, hasFiles = true) => {
|
|
|
9481
9494
|
};
|
|
9482
9495
|
};
|
|
9483
9496
|
|
|
9484
|
-
const
|
|
9497
|
+
const getDroppedFiles = async fileHandles => {
|
|
9498
|
+
// TODO adjust e2e test and remove this code
|
|
9499
|
+
if (fileHandles.some(item => typeof item !== 'number')) {
|
|
9500
|
+
return fileHandles.map(item => {
|
|
9501
|
+
return {
|
|
9502
|
+
getFile() {
|
|
9503
|
+
return item;
|
|
9504
|
+
}
|
|
9505
|
+
};
|
|
9506
|
+
});
|
|
9507
|
+
}
|
|
9508
|
+
const actualHandles = await getFileHandles(fileHandles);
|
|
9509
|
+
return actualHandles.map(item => item.value).filter(item => item.kind === 'file');
|
|
9510
|
+
};
|
|
9511
|
+
|
|
9512
|
+
const handleDropFiles = async (state, name, fileHandles = []) => {
|
|
9513
|
+
const droppedFileHandles = await getDroppedFiles(fileHandles);
|
|
9485
9514
|
const {
|
|
9486
9515
|
composerDropActive,
|
|
9487
9516
|
composerDropEnabled,
|
|
@@ -9501,11 +9530,12 @@ const handleDropFiles = async (state, name, files = []) => {
|
|
|
9501
9530
|
...state,
|
|
9502
9531
|
composerDropActive: false
|
|
9503
9532
|
};
|
|
9504
|
-
if (!selectedSessionId ||
|
|
9533
|
+
if (!selectedSessionId || fileHandles.length === 0) {
|
|
9505
9534
|
return nextState;
|
|
9506
9535
|
}
|
|
9507
9536
|
const nextAttachments = [];
|
|
9508
|
-
for (const
|
|
9537
|
+
for (const droppedFileHandle of droppedFileHandles) {
|
|
9538
|
+
const file = await droppedFileHandle.getFile();
|
|
9509
9539
|
const attachmentId = crypto.randomUUID();
|
|
9510
9540
|
const displayType = await getComposerAttachmentDisplayType(file, file.name, file.type);
|
|
9511
9541
|
const previewSrc = await getComposerAttachmentPreviewSrc(file, displayType, file.type);
|
|
@@ -10751,6 +10781,16 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10751
10781
|
justify-content: flex-end;
|
|
10752
10782
|
}
|
|
10753
10783
|
|
|
10784
|
+
.ChatOverlays{
|
|
10785
|
+
position: absolute;
|
|
10786
|
+
inset: 0;
|
|
10787
|
+
pointer-events: none;
|
|
10788
|
+
}
|
|
10789
|
+
|
|
10790
|
+
.ChatOverlays > *{
|
|
10791
|
+
pointer-events: auto;
|
|
10792
|
+
}
|
|
10793
|
+
|
|
10754
10794
|
.RunModePickerPopOver{
|
|
10755
10795
|
overflow: hidden;
|
|
10756
10796
|
border: 1px solid var(--vscode-widget-border, var(--vscode-panel-border));
|
|
@@ -10922,57 +10962,6 @@ const HandleClickReasoningEffortPickerToggle = 56;
|
|
|
10922
10962
|
const HandleClickAgentModePickerToggle = 57;
|
|
10923
10963
|
const HandleContextMenuChatImageAttachment = 58;
|
|
10924
10964
|
|
|
10925
|
-
const getCustomSelectOptionVirtualDom = (name, label, selected, detail = '') => {
|
|
10926
|
-
const className = mergeClassNames(ChatModelPickerItem, selected ? ChatModelPickerItemSelected : '');
|
|
10927
|
-
const hasDetail = detail !== '';
|
|
10928
|
-
return [{
|
|
10929
|
-
childCount: 1,
|
|
10930
|
-
type: Li
|
|
10931
|
-
}, {
|
|
10932
|
-
childCount: hasDetail ? 2 : 1,
|
|
10933
|
-
className,
|
|
10934
|
-
inputType: 'button',
|
|
10935
|
-
name,
|
|
10936
|
-
onClick: HandleClick,
|
|
10937
|
-
type: Button$1
|
|
10938
|
-
}, {
|
|
10939
|
-
childCount: 1,
|
|
10940
|
-
className: ChatModelPickerItemLabel,
|
|
10941
|
-
name,
|
|
10942
|
-
type: Span
|
|
10943
|
-
}, text(label), ...(hasDetail ? [{
|
|
10944
|
-
childCount: 1,
|
|
10945
|
-
className: ChatModelPickerItemUsageCost,
|
|
10946
|
-
name,
|
|
10947
|
-
type: Span
|
|
10948
|
-
}, text(detail)] : [])];
|
|
10949
|
-
};
|
|
10950
|
-
|
|
10951
|
-
const getCustomSelectPopOverVirtualDom = (optionCount, height, optionNodes, containerClassName = '', popOverClassName = '') => {
|
|
10952
|
-
return [{
|
|
10953
|
-
childCount: 1,
|
|
10954
|
-
className: mergeClassNames(ChatModelPickerContainer, containerClassName),
|
|
10955
|
-
type: Div
|
|
10956
|
-
}, {
|
|
10957
|
-
childCount: 1,
|
|
10958
|
-
className: mergeClassNames(ChatModelPicker, popOverClassName),
|
|
10959
|
-
style: `height: ${height}px;`,
|
|
10960
|
-
type: Div
|
|
10961
|
-
}, {
|
|
10962
|
-
childCount: optionCount,
|
|
10963
|
-
className: ChatModelPickerList,
|
|
10964
|
-
type: Ul
|
|
10965
|
-
}, ...optionNodes];
|
|
10966
|
-
};
|
|
10967
|
-
|
|
10968
|
-
const agentModePickerHeight = agentModes.length * 28;
|
|
10969
|
-
const getAgentModeOptionsVirtualDom = selectedAgentMode => {
|
|
10970
|
-
return agentModes.flatMap(agentMode => getCustomSelectOptionVirtualDom(getAgentModePickerItemInputName(agentMode), getAgentModeLabel(agentMode), agentMode === selectedAgentMode));
|
|
10971
|
-
};
|
|
10972
|
-
const getAgentModePickerPopOverVirtualDom = selectedAgentMode => {
|
|
10973
|
-
return getCustomSelectPopOverVirtualDom(agentModes.length, agentModePickerHeight, getAgentModeOptionsVirtualDom(selectedAgentMode));
|
|
10974
|
-
};
|
|
10975
|
-
|
|
10976
10965
|
const getAddContextButtonDom = () => {
|
|
10977
10966
|
return [{
|
|
10978
10967
|
childCount: 1,
|
|
@@ -11045,6 +11034,32 @@ const getCreatePullRequestButtonDom = () => {
|
|
|
11045
11034
|
}];
|
|
11046
11035
|
};
|
|
11047
11036
|
|
|
11037
|
+
const getCustomSelectOptionVirtualDom = (name, label, selected, detail = '') => {
|
|
11038
|
+
const className = mergeClassNames(ChatModelPickerItem, selected ? ChatModelPickerItemSelected : '');
|
|
11039
|
+
const hasDetail = detail !== '';
|
|
11040
|
+
return [{
|
|
11041
|
+
childCount: 1,
|
|
11042
|
+
type: Li
|
|
11043
|
+
}, {
|
|
11044
|
+
childCount: hasDetail ? 2 : 1,
|
|
11045
|
+
className,
|
|
11046
|
+
inputType: 'button',
|
|
11047
|
+
name,
|
|
11048
|
+
onClick: HandleClick,
|
|
11049
|
+
type: Button$1
|
|
11050
|
+
}, {
|
|
11051
|
+
childCount: 1,
|
|
11052
|
+
className: ChatModelPickerItemLabel,
|
|
11053
|
+
name,
|
|
11054
|
+
type: Span
|
|
11055
|
+
}, text(label), ...(hasDetail ? [{
|
|
11056
|
+
childCount: 1,
|
|
11057
|
+
className: ChatModelPickerItemUsageCost,
|
|
11058
|
+
name,
|
|
11059
|
+
type: Span
|
|
11060
|
+
}, text(detail)] : [])];
|
|
11061
|
+
};
|
|
11062
|
+
|
|
11048
11063
|
const reasoningEffortPickerHeight = reasoningEfforts.length * 28;
|
|
11049
11064
|
const getReasoningEffortOptionsVirtualDom = selectedReasoningEffort => {
|
|
11050
11065
|
return reasoningEfforts.flatMap(reasoningEffort => {
|
|
@@ -11297,10 +11312,36 @@ const getChatSendAreaDom = (composerValue, composerAttachments, agentMode, agent
|
|
|
11297
11312
|
}, {
|
|
11298
11313
|
childCount: primaryControlsCount,
|
|
11299
11314
|
className: ChatSendAreaPrimaryControls,
|
|
11315
|
+
role: 'toolbar',
|
|
11300
11316
|
type: Div
|
|
11301
11317
|
}, ...(showAgentModePicker ? getAgentModePickerVirtualDom(agentMode, agentModePickerOpen) : []), ...getChatModelPickerToggleVirtualDom(models, selectedModelId, modelPickerOpen), ...(reasoningPickerEnabled ? getReasoningEffortPickerVirtualDom(reasoningEffort, reasoningEffortPickerOpen) : []), ...(showResponsiveRunModePicker ? getRunModePickerVirtualDom(runMode, runModePickerOpen) : []), ...(usageOverviewEnabled ? getUsageOverviewDom(tokensUsed, tokensMax) : []), ...(addContextButtonEnabled ? getAddContextButtonDom() : []), ...(showCreatePullRequestButton ? getCreatePullRequestButtonDom() : []), ...getSendButtonDom(isSendDisabled, voiceDictationEnabled)];
|
|
11302
11318
|
};
|
|
11303
11319
|
|
|
11320
|
+
const getCustomSelectPopOverVirtualDom = (optionCount, height, optionNodes, containerClassName = '', popOverClassName = '') => {
|
|
11321
|
+
return [{
|
|
11322
|
+
childCount: 1,
|
|
11323
|
+
className: mergeClassNames(ChatModelPickerContainer, containerClassName),
|
|
11324
|
+
type: Div
|
|
11325
|
+
}, {
|
|
11326
|
+
childCount: 1,
|
|
11327
|
+
className: mergeClassNames(ChatModelPicker, popOverClassName),
|
|
11328
|
+
style: `height: ${height}px;`,
|
|
11329
|
+
type: Div
|
|
11330
|
+
}, {
|
|
11331
|
+
childCount: optionCount,
|
|
11332
|
+
className: ChatModelPickerList,
|
|
11333
|
+
type: Ul
|
|
11334
|
+
}, ...optionNodes];
|
|
11335
|
+
};
|
|
11336
|
+
|
|
11337
|
+
const agentModePickerHeight = agentModes.length * 28;
|
|
11338
|
+
const getAgentModeOptionsVirtualDom = selectedAgentMode => {
|
|
11339
|
+
return agentModes.flatMap(agentMode => getCustomSelectOptionVirtualDom(getAgentModePickerItemInputName(agentMode), getAgentModeLabel(agentMode), agentMode === selectedAgentMode));
|
|
11340
|
+
};
|
|
11341
|
+
const getAgentModePickerPopOverVirtualDom = selectedAgentMode => {
|
|
11342
|
+
return getCustomSelectPopOverVirtualDom(agentModes.length, agentModePickerHeight, getAgentModeOptionsVirtualDom(selectedAgentMode));
|
|
11343
|
+
};
|
|
11344
|
+
|
|
11304
11345
|
const getUsageCostLabel = model => {
|
|
11305
11346
|
return `${model.usageCost ?? 1}x`;
|
|
11306
11347
|
};
|
|
@@ -11367,6 +11408,51 @@ const getChatModelPickerPopOverVirtualDom = (models, selectedModelId, modelPicke
|
|
|
11367
11408
|
}, ...getModelPickerHeaderDom(modelPickerSearchValue), ...getChatModelListVirtualDom(visibleModels, selectedModelId)];
|
|
11368
11409
|
};
|
|
11369
11410
|
|
|
11411
|
+
const runModes = ['local', 'background', 'cloud'];
|
|
11412
|
+
const runModePickerHeight = runModes.length * 28;
|
|
11413
|
+
const getRunModeOptionsVirtualDom = selectedRunMode => {
|
|
11414
|
+
return runModes.flatMap(runMode => getCustomSelectOptionVirtualDom(getRunModePickerItemInputName(runMode), runMode, runMode === selectedRunMode));
|
|
11415
|
+
};
|
|
11416
|
+
const getRunModePickerPopOverVirtualDom = selectedRunMode => {
|
|
11417
|
+
return getCustomSelectPopOverVirtualDom(runModes.length, runModePickerHeight, getRunModeOptionsVirtualDom(selectedRunMode), RunModePickerContainer, RunModePickerPopOver);
|
|
11418
|
+
};
|
|
11419
|
+
|
|
11420
|
+
const getDropOverlayVirtualDom = () => {
|
|
11421
|
+
return [{
|
|
11422
|
+
childCount: 1,
|
|
11423
|
+
className: mergeClassNames(ChatViewDropOverlay, ChatViewDropOverlayActive),
|
|
11424
|
+
name: ComposerDropTarget,
|
|
11425
|
+
onDragLeave: HandleDragLeave,
|
|
11426
|
+
onDragOver: HandleDragOver,
|
|
11427
|
+
onDrop: HandleDrop,
|
|
11428
|
+
type: Div
|
|
11429
|
+
}, {
|
|
11430
|
+
text: attachImageAsContext(),
|
|
11431
|
+
type: Text
|
|
11432
|
+
}];
|
|
11433
|
+
};
|
|
11434
|
+
const getChatOverlaysVirtualDom = ({
|
|
11435
|
+
agentMode,
|
|
11436
|
+
agentModePickerVisible,
|
|
11437
|
+
dropOverlayVisible,
|
|
11438
|
+
modelPickerSearchValue,
|
|
11439
|
+
modelPickerVisible,
|
|
11440
|
+
runMode,
|
|
11441
|
+
runModePickerVisible,
|
|
11442
|
+
selectedModelId,
|
|
11443
|
+
visibleModels
|
|
11444
|
+
}) => {
|
|
11445
|
+
const overlayChildCount = (dropOverlayVisible ? 1 : 0) + (agentModePickerVisible ? 1 : 0) + (modelPickerVisible ? 1 : 0) + (runModePickerVisible ? 1 : 0);
|
|
11446
|
+
if (!overlayChildCount) {
|
|
11447
|
+
return [];
|
|
11448
|
+
}
|
|
11449
|
+
return [{
|
|
11450
|
+
childCount: overlayChildCount,
|
|
11451
|
+
className: ChatOverlays,
|
|
11452
|
+
type: Div
|
|
11453
|
+
}, ...(dropOverlayVisible ? getDropOverlayVirtualDom() : []), ...(agentModePickerVisible ? getAgentModePickerPopOverVirtualDom(agentMode) : []), ...(modelPickerVisible ? getChatModelPickerPopOverVirtualDom(visibleModels, selectedModelId, modelPickerSearchValue) : []), ...(runModePickerVisible ? getRunModePickerPopOverVirtualDom(runMode) : [])];
|
|
11454
|
+
};
|
|
11455
|
+
|
|
11370
11456
|
const getBoldInlineNodeDom = (inlineNode, useChatMathWorker, renderInlineNodeDom) => {
|
|
11371
11457
|
return [{
|
|
11372
11458
|
childCount: inlineNode.children.length,
|
|
@@ -12862,15 +12948,6 @@ const getProjectListDom = (projects, sessions, projectExpandedIds, selectedProje
|
|
|
12862
12948
|
}, text('+ Add Project'), ...(showBackToChatsButton ? getBackToChatsButtonDom() : [])];
|
|
12863
12949
|
};
|
|
12864
12950
|
|
|
12865
|
-
const runModes = ['local', 'background', 'cloud'];
|
|
12866
|
-
const runModePickerHeight = runModes.length * 28;
|
|
12867
|
-
const getRunModeOptionsVirtualDom = selectedRunMode => {
|
|
12868
|
-
return runModes.flatMap(runMode => getCustomSelectOptionVirtualDom(getRunModePickerItemInputName(runMode), runMode, runMode === selectedRunMode));
|
|
12869
|
-
};
|
|
12870
|
-
const getRunModePickerPopOverVirtualDom = selectedRunMode => {
|
|
12871
|
-
return getCustomSelectPopOverVirtualDom(runModes.length, runModePickerHeight, getRunModeOptionsVirtualDom(selectedRunMode), RunModePickerContainer, RunModePickerPopOver);
|
|
12872
|
-
};
|
|
12873
|
-
|
|
12874
12951
|
const getChatModeChatFocusVirtualDom = ({
|
|
12875
12952
|
addContextButtonEnabled,
|
|
12876
12953
|
agentMode,
|
|
@@ -12928,25 +13005,25 @@ const getChatModeChatFocusVirtualDom = ({
|
|
|
12928
13005
|
const isAgentModePickerVisible = hasSpaceForAgentModePicker && agentModePickerOpen;
|
|
12929
13006
|
const isNewModelPickerVisible = modelPickerOpen;
|
|
12930
13007
|
const isRunModePickerVisible = showRunMode && hasSpaceForRunModePicker && runModePickerOpen;
|
|
12931
|
-
const
|
|
13008
|
+
const hasVisibleOverlays = isDropOverlayVisible || isAgentModePickerVisible || isNewModelPickerVisible || isRunModePickerVisible;
|
|
13009
|
+
const chatRootChildCount = 3 + (hasVisibleOverlays ? 1 : 0);
|
|
12932
13010
|
return [{
|
|
12933
13011
|
childCount: chatRootChildCount,
|
|
12934
13012
|
className: mergeClassNames(Viewlet, Chat, ChatFocus),
|
|
12935
13013
|
onDragEnter: HandleDragEnterChatView,
|
|
12936
13014
|
onDragOver: HandleDragOverChatView,
|
|
12937
13015
|
type: Div
|
|
12938
|
-
}, ...getProjectListDom(projects, sessions, projectExpandedIds, selectedProjectId, selectedSessionId, projectListScrollTop, true), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker, true), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...(
|
|
12939
|
-
|
|
12940
|
-
|
|
12941
|
-
|
|
12942
|
-
|
|
12943
|
-
|
|
12944
|
-
|
|
12945
|
-
|
|
12946
|
-
|
|
12947
|
-
|
|
12948
|
-
|
|
12949
|
-
}] : []), ...(isAgentModePickerVisible ? getAgentModePickerPopOverVirtualDom(agentMode) : []), ...(isNewModelPickerVisible ? getChatModelPickerPopOverVirtualDom(visibleModels, selectedModelId, modelPickerSearchValue) : []), ...(isRunModePickerVisible ? getRunModePickerPopOverVirtualDom(runMode) : [])];
|
|
13016
|
+
}, ...getProjectListDom(projects, sessions, projectExpandedIds, selectedProjectId, selectedSessionId, projectListScrollTop, true), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker, true), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...getChatOverlaysVirtualDom({
|
|
13017
|
+
agentMode,
|
|
13018
|
+
agentModePickerVisible: isAgentModePickerVisible,
|
|
13019
|
+
dropOverlayVisible: isDropOverlayVisible,
|
|
13020
|
+
modelPickerSearchValue,
|
|
13021
|
+
modelPickerVisible: isNewModelPickerVisible,
|
|
13022
|
+
runMode,
|
|
13023
|
+
runModePickerVisible: isRunModePickerVisible,
|
|
13024
|
+
selectedModelId,
|
|
13025
|
+
visibleModels
|
|
13026
|
+
})];
|
|
12950
13027
|
};
|
|
12951
13028
|
|
|
12952
13029
|
const arrowLeft = {
|
|
@@ -13033,6 +13110,7 @@ const getChatHeaderActionsDom = (viewMode, authEnabled = false, authStatus = 'si
|
|
|
13033
13110
|
title: closeChat()
|
|
13034
13111
|
}];
|
|
13035
13112
|
return [{
|
|
13113
|
+
'aria-label': 'chat actions',
|
|
13036
13114
|
childCount: items.length,
|
|
13037
13115
|
className: ChatActions,
|
|
13038
13116
|
role: ToolBar,
|
|
@@ -13056,7 +13134,7 @@ const getChatHeaderDomDetailMode = (selectedSessionTitle, authEnabled = false, a
|
|
|
13056
13134
|
childCount: hasAuthError ? 3 : 2,
|
|
13057
13135
|
className: ChatHeader,
|
|
13058
13136
|
onContextMenu: HandleChatHeaderContextMenu,
|
|
13059
|
-
type:
|
|
13137
|
+
type: Header
|
|
13060
13138
|
}, {
|
|
13061
13139
|
childCount: 2,
|
|
13062
13140
|
className: ChatName,
|
|
@@ -13122,25 +13200,25 @@ const getChatModeDetailVirtualDom = ({
|
|
|
13122
13200
|
const isAgentModePickerVisible = hasSpaceForAgentModePicker && agentModePickerOpen;
|
|
13123
13201
|
const isNewModelPickerVisible = modelPickerOpen;
|
|
13124
13202
|
const isRunModePickerVisible = showRunMode && hasSpaceForRunModePicker && runModePickerOpen;
|
|
13125
|
-
const
|
|
13203
|
+
const hasVisibleOverlays = isDropOverlayVisible || isAgentModePickerVisible || isNewModelPickerVisible || isRunModePickerVisible;
|
|
13204
|
+
const chatRootChildCount = 3 + (hasVisibleOverlays ? 1 : 0);
|
|
13126
13205
|
return [{
|
|
13127
13206
|
childCount: chatRootChildCount,
|
|
13128
13207
|
className: mergeClassNames(Viewlet, Chat),
|
|
13129
13208
|
onDragEnter: HandleDragEnterChatView,
|
|
13130
13209
|
onDragOver: HandleDragOverChatView,
|
|
13131
13210
|
type: Div
|
|
13132
|
-
}, ...getChatHeaderDomDetailMode(selectedSessionTitle, authEnabled, authStatus, authErrorMessage), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...(
|
|
13133
|
-
|
|
13134
|
-
|
|
13135
|
-
|
|
13136
|
-
|
|
13137
|
-
|
|
13138
|
-
|
|
13139
|
-
|
|
13140
|
-
|
|
13141
|
-
|
|
13142
|
-
|
|
13143
|
-
}] : []), ...(isAgentModePickerVisible ? getAgentModePickerPopOverVirtualDom(agentMode) : []), ...(isNewModelPickerVisible ? getChatModelPickerPopOverVirtualDom(visibleModels, selectedModelId, modelPickerSearchValue) : []), ...(isRunModePickerVisible ? getRunModePickerPopOverVirtualDom(runMode) : [])];
|
|
13211
|
+
}, ...getChatHeaderDomDetailMode(selectedSessionTitle, authEnabled, authStatus, authErrorMessage), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...getChatOverlaysVirtualDom({
|
|
13212
|
+
agentMode,
|
|
13213
|
+
agentModePickerVisible: isAgentModePickerVisible,
|
|
13214
|
+
dropOverlayVisible: isDropOverlayVisible,
|
|
13215
|
+
modelPickerSearchValue,
|
|
13216
|
+
modelPickerVisible: isNewModelPickerVisible,
|
|
13217
|
+
runMode,
|
|
13218
|
+
runModePickerVisible: isRunModePickerVisible,
|
|
13219
|
+
selectedModelId,
|
|
13220
|
+
visibleModels
|
|
13221
|
+
})];
|
|
13144
13222
|
};
|
|
13145
13223
|
|
|
13146
13224
|
const getChatSearchDom = (hasSearchField, searchValue) => {
|
|
@@ -13170,7 +13248,7 @@ const getChatHeaderListModeDom = (authEnabled = false, authStatus = 'signed-out'
|
|
|
13170
13248
|
childCount: headerChildCount,
|
|
13171
13249
|
className: ChatHeader,
|
|
13172
13250
|
onContextMenu: HandleChatHeaderContextMenu,
|
|
13173
|
-
type:
|
|
13251
|
+
type: Header
|
|
13174
13252
|
}, {
|
|
13175
13253
|
childCount: 1,
|
|
13176
13254
|
className: ChatHeaderLabel,
|
|
@@ -13269,23 +13347,6 @@ const getChatListDom = (sessions, selectedSessionId, listFocusedIndex, chatListS
|
|
|
13269
13347
|
}, ...sessions.flatMap((session, index) => getSessionDom(session, index === listFocusedIndex))];
|
|
13270
13348
|
};
|
|
13271
13349
|
|
|
13272
|
-
const getDropOverlayVirtualDom = isDropOverlayVisible => {
|
|
13273
|
-
if (!isDropOverlayVisible) {
|
|
13274
|
-
return [];
|
|
13275
|
-
}
|
|
13276
|
-
return [{
|
|
13277
|
-
childCount: 1,
|
|
13278
|
-
className: mergeClassNames(ChatViewDropOverlay, ChatViewDropOverlayActive),
|
|
13279
|
-
name: ComposerDropTarget,
|
|
13280
|
-
onDragLeave: HandleDragLeave,
|
|
13281
|
-
onDragOver: HandleDragOver,
|
|
13282
|
-
onDrop: HandleDrop,
|
|
13283
|
-
type: Div
|
|
13284
|
-
}, {
|
|
13285
|
-
text: attachImageAsContext(),
|
|
13286
|
-
type: Text
|
|
13287
|
-
}];
|
|
13288
|
-
};
|
|
13289
13350
|
const getChatModeListVirtualDom = ({
|
|
13290
13351
|
addContextButtonEnabled,
|
|
13291
13352
|
agentMode,
|
|
@@ -13332,7 +13393,8 @@ const getChatModeListVirtualDom = ({
|
|
|
13332
13393
|
const isAgentModePickerVisible = hasSpaceForAgentModePicker && agentModePickerOpen;
|
|
13333
13394
|
const isNewModelPickerVisible = modelPickerOpen;
|
|
13334
13395
|
const isRunModePickerVisible = showRunMode && hasSpaceForRunModePicker && runModePickerOpen;
|
|
13335
|
-
const
|
|
13396
|
+
const hasVisibleOverlays = isDropOverlayVisible || isAgentModePickerVisible || isNewModelPickerVisible || isRunModePickerVisible;
|
|
13397
|
+
const chatRootChildCount = 3 + (hasVisibleOverlays ? 1 : 0);
|
|
13336
13398
|
const searchValueTrimmed = searchValue.trim().toLowerCase();
|
|
13337
13399
|
const visibleSessions = searchEnabled && searchValueTrimmed ? sessions.filter(session => session.title.toLowerCase().includes(searchValueTrimmed)) : sessions;
|
|
13338
13400
|
return [{
|
|
@@ -13341,7 +13403,17 @@ const getChatModeListVirtualDom = ({
|
|
|
13341
13403
|
onDragEnter: HandleDragEnterChatView,
|
|
13342
13404
|
onDragOver: HandleDragOverChatView,
|
|
13343
13405
|
type: Div
|
|
13344
|
-
}, ...getChatHeaderListModeDom(authEnabled, authStatus, authErrorMessage, searchEnabled, searchFieldVisible, searchValue), ...getChatListDom(visibleSessions, selectedSessionId, listFocusedIndex, chatListScrollTop), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, false, voiceDictationEnabled), ...
|
|
13406
|
+
}, ...getChatHeaderListModeDom(authEnabled, authStatus, authErrorMessage, searchEnabled, searchFieldVisible, searchValue), ...getChatListDom(visibleSessions, selectedSessionId, listFocusedIndex, chatListScrollTop), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, false, voiceDictationEnabled), ...getChatOverlaysVirtualDom({
|
|
13407
|
+
agentMode,
|
|
13408
|
+
agentModePickerVisible: isAgentModePickerVisible,
|
|
13409
|
+
dropOverlayVisible: isDropOverlayVisible,
|
|
13410
|
+
modelPickerSearchValue,
|
|
13411
|
+
modelPickerVisible: isNewModelPickerVisible,
|
|
13412
|
+
runMode,
|
|
13413
|
+
runModePickerVisible: isRunModePickerVisible,
|
|
13414
|
+
selectedModelId,
|
|
13415
|
+
visibleModels
|
|
13416
|
+
})];
|
|
13345
13417
|
};
|
|
13346
13418
|
|
|
13347
13419
|
const getChatModeUnsupportedVirtualDom = () => {
|
|
@@ -13901,11 +13973,11 @@ const renderEventListeners = () => {
|
|
|
13901
13973
|
params: ['handleSearchValueChange', TargetValue]
|
|
13902
13974
|
}, {
|
|
13903
13975
|
name: HandleDragEnter,
|
|
13904
|
-
params: ['handleDragEnter', TargetName,
|
|
13976
|
+
params: ['handleDragEnter', TargetName, DataTransferFiles2],
|
|
13905
13977
|
preventDefault: true
|
|
13906
13978
|
}, {
|
|
13907
13979
|
name: HandleDragOver,
|
|
13908
|
-
params: ['handleDragOver', TargetName,
|
|
13980
|
+
params: ['handleDragOver', TargetName, DataTransferFiles2],
|
|
13909
13981
|
preventDefault: true
|
|
13910
13982
|
}, {
|
|
13911
13983
|
name: HandleDragLeave,
|
|
@@ -13913,15 +13985,15 @@ const renderEventListeners = () => {
|
|
|
13913
13985
|
preventDefault: true
|
|
13914
13986
|
}, {
|
|
13915
13987
|
name: HandleDrop,
|
|
13916
|
-
params: ['handleDropFiles', TargetName,
|
|
13988
|
+
params: ['handleDropFiles', TargetName, DataTransferFiles2],
|
|
13917
13989
|
preventDefault: true
|
|
13918
13990
|
}, {
|
|
13919
13991
|
name: HandleDragEnterChatView,
|
|
13920
|
-
params: ['handleDragEnter', 'composer-drop-target',
|
|
13992
|
+
params: ['handleDragEnter', 'composer-drop-target', DataTransferFiles2],
|
|
13921
13993
|
preventDefault: true
|
|
13922
13994
|
}, {
|
|
13923
13995
|
name: HandleDragOverChatView,
|
|
13924
|
-
params: ['handleDragOver', 'composer-drop-target',
|
|
13996
|
+
params: ['handleDragOver', 'composer-drop-target', DataTransferFiles2],
|
|
13925
13997
|
preventDefault: true
|
|
13926
13998
|
}, {
|
|
13927
13999
|
name: HandleModelChange,
|