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
|
import * as vscode from "vscode";
import * as path from "path";
import * as os from "os";
import * as fs from "fs";
import { acceptDiffCommand, rejectDiffCommand } from "./diffs";
import { debugPanelWebview } from "./debugPanel";
import { ideProtocolClient } from "./activation/activate";
let focusedOnContinueInput = false;
function addHighlightedCodeToContext(edit: boolean) {
focusedOnContinueInput = !focusedOnContinueInput;
const editor = vscode.window.activeTextEditor;
if (editor) {
const selection = editor.selection;
if (selection.isEmpty) return;
const range = new vscode.Range(selection.start, selection.end);
const contents = editor.document.getText(range);
ideProtocolClient?.sendHighlightedCode(
[
{
filepath: editor.document.uri.fsPath,
contents,
range: {
start: {
line: selection.start.line,
character: selection.start.character,
},
end: {
line: selection.end.line,
character: selection.end.character,
},
},
},
],
edit
);
}
}
export const setFocusedOnContinueInput = (value: boolean) => {
focusedOnContinueInput = value;
};
// Copy everything over from extension.ts
const commandsMap: { [command: string]: (...args: any) => any } = {
"continue.acceptDiff": acceptDiffCommand,
"continue.rejectDiff": rejectDiffCommand,
"continue.quickFix": async (message: string, code: string, edit: boolean) => {
ideProtocolClient.sendMainUserInput(
`${
edit ? "/edit " : ""
}${code}\n\nHow do I fix this problem in the above code?: ${message}`
);
if (!edit) {
vscode.commands.executeCommand("continue.continueGUIView.focus");
}
},
"continue.focusContinueInput": async () => {
vscode.commands.executeCommand("continue.continueGUIView.focus");
debugPanelWebview?.postMessage({
type: "focusContinueInput",
});
addHighlightedCodeToContext(false);
},
"continue.focusContinueInputWithEdit": async () => {
vscode.commands.executeCommand("continue.continueGUIView.focus");
addHighlightedCodeToContext(true);
debugPanelWebview?.postMessage({
type: "focusContinueInputWithEdit",
});
focusedOnContinueInput = true;
},
"continue.toggleAuxiliaryBar": () => {
vscode.commands.executeCommand("workbench.action.toggleAuxiliaryBar");
},
"continue.quickTextEntry": async () => {
addHighlightedCodeToContext(true);
const text = await vscode.window.showInputBox({
placeHolder: "Ask a question or enter a slash command",
title: "Continue Quick Input",
});
if (text) {
ideProtocolClient.sendMainUserInput(text);
}
},
"continue.viewLogs": async () => {
// Open ~/.continue/continue.log
const logFile = path.join(os.homedir(), ".continue", "continue.log");
// Make sure the file/directory exist
if (!fs.existsSync(logFile)) {
fs.mkdirSync(path.dirname(logFile), { recursive: true });
fs.writeFileSync(logFile, "");
}
const uri = vscode.Uri.file(logFile);
await vscode.window.showTextDocument(uri);
},
"continue.debugTerminal": async () => {
vscode.commands.executeCommand("continue.continueGUIView.focus");
await ideProtocolClient.debugTerminal();
},
// Commands without keyboard shortcuts
"continue.addModel": () => {
vscode.commands.executeCommand("continue.continueGUIView.focus");
debugPanelWebview?.postMessage({
type: "addModel",
});
},
"continue.openSettingsUI": () => {
vscode.commands.executeCommand("continue.continueGUIView.focus");
debugPanelWebview?.postMessage({
type: "openSettings",
});
},
};
export function registerAllCommands(context: vscode.ExtensionContext) {
for (const [command, callback] of Object.entries(commandsMap)) {
context.subscriptions.push(
vscode.commands.registerCommand(command, callback)
);
}
}
|