-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathextension.js
More file actions
166 lines (136 loc) · 5.68 KB
/
Copy pathextension.js
File metadata and controls
166 lines (136 loc) · 5.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// @ts-nocheck
const vscode = require('vscode');
const { activateCodeCompletion } = require('./src/codeCompletion');
const { activateCommentToCode } = require('./src/commentToCode');
const {activateTempArea} = require('./src/TempArea');
const { deactivateCodeCompletion } = require('./src/codeCompletion');
const { deactivateCommentToCode } = require('./src/commentToCode');
const {deleteCustomModel, editCustomModel} = require('./src/openaiClient');
async function activate(context) {
context.subscriptions.push(
vscode.commands.registerCommand('navicode.switchModel', async () => {
const config = vscode.workspace.getConfiguration('navicode');
const currentModel = config.get('selectedModel', 'deepseek-chat');
// 默认模型列表
const defaultModels = ['deepseek-chat', 'gpt-4', 'gpt-3.5', 'doubao'];
// 获取用户自定义模型列表
const customModels = config.get('customModels', []);
const customModelNames = customModels.map((m) => m.modelName);
// 合并去重
const allModels = [...new Set([...defaultModels, ...customModelNames])];
const selectedModel = await vscode.window.showQuickPick(allModels, {
placeHolder: `当前模型: ${currentModel}`
});
if (selectedModel) {
await config.update('selectedModel', selectedModel, true);
vscode.window.showInformationMessage(` 已切换到模型: ${selectedModel}`);
}
})
);
context.subscriptions.push(
vscode.commands.registerCommand('navicode.deleteCustomModel', deleteCustomModel),
vscode.commands.registerCommand('navicode.editCustomModel', editCustomModel)
);
context.subscriptions.push(
vscode.commands.registerCommand('navicode.viewCurrentModelInfo', async () => {
const config = vscode.workspace.getConfiguration('navicode');
const selectedModel = config.get('selectedModel');
const customModels = config.get('customModels', []);
// 默认模型
const builtInModelConfigs = {
'deepseek-chat': {
baseURL: 'https://api.deepseek.com/beta',
model: 'deepseek-chat'
},
'gpt-4': {
baseURL: 'https://api.openai.com/v1',
model: 'gpt-4.1'
},
'gpt-3.5': {
baseURL: 'https://api.openai.com/v1',
model: 'gpt-3.5-turbo'
},
'doubao': {
baseURL: 'https://ark.cn-beijing.volces.com/api/v3/',
model: 'doubao-seed-1.6-250615'
}
};
let info = builtInModelConfigs[selectedModel];
if (!info) {
// 从自定义模型中查找
info = customModels.find(m => m.modelName === selectedModel);
}
if (!info) {
vscode.window.showErrorMessage(`未找到模型 ${selectedModel} 的配置`);
return;
}
vscode.window.showInformationMessage(
`模型名称:${selectedModel}
模型地址:${info.baseURL}
模型参数:${info.model}`
);
})
);
context.subscriptions.push(
vscode.commands.registerCommand('navicode.configureCustomModels', async () => {
try {
let customModel = {
modelName: '',
baseURL: '',
apiKey: '',
model: ''
};
const steps = [
{ label: '1. 设置模型名称', key: 'modelName', prompt: '请输入模型名称(唯一标识)' },
{ label: '2. 设置 API URL', key: 'baseURL', prompt: '请输入模型API的 Base URL' },
{ label: '3. 设置 API Key', key: 'apiKey', prompt: '请输入 API Key', password: true },
{ label: '4. 设置模型 ID', key: 'model', prompt: '请输入模型标识(model 名称)' }
];
for (let step of steps) {
const value = await vscode.window.showInputBox({
prompt: step.prompt,
ignoreFocusOut: true,
password: step.password || false,
validateInput: (text) => (text.trim() === '' ? '不能为空' : null)
});
if (value === undefined) {
vscode.window.showWarningMessage('配置流程已取消');
return;
}
customModel[step.key] = value.trim();
}
// 读取已有配置
const config = vscode.workspace.getConfiguration('navicode');
const currentModels = config.get('customModels', []);
// 检查重名
if (currentModels.some((m) => m.modelName === customModel.modelName)) {
vscode.window.showErrorMessage(`模型名称 "${customModel.modelName}" 已存在,请换一个名称`);
return;
}
currentModels.push(customModel);
await config.update('customModels', currentModels, vscode.ConfigurationTarget.Global);
await config.update('selectedModel', customModel.modelName, vscode.ConfigurationTarget.Global);
vscode.window.showInformationMessage(` 模型 "${customModel.modelName}" 添加成功,并已设为当前模型`);
} catch (err) {
vscode.window.showErrorMessage('配置模型时发生错误: ' + err.message);
}
})
);
activateTempArea(context);
activateCodeCompletion(context);
activateCommentToCode(context);
const { default: ChatViewProvider } = await import('./src/aiChatCodeGen.mjs');
context.subscriptions.push(
vscode.window.registerWebviewViewProvider(
'navicodeChatView',
new ChatViewProvider(context),
{ webviewOptions: { retainContextWhenHidden: true } }
)
);
const disposable = vscode.commands.registerCommand("navicode.openChat", async () => {
await vscode.commands.executeCommand('workbench.action.toggleAuxiliaryBar', true);
});
context.subscriptions.push(disposable);
}
function deactivate() {}
module.exports = { activate, deactivate };