Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.ts
4780 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { KeyCode } from '../../../../../base/common/keyCodes.js';
7
import { isObject, isString } from '../../../../../base/common/types.js';
8
import { localize, localize2 } from '../../../../../nls.js';
9
import { Action2, registerAction2 } from '../../../../../platform/actions/common/actions.js';
10
import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';
11
import { SyncDescriptor } from '../../../../../platform/instantiation/common/descriptors.js';
12
import { IInstantiationService, ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js';
13
import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';
14
import { Registry } from '../../../../../platform/registry/common/platform.js';
15
import { IEditorPaneRegistry, EditorPaneDescriptor } from '../../../../browser/editor.js';
16
import { EditorExtensions, IEditorFactoryRegistry, IEditorSerializer } from '../../../../common/editor.js';
17
import { EditorInput } from '../../../../common/editor/editorInput.js';
18
import { IEditorGroupsService } from '../../../../services/editor/common/editorGroupsService.js';
19
import { IEditorService } from '../../../../services/editor/common/editorService.js';
20
import { ChatContextKeys } from '../../common/actions/chatContextKeys.js';
21
import { CONTEXT_MODELS_EDITOR, CONTEXT_MODELS_SEARCH_FOCUS, MANAGE_CHAT_COMMAND_ID } from '../../common/constants.js';
22
import { CHAT_CATEGORY } from '../actions/chatActions.js';
23
import { ChatManagementEditor, ModelsManagementEditor } from './chatManagementEditor.js';
24
import { ChatManagementEditorInput, ModelsManagementEditorInput } from './chatManagementEditorInput.js';
25
26
Registry.as<IEditorPaneRegistry>(EditorExtensions.EditorPane).registerEditorPane(
27
EditorPaneDescriptor.create(
28
ChatManagementEditor,
29
ChatManagementEditor.ID,
30
localize('chatManagementEditor', "Chat Management Editor")
31
),
32
[
33
new SyncDescriptor(ChatManagementEditorInput)
34
]
35
);
36
37
Registry.as<IEditorPaneRegistry>(EditorExtensions.EditorPane).registerEditorPane(
38
EditorPaneDescriptor.create(
39
ModelsManagementEditor,
40
ModelsManagementEditor.ID,
41
localize('modelsManagementEditor', "Models Management Editor")
42
),
43
[
44
new SyncDescriptor(ModelsManagementEditorInput)
45
]
46
);
47
48
class ChatManagementEditorInputSerializer implements IEditorSerializer {
49
50
canSerialize(editorInput: EditorInput): boolean {
51
return true;
52
}
53
54
serialize(input: ChatManagementEditorInput): string {
55
return '';
56
}
57
58
deserialize(instantiationService: IInstantiationService): ChatManagementEditorInput {
59
return instantiationService.createInstance(ChatManagementEditorInput);
60
}
61
}
62
63
class ModelsManagementEditorInputSerializer implements IEditorSerializer {
64
65
canSerialize(editorInput: EditorInput): boolean {
66
return true;
67
}
68
69
serialize(input: ModelsManagementEditorInput): string {
70
return '';
71
}
72
73
deserialize(instantiationService: IInstantiationService): ModelsManagementEditorInput {
74
return instantiationService.createInstance(ModelsManagementEditorInput);
75
}
76
}
77
78
Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory).registerEditorSerializer(ChatManagementEditorInput.ID, ChatManagementEditorInputSerializer);
79
Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory).registerEditorSerializer(ModelsManagementEditorInput.ID, ModelsManagementEditorInputSerializer);
80
81
interface IOpenManageCopilotEditorActionOptions {
82
query?: string;
83
section?: string;
84
}
85
86
function sanitizeString(arg: unknown): string | undefined {
87
return isString(arg) ? arg : undefined;
88
}
89
90
function sanitizeOpenManageCopilotEditorArgs(input: unknown): IOpenManageCopilotEditorActionOptions {
91
if (!isObject(input)) {
92
input = {};
93
}
94
95
const args = <IOpenManageCopilotEditorActionOptions>input;
96
97
return {
98
query: sanitizeString(args?.query),
99
section: sanitizeString(args?.section)
100
};
101
}
102
103
registerAction2(class extends Action2 {
104
constructor() {
105
super({
106
id: MANAGE_CHAT_COMMAND_ID,
107
title: localize2('openAiManagement', "Manage Language Models"),
108
category: CHAT_CATEGORY,
109
precondition: ContextKeyExpr.and(ChatContextKeys.enabled, ContextKeyExpr.or(
110
ChatContextKeys.Entitlement.planFree,
111
ChatContextKeys.Entitlement.planPro,
112
ChatContextKeys.Entitlement.planProPlus,
113
ChatContextKeys.Entitlement.internal
114
)),
115
f1: true,
116
});
117
}
118
async run(accessor: ServicesAccessor, args: string | IOpenManageCopilotEditorActionOptions) {
119
const editorGroupsService = accessor.get(IEditorGroupsService);
120
args = sanitizeOpenManageCopilotEditorArgs(args);
121
return editorGroupsService.activeGroup.openEditor(new ModelsManagementEditorInput(), { pinned: true });
122
}
123
});
124
125
registerAction2(class extends Action2 {
126
constructor() {
127
super({
128
id: 'chat.models.action.clearSearchResults',
129
precondition: CONTEXT_MODELS_EDITOR,
130
keybinding: {
131
primary: KeyCode.Escape,
132
weight: KeybindingWeight.EditorContrib,
133
when: CONTEXT_MODELS_SEARCH_FOCUS
134
},
135
title: localize2('models.clearResults', "Clear Models Search Results")
136
});
137
}
138
139
run(accessor: ServicesAccessor) {
140
const activeEditorPane = accessor.get(IEditorService).activeEditorPane;
141
if (activeEditorPane instanceof ModelsManagementEditor) {
142
activeEditorPane.clearSearch();
143
}
144
return null;
145
}
146
});
147
148