pub async fn ExtensionsGetInstalled(
RunTime: Arc<ApplicationRunTime>,
Arguments: Vec<Value>,
) -> Result<Value, String>Expand description
Return scanned extensions reshaped as VS Code’s ILocalExtension[]
so ExtensionManagementChannelClient.getInstalled can destructure
extension.identifier.id, extension.manifest.*, and
extension.location without blowing up.
§Argument contract
Arguments[0] is the optional ExtensionType filter VS Code passes in:
0(System) → only return built-in extensions.1(User) → only return VSIX-installed extensions.null/ missing → return every known extension.
Previously this filter was silently dropped and every call returned the
full list hardcoded as type: 0, isBuiltin: true. That produced three
cascading symptoms:
- VSIX-installed extensions (e.g.
Anthropic.claude-code) showed up under “Built-in” in the Extensions sidebar and had no Uninstall action because the UI keys offtype === User. - The trusted-publishers boot migration iterated every extension as User
and attempted
manifest.publisher.toLowerCase()against System manifests. extensions:scanUserExtensions(which shares the user-only semantic) returned zero, making the “Install from VSIX…” refresh appear to do nothing even when the install itself succeeded.