From a2739542569862a09328d48c164a24d9e30ca233 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Fri, 8 Aug 2025 11:33:44 +0100 Subject: [PATCH] chore(cursor): remove force install from vsix for Cursor override Cursor can now install extensions via ID through it's `cursor` CLI command. So let's do that by default, and fallback to downloading vsix files if the extension ID approach fails, like we do with VSCode. --- CLAUDE.md | 2 +- extensions.cursor.lock | 35 ++++++++++++++-------------- siren | 53 ++++++++++++++++++++---------------------- 3 files changed, 43 insertions(+), 47 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index a1de28b..ade964c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -47,7 +47,7 @@ editor experience with custom keybindings, settings, and extensions. - Config files are symlinked to appropriate editor directories based on OS - Extensions are managed via lock files with version pinning -- Cursor uses .vsix installation due to signature verification issues +- Extensions install directly by ID with fallback to .vsix when needed - Static symlinks for additional files like cspell dictionary and MCP config ### Key Features diff --git a/extensions.cursor.lock b/extensions.cursor.lock index 75bb173..3e05a63 100644 --- a/extensions.cursor.lock +++ b/extensions.cursor.lock @@ -1,8 +1,8 @@ # cursor Extensions -# Generated on Fri Aug 8 10:16:32 BST 2025 +# Generated on Fri Aug 8 11:21:01 BST 2025 alefragnani.project-manager@12.8.0 -anthropic.claude-code@1.0.68 +anthropic.claude-code@1.0.71 antiantisepticeye.vscode-color-picker@0.0.4 antyos.openscad@1.3.2 anysphere.cpptools@2.0.2 @@ -19,20 +19,20 @@ bierner.markdown-checkbox@0.4.0 bierner.markdown-emoji@0.3.1 bierner.markdown-footnotes@0.1.1 bierner.markdown-mermaid@1.28.0 -bierner.markdown-preview-github-styles@2.2.0 +bierner.markdown-preview-github-styles@0.1.6 bierner.markdown-yaml-preamble@0.1.0 bodil.file-browser@0.2.11 britesnow.vscode-toggle-quotes@0.3.6 bufbuild.vscode-buf@0.7.2 -carlos-algms.make-task-provider@2.5.1 -christian-kohler.path-intellisense@2.10.0 +carlos-algms.make-task-provider@2.4.2 +christian-kohler.path-intellisense@2.8.0 connor4312.esbuild-problem-matchers@0.0.3 -connorshea.vscode-ruby-test-adapter@0.9.2 +connorshea.vscode-ruby-test-adapter@0.9.0 ctf0.macros@1.1.1 davidanson.vscode-markdownlint@0.60.0 dbaeumer.vscode-eslint@3.0.16 dewski.simplecov@0.0.7 -dnut.rewrap-revived@17.9.0 +dnut.rewrap-revived@1.16.3 editorconfig.editorconfig@0.17.4 elijah-potter.harper@0.56.0 emeraldwalk.runonsave@0.3.2 @@ -42,12 +42,12 @@ fogio.inline-go-struct-tags-syntax-highlight@1.0.0 github.vscode-github-actions@0.27.2 github.vscode-pull-request-github@0.108.0 gofenix.go-lines@0.0.10 -golang.go@0.49.0 -gruntfuggly.todo-tree@0.0.226 -hashicorp.terraform@2.34.2025012311 +golang.go@0.48.0 +gruntfuggly.todo-tree@0.0.215 +hashicorp.terraform@2.34.5 hbenl.vscode-test-explorer@2.22.1 hoovercj.vscode-settings-cycler@1.0.1 -humao.rest-client@0.25.1 +humao.rest-client@0.25.0 hverlin.mise-vscode@0.53.0 jakearl.search-editor-apply-changes@0.1.1 jnoortheen.nix-ide@0.4.22 @@ -56,23 +56,22 @@ joshmu.periscope@1.13.1 kahole.magit@0.6.67 karunamurti.haml@1.4.1 kilocode.kilo-code@4.78.0 -koichisasada.vscode-rdbg@0.2.2 +koichisasada.vscode-rdbg@0.2.1 letrieu.expand-region@0.1.4 llvm-vs-code-extensions.vscode-clangd@0.2.0 m4ns0ur.base64@1.0.0 mads-hartmann.bash-ide-vscode@1.43.0 matthewpi.caddyfile-support@0.4.0 mattn.lisp@0.1.12 -mermaidchart.vscode-mermaid-chart@2.5.0 +mermaidchart.vscode-mermaid-chart@2.3.0 mhutchie.git-graph@1.30.0 mkhl.direnv@0.17.0 mrmlnc.vscode-duplicate@1.2.1 ms-azuretools.vscode-containers@2.1.0 ms-dotnettools.vscode-dotnet-runtime@2.3.6 ms-kubernetes-tools.vscode-kubernetes-tools@1.3.25 -ms-python.debugpy@2025.11.2025072901 +ms-python.debugpy@2025.6.0 ms-python.python@2025.6.1 -ms-python.vscode-pylance@2024.8.1 ms-vscode.cmake-tools@1.21.36 ms-vscode.extension-test-runner@0.0.12 ms-vscode.hexeditor@1.11.1 @@ -85,12 +84,12 @@ redhat.vscode-xml@0.29.0 redhat.vscode-yaml@1.18.0 romanpeshkov.vscode-text-tables@0.1.5 rrudi.vscode-dired@0.0.9 -rust-lang.rust-analyzer@0.4.2557 +rust-lang.rust-analyzer@0.3.2563 shopify.ruby-extensions-pack@0.1.13 shopify.ruby-lsp@0.9.31 sidneys1.gitconfig@2.0.1 sorbet.sorbet-vscode-extension@0.3.45 -streetsidesoftware.code-spell-checker@4.2.3 +streetsidesoftware.code-spell-checker@4.0.47 stuart.unique-window-colors@1.0.51 sumneko.lua@3.15.0 svelte.svelte-vscode@109.10.1 @@ -99,7 +98,7 @@ swellaby.workspace-config-plus@0.2.5 tamasfe.even-better-toml@0.21.2 tootone.org-mode@0.5.0 tuttieee.emacs-mcx@0.88.10 -tyriar.sort-lines@1.12.0 +tyriar.sort-lines@1.9.1 vadimcn.vscode-lldb@1.11.5 viktorzetterstrom.non-breaking-space-highlighter@0.0.3 zhuangtongfa.material-theme@3.19.0 diff --git a/siren b/siren index 4cfc120..f38f6d0 100755 --- a/siren +++ b/siren @@ -1020,53 +1020,50 @@ install_extension() { local current_version current_version="$(get_installed_version "${editor_cmd}" "${extension}")" + local target_version="${version}" if [[ "${use_latest}" != "false" ]]; then - if [[ -n "${current_version}" && "${use_latest}" != "force" ]]; then - echo "Extension ${extension} is already installed" \ - "(current: ${current_version}), skipping" - return 0 - fi - - info "Checking latest version for ${extension}..." - local latest_version - latest_version=$(query_latest_version "${extension}") - if [[ -n "${latest_version}" ]]; then - info " - Latest available version: ${latest_version}" - version="${latest_version}" - else - error "Could not determine latest version for ${extension}" - return 1 - fi + target_version="latest" fi if [[ -z "${current_version}" ]]; then # Extension not installed. - info "Installing ${extension}@${version}" + info "Installing ${extension}@${target_version}" elif [[ "${current_version}" == "${version}" ]]; then # Exact version already installed. info "Extension ${extension}@${version} is already installed, skipping" return 0 - else + elif [[ "${target_version}" != "latest" ]]; then # Wrong version installed, need to force install. info "Extension ${extension} has wrong version installed" \ "(current: ${current_version}, wanted: ${version})," \ "force-installing ${version}" force_install="true" - fi - - # For Cursor we need to download and install from `*.vsix` file, as - # installation via ID fails with a signature verification error. - if [[ "${SETUP_EDITOR}" == "cursor" ]]; then - install_extension_via_vsix "${editor_cmd}" "${extension}" "${version}" \ - "${extensions_cache_dir}" + else + info "Extension ${extension} is already installed" \ + "(current: ${current_version}), skipping" return 0 fi + # Try direct installation first; fall back to downloading `*.vsix` if needed. if ! install_extension_direct "${editor_cmd}" "${extension}" \ - "${version}" "${force_install}"; then + "${target_version}" "${force_install}"; then + + if [[ "${use_latest}" != "false" ]]; then + info "Checking latest version for ${extension}..." + local latest_version + latest_version=$(query_latest_version "${extension}") + if [[ -n "${latest_version}" ]]; then + info " - Latest available version: ${latest_version}" + version="${latest_version}" + else + error "Could not determine latest version for ${extension}" + return 1 + fi + fi + warn "Direct installation failed, trying .vsix download method..." - install_extension_via_vsix "${editor_cmd}" "${extension}" "${version}" \ - "${extensions_cache_dir}" + install_extension_via_vsix "${editor_cmd}" "${extension}" \ + "${version}" "${extensions_cache_dir}" fi # Clean up extensions directory if empty