Updating external plugins broken for manual and AutoUpdates
- Dominant language
- TypeScript
- Stars
- 193k
- Forks
- 42.4k
- PR merge metrics
- PR metrics pending
Description
Does this issue occur when all extensions are disabled?: Yes/No
- VS Code Version:
- OS Version:
VS Code’s agent-plugin auto-update is effectively broken for plugins whose source is an external Git repository.
Manual and forced **Update Plugins** use a source-change gate and therefore do not update unchanged external sources. The checker examines only whether the parent marketplace repository is behind and never checks external repositories directly; after pulling the marketplace, external plugins are updated only when `source.ref`, `source.sha`, or `source.path` changes, and changes to repository contents or the plugin/marketplace `version` are ignored. But changes to ref/sha/path are not helping either:
- changing `ref` or `sha` selects a new cache directory, but the update path refuses to clone when that directory does not already exist
- changing `path` reuses and pulls the repository but writes the updated metadata using the old `pluginUri`, leaving `~/.vscode/agent-plugins/installed.json` pointing to the obsolete path.
Change in the plugin’s top-level `version` in the marketplace is not considered.
Managed `autoUpdate: true` only makes the marketplace eligible; the check runs at most once every 24 hours after global idle, persists that schedule across restarts, and may defer on metered connections.
As a result, external plugins cannot be updated reliably through either automatic or bulk manual updates, and users must uninstall/reinstall them, manually alter cached files, or vendors must place plugins directly inside the marketplace repository.
Also, successful, skipped, and no-update checks are not logged, while failure notifications may point to the unrelated Git output channel.
Steps to Reproduce:
1. Add a plugin defined in a different repository to the plugin marketplace, eg.
{
*marketplace metadata*,
"plugins": [
{
"name": "test-plugin",
"description": "test-plugin",
"version": "2.0.0",
"source": {
"source": "url",
"url": "ssh://org-111111111@github.com/org-name/repo-name.git",
"ref": "master"
}
}
]
}
2. Install the plugin in VSCode
3. Update the plugin in its repository (which is different from the markteplace repository)
4. Manually call update plugins command in VSCode and see that VS Code did not update it, even after using workarounds as changing sha or path (which is not helping, as described above)
Durable fixes needed in VS Code are:
1. Check external repositories independently of the marketplace repository.
2. Allow manual force to bypass `hasSourceChanged()`.
3. Clone/ensure a source when changed `ref` or `sha` resolves to a new cache directory.
4. Replace the old installed URI with the newly calculated URI when `path`, `ref`, or `sha` changes.
5. Add start/result/skip logging for scheduled plugin updates.
Contributor guide
Assessment
This issue has not been assessed yet.