Skip to main content

ExtensionsGetInstalled

Function ExtensionsGetInstalled 

Source
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:

  1. 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 off type === User.
  2. The trusted-publishers boot migration iterated every extension as User and attempted manifest.publisher.toLowerCase() against System manifests.
  3. 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.