NousResearch/hermes-agent · error · Error

Extension "${id}" was not found on the Marketplace.

Error message

Extension "${id}" was not found on the Marketplace.

What it means

Thrown by resolveExtension() in the desktop app's VS Code Marketplace client when a gallery query for a publisher.extension id (FilterType 7 = ExtensionName, pageSize 1, flags 914) returns a result set whose first result has no extension entry. The Marketplace call itself succeeded but found nothing for that exact id.

Source

Thrown at apps/desktop/electron/vscode-marketplace.ts:107

    req.end()
  })
}

/** Resolve `{ displayName, vsixUrl }` for the latest version of `id`. */
async function resolveExtension(id) {
  const json = await queryGallery({
    // FilterType 7 = ExtensionName (the full publisher.extension id).
    filters: [{ criteria: [{ filterType: 7, value: id }], pageNumber: 1, pageSize: 1 }],
    // Flags: IncludeFiles | IncludeVersionProperties | IncludeAssetUri |
    // IncludeCategoryAndTags | IncludeLatestVersionOnly = 914.
    flags: 914
  })

  const extension = json?.results?.[0]?.extensions?.[0]

  if (!extension) {
    throw new Error(`Extension "${id}" was not found on the Marketplace.`)
  }

  const version = extension.versions?.[0]

  if (!version) {
    throw new Error(`Extension "${id}" has no published versions.`)
  }

  const asset = (version.files ?? []).find(file => file.assetType === VSIX_ASSET_TYPE)
  const vsixUrl = asset?.source

  if (!vsixUrl) {
    throw new Error(`Could not find a downloadable package for "${id}".`)
  }

  return { displayName: extension.displayName || id, vsixUrl }
}

View on GitHub (pinned to c896c09c42)

Solutions

  1. Verify the exact publisher.extension id on the Visual Studio Marketplace site and correct it.
  2. If the extension was pulled/renamed, update the app's extension list to the successor id.
  3. Check network/proxy: confirm the gallery query reached the real Marketplace endpoint and wasn't blocked or rewritten.
  4. For OpenVSX-only extensions, use an OpenVSX-aware resolution path instead of the MS gallery.

Example fix

// before
await resolveExtension('ms-python.python ')

// after
await resolveExtension('ms-python.python')
Defensive patterns

Strategy: validation

Validate before calling

const EXTENSION_ID_RE = /^[\w.-]+\.[\w.-]+$/

function isWellFormedExtensionId(id: string): boolean {
  const t = id.trim()
  return EXTENSION_ID_RE.test(t) && !t.includes(' ')
}

if (!isWellFormedExtensionId(id)) rejectInput('expected a publisher.extension id')

Type guard

function isExtensionId(id: unknown): id is string {
  return typeof id === 'string' && /^[\w.-]+\.[\w.-]+$/.test(id.trim())
}

Try / catch

try {
  return await resolveExtension(id)
} catch (e) {
  if (e instanceof Error && e.message.includes('was not found on the Marketplace')) {
    return { skipped: id, reason: 'not-found' } // degrade to a skip entry, continue the batch
  }
  throw e
}

Prevention

When it happens

Trigger: Calling resolveExtension(id) with a typo'd, unpublished, unlisted, or withdrawn extension id; an id with wrong casing/separator such that exact ExtensionName matching fails; a proxy returning a cached empty response.

Common situations: A hardcoded extension list containing an id that was renamed or removed from the Marketplace; user-supplied id with a typo or stray space; an extension published only to OpenVSX, not the MS Marketplace.

Related errors


AI-assisted analysis of NousResearch/hermes-agent@c896c09c42 (2026-08-14). Data as JSON: /api/errors/aab10ab51627393d. Report an issue: GitHub.