From b9525d5f0851d13b3d4936868f064810f3376dbd Mon Sep 17 00:00:00 2001
From: Ty Dunn <ty@tydunn.com>
Date: Mon, 10 Jul 2023 15:25:29 -0700
Subject: adding onboarding

---
 extension/react-app/src/components/Onboarding.tsx | 51 +++++++++++++++++++++++
 1 file changed, 51 insertions(+)
 create mode 100644 extension/react-app/src/components/Onboarding.tsx

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
new file mode 100644
index 00000000..373f7bea
--- /dev/null
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -0,0 +1,51 @@
+import { useSelector } from "react-redux";
+import { RootStore } from "../redux/store";
+import React, { useState } from 'react';
+
+
+const Onboarding = () => {
+    const [counter, setCounter] = useState(0);
+
+    const handleClick = () => {
+        setCounter(counter + 1);
+    }
+
+    const vscMediaUrl = useSelector(
+        (state: RootStore) => state.config.vscMediaUrl
+      );
+
+    return (
+    <div style={{position: 'absolute', top: '0', left: '0', width: '100%', height: '100%', backgroundColor: '#1E1E1E', zIndex: 200 }} onClick={handleClick}>
+    {counter === 0 && (
+    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
+    <h1>Welcome to Continue!</h1>
+    <img src={`${vscMediaUrl}/intro.gif`} alt="Intro" />
+    </div>
+    )}
+    {counter === 1 && (
+    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
+    <h1>Answer coding questions</h1>
+    <img src={`${vscMediaUrl}/explain.gif`} alt="Explain" />
+    <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Ask Continue about a part of your code to get another perspective</p>
+    </div>
+    )}
+    {counter === 2 && (
+    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
+    <h1>Edit in natural language</h1>
+    <img src={`${vscMediaUrl}/edit.gif`} alt="Edit" />
+    <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Highlight a section of code and instruct Continue to refactor it</p>
+    </div>
+    )}
+    {counter === 3 && (
+    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
+    <h1>Generate files from scratch</h1>
+    <img src={`${vscMediaUrl}/generate.gif`} alt="Generate" />
+    <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Let Continue build the scaffolding of Python scripts, React components, and more</p>
+    </div>
+    )}
+    <p style={{ paddingLeft: '50px', paddingRight: '50px', paddingBottom: '50px', textAlign: 'center' }}>Click to learn how to use Continue...</p>
+    </div>
+    );
+}
+
+export default Onboarding;
-- 
cgit v1.2.3-70-g09d2


From 0455baea6c88cd7ffa301d67805a29dce2c5ba3c Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Mon, 10 Jul 2023 17:31:38 -0700
Subject: sprucing up onboarding

---
 extension/react-app/src/components/Onboarding.tsx | 146 ++++++++++++++++------
 1 file changed, 105 insertions(+), 41 deletions(-)

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 373f7bea..0e188e7a 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -1,51 +1,115 @@
 import { useSelector } from "react-redux";
 import { RootStore } from "../redux/store";
-import React, { useState } from 'react';
+import React, { useState, useEffect } from "react";
+import styled from "styled-components";
+import { ArrowLeft, ArrowRight } from "@styled-icons/heroicons-outline";
+import { defaultBorderRadius } from ".";
 
+const StyledDiv = styled.div`
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: #1e1e1e;
+  z-index: 200;
+`;
+
+const StyledSpan = styled.span`
+  padding: 8px;
+  border-radius: ${defaultBorderRadius};
+  &:hover {
+    background-color: #ffffff33;
+  }
+`;
 
 const Onboarding = () => {
-    const [counter, setCounter] = useState(0);
+  const [counter, setCounter] = useState(4);
+  const gifs = ["intro", "explain", "edit", "generate"];
+  const topMessages = [
+    "Welcome to Continue!",
+    "Answer coding questions",
+    "Edit in natural language",
+    "Generate files from scratch",
+  ];
+  const bottomMessages = [
+    "",
+    "Ask Continue about a part of your code to get another perspective",
+    "Highlight a section of code and instruct Continue to refactor it",
+    "Let Continue build the scaffolding of Python scripts, React components, and more",
+  ];
 
-    const handleClick = () => {
-        setCounter(counter + 1);
-    }
+  const vscMediaUrl = useSelector(
+    (state: RootStore) => state.config.vscMediaUrl
+  );
 
-    const vscMediaUrl = useSelector(
-        (state: RootStore) => state.config.vscMediaUrl
-      );
+  useEffect(() => {
+    const hasVisited = localStorage.getItem("hasVisited");
+    if (hasVisited) {
+      setCounter(4);
+    } else {
+      setCounter(0);
+      localStorage.setItem("hasVisited", "true");
+    }
+  }, []);
 
-    return (
-    <div style={{position: 'absolute', top: '0', left: '0', width: '100%', height: '100%', backgroundColor: '#1E1E1E', zIndex: 200 }} onClick={handleClick}>
-    {counter === 0 && (
-    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
-    <h1>Welcome to Continue!</h1>
-    <img src={`${vscMediaUrl}/intro.gif`} alt="Intro" />
-    </div>
-    )}
-    {counter === 1 && (
-    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
-    <h1>Answer coding questions</h1>
-    <img src={`${vscMediaUrl}/explain.gif`} alt="Explain" />
-    <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Ask Continue about a part of your code to get another perspective</p>
-    </div>
-    )}
-    {counter === 2 && (
-    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
-    <h1>Edit in natural language</h1>
-    <img src={`${vscMediaUrl}/edit.gif`} alt="Edit" />
-    <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Highlight a section of code and instruct Continue to refactor it</p>
-    </div>
-    )}
-    {counter === 3 && (
-    <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}>
-    <h1>Generate files from scratch</h1>
-    <img src={`${vscMediaUrl}/generate.gif`} alt="Generate" />
-    <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Let Continue build the scaffolding of Python scripts, React components, and more</p>
-    </div>
-    )}
-    <p style={{ paddingLeft: '50px', paddingRight: '50px', paddingBottom: '50px', textAlign: 'center' }}>Click to learn how to use Continue...</p>
-    </div>
-    );
-}
+  return (
+    <StyledDiv hidden={counter >= 4}>
+      <div
+        style={{
+          display: "grid",
+          justifyContent: "center",
+          alignItems: "center",
+          height: "100%",
+          textAlign: "center",
+          background: `linear-gradient(
+            101.79deg,
+            #12887a66 0%,
+            #87245c66 32%,
+            #e1263766 63%,
+            #ffb21566 100%
+          )`,
+          paddingLeft: "16px",
+          paddingRight: "16px",
+        }}
+      >
+        <h1>{topMessages[counter]}</h1>
+        <div style={{ display: "flex", justifyContent: "center" }}>
+          <img
+            src={`${vscMediaUrl}/${gifs[counter]}.gif`}
+            alt={topMessages[counter]}
+          />
+        </div>
+        <p>{bottomMessages[counter]}</p>
+        <p
+          style={{
+            paddingLeft: "50px",
+            paddingRight: "50px",
+            paddingBottom: "50px",
+            textAlign: "center",
+          }}
+        >
+          <div
+            style={{
+              cursor: "pointer",
+            }}
+          >
+            <StyledSpan
+              hidden={counter === 0}
+              onClick={() => setCounter((prev) => Math.max(prev - 1, 0))}
+            >
+              <ArrowLeft width="18px" strokeWidth="2px" /> Previous
+            </StyledSpan>
+            <span hidden={counter === 0}>{" | "}</span>
+            <StyledSpan onClick={() => setCounter((prev) => prev + 1)}>
+              Click to {counter === 3 || "learn how to"} use Continue{" "}
+              <ArrowRight width="18px" strokeWidth="2px" />
+            </StyledSpan>
+          </div>
+        </p>
+      </div>
+    </StyledDiv>
+  );
+};
 
 export default Onboarding;
-- 
cgit v1.2.3-70-g09d2


From a8c91ffaccd181a0f6c28e3d218c3c7eeb0282c3 Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Mon, 10 Jul 2023 20:08:04 -0700
Subject: gifs in outside media folder

---
 extension/package-lock.json                       |   4 ++--
 extension/package.json                            |   2 +-
 extension/react-app/public/edit.gif               | Bin 41667733 -> 0 bytes
 extension/react-app/public/explain.gif            | Bin 56475028 -> 0 bytes
 extension/react-app/public/generate.gif           | Bin 32532380 -> 0 bytes
 extension/react-app/public/intro.gif              | Bin 3976676 -> 0 bytes
 extension/react-app/src/components/Onboarding.tsx |   2 +-
 media/edit.gif                                    | Bin 0 -> 41667733 bytes
 media/explain.gif                                 | Bin 0 -> 56475028 bytes
 media/generate.gif                                | Bin 0 -> 32532380 bytes
 media/intro.gif                                   | Bin 0 -> 3976676 bytes
 11 files changed, 4 insertions(+), 4 deletions(-)
 delete mode 100644 extension/react-app/public/edit.gif
 delete mode 100644 extension/react-app/public/explain.gif
 delete mode 100644 extension/react-app/public/generate.gif
 delete mode 100644 extension/react-app/public/intro.gif
 create mode 100644 media/edit.gif
 create mode 100644 media/explain.gif
 create mode 100644 media/generate.gif
 create mode 100644 media/intro.gif

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/extension/package-lock.json b/extension/package-lock.json
index 5733c2dd..52b2e7b9 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "continue",
-  "version": "0.0.143",
+  "version": "0.0.146",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "continue",
-      "version": "0.0.143",
+      "version": "0.0.146",
       "license": "Apache-2.0",
       "dependencies": {
         "@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index 0477a450..393c5d70 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.143",
+  "version": "0.0.146",
   "publisher": "Continue",
   "engines": {
     "vscode": "^1.67.0"
diff --git a/extension/react-app/public/edit.gif b/extension/react-app/public/edit.gif
deleted file mode 100644
index 6780cdf7..00000000
Binary files a/extension/react-app/public/edit.gif and /dev/null differ
diff --git a/extension/react-app/public/explain.gif b/extension/react-app/public/explain.gif
deleted file mode 100644
index e74803dc..00000000
Binary files a/extension/react-app/public/explain.gif and /dev/null differ
diff --git a/extension/react-app/public/generate.gif b/extension/react-app/public/generate.gif
deleted file mode 100644
index 5c1d112b..00000000
Binary files a/extension/react-app/public/generate.gif and /dev/null differ
diff --git a/extension/react-app/public/intro.gif b/extension/react-app/public/intro.gif
deleted file mode 100644
index f872dc91..00000000
Binary files a/extension/react-app/public/intro.gif and /dev/null differ
diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 0e188e7a..1cbe61ec 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -76,7 +76,7 @@ const Onboarding = () => {
         <h1>{topMessages[counter]}</h1>
         <div style={{ display: "flex", justifyContent: "center" }}>
           <img
-            src={`${vscMediaUrl}/${gifs[counter]}.gif`}
+            src={`https://github.com/continuedev/continue/blob/main/${gifs[counter]}.gif?raw=true`}
             alt={topMessages[counter]}
           />
         </div>
diff --git a/media/edit.gif b/media/edit.gif
new file mode 100644
index 00000000..6780cdf7
Binary files /dev/null and b/media/edit.gif differ
diff --git a/media/explain.gif b/media/explain.gif
new file mode 100644
index 00000000..e74803dc
Binary files /dev/null and b/media/explain.gif differ
diff --git a/media/generate.gif b/media/generate.gif
new file mode 100644
index 00000000..5c1d112b
Binary files /dev/null and b/media/generate.gif differ
diff --git a/media/intro.gif b/media/intro.gif
new file mode 100644
index 00000000..f872dc91
Binary files /dev/null and b/media/intro.gif differ
-- 
cgit v1.2.3-70-g09d2


From b8a19ce1b8f4a37dfbbb438ce0fac4ae4aa4358b Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Mon, 10 Jul 2023 23:07:23 -0700
Subject: fixed gif link

---
 extension/react-app/src/components/Onboarding.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 1cbe61ec..061faba5 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -76,7 +76,7 @@ const Onboarding = () => {
         <h1>{topMessages[counter]}</h1>
         <div style={{ display: "flex", justifyContent: "center" }}>
           <img
-            src={`https://github.com/continuedev/continue/blob/main/${gifs[counter]}.gif?raw=true`}
+            src={`https://github.com/continuedev/continue/blob/main/media/${gifs[counter]}.gif?raw=true`}
             alt={topMessages[counter]}
           />
         </div>
-- 
cgit v1.2.3-70-g09d2


From 4d7b530fb453383bc4082a4d946cb6a9d76178d3 Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Tue, 11 Jul 2023 18:25:48 -0700
Subject: onboarding fix

---
 extension/react-app/src/components/Onboarding.tsx | 27 +++++++++--------------
 1 file changed, 11 insertions(+), 16 deletions(-)

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 061faba5..1b37acc4 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -87,25 +87,20 @@ const Onboarding = () => {
             paddingRight: "50px",
             paddingBottom: "50px",
             textAlign: "center",
+            cursor: "pointer",
           }}
         >
-          <div
-            style={{
-              cursor: "pointer",
-            }}
+          <StyledSpan
+            hidden={counter === 0}
+            onClick={() => setCounter((prev) => Math.max(prev - 1, 0))}
           >
-            <StyledSpan
-              hidden={counter === 0}
-              onClick={() => setCounter((prev) => Math.max(prev - 1, 0))}
-            >
-              <ArrowLeft width="18px" strokeWidth="2px" /> Previous
-            </StyledSpan>
-            <span hidden={counter === 0}>{" | "}</span>
-            <StyledSpan onClick={() => setCounter((prev) => prev + 1)}>
-              Click to {counter === 3 || "learn how to"} use Continue{" "}
-              <ArrowRight width="18px" strokeWidth="2px" />
-            </StyledSpan>
-          </div>
+            <ArrowLeft width="18px" strokeWidth="2px" /> Previous
+          </StyledSpan>
+          <span hidden={counter === 0}>{" | "}</span>
+          <StyledSpan onClick={() => setCounter((prev) => prev + 1)}>
+            Click to {counter === 3 || "learn how to"} use Continue{" "}
+            <ArrowRight width="18px" strokeWidth="2px" />
+          </StyledSpan>
         </p>
       </div>
     </StyledDiv>
-- 
cgit v1.2.3-70-g09d2


From 5ed9aff7b888f849f1c7b0d7c150f44b56ffc67f Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Wed, 12 Jul 2023 10:03:11 -0700
Subject: better onboarding

---
 extension/package-lock.json                       |  4 +-
 extension/package.json                            |  2 +-
 extension/react-app/src/components/Onboarding.tsx | 51 ++++++++++++++++++-----
 extension/src/activation/activate.ts              |  2 +-
 4 files changed, 45 insertions(+), 14 deletions(-)

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/extension/package-lock.json b/extension/package-lock.json
index d310643b..5d1cf395 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "continue",
-  "version": "0.0.153",
+  "version": "0.0.154",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "continue",
-      "version": "0.0.153",
+      "version": "0.0.154",
       "license": "Apache-2.0",
       "dependencies": {
         "@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index 61eee205..ab23b0b0 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.153",
+  "version": "0.0.154",
   "publisher": "Continue",
   "engines": {
     "vscode": "^1.67.0"
diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 1b37acc4..776ad460 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -4,6 +4,7 @@ import React, { useState, useEffect } from "react";
 import styled from "styled-components";
 import { ArrowLeft, ArrowRight } from "@styled-icons/heroicons-outline";
 import { defaultBorderRadius } from ".";
+import Loader from "./Loader";
 
 const StyledDiv = styled.div`
   position: absolute;
@@ -39,13 +40,9 @@ const Onboarding = () => {
     "Let Continue build the scaffolding of Python scripts, React components, and more",
   ];
 
-  const vscMediaUrl = useSelector(
-    (state: RootStore) => state.config.vscMediaUrl
-  );
-
   useEffect(() => {
     const hasVisited = localStorage.getItem("hasVisited");
-    if (hasVisited) {
+    if (hasVisited && false) {
       setCounter(4);
     } else {
       setCounter(0);
@@ -53,6 +50,12 @@ const Onboarding = () => {
     }
   }, []);
 
+  const [loading, setLoading] = useState(true);
+
+  useEffect(() => {
+    setLoading(true);
+  }, [counter]);
+
   return (
     <StyledDiv hidden={counter >= 4}>
       <div
@@ -75,10 +78,34 @@ const Onboarding = () => {
       >
         <h1>{topMessages[counter]}</h1>
         <div style={{ display: "flex", justifyContent: "center" }}>
-          <img
-            src={`https://github.com/continuedev/continue/blob/main/media/${gifs[counter]}.gif?raw=true`}
-            alt={topMessages[counter]}
-          />
+          {loading && (
+            <div style={{ margin: "auto", position: "absolute", zIndex: 0 }}>
+              <Loader />
+            </div>
+          )}
+          {counter % 2 === 0 ? (
+            <img
+              src={`https://github.com/continuedev/continue/blob/main/media/${gifs[counter]}.gif?raw=true`}
+              width="100%"
+              key={"even-gif"}
+              alt={topMessages[counter]}
+              onLoad={() => {
+                setLoading(false);
+              }}
+              style={{ zIndex: 1 }}
+            />
+          ) : (
+            <img
+              src={`https://github.com/continuedev/continue/blob/main/media/${gifs[counter]}.gif?raw=true`}
+              width="100%"
+              key={"odd-gif"}
+              alt={topMessages[counter]}
+              onLoad={() => {
+                setLoading(false);
+              }}
+              style={{ zIndex: 1 }}
+            />
+          )}
         </div>
         <p>{bottomMessages[counter]}</p>
         <p
@@ -98,7 +125,11 @@ const Onboarding = () => {
           </StyledSpan>
           <span hidden={counter === 0}>{" | "}</span>
           <StyledSpan onClick={() => setCounter((prev) => prev + 1)}>
-            Click to {counter === 3 || "learn how to"} use Continue{" "}
+            {counter === 0
+              ? "Click to learn how to use Continue"
+              : counter === 3
+              ? "Get Started"
+              : "Next"}{" "}
             <ArrowRight width="18px" strokeWidth="2px" />
           </StyledSpan>
         </p>
diff --git a/extension/src/activation/activate.ts b/extension/src/activation/activate.ts
index 2c5ba58c..c46d6362 100644
--- a/extension/src/activation/activate.ts
+++ b/extension/src/activation/activate.ts
@@ -15,7 +15,7 @@ import fetch from "node-fetch";
 // import { CapturedTerminal } from "../terminal/terminalEmulator";
 
 const PACKAGE_JSON_RAW_GITHUB_URL =
-  "https://raw.githubusercontent.com/continuedev/continue/main/extension/package.json";
+  "https://raw.githubusercontent.com/continuedev/continue/HEAD/extension/package.json";
 
 export let extensionContext: vscode.ExtensionContext | undefined = undefined;
 
-- 
cgit v1.2.3-70-g09d2


From f6c71a6cfe746ee4bb97c4cbe86827679a199ade Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Wed, 12 Jul 2023 15:52:18 -0700
Subject: smaller fixes

---
 continuedev/src/continuedev/steps/core/core.py     |  2 +-
 extension/package.json                             |  7 +--
 .../react-app/src/components/LoadingCover.tsx      | 50 ----------------------
 extension/react-app/src/components/Onboarding.tsx  |  4 +-
 extension/react-app/src/pages/gui.tsx              | 24 +++++------
 5 files changed, 14 insertions(+), 73 deletions(-)
 delete mode 100644 extension/react-app/src/components/LoadingCover.tsx

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/continuedev/src/continuedev/steps/core/core.py b/continuedev/src/continuedev/steps/core/core.py
index 9eddc03f..5ea95104 100644
--- a/continuedev/src/continuedev/steps/core/core.py
+++ b/continuedev/src/continuedev/steps/core/core.py
@@ -355,7 +355,7 @@ Please output the code to be inserted at the cursor in order to fulfill the user
                 lines_to_display = contents_lines[rewritten_lines:]
 
             new_file_contents = "\n".join(
-                full_prefix_lines) + "\n" + completion + "\n" + "\n".join(lines_to_display) + "\n" + "\n".join(full_suffix_lines)
+                full_prefix_lines) + "\n" + completion + "\n" + ("\n".join(lines_to_display) + "\n" if len(lines_to_display) > 0 else "") + "\n".join(full_suffix_lines)
 
             step_index = sdk.history.current_index
 
diff --git a/extension/package.json b/extension/package.json
index 69792ea2..6f64ee60 100644
--- a/extension/package.json
+++ b/extension/package.json
@@ -44,18 +44,13 @@
     "configuration": {
       "title": "Continue",
       "properties": {
-        "continue.automode": {
-          "type": "boolean",
-          "default": true,
-          "description": "Automatically find relevant code and suggest a fix whenever a traceback is found."
-        },
         "continue.serverUrl": {
           "type": "string",
           "default": "http://localhost:65432",
           "description": "The URL of the Continue server to use."
         },
         "continue.OPENAI_API_KEY": {
-          "type": "password",
+          "type": "string",
           "default": null,
           "description": "The OpenAI API key to use for code generation."
         },
diff --git a/extension/react-app/src/components/LoadingCover.tsx b/extension/react-app/src/components/LoadingCover.tsx
deleted file mode 100644
index a0f8f7a2..00000000
--- a/extension/react-app/src/components/LoadingCover.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import React from "react";
-import styled from "styled-components";
-
-const StyledDiv = styled.div`
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100vh;
-  background: linear-gradient(
-    101.79deg,
-    #12887a 0%,
-    #87245c 32%,
-    #e12637 63%,
-    #ffb215 100%
-  );
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  flex-direction: column;
-  z-index: 10;
-`;
-
-const StyledImg = styled.img`
-  /* add your styles here */
-`;
-
-const StyledDiv2 = styled.div`
-  width: 50%;
-  height: 5px;
-  background: white;
-  margin-top: 20px;
-`;
-
-interface LoadingCoverProps {
-  message: string;
-  hidden?: boolean;
-}
-
-const LoadingCover = (props: LoadingCoverProps) => {
-  return (
-    <StyledDiv style={{ display: props.hidden ? "none" : "inherit" }}>
-      <StyledImg src="continue.gif" alt="centered image" width="50%" />
-      <StyledDiv2></StyledDiv2>
-      <p>{props.message}</p>
-    </StyledDiv>
-  );
-};
-
-export default LoadingCover;
diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 776ad460..7772a25e 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -26,7 +26,7 @@ const StyledSpan = styled.span`
 
 const Onboarding = () => {
   const [counter, setCounter] = useState(4);
-  const gifs = ["intro", "explain", "edit", "generate"];
+  const gifs = ["intro", "explain", "edit", "generate", "intro"];
   const topMessages = [
     "Welcome to Continue!",
     "Answer coding questions",
@@ -42,7 +42,7 @@ const Onboarding = () => {
 
   useEffect(() => {
     const hasVisited = localStorage.getItem("hasVisited");
-    if (hasVisited && false) {
+    if (hasVisited) {
       setCounter(4);
     } else {
       setCounter(0);
diff --git a/extension/react-app/src/pages/gui.tsx b/extension/react-app/src/pages/gui.tsx
index b6a18dc8..b9382bd1 100644
--- a/extension/react-app/src/pages/gui.tsx
+++ b/extension/react-app/src/pages/gui.tsx
@@ -20,7 +20,6 @@ import ReactSwitch from "react-switch";
 import { usePostHog } from "posthog-js/react";
 import { useSelector } from "react-redux";
 import { RootStore } from "../redux/store";
-import LoadingCover from "../components/LoadingCover";
 import { postVscMessage } from "../vscode";
 import UserInputContainer from "../components/UserInputContainer";
 import Onboarding from "../components/Onboarding";
@@ -270,19 +269,16 @@ function GUI(props: GUIProps) {
   // const iterations = useSelector(selectIterations);
   return (
     <>
-      <Onboarding></Onboarding>
-      <LoadingCover hidden={true} message="Downloading local model..." />
-      <TextDialog
-        showDialog={showFeedbackDialog}
-        onEnter={(text) => {
-          client?.sendMainInput(`/feedback ${text}`);
-          setShowFeedbackDialog(false);
-        }}
-        onClose={() => {
-          setShowFeedbackDialog(false);
-        }}
-        message={feedbackDialogMessage}
-      ></TextDialog>
+      <Onboarding />
+      <TextDialog showDialog={showFeedbackDialog}
+      onEnter={(text) => {
+        client?.sendMainInput(`/feedback ${text}`);
+        setShowFeedbackDialog(false);
+      }}
+      onClose={() => {
+        setShowFeedbackDialog(false);
+      }}
+      message={feedbackDialogMessage} />
 
       <TopGUIDiv
         ref={topGuiDivRef}
-- 
cgit v1.2.3-70-g09d2


From 5ad4b19e2b442d10700297dd9b8328f5c6288c48 Mon Sep 17 00:00:00 2001
From: Ty Dunn <ty@tydunn.com>
Date: Thu, 13 Jul 2023 22:20:40 -0700
Subject: new onboarding

---
 extension/react-app/src/components/Onboarding.tsx | 17 +++++------------
 1 file changed, 5 insertions(+), 12 deletions(-)

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 7772a25e..e2dd6f57 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -26,18 +26,12 @@ const StyledSpan = styled.span`
 
 const Onboarding = () => {
   const [counter, setCounter] = useState(4);
-  const gifs = ["intro", "explain", "edit", "generate", "intro"];
+  const gifs = ["intro", "highlight", "question", "help"];
   const topMessages = [
-    "Welcome to Continue!",
-    "Answer coding questions",
-    "Edit in natural language",
-    "Generate files from scratch",
-  ];
-  const bottomMessages = [
-    "",
-    "Ask Continue about a part of your code to get another perspective",
-    "Highlight a section of code and instruct Continue to refactor it",
-    "Let Continue build the scaffolding of Python scripts, React components, and more",
+    "Welcome!",
+    "Highlight code",
+    "Ask a question",
+    "Use /help to learn more",
   ];
 
   useEffect(() => {
@@ -107,7 +101,6 @@ const Onboarding = () => {
             />
           )}
         </div>
-        <p>{bottomMessages[counter]}</p>
         <p
           style={{
             paddingLeft: "50px",
-- 
cgit v1.2.3-70-g09d2


From 5c6d2f1be8474d26124506e0c2a640fa68efe52d Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Fri, 14 Jul 2023 02:30:45 -0700
Subject: fixed unique_id being asyncio.run property

---
 continuedev/src/continuedev/server/ide.py          | 22 +++++++++++-----------
 continuedev/src/continuedev/server/ide_protocol.py |  5 +----
 continuedev/src/continuedev/steps/help.py          |  8 +++++---
 extension/package-lock.json                        |  4 ++--
 extension/package.json                             |  2 +-
 extension/react-app/src/components/ComboBox.tsx    | 17 ++---------------
 extension/react-app/src/components/Onboarding.tsx  |  1 +
 7 files changed, 23 insertions(+), 36 deletions(-)

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/continuedev/src/continuedev/server/ide.py b/continuedev/src/continuedev/server/ide.py
index 12a21f19..73cce201 100644
--- a/continuedev/src/continuedev/server/ide.py
+++ b/continuedev/src/continuedev/server/ide.py
@@ -123,10 +123,12 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
         self.websocket = websocket
         self.session_manager = session_manager
 
-    workspace_directory: str
+    workspace_directory: str = None
+    unique_id: str = None
 
     async def initialize(self) -> List[str]:
         await self._send_json("workspaceDirectory", {})
+        await self._send_json("uniqueId", {})
         other_msgs = []
         while True:
             msg_string = await self.websocket.receive_text()
@@ -137,9 +139,13 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
             data = message["data"]
             if message_type == "workspaceDirectory":
                 self.workspace_directory = data["workspaceDirectory"]
-                break
+            elif message_type == "uniqueId":
+                self.unique_id = data["uniqueId"]
             else:
                 other_msgs.append(msg_string)
+
+            if self.workspace_directory is not None and self.unique_id is not None:
+                break
         return other_msgs
 
     async def _send_json(self, message_type: str, data: Any):
@@ -183,10 +189,12 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
             self.onMainUserInput(data["input"])
         elif message_type == "deleteAtIndex":
             self.onDeleteAtIndex(data["index"])
-        elif message_type in ["highlightedCode", "openFiles", "visibleFiles", "readFile", "editFile", "getUserSecret", "runCommand", "uniqueId"]:
+        elif message_type in ["highlightedCode", "openFiles", "visibleFiles", "readFile", "editFile", "getUserSecret", "runCommand"]:
             self.sub_queue.post(message_type, data)
         elif message_type == "workspaceDirectory":
             self.workspace_directory = data["workspaceDirectory"]
+        elif message_type == "uniqueId":
+            self.unique_id = data["uniqueId"]
         else:
             raise ValueError("Unknown message type", message_type)
 
@@ -311,14 +319,6 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
         resp = await self._send_and_receive_json({}, VisibleFilesResponse, "visibleFiles")
         return resp.visibleFiles
 
-    async def get_unique_id(self) -> str:
-        resp = await self._send_and_receive_json({}, UniqueIdResponse, "uniqueId")
-        return resp.uniqueId
-
-    @cached_property_no_none
-    def unique_id(self) -> str:
-        return asyncio.run(self.get_unique_id())
-
     async def getHighlightedCode(self) -> List[RangeInFile]:
         resp = await self._send_and_receive_json({}, HighlightedCodeResponse, "highlightedCode")
         return resp.highlightedCode
diff --git a/continuedev/src/continuedev/server/ide_protocol.py b/continuedev/src/continuedev/server/ide_protocol.py
index 2f78cf0e..d0fb0bf8 100644
--- a/continuedev/src/continuedev/server/ide_protocol.py
+++ b/continuedev/src/continuedev/server/ide_protocol.py
@@ -108,7 +108,4 @@ class AbstractIdeProtocolServer(ABC):
         """Show a diff"""
 
     workspace_directory: str
-
-    @abstractproperty
-    def unique_id(self) -> str:
-        """Get a unique ID for this IDE"""
+    unique_id: str
diff --git a/continuedev/src/continuedev/steps/help.py b/continuedev/src/continuedev/steps/help.py
index fdfb986f..2dc3647c 100644
--- a/continuedev/src/continuedev/steps/help.py
+++ b/continuedev/src/continuedev/steps/help.py
@@ -6,7 +6,7 @@ from ..libs.util.telemetry import capture_event
 help = dedent("""\
         Continue is an open-source coding autopilot. It is a VS Code extension that brings the power of ChatGPT to your IDE.
               
-        It gathers context for you and stores your interactions automatically, so that you can avoid copy/paste now and benefit from a customized LLM later.
+        It gathers context for you and stores your interactions automatically, so that you can avoid copy/paste now and benefit from a customized Large Language Model (LLM) later.
 
         Continue can be used to...
         1. Edit chunks of code with specific instructions (e.g. "/edit migrate this digital ocean terraform file into one that works for GCP")
@@ -25,6 +25,7 @@ help = dedent("""\
 
         If you have feedback, please use /feedback to let us know how you would like to use Continue. We are excited to hear from you!""")
 
+
 class HelpStep(Step):
 
     name: str = "Help"
@@ -41,7 +42,7 @@ class HelpStep(Step):
                     Information:
 
                     {help}""")
-        
+
         self.chat_context.append(ChatMessage(
             role="user",
             content=prompt,
@@ -54,4 +55,5 @@ class HelpStep(Step):
                 self.description += chunk["content"]
                 await sdk.update_ui()
 
-        capture_event(sdk.ide.unique_id, "help", {"question": question, "answer": self.description})
\ No newline at end of file
+        capture_event(sdk.ide.unique_id, "help", {
+                      "question": question, "answer": self.description})
diff --git a/extension/package-lock.json b/extension/package-lock.json
index 65fdab12..9d5c73e1 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "continue",
-  "version": "0.0.162",
+  "version": "0.0.163",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "continue",
-      "version": "0.0.162",
+      "version": "0.0.163",
       "license": "Apache-2.0",
       "dependencies": {
         "@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index ef39582b..2b0f6b94 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.162",
+  "version": "0.0.163",
   "publisher": "Continue",
   "engines": {
     "vscode": "^1.67.0"
diff --git a/extension/react-app/src/components/ComboBox.tsx b/extension/react-app/src/components/ComboBox.tsx
index 7d6541c7..73db33ca 100644
--- a/extension/react-app/src/components/ComboBox.tsx
+++ b/extension/react-app/src/components/ComboBox.tsx
@@ -1,29 +1,16 @@
-import React, {
-  useCallback,
-  useEffect,
-  useImperativeHandle,
-  useState,
-} from "react";
+import React, { useEffect, useImperativeHandle, useState } from "react";
 import { useCombobox } from "downshift";
 import styled from "styled-components";
 import {
-  buttonColor,
   defaultBorderRadius,
   lightGray,
   secondaryDark,
   vscBackground,
 } from ".";
 import CodeBlock from "./CodeBlock";
-import { RangeInFile } from "../../../src/client";
 import PillButton from "./PillButton";
 import HeaderButtonWithText from "./HeaderButtonWithText";
-import {
-  Trash,
-  LockClosed,
-  LockOpen,
-  Plus,
-  DocumentPlus,
-} from "@styled-icons/heroicons-outline";
+import { DocumentPlus } from "@styled-icons/heroicons-outline";
 import { HighlightedRangeContext } from "../../../schema/FullState";
 
 // #region styled components
diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index e2dd6f57..6bfb0ccd 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -22,6 +22,7 @@ const StyledSpan = styled.span`
   &:hover {
     background-color: #ffffff33;
   }
+  white-space: nowrap;
 `;
 
 const Onboarding = () => {
-- 
cgit v1.2.3-70-g09d2


From 39cd2ef27d6ed439b00a9edec4a487343ff1c2c9 Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Fri, 14 Jul 2023 03:24:46 -0700
Subject: warn of large highlighted ranges, cmd+k->m

---
 continuedev/src/continuedev/core/policy.py        |   2 +-
 continuedev/src/continuedev/steps/help.py         |   2 +-
 extension/package-lock.json                       |   4 +-
 extension/package.json                            |   6 +-
 extension/react-app/src/components/ComboBox.tsx   |   5 +
 extension/react-app/src/components/Onboarding.tsx |   1 +
 extension/react-app/src/components/PillButton.tsx | 167 +++++++++++++---------
 extension/react-app/src/pages/gui.tsx             |  27 ++--
 extension/src/commands.ts                         |  17 ++-
 extension/src/lang-server/codeLens.ts             |   4 +-
 10 files changed, 141 insertions(+), 94 deletions(-)

(limited to 'extension/react-app/src/components/Onboarding.tsx')

diff --git a/continuedev/src/continuedev/core/policy.py b/continuedev/src/continuedev/core/policy.py
index 59ea78b1..bc897357 100644
--- a/continuedev/src/continuedev/core/policy.py
+++ b/continuedev/src/continuedev/core/policy.py
@@ -59,7 +59,7 @@ class DemoPolicy(Policy):
             return (
                 MessageStep(name="Welcome to Continue", message=dedent("""\
                     - Highlight code and ask a question or give instructions
-                    - Use `cmd+k` (Mac) / `ctrl+k` (Windows) to open Continue
+                    - Use `cmd+m` (Mac) / `ctrl+m` (Windows) to open Continue
                     - Use `/help` to ask questions about how to use Continue""")) >>
                 WelcomeStep() >>
                 # SetupContinueWorkspaceStep() >>
diff --git a/continuedev/src/continuedev/steps/help.py b/continuedev/src/continuedev/steps/help.py
index 2dc3647c..ba1e6087 100644
--- a/continuedev/src/continuedev/steps/help.py
+++ b/continuedev/src/continuedev/steps/help.py
@@ -19,7 +19,7 @@ help = dedent("""\
 
         Continue passes all of the sections of code you highlight, the code above and below the to-be edited highlighted code section, and all previous steps above input box as context to the LLM.
 
-        You can use cmd+k (Mac) / ctrl+k (Windows) to open Continue. You can use cmd+shift+e / ctrl+shift+e to open file Explorer. You can add your own OpenAI API key to VS Code Settings with `cmd+,`
+        You can use cmd+m (Mac) / ctrl+m (Windows) to open Continue. You can use cmd+shift+e / ctrl+shift+e to open file Explorer. You can add your own OpenAI API key to VS Code Settings with `cmd+,`
 
         If Continue is stuck loading, try using `cmd+shift+p` to open the command palette, search "Reload Window", and then select it. This will reload VS Code and Continue and often fixes issues.
 
diff --git a/extension/package-lock.json b/extension/package-lock.json
index 9d5c73e1..a79dd6b4 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "continue",
-  "version": "0.0.163",
+  "version": "0.0.164",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "continue",
-      "version": "0.0.163",
+      "version": "0.0.164",
       "license": "Apache-2.0",
       "dependencies": {
         "@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index 2b0f6b94..de1f395d 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.163",
+  "version": "0.0.164",
   "publisher": "Continue",
   "engines": {
     "vscode": "^1.67.0"
@@ -111,8 +111,8 @@
     "keybindings": [
       {
         "command": "continue.focusContinueInput",
-        "mac": "cmd+k",
-        "key": "ctrl+k"
+        "mac": "cmd+m",
+        "key": "ctrl+m"
       },
       {
         "command": "continue.suggestionDown",
diff --git a/extension/react-app/src/components/ComboBox.tsx b/extension/react-app/src/components/ComboBox.tsx
index 73db33ca..bd0d59b5 100644
--- a/extension/react-app/src/components/ComboBox.tsx
+++ b/extension/react-app/src/components/ComboBox.tsx
@@ -228,6 +228,11 @@ const ComboBox = React.forwardRef((props: ComboBoxProps, ref) => {
         )} */}
         {highlightedCodeSections.map((section, idx) => (
           <PillButton
+            warning={
+              section.range.contents.length > 4000 && section.editing
+                ? "Editing such a large range may be slow"
+                : undefined
+            }
             editing={section.editing}
             pinned={section.pinned}
             index={idx}
diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx
index 6bfb0ccd..231c1e93 100644
--- a/extension/react-app/src/components/Onboarding.tsx
+++ b/extension/react-app/src/components/Onboarding.tsx
@@ -109,6 +109,7 @@ const Onboarding = () => {
             paddingBottom: "50px",
             textAlign: "center",
             cursor: "pointer",
+            whiteSpace: "nowrap",
           }}
         >
           <StyledSpan
diff --git a/extension/react-app/src/components/PillButton.tsx b/extension/react-app/src/components/PillButton.tsx
index 31d98c0f..d9d779d1 100644
--- a/extension/react-app/src/components/PillButton.tsx
+++ b/extension/react-app/src/components/PillButton.tsx
@@ -1,12 +1,11 @@
 import { useContext, useState } from "react";
 import styled from "styled-components";
+import { StyledTooltip, defaultBorderRadius, secondaryDark } from ".";
 import {
-  StyledTooltip,
-  defaultBorderRadius,
-  lightGray,
-  secondaryDark,
-} from ".";
-import { Trash, PaintBrush, MapPin } from "@styled-icons/heroicons-outline";
+  Trash,
+  PaintBrush,
+  ExclamationTriangle,
+} from "@styled-icons/heroicons-outline";
 import { GUIClientContext } from "../App";
 
 const Button = styled.button`
@@ -31,7 +30,6 @@ const GridDiv = styled.div`
   grid-template-columns: 1fr 1fr;
   align-items: center;
   border-radius: ${defaultBorderRadius};
-  overflow: hidden;
 
   background-color: ${secondaryDark};
 `;
@@ -48,6 +46,21 @@ const ButtonDiv = styled.div<{ backgroundColor: string }>`
   }
 `;
 
+const CircleDiv = styled.div`
+  position: absolute;
+  top: -10px;
+  right: -10px;
+  width: 20px;
+  height: 20px;
+  border-radius: 50%;
+  background-color: red;
+  color: white;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 2px;
+`;
+
 interface PillButtonProps {
   onHover?: (arg0: boolean) => void;
   onDelete?: () => void;
@@ -55,6 +68,7 @@ interface PillButtonProps {
   index: number;
   editing: boolean;
   pinned: boolean;
+  warning?: string;
 }
 
 const PillButton = (props: PillButtonProps) => {
@@ -63,75 +77,96 @@ const PillButton = (props: PillButtonProps) => {
 
   return (
     <>
-      <Button
-        style={{
-          position: "relative",
-          borderColor: props.editing
-            ? "#8800aa"
-            : props.pinned
-            ? "#ffff0099"
-            : "transparent",
-          borderWidth: "1px",
-          borderStyle: "solid",
-        }}
-        onMouseEnter={() => {
-          setIsHovered(true);
-          if (props.onHover) {
-            props.onHover(true);
-          }
-        }}
-        onMouseLeave={() => {
-          setIsHovered(false);
-          if (props.onHover) {
-            props.onHover(false);
-          }
-        }}
-      >
-        {isHovered && (
-          <GridDiv>
-            <ButtonDiv
-              data-tooltip-id={`edit-${props.index}`}
-              backgroundColor={"#8800aa55"}
-              onClick={() => {
-                client?.setEditingAtIndices([props.index]);
-              }}
-            >
-              <PaintBrush style={{ margin: "auto" }} width="1.6em"></PaintBrush>
-            </ButtonDiv>
+      <div style={{ position: "relative" }}>
+        <Button
+          style={{
+            position: "relative",
+            borderColor: props.warning
+              ? "red"
+              : props.editing
+              ? "#8800aa"
+              : props.pinned
+              ? "#ffff0099"
+              : "transparent",
+            borderWidth: "1px",
+            borderStyle: "solid",
+          }}
+          onMouseEnter={() => {
+            setIsHovered(true);
+            if (props.onHover) {
+              props.onHover(true);
+            }
+          }}
+          onMouseLeave={() => {
+            setIsHovered(false);
+            if (props.onHover) {
+              props.onHover(false);
+            }
+          }}
+        >
+          {isHovered && (
+            <GridDiv>
+              <ButtonDiv
+                data-tooltip-id={`edit-${props.index}`}
+                backgroundColor={"#8800aa55"}
+                onClick={() => {
+                  client?.setEditingAtIndices([props.index]);
+                }}
+              >
+                <PaintBrush
+                  style={{ margin: "auto" }}
+                  width="1.6em"
+                ></PaintBrush>
+              </ButtonDiv>
 
-            {/* <ButtonDiv
+              {/* <ButtonDiv
             data-tooltip-id={`pin-${props.index}`}
             backgroundColor={"#ffff0055"}
             onClick={() => {
               client?.setPinnedAtIndices([props.index]);
             }}
-          >
+            >
             <MapPin style={{ margin: "auto" }} width="1.6em"></MapPin>
           </ButtonDiv> */}
-            <StyledTooltip id={`pin-${props.index}`}>
-              Edit this range
+              <StyledTooltip id={`pin-${props.index}`}>
+                Edit this range
+              </StyledTooltip>
+              <ButtonDiv
+                data-tooltip-id={`delete-${props.index}`}
+                backgroundColor={"#cc000055"}
+                onClick={() => {
+                  if (props.onDelete) {
+                    props.onDelete();
+                  }
+                }}
+              >
+                <Trash style={{ margin: "auto" }} width="1.6em"></Trash>
+              </ButtonDiv>
+            </GridDiv>
+          )}
+          {props.title}
+        </Button>
+        <StyledTooltip id={`edit-${props.index}`}>
+          {props.editing
+            ? "Editing this range (with rest of file as context)"
+            : "Edit this range"}
+        </StyledTooltip>
+        <StyledTooltip id={`delete-${props.index}`}>Delete</StyledTooltip>
+        {props.warning && (
+          <>
+            <CircleDiv data-tooltip-id={`circle-div-${props.title}`}>
+              <ExclamationTriangle
+                style={{ margin: "auto" }}
+                width="1.0em"
+                strokeWidth={2}
+              />
+            </CircleDiv>
+            <StyledTooltip id={`circle-div-${props.title}`}>
+              {props.warning}
             </StyledTooltip>
-            <ButtonDiv
-              data-tooltip-id={`delete-${props.index}`}
-              backgroundColor={"#cc000055"}
-              onClick={() => {
-                if (props.onDelete) {
-                  props.onDelete();
-                }
-              }}
-            >
-              <Trash style={{ margin: "auto" }} width="1.6em"></Trash>
-            </ButtonDiv>
-          </GridDiv>
+          </>
         )}
-        {props.title}
-      </Button>
-      <StyledTooltip id={`edit-${props.index}`}>
-        {props.editing
-          ? "Editing this range (with rest of file as context)"
-          : "Edit this range"}
-      </StyledTooltip>
-      <StyledTooltip id={`delete-${props.index}`}>Delete</StyledTooltip>
+      </div>
     </>
   );
 };
diff --git a/extension/react-app/src/pages/gui.tsx b/extension/react-app/src/pages/gui.tsx
index 4ff260fa..57cebac3 100644
--- a/extension/react-app/src/pages/gui.tsx
+++ b/extension/react-app/src/pages/gui.tsx
@@ -95,11 +95,8 @@ function GUI(props: GUIProps) {
           name: "Welcome to Continue",
           hide: false,
           description: `- Highlight code and ask a question or give instructions
-- Use \`cmd+k\` (Mac) / \`ctrl+k\` (Windows) to open Continue
-- Use \`cmd+shift+e\` / \`ctrl+shift+e\` to open file Explorer
-- Add your own OpenAI API key to VS Code Settings with \`cmd+,\`
-- Use slash commands when you want fine-grained control
-- Past steps are included as part of the context by default`,
+          - Use \`cmd+m\` (Mac) / \`ctrl+m\` (Windows) to open Continue
+          - Use \`/help\` to ask questions about how to use Continue`,
           system_message: null,
           chat_context: [],
           manage_own_chat_context: false,
@@ -269,15 +266,17 @@ function GUI(props: GUIProps) {
   return (
     <>
       <Onboarding />
-      <TextDialog showDialog={showFeedbackDialog}
-      onEnter={(text) => {
-        client?.sendMainInput(`/feedback ${text}`);
-        setShowFeedbackDialog(false);
-      }}
-      onClose={() => {
-        setShowFeedbackDialog(false);
-      }}
-      message={feedbackDialogMessage} />
+      <TextDialog
+        showDialog={showFeedbackDialog}
+        onEnter={(text) => {
+          client?.sendMainInput(`/feedback ${text}`);
+          setShowFeedbackDialog(false);
+        }}
+        onClose={() => {
+          setShowFeedbackDialog(false);
+        }}
+        message={feedbackDialogMessage}
+      />
 
       <TopGUIDiv
         ref={topGuiDivRef}
diff --git a/extension/src/commands.ts b/extension/src/commands.ts
index 0b002549..0025340a 100644
--- a/extension/src/commands.ts
+++ b/extension/src/commands.ts
@@ -19,6 +19,8 @@ import { debugPanelWebview } from "./debugPanel";
 import { sendTelemetryEvent, TelemetryEvent } from "./telemetry";
 import { ideProtocolClient } from "./activation/activate";
 
+let focusedOnContinueInput = false;
+
 // Copy everything over from extension.ts
 const commandsMap: { [command: string]: (...args: any) => any } = {
   "continue.suggestionDown": suggestionDownCommand,
@@ -30,10 +32,15 @@ const commandsMap: { [command: string]: (...args: any) => any } = {
   "continue.acceptAllSuggestions": acceptAllSuggestionsCommand,
   "continue.rejectAllSuggestions": rejectAllSuggestionsCommand,
   "continue.focusContinueInput": async () => {
-    vscode.commands.executeCommand("continue.continueGUIView.focus");
-    debugPanelWebview?.postMessage({
-      type: "focusContinueInput",
-    });
+    if (focusedOnContinueInput) {
+      vscode.commands.executeCommand("workbench.action.focusActiveEditorGroup");
+    } else {
+      vscode.commands.executeCommand("continue.continueGUIView.focus");
+      debugPanelWebview?.postMessage({
+        type: "focusContinueInput",
+      });
+    }
+    focusedOnContinueInput = !focusedOnContinueInput;
   },
   "continue.quickTextEntry": async () => {
     const text = await vscode.window.showInputBox({
@@ -53,4 +60,4 @@ export function registerAllCommands(context: vscode.ExtensionContext) {
       vscode.commands.registerCommand(command, callback)
     );
   }
-}
\ No newline at end of file
+}
diff --git a/extension/src/lang-server/codeLens.ts b/extension/src/lang-server/codeLens.ts
index 5800a00e..1cfef5d5 100644
--- a/extension/src/lang-server/codeLens.ts
+++ b/extension/src/lang-server/codeLens.ts
@@ -60,12 +60,12 @@ class DiffViewerCodeLensProvider implements vscode.CodeLensProvider {
       }
       codeLenses.push(
         new vscode.CodeLens(range, {
-          title: "Accept ✅ (⌘⇧↩)",
+          title: "Accept All ✅ (⌘⇧↩)",
           command: "continue.acceptDiff",
           arguments: [document.uri.fsPath],
         }),
         new vscode.CodeLens(range, {
-          title: "Reject ❌ (⌘⇧⌫)",
+          title: "Reject All ❌ (⌘⇧⌫)",
           command: "continue.rejectDiff",
           arguments: [document.uri.fsPath],
         })
-- 
cgit v1.2.3-70-g09d2

