summaryrefslogtreecommitdiff
path: root/extension
diff options
context:
space:
mode:
Diffstat (limited to 'extension')
-rw-r--r--extension/DEV_README.md13
-rw-r--r--extension/README.md10
-rw-r--r--extension/package-lock.json4
-rw-r--r--extension/package.json7
-rw-r--r--extension/react-app/src/components/TextDialog.tsx60
-rw-r--r--extension/react-app/src/pages/gui.tsx40
-rw-r--r--extension/src/activation/activate.ts103
-rw-r--r--extension/src/activation/environmentSetup.ts19
-rw-r--r--extension/src/commands.ts3
-rw-r--r--extension/src/continueIdeClient.ts18
-rw-r--r--extension/src/debugPanel.ts13
-rw-r--r--extension/src/lang-server/codeActions.ts5
-rw-r--r--extension/src/suggestions.ts3
-rw-r--r--extension/src/telemetry.ts53
14 files changed, 153 insertions, 198 deletions
diff --git a/extension/DEV_README.md b/extension/DEV_README.md
index 87ed9334..72ea5c6a 100644
--- a/extension/DEV_README.md
+++ b/extension/DEV_README.md
@@ -6,8 +6,17 @@ This is the Continue VS Code Extension. Its primary jobs are
2. Open the Continue React app in a side panel. The React app's source code lives in the `react-app` directory. The panel is opened by the `continue.openContinueGUI` command, as defined in `src/commands.ts`.
3. Run a Continue server in the background, which connects to both the IDE protocol and the React app. The server is launched in `src/activation/environmentSetup.ts` by calling Python code that lives in `server/` (unless extension settings define a server URL other than localhost:65432, in which case the extension will just connect to that).
-4. Open Continue
+## Setting up for development
-# Notes
+1. Clone this repo
+2. `cd extension`
+3. `npm run full-package`
+
+ > If NPM is not installed, you can use `brew install node` on Mac, or see the [installation page](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) for other platforms, or more detailed instructions.
+
+4. Open a VS Code window with `/extension` as the workspace root (_this is important, development mode will not work otherwise_)
+5. Open any `.ts` file in the workspace, then press F5 and select "VS Code Extension Development" to begin debugging.
+
+## Notes
- We require vscode engine `^1.67.0` and use `@types/vscode` version `1.67.0` because this is the earliest version that doesn't break any of the APIs we are using. If you go back to `1.66.0`, then it will break `vscode.window.tabGroups`.
diff --git a/extension/README.md b/extension/README.md
index 2d449b92..2944325b 100644
--- a/extension/README.md
+++ b/extension/README.md
@@ -25,6 +25,16 @@ Let Continue build the scaffolding of Python scripts, React components, and more
- β€œ/edit make an IAM policy that creates a user with read-only access to S3”
- β€œ/edit use this schema to write me a SQL query that gets recently churned users”
+## Install
+
+Continue requires that you have Python 3.8 or greater. If you do not, please [install](https://python.org) it
+
+If your Continue server is not setting up, please check the console logs:
+1. `cmd+shift+p` (MacOS) / `ctrl+shift+p` (Windows)
+2. Search for and then select "Developer: Toggle Developer Tools"
+3. Select `Console`
+4. Read the console logs
+
## OpenAI API Key
New users can try out Continue with GPT-4 using a proxy server that securely makes calls to OpenAI using our API key. Continue should just work the first time you install the extension in VS Code.
diff --git a/extension/package-lock.json b/extension/package-lock.json
index 6818857b..2558c9c2 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "continue",
- "version": "0.0.181",
+ "version": "0.0.191",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "continue",
- "version": "0.0.181",
+ "version": "0.0.191",
"license": "Apache-2.0",
"dependencies": {
"@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index b37bb1b6..6618ff45 100644
--- a/extension/package.json
+++ b/extension/package.json
@@ -14,7 +14,7 @@
"displayName": "Continue",
"pricing": "Free",
"description": "The open-source coding autopilot",
- "version": "0.0.181",
+ "version": "0.0.191",
"publisher": "Continue",
"engines": {
"vscode": "^1.67.0"
@@ -35,8 +35,7 @@
"chat"
],
"activationEvents": [
- "onStartupFinished",
- "onView:continueGUIView"
+ "*"
],
"main": "./out/extension.js",
"browser": "./out/extension.js",
@@ -227,7 +226,7 @@
"test": "node ./out/test/runTest.js",
"jest": "jest --config ./jest.config.js",
"package": "cp ./config/prod_config.json ./config/config.json && mkdir -p ./build && vsce package --out ./build && cp ./config/dev_config.json ./config/config.json",
- "full-package": "cd ../continuedev && poetry build && cp ./dist/continuedev-0.1.2-py3-none-any.whl ../extension/server/continuedev-0.1.2-py3-none-any.whl && cd ../extension && npm install && npm run typegen && npm run clientgen && cd react-app && npm install && npm run build && cd .. && npm run package",
+ "full-package": "cd ../continuedev && poetry install && poetry build && cp ./dist/continuedev-0.1.2-py3-none-any.whl ../extension/server/continuedev-0.1.2-py3-none-any.whl && cd ../extension && npm install && npm run typegen && npm run clientgen && cd react-app && npm install && npm run build && cd .. && npm run package",
"install-extension": "code --install-extension ./build/continue-0.0.8.vsix",
"uninstall": "code --uninstall-extension .continue",
"reinstall": "rm -rf ./build && npm run package && npm run uninstall && npm run install-extension"
diff --git a/extension/react-app/src/components/TextDialog.tsx b/extension/react-app/src/components/TextDialog.tsx
index 7c6ba052..7d8e9920 100644
--- a/extension/react-app/src/components/TextDialog.tsx
+++ b/extension/react-app/src/components/TextDialog.tsx
@@ -3,6 +3,7 @@ import React, { useEffect, useState } from "react";
import styled from "styled-components";
import { Button, secondaryDark, vscBackground, vscForeground } from ".";
import { isMetaEquivalentKeyPressed } from "../util";
+import { ReactMarkdown } from "react-markdown/lib/react-markdown";
const ScreenCover = styled.div`
position: fixed;
@@ -56,6 +57,7 @@ const TextDialog = (props: {
onEnter: (text: string) => void;
onClose: () => void;
message?: string;
+ entryOn?: boolean;
}) => {
const [text, setText] = useState("");
const textAreaRef = React.createRef<HTMLTextAreaElement>();
@@ -79,33 +81,37 @@ const TextDialog = (props: {
}}
>
<Dialog>
- <P>{props.message || ""}</P>
- <TextArea
- rows={10}
- ref={textAreaRef}
- onKeyDown={(e) => {
- if (
- e.key === "Enter" &&
- isMetaEquivalentKeyPressed(e) &&
- textAreaRef.current
- ) {
- props.onEnter(textAreaRef.current.value);
- setText("");
- } else if (e.key === "Escape") {
- props.onClose();
- }
- }}
- />
- <Button
- onClick={() => {
- if (textAreaRef.current) {
- props.onEnter(textAreaRef.current.value);
- setText("");
- }
- }}
- >
- Enter
- </Button>
+ <ReactMarkdown>{props.message || ""}</ReactMarkdown>
+ {props.entryOn && (
+ <>
+ <TextArea
+ rows={10}
+ ref={textAreaRef}
+ onKeyDown={(e) => {
+ if (
+ e.key === "Enter" &&
+ isMetaEquivalentKeyPressed(e) &&
+ textAreaRef.current
+ ) {
+ props.onEnter(textAreaRef.current.value);
+ setText("");
+ } else if (e.key === "Escape") {
+ props.onClose();
+ }
+ }}
+ />
+ <Button
+ onClick={() => {
+ if (textAreaRef.current) {
+ props.onEnter(textAreaRef.current.value);
+ setText("");
+ }
+ }}
+ >
+ Enter
+ </Button>
+ </>
+ )}
</Dialog>
</DialogContainer>
</ScreenCover>
diff --git a/extension/react-app/src/pages/gui.tsx b/extension/react-app/src/pages/gui.tsx
index a1ba1c33..9a00802b 100644
--- a/extension/react-app/src/pages/gui.tsx
+++ b/extension/react-app/src/pages/gui.tsx
@@ -79,7 +79,6 @@ function GUI(props: GUIProps) {
}
}, [dataSwitchOn]);
- const [usingFastModel, setUsingFastModel] = useState(false);
const [waitingForSteps, setWaitingForSteps] = useState(false);
const [userInputQueue, setUserInputQueue] = useState<string[]>([]);
const [addingHighlightedCode, setAddingHighlightedCode] = useState(false);
@@ -119,6 +118,7 @@ function GUI(props: GUIProps) {
const [showFeedbackDialog, setShowFeedbackDialog] = useState(false);
const [feedbackDialogMessage, setFeedbackDialogMessage] = useState("");
+ const [feedbackEntryOn, setFeedbackEntryOn] = useState(true);
const dispatch = useDispatch();
const bottomMessage = useSelector(
@@ -147,12 +147,9 @@ function GUI(props: GUIProps) {
}, [topGuiDivRef.current, scrollTimeout]);
useEffect(() => {
+ // Cmd + Backspace to delete current step
const listener = (e: any) => {
- // Cmd + i to toggle fast model
- if (e.key === "i" && isMetaEquivalentKeyPressed(e) && e.shiftKey) {
- setUsingFastModel((prev) => !prev);
- // Cmd + backspace to stop currently running step
- } else if (
+ if (
e.key === "Backspace" &&
isMetaEquivalentKeyPressed(e) &&
typeof history?.current_index !== "undefined" &&
@@ -171,7 +168,6 @@ function GUI(props: GUIProps) {
useEffect(() => {
client?.onStateUpdate((state: FullState) => {
// Scroll only if user is at very bottom of the window.
- setUsingFastModel(state.default_model === "gpt-3.5-turbo");
const shouldScrollToBottom =
topGuiDivRef.current &&
topGuiDivRef.current?.offsetHeight - window.scrollY < 100;
@@ -282,6 +278,7 @@ function GUI(props: GUIProps) {
setShowFeedbackDialog(false);
}}
message={feedbackDialogMessage}
+ entryOn={feedbackEntryOn}
/>
<TopGUIDiv
@@ -444,24 +441,26 @@ function GUI(props: GUIProps) {
</div>
<HeaderButtonWithText
onClick={() => {
- // client?.changeDefaultModel(
- // usingFastModel ? "gpt-4" : "gpt-3.5-turbo"
- // );
- if (!usingFastModel) {
- // Show the dialog
- setFeedbackDialogMessage(
- "We don't yet support local models, but we're working on it! If privacy is a concern of yours, please write a short note to let us know."
- );
- setShowFeedbackDialog(true);
- }
- setUsingFastModel((prev) => !prev);
+ // Show the dialog
+ setFeedbackDialogMessage(
+ `Continue uses GPT-4 by default, but works with any model. If you'd like to keep your code completely private, there are few options:
+
+Run a local model with ggml: [5 minute quickstart](https://github.com/continuedev/ggml-server-example)
+
+Use Azure OpenAI service, which is GDPR and HIPAA compliant: [Tutorial](https://continue.dev/docs/customization#azure-openai-service)
+
+If you already have an LLM deployed on your own infrastructure, or would like to do so, please contact us at hi@continue.dev.
+ `
+ );
+ setFeedbackEntryOn(false);
+ setShowFeedbackDialog(true);
}}
- text={usingFastModel ? "local" : "gpt-4"}
+ text={"Use Private Model"}
>
<div
style={{ fontSize: "18px", marginLeft: "2px", marginRight: "2px" }}
>
- {usingFastModel ? "πŸ”’" : "🧠"}
+ πŸ”’
</div>
</HeaderButtonWithText>
<HeaderButtonWithText
@@ -486,6 +485,7 @@ function GUI(props: GUIProps) {
setFeedbackDialogMessage(
"Having trouble using Continue? Want a new feature? Let us know! This box is anonymous, but we will promptly address your feedback."
);
+ setFeedbackEntryOn(true);
setShowFeedbackDialog(true);
}}
text="Feedback"
diff --git a/extension/src/activation/activate.ts b/extension/src/activation/activate.ts
index a7f6c55b..a1d88a31 100644
--- a/extension/src/activation/activate.ts
+++ b/extension/src/activation/activate.ts
@@ -1,7 +1,4 @@
import * as vscode from "vscode";
-import { registerAllCommands } from "../commands";
-import { registerAllCodeLensProviders } from "../lang-server/codeLens";
-import { sendTelemetryEvent, TelemetryEvent } from "../telemetry";
import IdeProtocolClient from "../continueIdeClient";
import { getContinueServerUrl } from "../bridge";
import { ContinueGUIWebviewViewProvider } from "../debugPanel";
@@ -10,8 +7,6 @@ import {
startContinuePythonServer,
} from "./environmentSetup";
import fetch from "node-fetch";
-import registerQuickFixProvider from "../lang-server/codeActions";
-// import { CapturedTerminal } from "../terminal/terminalEmulator";
const PACKAGE_JSON_RAW_GITHUB_URL =
"https://raw.githubusercontent.com/continuedev/continue/HEAD/extension/package.json";
@@ -37,60 +32,60 @@ export async function activateExtension(context: vscode.ExtensionContext) {
.catch((e) => console.log("Error checking for extension updates: ", e));
// Start the server and display loader if taking > 2 seconds
- await new Promise((resolve) => {
- let serverStarted = false;
+ const sessionIdPromise = (async () => {
+ await new Promise((resolve) => {
+ let serverStarted = false;
- // Start the server and set serverStarted to true when done
- startContinuePythonServer().then(() => {
- serverStarted = true;
- resolve(null);
- });
+ // Start the server and set serverStarted to true when done
+ startContinuePythonServer().then(() => {
+ serverStarted = true;
+ resolve(null);
+ });
- // Wait for 2 seconds
- setTimeout(() => {
- // If the server hasn't started after 2 seconds, show the notification
- if (!serverStarted) {
- 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) => {
- // Wait for the server to start
- while (!serverStarted) {
- await new Promise((innerResolve) =>
- setTimeout(innerResolve, 1000)
- );
+ // Wait for 2 seconds
+ setTimeout(() => {
+ // If the server hasn't started after 2 seconds, show the notification
+ if (!serverStarted) {
+ 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) => {
+ // Wait for the server to start
+ while (!serverStarted) {
+ await new Promise((innerResolve) =>
+ setTimeout(innerResolve, 1000)
+ );
+ }
+ return Promise.resolve();
}
- return Promise.resolve();
- }
- );
- }
- }, 2000);
- });
+ );
+ }
+ }, 2000);
+ });
- // Initialize IDE Protocol Client
- const serverUrl = getContinueServerUrl();
- ideProtocolClient = new IdeProtocolClient(
- `${serverUrl.replace("http", "ws")}/ide/ws`,
- context
- );
+ // Initialize IDE Protocol Client
+ const serverUrl = getContinueServerUrl();
+ ideProtocolClient = new IdeProtocolClient(
+ `${serverUrl.replace("http", "ws")}/ide/ws`,
+ context
+ );
+ return await ideProtocolClient.getSessionId();
+ })();
// Register Continue GUI as sidebar webview, and beging a new session
- {
- const sessionIdPromise = await ideProtocolClient.getSessionId();
- const provider = new ContinueGUIWebviewViewProvider(sessionIdPromise);
+ const provider = new ContinueGUIWebviewViewProvider(sessionIdPromise);
- context.subscriptions.push(
- vscode.window.registerWebviewViewProvider(
- "continue.continueGUIView",
- provider,
- {
- webviewOptions: { retainContextWhenHidden: true },
- }
- )
- );
- }
+ context.subscriptions.push(
+ vscode.window.registerWebviewViewProvider(
+ "continue.continueGUIView",
+ provider,
+ {
+ webviewOptions: { retainContextWhenHidden: true },
+ }
+ )
+ );
}
diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts
index c341db39..5a9345a6 100644
--- a/extension/src/activation/environmentSetup.ts
+++ b/extension/src/activation/environmentSetup.ts
@@ -9,7 +9,6 @@ import fetch from "node-fetch";
import * as vscode from "vscode";
import * as os from "os";
import fkill from "fkill";
-import { sendTelemetryEvent, TelemetryEvent } from "../telemetry";
const WINDOWS_REMOTE_SIGNED_SCRIPTS_ERROR =
"A Python virtual enviroment cannot be activated because running scripts is disabled for this user. In order to use Continue, please enable signed scripts to run with this command in PowerShell: `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser`, reload VS Code, and then try again.";
@@ -57,9 +56,6 @@ async function retryThenFail(
vscode.window.showErrorMessage(msg);
}
- sendTelemetryEvent(TelemetryEvent.ExtensionSetupError, {
- error: e.message,
- });
throw e;
}
}
@@ -83,12 +79,6 @@ async function runCommand(cmd: string): Promise<[string, string | undefined]> {
stdout = "";
}
- if (stderr) {
- sendTelemetryEvent(TelemetryEvent.ExtensionSetupError, {
- error: stderr,
- });
- }
-
return [stdout, stderr];
}
@@ -139,7 +129,7 @@ export async function getPythonPipCommands() {
if (!versionExists) {
vscode.window.showErrorMessage(
- "Continue requires Python3 version 3.8 or greater. Please update your Python3 installation, reload VS Code, and try again."
+ "Continue requires Python version 3.8 or greater. Please update your Python installation, reload VS Code, and try again."
);
throw new Error("Python3.8 or greater is not installed.");
}
@@ -480,16 +470,11 @@ export async function startContinuePythonServer() {
console.log("Successfully started Continue python server");
resolve(null);
} else if (data.includes("ERROR") || data.includes("Traceback")) {
- sendTelemetryEvent(TelemetryEvent.ExtensionSetupError, {
- error: data,
- });
+ console.log("Error starting Continue python server: ", data);
}
});
child.on("error", (error: any) => {
console.log(`error: ${error.message}`);
- sendTelemetryEvent(TelemetryEvent.ExtensionSetupError, {
- error: error.message,
- });
});
// Write the current version of vscode to a file called server_version.txt
diff --git a/extension/src/commands.ts b/extension/src/commands.ts
index 2b7f4c0c..1da2f04e 100644
--- a/extension/src/commands.ts
+++ b/extension/src/commands.ts
@@ -40,6 +40,9 @@ const commandsMap: { [command: string]: (...args: any) => any } = {
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 () => {
if (focusedOnContinueInput) {
diff --git a/extension/src/continueIdeClient.ts b/extension/src/continueIdeClient.ts
index a1370a01..802afc1d 100644
--- a/extension/src/continueIdeClient.ts
+++ b/extension/src/continueIdeClient.ts
@@ -16,7 +16,6 @@ import fs = require("fs");
import { WebsocketMessenger } from "./util/messenger";
import { diffManager } from "./diffs";
import path = require("path");
-import { sendTelemetryEvent, TelemetryEvent } from "./telemetry";
import { registerAllCodeLensProviders } from "./lang-server/codeLens";
import { registerAllCommands } from "./commands";
import registerQuickFixProvider from "./lang-server/codeActions";
@@ -81,7 +80,6 @@ class IdeProtocolClient {
this._newWebsocketMessenger();
// Register commands and providers
- sendTelemetryEvent(TelemetryEvent.ExtensionActivated);
registerAllCodeLensProviders(context);
registerAllCommands(context);
registerQuickFixProvider();
@@ -167,6 +165,22 @@ class IdeProtocolClient {
documentContentProvider
)
);
+
+ // Listen for changes to settings.json
+ vscode.workspace.onDidChangeConfiguration((event) => {
+ if (event.affectsConfiguration("continue")) {
+ vscode.window
+ .showInformationMessage(
+ "Please reload VS Code for changes to Continue settings to take effect.",
+ "Reload"
+ )
+ .then((selection) => {
+ if (selection === "Reload") {
+ vscode.commands.executeCommand("workbench.action.reloadWindow");
+ }
+ });
+ }
+ });
}
async handleMessage(
diff --git a/extension/src/debugPanel.ts b/extension/src/debugPanel.ts
index dd24a8d8..f97cf846 100644
--- a/extension/src/debugPanel.ts
+++ b/extension/src/debugPanel.ts
@@ -181,19 +181,6 @@ export function setupDebugPanel(
.getConfiguration("continue")
.get<boolean>("dataSwitch"),
});
-
- // // Listen for changes to server URL in settings
- // vscode.workspace.onDidChangeConfiguration((event) => {
- // if (event.affectsConfiguration("continue.serverUrl")) {
- // debugPanelWebview?.postMessage({
- // type: "onLoad",
- // vscMachineId: vscode.env.machineId,
- // apiUrl: getContinueServerUrl(),
- // sessionId,
- // });
- // }
- // });
-
break;
}
case "toggleDataSwitch": {
diff --git a/extension/src/lang-server/codeActions.ts b/extension/src/lang-server/codeActions.ts
index f0d61ace..892c69be 100644
--- a/extension/src/lang-server/codeActions.ts
+++ b/extension/src/lang-server/codeActions.ts
@@ -39,7 +39,10 @@ class ContinueQuickFixProvider implements vscode.CodeActionProvider {
};
return quickFix;
};
- return [createQuickFix(true), createQuickFix(false)];
+ return [
+ // createQuickFix(true),
+ createQuickFix(false),
+ ];
}
}
diff --git a/extension/src/suggestions.ts b/extension/src/suggestions.ts
index c2373223..5c2b8860 100644
--- a/extension/src/suggestions.ts
+++ b/extension/src/suggestions.ts
@@ -1,5 +1,4 @@
import * as vscode from "vscode";
-import { sendTelemetryEvent, TelemetryEvent } from "./telemetry";
import { openEditorAndRevealRange } from "./util/vscode";
import { translate } from "./util/vscode";
import { registerAllCodeLensProviders } from "./lang-server/codeLens";
@@ -244,7 +243,6 @@ function selectSuggestion(
}
export function acceptSuggestionCommand(key: SuggestionRanges | null = null) {
- sendTelemetryEvent(TelemetryEvent.SuggestionAccepted);
selectSuggestion("selected", key);
}
@@ -271,7 +269,6 @@ export function rejectAllSuggestionsCommand() {
export async function rejectSuggestionCommand(
key: SuggestionRanges | null = null
) {
- sendTelemetryEvent(TelemetryEvent.SuggestionRejected);
selectSuggestion("old", key);
}
diff --git a/extension/src/telemetry.ts b/extension/src/telemetry.ts
deleted file mode 100644
index db5cb8ca..00000000
--- a/extension/src/telemetry.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import * as Segment from "@segment/analytics-node";
-import * as vscode from "vscode";
-
-// Setup Segment
-const SEGMENT_WRITE_KEY = "57yy2uYXH2bwMuy7djm9PorfFlYqbJL1";
-const analytics = new Segment.Analytics({ writeKey: SEGMENT_WRITE_KEY });
-analytics.identify({
- userId: vscode.env.machineId,
- // traits: {
- // name: "Michael Bolton",
- // email: "mbolton@example.com",
- // createdAt: new Date("2014-06-14T02:00:19.467Z"),
- // },
-});
-
-// Enum of telemetry events
-export enum TelemetryEvent {
- // Extension has been activated
- ExtensionActivated = "ExtensionActivated",
- // Suggestion has been accepted
- SuggestionAccepted = "SuggestionAccepted",
- // Suggestion has been rejected
- SuggestionRejected = "SuggestionRejected",
- // Queried universal prompt
- UniversalPromptQuery = "UniversalPromptQuery",
- // `Explain Code` button clicked
- ExplainCode = "ExplainCode",
- // `Generate Ideas` button clicked
- GenerateIdeas = "GenerateIdeas",
- // `Suggest Fix` button clicked
- SuggestFix = "SuggestFix",
- // `Create Test` button clicked
- CreateTest = "CreateTest",
- // `AutoDebug This Test` button clicked
- AutoDebugThisTest = "AutoDebugThisTest",
- // Command run to generate docstring
- GenerateDocstring = "GenerateDocstring",
- // Error setting up the extension
- ExtensionSetupError = "ExtensionSetupError",
-}
-
-export function sendTelemetryEvent(
- event: TelemetryEvent,
- properties?: Record<string, any>
-) {
- if (!vscode.env.isTelemetryEnabled) return;
-
- analytics.track({
- event,
- userId: vscode.env.machineId,
- properties,
- });
-}