-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathextension.ts
108 lines (97 loc) · 3.16 KB
/
extension.ts
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
import * as vscode from "vscode";
import Logger from "./common/logger";
import { servers } from "./common/server";
import statusBar from "./common/statusBar";
import { getInlineCompletionProvider } from "./common/completion";
import { FirecoderTelemetrySenderInstance } from "./common/telemetry";
import { configuration } from "./common/utils/configuration";
import { state } from "./common/utils/state";
import { ChatPanel } from "./common/panel/chat";
export async function activate(context: vscode.ExtensionContext) {
FirecoderTelemetrySenderInstance.init(context);
vscode.env.createTelemetryLogger(FirecoderTelemetrySenderInstance);
state.global.init(context.globalState);
state.workspace.init(context.workspaceState);
Logger.info("FireCoder is starting.", {
component: "main",
sendTelemetry: true,
});
const isChatEnabled = configuration.get("experimental.chat");
if (isChatEnabled) {
const provider = new ChatPanel(context.extensionUri);
context.subscriptions.push(
vscode.window.registerWebviewViewProvider(
"firecoder.chat-gui",
provider,
{
webviewOptions: { retainContextWhenHidden: true },
}
)
);
context.subscriptions.push(
vscode.commands.registerCommand("firecoder.startNewChat", async () => {
await provider.sendMessageToWebview("startNewChat", {});
})
);
}
statusBar.init(context);
context.subscriptions.push(
vscode.commands.registerCommand(
"firecoder.changeInlineSuggestMode",
async () => {
const currentInlineSuggestModeAuto = state.workspace.get(
"inlineSuggestModeAuto"
);
await state.workspace.update(
"inlineSuggestModeAuto",
!currentInlineSuggestModeAuto
);
statusBar.checkProgress();
}
)
);
context.subscriptions.push(
vscode.commands.registerCommand("firecoder.inlineSuggest", async () => {
await vscode.commands.executeCommand(
"editor.action.inlineSuggest.trigger"
);
})
);
(async () => {
try {
const serversStarted = await Promise.all(
[
...new Set([
configuration.get("completion.autoMode"),
configuration.get("completion.manualMode"),
...(isChatEnabled ? ["chat-medium" as const] : []),
]),
].map((serverType) => servers[serverType].startServer())
);
if (serversStarted.some((serverStarted) => serverStarted)) {
Logger.info("Server inited", {
component: "main",
sendTelemetry: true,
});
const InlineCompletionProvider = getInlineCompletionProvider(context);
vscode.languages.registerInlineCompletionItemProvider(
{ pattern: "**" },
InlineCompletionProvider
);
}
} catch (error) {
vscode.window.showErrorMessage((error as Error).message);
Logger.error(error, {
component: "server",
sendTelemetry: true,
});
}
Logger.info("FireCoder is ready.", {
component: "main",
sendTelemetry: true,
});
})();
}
export function deactivate() {
Object.values(servers).forEach((server) => server.stopServer());
}