summaryrefslogtreecommitdiff
path: root/extension
diff options
context:
space:
mode:
Diffstat (limited to 'extension')
-rw-r--r--extension/package-lock.json4
-rw-r--r--extension/package.json2
-rw-r--r--extension/react-app/src/tabs/gui.tsx97
-rw-r--r--extension/src/activation/activate.ts31
-rw-r--r--extension/src/activation/environmentSetup.ts34
-rw-r--r--extension/src/debugPanel.ts14
-rw-r--r--extension/src/suggestions.ts2
7 files changed, 156 insertions, 28 deletions
diff --git a/extension/package-lock.json b/extension/package-lock.json
index a4aff512..241ea5ca 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "continue",
- "version": "0.0.79",
+ "version": "0.0.86",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "continue",
- "version": "0.0.79",
+ "version": "0.0.86",
"license": "Apache-2.0",
"dependencies": {
"@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index 44b55e89..7eca6042 100644
--- a/extension/package.json
+++ b/extension/package.json
@@ -14,7 +14,7 @@
"displayName": "Continue",
"pricing": "Free",
"description": "Accelerating software development with language models",
- "version": "0.0.79",
+ "version": "0.0.86",
"publisher": "Continue",
"engines": {
"vscode": "^1.74.0"
diff --git a/extension/react-app/src/tabs/gui.tsx b/extension/react-app/src/tabs/gui.tsx
index 13b74423..249d9785 100644
--- a/extension/react-app/src/tabs/gui.tsx
+++ b/extension/react-app/src/tabs/gui.tsx
@@ -64,7 +64,101 @@ function GUI(props: GUIProps) {
const [dataSwitchChecked, setDataSwitchChecked] = useState(false);
const [showDataSharingInfo, setShowDataSharingInfo] = useState(false);
const [stepsOpen, setStepsOpen] = useState<boolean[]>([]);
- const [history, setHistory] = useState<History | undefined>();
+ const [history, setHistory] = useState<History | undefined>({
+ timeline: [
+ {
+ step: {
+ name: "SequentialStep",
+ hide: true,
+ description: "Running step: SequentialStep",
+ system_message: null,
+ chat_context: [],
+ manage_own_chat_context: false,
+ steps: [
+ {
+ name: "Welcome to Continue",
+ hide: false,
+ description:
+ "Type '/' to see the list of available slash commands. If you highlight code, edits and explanations will be localized to the highlighted range. Otherwise, the currently open file is used. In both cases, the code is combined with the previous steps to construct the context.",
+ system_message: null,
+ chat_context: [],
+ manage_own_chat_context: false,
+ message:
+ "Type '/' to see the list of available slash commands. If you highlight code, edits and explanations will be localized to the highlighted range. Otherwise, the currently open file is used. In both cases, the code is combined with the previous steps to construct the context.",
+ },
+ {
+ name: "Welcome to Continue!",
+ hide: true,
+ description: "Welcome to Continue!",
+ system_message: null,
+ chat_context: [],
+ manage_own_chat_context: false,
+ },
+ {
+ name: "StepsOnStartupStep",
+ hide: true,
+ description: "Running steps on startup",
+ system_message: null,
+ chat_context: [],
+ manage_own_chat_context: false,
+ },
+ ],
+ },
+ observation: null,
+ depth: 0,
+ deleted: false,
+ active: false,
+ },
+ {
+ step: {
+ name: "Welcome to Continue",
+ hide: false,
+ description:
+ "Type '/' to see the list of available slash commands. If you highlight code, edits and explanations will be localized to the highlighted range. Otherwise, the currently open file is used. In both cases, the code is combined with the previous steps to construct the context.",
+ system_message: null,
+ chat_context: [],
+ manage_own_chat_context: false,
+ message:
+ "Type '/' to see the list of available slash commands. If you highlight code, edits and explanations will be localized to the highlighted range. Otherwise, the currently open file is used. In both cases, the code is combined with the previous steps to construct the context.",
+ },
+ observation: {
+ text: "Type '/' to see the list of available slash commands. If you highlight code, edits and explanations will be localized to the highlighted range. Otherwise, the currently open file is used. In both cases, the code is combined with the previous steps to construct the context.",
+ },
+ depth: 1,
+ deleted: false,
+ active: false,
+ },
+ {
+ step: {
+ name: "Welcome to Continue!",
+ hide: true,
+ description: "Welcome to Continue!",
+ system_message: null,
+ chat_context: [],
+ manage_own_chat_context: false,
+ },
+ observation: null,
+ depth: 1,
+ deleted: false,
+ active: false,
+ },
+ {
+ step: {
+ name: "StepsOnStartupStep",
+ hide: true,
+ description: "Running steps on startup",
+ system_message: null,
+ chat_context: [],
+ manage_own_chat_context: false,
+ },
+ observation: null,
+ depth: 1,
+ deleted: false,
+ active: false,
+ },
+ ],
+ current_index: 3,
+ } as any);
// {
// timeline: [
// {
@@ -228,7 +322,6 @@ function GUI(props: GUIProps) {
}, []);
useEffect(() => {
- console.log("CLIENT ON STATE UPDATE: ", client, client?.onStateUpdate);
client?.onStateUpdate((state) => {
// Scroll only if user is at very bottom of the window.
setUsingFastModel(state.default_model === "gpt-3.5-turbo");
diff --git a/extension/src/activation/activate.ts b/extension/src/activation/activate.ts
index df8b6871..cd8f0cf3 100644
--- a/extension/src/activation/activate.ts
+++ b/extension/src/activation/activate.ts
@@ -24,19 +24,6 @@ export async function activateExtension(
registerAllCodeLensProviders(context);
registerAllCommands(context);
- await new Promise((resolve, reject) => {
- vscode.window.withProgress(
- {
- location: vscode.ProgressLocation.Notification,
- title: "Starting Continue Server...",
- cancellable: false,
- },
- async (progress, token) => {
- await startContinuePythonServer();
- resolve(null);
- }
- );
- });
const serverUrl = getContinueServerUrl();
ideProtocolClient = new IdeProtocolClient(
@@ -46,8 +33,8 @@ export async function activateExtension(
// Setup the left panel
(async () => {
- const sessionId = await ideProtocolClient.getSessionId();
- const provider = new ContinueGUIWebviewViewProvider(sessionId);
+ const sessionIdPromise = ideProtocolClient.getSessionId();
+ const provider = new ContinueGUIWebviewViewProvider(sessionIdPromise);
context.subscriptions.push(
vscode.window.registerWebviewViewProvider(
@@ -60,6 +47,20 @@ export async function activateExtension(
);
})();
+ await new Promise((resolve, reject) => {
+ vscode.window.withProgress(
+ {
+ location: vscode.ProgressLocation.Notification,
+ title:
+ "Starting Continue Server... (it may take a minute to download Python packages)",
+ cancellable: false,
+ },
+ async (progress, token) => {
+ await startContinuePythonServer();
+ resolve(null);
+ }
+ );
+ });
// All opened terminals should be replaced by our own terminal
// vscode.window.onDidOpenTerminal((terminal) => {});
diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts
index 168c79ad..823670fd 100644
--- a/extension/src/activation/environmentSetup.ts
+++ b/extension/src/activation/environmentSetup.ts
@@ -101,9 +101,34 @@ function checkEnvExists() {
}
function checkRequirementsInstalled() {
- return fs.existsSync(
- path.join(getExtensionUri().fsPath, "scripts", ".continue_env_installed")
+ let envLibsPath = path.join(
+ getExtensionUri().fsPath,
+ "scripts",
+ "env",
+ process.platform == "win32" ? "Lib" : "lib"
);
+ // If site-packages is directly under env, use that
+ if (fs.existsSync(path.join(envLibsPath, "site-packages"))) {
+ envLibsPath = path.join(envLibsPath, "site-packages");
+ } else {
+ // Get the python version folder name
+ const pythonVersions = fs.readdirSync(envLibsPath).filter((f: string) => {
+ return f.startsWith("python");
+ });
+ if (pythonVersions.length == 0) {
+ return false;
+ }
+ const pythonVersion = pythonVersions[0];
+ envLibsPath = path.join(envLibsPath, pythonVersion, "site-packages");
+ }
+
+ const continuePath = path.join(envLibsPath, "continuedev");
+
+ return fs.existsSync(continuePath);
+
+ // return fs.existsSync(
+ // path.join(getExtensionUri().fsPath, "scripts", ".continue_env_installed")
+ // );
}
async function setupPythonEnv() {
@@ -249,7 +274,10 @@ export async function startContinuePythonServer() {
});
child.stderr.on("data", (data: any) => {
console.log(`stderr: ${data}`);
- if (data.includes("Uvicorn running on")) {
+ if (
+ data.includes("Uvicorn running on") || // Successfully started the server
+ data.includes("address already in use") // The server is already running (probably a simultaneously opened VS Code window)
+ ) {
console.log("Successfully started Continue python server");
resolve(null);
}
diff --git a/extension/src/debugPanel.ts b/extension/src/debugPanel.ts
index b0db590a..79719a3b 100644
--- a/extension/src/debugPanel.ts
+++ b/extension/src/debugPanel.ts
@@ -126,7 +126,7 @@ let streamManager = new StreamManager();
export let debugPanelWebview: vscode.Webview | undefined;
export function setupDebugPanel(
panel: vscode.WebviewPanel | vscode.WebviewView,
- sessionId: string
+ sessionIdPromise: Promise<string>
): string {
debugPanelWebview = panel.webview;
panel.onDidDispose(() => {
@@ -224,6 +224,7 @@ export function setupDebugPanel(
panel.webview.onDidReceiveMessage(async (data) => {
switch (data.type) {
case "onLoad": {
+ const sessionId = await sessionIdPromise;
panel.webview.postMessage({
type: "onLoad",
vscMachineId: vscode.env.machineId,
@@ -334,10 +335,10 @@ export class ContinueGUIWebviewViewProvider
implements vscode.WebviewViewProvider
{
public static readonly viewType = "continue.continueGUIView";
- private readonly sessionId: string;
+ private readonly sessionIdPromise: Promise<string>;
- constructor(sessionId: string) {
- this.sessionId = sessionId;
+ constructor(sessionIdPromise: Promise<string>) {
+ this.sessionIdPromise = sessionIdPromise;
}
resolveWebviewView(
@@ -345,6 +346,9 @@ export class ContinueGUIWebviewViewProvider
_context: vscode.WebviewViewResolveContext,
_token: vscode.CancellationToken
): void | Thenable<void> {
- webviewView.webview.html = setupDebugPanel(webviewView, this.sessionId);
+ webviewView.webview.html = setupDebugPanel(
+ webviewView,
+ this.sessionIdPromise
+ );
}
}
diff --git a/extension/src/suggestions.ts b/extension/src/suggestions.ts
index c9e29ed5..c36b9b34 100644
--- a/extension/src/suggestions.ts
+++ b/extension/src/suggestions.ts
@@ -231,6 +231,8 @@ function selectSuggestion(
currentSuggestion.set(editorUri, Math.min(idx, suggestions.length - 1));
}
rerenderDecorations(editorUri);
+
+ editorToSuggestions.set(editorUri, suggestions);
}
export function acceptSuggestionCommand(key: SuggestionRanges | null = null) {