194 lines
6.5 KiB
TypeScript
Raw Normal View History

import * as vscode from "vscode";
2023-05-10 18:30:17 +08:00
2023-05-05 21:27:40 +08:00
import {
2024-04-01 17:15:44 +08:00
registerOpenChatPanelCommand,
registerAddContextCommand,
registerAskForCodeCommand,
registerAskForFileCommand,
regApplyDiffResultCommand,
registerStatusBarItemClickCommand,
regPythonPathCommand,
registerInstallCommandsCommand,
registerDevChatChatCommand,
registerHandleUri,
registerCodeLensRangeCommand,
registerCommentCommand,
registerFixCommand,
registerExplainCommand,
registerQuickFixCommand,
registerStartLocalServiceCommand
2024-04-01 17:15:44 +08:00
} from './contributes/commands';
import { regLanguageContext } from './contributes/context';
import { regDevChatView } from './contributes/views';
import { ExtensionContextHolder } from './util/extensionContext';
import { logger } from './util/logger';
import { LoggerChannelVscode } from './util/logger_vscode';
import { createStatusBarItem } from './panel/statusBarView';
import { UiUtilWrapper } from './util/uiUtil';
import { UiUtilVscode } from './util/uiUtil_vscode';
import { startRpcServer } from './ide_services/services';
import { registerCodeLensProvider } from './panel/codeLens';
import { stopDevChatBase } from './handler/sendMessageBase';
import { DevChatConfig } from './util/config';
2024-04-08 22:10:56 +08:00
import { InlineCompletionProvider, registerCodeCompleteCallbackCommand } from "./contributes/codecomplete/codecomplete";
2024-04-12 15:29:29 +08:00
import { indexDir } from "./contributes/codecomplete/astIndex";
import registerQuickFixProvider from "./contributes/quickFixProvider";
import { stopLocalService } from './util/localService';
2024-04-01 17:15:44 +08:00
async function migrateConfig() {
const devchatConfig = DevChatConfig.getInstance();
2024-04-01 17:15:44 +08:00
const devchatProvider = "providers.devchat";
const devchatProviderConfig: any = devchatConfig.get(devchatProvider);
2024-04-01 17:15:44 +08:00
if (devchatProviderConfig) {
return ;
}
const devchatVScodeProvider: any = vscode.workspace.getConfiguration("devchat").get("Provider.devchat");
if (devchatVScodeProvider && Object.keys(devchatVScodeProvider).length > 0) {
if (devchatVScodeProvider["access_key"]) {
devchatConfig.set("providers.devchat.api_key", devchatVScodeProvider["access_key"]);
2024-04-01 17:15:44 +08:00
}
if (devchatVScodeProvider["api_base"]) {
devchatConfig.set("providers.devchat.api_base", devchatVScodeProvider["api_base"]);
2024-04-01 17:15:44 +08:00
}
}
const openaiVScodeProvider: any = vscode.workspace.getConfiguration("devchat").get("Provider.openai");
if (openaiVScodeProvider && Object.keys(openaiVScodeProvider).length > 0) {
if (openaiVScodeProvider["access_key"]) {
devchatConfig.set("providers.openai.api_key", openaiVScodeProvider["access_key"]);
2024-04-01 17:15:44 +08:00
}
if (openaiVScodeProvider["api_base"]) {
devchatConfig.set("providers.openai.api_base", openaiVScodeProvider["api_base"]);
2024-04-01 17:15:44 +08:00
}
}
const devchatSecretKey = await UiUtilWrapper.secretStorageGet(`Access_KEY_DevChat`);
const openaiSecretKey = await UiUtilWrapper.secretStorageGet(`Access_KEY_OpenAI`);
if (devchatSecretKey) {
devchatConfig.set("providers.devchat.api_key", devchatSecretKey);
2024-04-01 17:15:44 +08:00
}
if (openaiSecretKey) {
devchatConfig.set("providers.openai.api_key", openaiSecretKey);
2024-04-01 17:15:44 +08:00
}
const enableFunctionCalling = vscode.workspace.getConfiguration("DevChat").get("EnableFunctionCalling");
if (enableFunctionCalling) {
devchatConfig.set("enable_function_calling", enableFunctionCalling);
2024-04-01 17:15:44 +08:00
} else {
devchatConfig.set("enable_function_calling", false);
2024-04-01 17:15:44 +08:00
}
const betaInvitationCode = vscode.workspace.getConfiguration("DevChat").get("betaInvitationCode");
if (betaInvitationCode) {
devchatConfig.set("beta_invitation_code", betaInvitationCode);
2024-04-01 17:15:44 +08:00
} else {
devchatConfig.set("beta_invitation_code", "");
2024-04-01 17:15:44 +08:00
}
const maxLogCount = vscode.workspace.getConfiguration("DevChat").get("maxLogCount");
if (maxLogCount) {
devchatConfig.set("max_log_count", maxLogCount);
2024-04-01 17:15:44 +08:00
} else {
devchatConfig.set("max_log_count", 20);
2024-04-01 17:15:44 +08:00
}
const pythonForChat = vscode.workspace.getConfiguration("DevChat").get("PythonForChat");
if (pythonForChat) {
devchatConfig.set("python_for_chat", pythonForChat);
2024-04-01 17:15:44 +08:00
} else {
devchatConfig.set("python_for_chat", "");
2024-04-01 17:15:44 +08:00
}
const pythonForCommands = vscode.workspace.getConfiguration("DevChat").get("PythonForCommands");
if (pythonForCommands) {
devchatConfig.set("python_for_commands", pythonForCommands);
2024-04-01 17:15:44 +08:00
} else {
devchatConfig.set("python_for_commands", "");
2024-04-01 17:15:44 +08:00
}
const language = vscode.workspace.getConfiguration("DevChat").get("Language");
if (language) {
devchatConfig.set("language", language);
2024-04-01 17:15:44 +08:00
} else {
devchatConfig.set("language", "en");
2024-04-01 17:15:44 +08:00
}
}
// fix devchat api base is "custom"
export async function fixDevChatApiBase() {
const devchatConfig = DevChatConfig.getInstance();
const devchatProvider = "providers.devchat";
const devchatProviderConfig: any = devchatConfig.get(devchatProvider);
if (!devchatProviderConfig || devchatProviderConfig["api_base"] === "custom") {
devchatConfig.set("providers.devchat.api_base", "https://api.devchat.ai/v1");
}
}
2023-09-26 14:46:14 +08:00
async function activate(context: vscode.ExtensionContext) {
ExtensionContextHolder.context = context;
2024-04-01 17:15:44 +08:00
logger.init(LoggerChannelVscode.getInstance());
UiUtilWrapper.init(new UiUtilVscode());
await migrateConfig();
2024-04-01 17:15:44 +08:00
regLanguageContext();
regDevChatView(context);
2024-04-08 22:10:56 +08:00
const provider = new InlineCompletionProvider();
const selector = { pattern: "**" };
context.subscriptions.push(vscode.languages.registerInlineCompletionItemProvider(selector, provider));
registerCodeCompleteCallbackCommand(context);
registerOpenChatPanelCommand(context);
registerAddContextCommand(context);
registerAskForCodeCommand(context);
registerAskForFileCommand(context);
registerExplainCommand(context);
2024-03-12 21:20:03 +08:00
registerFixCommand(context);
registerCommentCommand(context);
registerStatusBarItemClickCommand(context);
registerInstallCommandsCommand(context);
registerStartLocalServiceCommand(context);
createStatusBarItem(context);
regApplyDiffResultCommand(context);
regPythonPathCommand(context);
registerDevChatChatCommand(context);
registerCodeLensRangeCommand(context);
registerCodeLensProvider(context);
registerQuickFixCommand(context);
startRpcServer();
registerHandleUri(context);
registerQuickFixProvider();
2024-04-12 15:29:29 +08:00
fixDevChatApiBase();
2024-04-12 15:29:29 +08:00
const workspaceDir = UiUtilWrapper.workspaceFoldersFirstPath();
if (workspaceDir) {
indexDir(workspaceDir);
}
2023-04-14 08:05:41 +08:00
}
async function deactivate() {
// stop devchat
await stopDevChatBase({});
try {
await stopLocalService();
logger.channel()?.info('Local service stopped successfully');
} catch (error) {
logger.channel()?.error('Error stopping local service:', error);
}
}
exports.activate = activate;
exports.deactivate = deactivate;