diff options
| author | Nate Sesti <sestinj@gmail.com> | 2023-06-30 20:05:18 -0700 | 
|---|---|---|
| committer | Nate Sesti <sestinj@gmail.com> | 2023-06-30 20:05:18 -0700 | 
| commit | 1d97c9c76e36032ca01a3ebdc1ab656856077bae (patch) | |
| tree | 04a1457d776ba06b0ee3fa7a63e8491cbb56f3ad | |
| parent | 953d7dc8ddbea6b534977d68f38415a6b149d9d6 (diff) | |
| download | sncontinue-1d97c9c76e36032ca01a3ebdc1ab656856077bae.tar.gz sncontinue-1d97c9c76e36032ca01a3ebdc1ab656856077bae.tar.bz2 sncontinue-1d97c9c76e36032ca01a3ebdc1ab656856077bae.zip | |
kill servers started by old extension versions
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | continuedev/src/continuedev/steps/core/core.py | 17 | ||||
| -rw-r--r-- | continuedev/src/continuedev/steps/main.py | 2 | ||||
| -rw-r--r-- | extension/package-lock.json | 359 | ||||
| -rw-r--r-- | extension/package.json | 3 | ||||
| -rw-r--r-- | extension/src/activation/environmentSetup.ts | 45 | 
6 files changed, 407 insertions, 22 deletions
| @@ -138,4 +138,5 @@ cached_embeddings.pkl  codeql  **/.continue -.DS_Store
\ No newline at end of file +.DS_Store +.continue diff --git a/continuedev/src/continuedev/steps/core/core.py b/continuedev/src/continuedev/steps/core/core.py index f81b3f6d..f59ef33c 100644 --- a/continuedev/src/continuedev/steps/core/core.py +++ b/continuedev/src/continuedev/steps/core/core.py @@ -221,18 +221,21 @@ class DefaultModelEditCodeStep(Step):          # TODO: Keep track of start line of the range, because it's needed below for offset stuff          rif_start_line = rif.range.start.line          if len(rif.contents) > 0: -            first_line = rif.contents.splitlines(keepends=True)[0] -            while first_line.strip() == "": +            lines = rif.contents.splitlines(keepends=True) +            first_line = lines[0] if lines else None +            while first_line and first_line.strip() == "":                  file_prefix += first_line                  rif.contents = rif.contents[len(first_line):] -                first_line = rif.contents.splitlines(keepends=True)[0] +                lines = rif.contents.splitlines(keepends=True) +                first_line = lines[0] if lines else None -            last_line = rif.contents.splitlines(keepends=True)[-1] -            while last_line.strip() == "": +            last_line = lines[-1] if lines else None +            while last_line and last_line.strip() == "":                  file_suffix = last_line + file_suffix                  rif.contents = rif.contents[:len(                      rif.contents) - len(last_line)] -                last_line = rif.contents.splitlines(keepends=True)[-1] +                lines = rif.contents.splitlines(keepends=True) +                last_line = lines[-1] if lines else None              while rif.contents.startswith("\n"):                  file_prefix += "\n" @@ -241,7 +244,7 @@ class DefaultModelEditCodeStep(Step):                  file_suffix = "\n" + file_suffix                  rif.contents = rif.contents[:-1] -        return file_prefix, rif.contents, file_suffix, model_to_use +                return file_prefix, rif.contents, file_suffix, model_to_use      def compile_prompt(self, file_prefix: str, contents: str, file_suffix: str, sdk: ContinueSDK) -> str:          prompt = self._prompt diff --git a/continuedev/src/continuedev/steps/main.py b/continuedev/src/continuedev/steps/main.py index 5caac180..def1af4e 100644 --- a/continuedev/src/continuedev/steps/main.py +++ b/continuedev/src/continuedev/steps/main.py @@ -249,7 +249,7 @@ class EditHighlightedCodeStep(Step):      user_input: str = Field(          ..., title="User Input", description="The natural language request describing how to edit the code")      hide = True -    description: str = "Change the contents of the currently highlighted code or open file" +    description: str = "Change the contents of the currently highlighted code or open file. You should call this function if the user asks seems to be asking for a code change."      async def describe(self, models: Models) -> Coroutine[str, None, None]:          return "Editing code" diff --git a/extension/package-lock.json b/extension/package-lock.json index 7565f480..a3b528ac 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@  {    "name": "continue", -  "version": "0.0.97", +  "version": "0.0.99",    "lockfileVersion": 2,    "requires": true,    "packages": {      "": {        "name": "continue", -      "version": "0.0.97", +      "version": "0.0.99",        "license": "Apache-2.0",        "dependencies": {          "@electron/rebuild": "^3.2.10", @@ -16,6 +16,7 @@          "@vitejs/plugin-react-swc": "^3.3.2",          "axios": "^1.2.5",          "downshift": "^7.6.0", +        "fkill": "^8.1.0",          "highlight.js": "^11.7.0",          "posthog-js": "^1.63.3",          "react-markdown": "^8.0.7", @@ -2206,6 +2207,17 @@          "node": ">=8"        }      }, +    "node_modules/arrify": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", +      "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", +      "engines": { +        "node": ">=12" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    },      "node_modules/asynckit": {        "version": "0.4.0",        "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3704,6 +3716,39 @@          "es5-ext": "~0.10.14"        }      }, +    "node_modules/execa": { +      "version": "5.1.1", +      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", +      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", +      "dependencies": { +        "cross-spawn": "^7.0.3", +        "get-stream": "^6.0.0", +        "human-signals": "^2.1.0", +        "is-stream": "^2.0.0", +        "merge-stream": "^2.0.0", +        "npm-run-path": "^4.0.1", +        "onetime": "^5.1.2", +        "signal-exit": "^3.0.3", +        "strip-final-newline": "^2.0.0" +      }, +      "engines": { +        "node": ">=10" +      }, +      "funding": { +        "url": "https://github.com/sindresorhus/execa?sponsor=1" +      } +    }, +    "node_modules/execa/node_modules/get-stream": { +      "version": "6.0.1", +      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", +      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", +      "engines": { +        "node": ">=10" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    },      "node_modules/expand-template": {        "version": "2.0.3",        "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -3906,6 +3951,76 @@          "url": "https://github.com/sponsors/sindresorhus"        }      }, +    "node_modules/fkill": { +      "version": "8.1.0", +      "resolved": "https://registry.npmjs.org/fkill/-/fkill-8.1.0.tgz", +      "integrity": "sha512-XrPKdURVYoXerpYx+zhhaXrO9vHVflnGD4JhwjOwg03vKwyOH6eZ+EY69aKDD+q1EbCzviVmD+9OG9rwQy+z/A==", +      "dependencies": { +        "aggregate-error": "^4.0.0", +        "execa": "^5.1.1", +        "pid-port": "^0.2.0", +        "process-exists": "^4.1.0", +        "ps-list": "^7.2.0", +        "taskkill": "^4.0.0" +      }, +      "engines": { +        "node": "^12.20.0 || ^14.13.1 || >=16.0.0" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    }, +    "node_modules/fkill/node_modules/aggregate-error": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", +      "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", +      "dependencies": { +        "clean-stack": "^4.0.0", +        "indent-string": "^5.0.0" +      }, +      "engines": { +        "node": ">=12" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    }, +    "node_modules/fkill/node_modules/clean-stack": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", +      "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", +      "dependencies": { +        "escape-string-regexp": "5.0.0" +      }, +      "engines": { +        "node": ">=12" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    }, +    "node_modules/fkill/node_modules/escape-string-regexp": { +      "version": "5.0.0", +      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", +      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", +      "engines": { +        "node": ">=12" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    }, +    "node_modules/fkill/node_modules/indent-string": { +      "version": "5.0.0", +      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", +      "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", +      "engines": { +        "node": ">=12" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    },      "node_modules/flat": {        "version": "5.0.2",        "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -4424,6 +4539,14 @@          "node": ">= 6"        }      }, +    "node_modules/human-signals": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", +      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", +      "engines": { +        "node": ">=10.17.0" +      } +    },      "node_modules/humanize-ms": {        "version": "1.2.1",        "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -4711,6 +4834,17 @@        "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",        "dev": true      }, +    "node_modules/is-stream": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", +      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", +      "engines": { +        "node": ">=8" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    },      "node_modules/is-unicode-supported": {        "version": "0.1.0",        "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -5269,6 +5403,11 @@          "timers-ext": "^0.1.7"        }      }, +    "node_modules/merge-stream": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", +      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" +    },      "node_modules/merge2": {        "version": "1.4.1",        "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -6193,6 +6332,17 @@          "url": "https://github.com/sponsors/sindresorhus"        }      }, +    "node_modules/npm-run-path": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", +      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", +      "dependencies": { +        "path-key": "^3.0.0" +      }, +      "engines": { +        "node": ">=8" +      } +    },      "node_modules/npmlog": {        "version": "6.0.2",        "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", @@ -6507,6 +6657,20 @@          "url": "https://github.com/sponsors/jonschlinkert"        }      }, +    "node_modules/pid-port": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/pid-port/-/pid-port-0.2.0.tgz", +      "integrity": "sha512-xVU9H1FCRSeGrD9Oim5bLg2U7B2BgW0qzK2oahpV5BIf9hwzqQaWyOkOVC0Kgbsc90A9x6525beawx+QK+JduQ==", +      "dependencies": { +        "execa": "^5.1.1" +      }, +      "engines": { +        "node": "^12.20.0 || ^14.13.1 || >=16.0.0" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    },      "node_modules/pify": {        "version": "2.3.0",        "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -6722,6 +6886,28 @@          "url": "https://github.com/prettier/prettier?sponsor=1"        }      }, +    "node_modules/process-exists": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/process-exists/-/process-exists-4.1.0.tgz", +      "integrity": "sha512-BBJoiorUKoP2AuM5q/yKwIfT1YWRHsaxjW+Ayu9erLhqKOfnXzzVVML0XTYoQZuI1YvcWKmc1dh06DEy4+KzfA==", +      "dependencies": { +        "ps-list": "^6.3.0" +      }, +      "engines": { +        "node": ">=10" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    }, +    "node_modules/process-exists/node_modules/ps-list": { +      "version": "6.3.0", +      "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz", +      "integrity": "sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA==", +      "engines": { +        "node": ">=8" +      } +    },      "node_modules/process-nextick-args": {        "version": "2.0.1",        "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6774,6 +6960,17 @@        "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",        "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="      }, +    "node_modules/ps-list": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz", +      "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==", +      "engines": { +        "node": ">=10" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    },      "node_modules/pump": {        "version": "3.0.0",        "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7577,6 +7774,14 @@          "url": "https://github.com/chalk/strip-ansi?sponsor=1"        }      }, +    "node_modules/strip-final-newline": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", +      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", +      "engines": { +        "node": ">=6" +      } +    },      "node_modules/strip-json-comments": {        "version": "3.1.1",        "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -7841,6 +8046,21 @@          "node": ">=10"        }      }, +    "node_modules/taskkill": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/taskkill/-/taskkill-4.0.0.tgz", +      "integrity": "sha512-h+BGQ8ExIUZ81h4iHRvatZY5eeBBl2WZk31MmMdFG9LBTc5eCH5u/bzZ7phaPH3bsiB7WhM7YTkOyB2dyFQfXg==", +      "dependencies": { +        "arrify": "^3.0.0", +        "execa": "^5.1.1" +      }, +      "engines": { +        "node": "^12.20.0 || ^14.13.1 || >=16.0.0" +      }, +      "funding": { +        "url": "https://github.com/sponsors/sindresorhus" +      } +    },      "node_modules/text-table": {        "version": "0.2.0",        "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -10178,6 +10398,11 @@        "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",        "dev": true      }, +    "arrify": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", +      "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==" +    },      "asynckit": {        "version": "0.4.0",        "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -11296,6 +11521,29 @@          "es5-ext": "~0.10.14"        }      }, +    "execa": { +      "version": "5.1.1", +      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", +      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", +      "requires": { +        "cross-spawn": "^7.0.3", +        "get-stream": "^6.0.0", +        "human-signals": "^2.1.0", +        "is-stream": "^2.0.0", +        "merge-stream": "^2.0.0", +        "npm-run-path": "^4.0.1", +        "onetime": "^5.1.2", +        "signal-exit": "^3.0.3", +        "strip-final-newline": "^2.0.0" +      }, +      "dependencies": { +        "get-stream": { +          "version": "6.0.1", +          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", +          "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" +        } +      } +    },      "expand-template": {        "version": "2.0.3",        "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -11467,6 +11715,48 @@          "path-exists": "^4.0.0"        }      }, +    "fkill": { +      "version": "8.1.0", +      "resolved": "https://registry.npmjs.org/fkill/-/fkill-8.1.0.tgz", +      "integrity": "sha512-XrPKdURVYoXerpYx+zhhaXrO9vHVflnGD4JhwjOwg03vKwyOH6eZ+EY69aKDD+q1EbCzviVmD+9OG9rwQy+z/A==", +      "requires": { +        "aggregate-error": "^4.0.0", +        "execa": "^5.1.1", +        "pid-port": "^0.2.0", +        "process-exists": "^4.1.0", +        "ps-list": "^7.2.0", +        "taskkill": "^4.0.0" +      }, +      "dependencies": { +        "aggregate-error": { +          "version": "4.0.1", +          "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", +          "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", +          "requires": { +            "clean-stack": "^4.0.0", +            "indent-string": "^5.0.0" +          } +        }, +        "clean-stack": { +          "version": "4.2.0", +          "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", +          "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", +          "requires": { +            "escape-string-regexp": "5.0.0" +          } +        }, +        "escape-string-regexp": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", +          "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" +        }, +        "indent-string": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", +          "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" +        } +      } +    },      "flat": {        "version": "5.0.2",        "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -11847,6 +12137,11 @@          "debug": "4"        }      }, +    "human-signals": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", +      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" +    },      "humanize-ms": {        "version": "1.2.1",        "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -12047,6 +12342,11 @@        "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",        "dev": true      }, +    "is-stream": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", +      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" +    },      "is-unicode-supported": {        "version": "0.1.0",        "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -12482,6 +12782,11 @@          "timers-ext": "^0.1.7"        }      }, +    "merge-stream": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", +      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" +    },      "merge2": {        "version": "1.4.1",        "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -13061,6 +13366,14 @@        "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",        "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="      }, +    "npm-run-path": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", +      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", +      "requires": { +        "path-key": "^3.0.0" +      } +    },      "npmlog": {        "version": "6.0.2",        "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", @@ -13289,6 +13602,14 @@        "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",        "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="      }, +    "pid-port": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/pid-port/-/pid-port-0.2.0.tgz", +      "integrity": "sha512-xVU9H1FCRSeGrD9Oim5bLg2U7B2BgW0qzK2oahpV5BIf9hwzqQaWyOkOVC0Kgbsc90A9x6525beawx+QK+JduQ==", +      "requires": { +        "execa": "^5.1.1" +      } +    },      "pify": {        "version": "2.3.0",        "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -13405,6 +13726,21 @@        "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",        "dev": true      }, +    "process-exists": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/process-exists/-/process-exists-4.1.0.tgz", +      "integrity": "sha512-BBJoiorUKoP2AuM5q/yKwIfT1YWRHsaxjW+Ayu9erLhqKOfnXzzVVML0XTYoQZuI1YvcWKmc1dh06DEy4+KzfA==", +      "requires": { +        "ps-list": "^6.3.0" +      }, +      "dependencies": { +        "ps-list": { +          "version": "6.3.0", +          "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz", +          "integrity": "sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA==" +        } +      } +    },      "process-nextick-args": {        "version": "2.0.1",        "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -13452,6 +13788,11 @@        "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",        "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="      }, +    "ps-list": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz", +      "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==" +    },      "pump": {        "version": "3.0.0",        "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -14011,6 +14352,11 @@          "ansi-regex": "^6.0.1"        }      }, +    "strip-final-newline": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", +      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" +    },      "strip-json-comments": {        "version": "3.1.1",        "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -14211,6 +14557,15 @@          }        }      }, +    "taskkill": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/taskkill/-/taskkill-4.0.0.tgz", +      "integrity": "sha512-h+BGQ8ExIUZ81h4iHRvatZY5eeBBl2WZk31MmMdFG9LBTc5eCH5u/bzZ7phaPH3bsiB7WhM7YTkOyB2dyFQfXg==", +      "requires": { +        "arrify": "^3.0.0", +        "execa": "^5.1.1" +      } +    },      "text-table": {        "version": "0.2.0",        "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", diff --git a/extension/package.json b/extension/package.json index 08f5f081..93649e3a 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.97", +  "version": "0.0.99",    "publisher": "Continue",    "engines": {      "vscode": "^1.74.0" @@ -244,6 +244,7 @@      "@vitejs/plugin-react-swc": "^3.3.2",      "axios": "^1.2.5",      "downshift": "^7.6.0", +    "fkill": "^8.1.0",      "highlight.js": "^11.7.0",      "posthog-js": "^1.63.3",      "react-markdown": "^8.0.7", diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts index f1aace77..1593153c 100644 --- a/extension/src/activation/environmentSetup.ts +++ b/extension/src/activation/environmentSetup.ts @@ -8,6 +8,7 @@ import rebuild from "@electron/rebuild";  import { getContinueServerUrl } from "../bridge";  import fetch from "node-fetch";  import * as vscode from "vscode"; +import fkill from "fkill";  const MAX_RETRIES = 5;  async function retryThenFail( @@ -82,16 +83,14 @@ async function getPythonPipCommands() {    return [pythonCmd, pipCmd];  } -function getActivateUpgradeTouchCommands(pythonCmd: string, pipCmd: string) { +function getActivateUpgradeCommands(pythonCmd: string, pipCmd: string) {    let activateCmd = ". env/bin/activate";    let pipUpgradeCmd = `${pipCmd} install --upgrade pip`; -  let touchCmd = "touch .continue_env_installed";    if (process.platform == "win32") {      activateCmd = ".\\env\\Scripts\\activate";      pipUpgradeCmd = `${pythonCmd} -m pip install --upgrade pip`; -    touchCmd = "ni .continue_env_installed -type file";    } -  return [activateCmd, pipUpgradeCmd, touchCmd]; +  return [activateCmd, pipUpgradeCmd];  }  function checkEnvExists() { @@ -144,8 +143,10 @@ async function setupPythonEnv() {    console.log("Setting up python env for Continue extension...");    const [pythonCmd, pipCmd] = await getPythonPipCommands(); -  const [activateCmd, pipUpgradeCmd, touchCmd] = -    getActivateUpgradeTouchCommands(pythonCmd, pipCmd); +  const [activateCmd, pipUpgradeCmd] = getActivateUpgradeCommands( +    pythonCmd, +    pipCmd +  );    if (checkEnvExists()) {      console.log("Python env already exists, skipping..."); @@ -245,15 +246,38 @@ async function checkServerRunning(serverUrl: string): Promise<boolean> {    }  } -export async function startContinuePythonServer() { -  await setupPythonEnv(); +function serverVersionPath(): string { +  const extensionPath = getExtensionUri().fsPath; +  return path.join(extensionPath, "server_version.txt"); +} +function getExtensionVersion() { +  const extension = vscode.extensions.getExtension("continue.continue"); +  return extension?.packageJSON.version || ""; +} + +export async function startContinuePythonServer() {    // Check vscode settings    const serverUrl = getContinueServerUrl();    if (serverUrl !== "http://localhost:65432") {      return;    } +  if (await checkServerRunning(serverUrl)) { +    // Kill the server if it is running an old version +    if (fs.existsSync(serverVersionPath())) { +      const serverVersion = fs.readFileSync(serverVersionPath(), "utf8"); +      if (serverVersion === getExtensionVersion()) { +        return; +      } +    } +    console.log("Killing old server..."); +    await fkill(":65432"); +  } + +  // Do this after above check so we don't have to waste time setting up the env +  await setupPythonEnv(); +    let activateCmd = ". env/bin/activate";    let pythonCmd = "python3";    if (process.platform == "win32") { @@ -269,8 +293,6 @@ export async function startContinuePythonServer() {    return await retryThenFail(async () => {      console.log("Starting Continue python server..."); -    if (await checkServerRunning(serverUrl)) return; -      return new Promise(async (resolve, reject) => {        try {          const child = spawn(command, { @@ -293,6 +315,9 @@ export async function startContinuePythonServer() {          child.on("error", (error: any) => {            console.log(`error: ${error.message}`);          }); + +        // Write the current version of vscode to a file called server_version.txt +        fs.writeFileSync(serverVersionPath(), getExtensionVersion());        } catch (e) {          console.log("Failed to start Continue python server", e);          // If failed, check if it's because the server is already running (might have happened just after we checked above) | 
