{"record":{"id":"aab10ab51627393d","repo":"NousResearch/hermes-agent","slug":"extension-id-was-not-found-on-the-marketplace","errorCode":null,"errorMessage":"Extension \"${id}\" was not found on the Marketplace.","messagePattern":"Extension \"(.+?)\" was not found on the Marketplace\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/desktop/electron/vscode-marketplace.ts","lineNumber":107,"sourceCode":"\n    req.end()\n  })\n}\n\n/** Resolve `{ displayName, vsixUrl }` for the latest version of `id`. */\nasync function resolveExtension(id) {\n  const json = await queryGallery({\n    // FilterType 7 = ExtensionName (the full publisher.extension id).\n    filters: [{ criteria: [{ filterType: 7, value: id }], pageNumber: 1, pageSize: 1 }],\n    // Flags: IncludeFiles | IncludeVersionProperties | IncludeAssetUri |\n    // IncludeCategoryAndTags | IncludeLatestVersionOnly = 914.\n    flags: 914\n  })\n\n  const extension = json?.results?.[0]?.extensions?.[0]\n\n  if (!extension) {\n    throw new Error(`Extension \"${id}\" was not found on the Marketplace.`)\n  }\n\n  const version = extension.versions?.[0]\n\n  if (!version) {\n    throw new Error(`Extension \"${id}\" has no published versions.`)\n  }\n\n  const asset = (version.files ?? []).find(file => file.assetType === VSIX_ASSET_TYPE)\n  const vsixUrl = asset?.source\n\n  if (!vsixUrl) {\n    throw new Error(`Could not find a downloadable package for \"${id}\".`)\n  }\n\n  return { displayName: extension.displayName || id, vsixUrl }\n}\n","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/apps/desktop/electron/vscode-marketplace.ts#L89-L125","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Verify the exact publisher.extension id on the Visual Studio Marketplace site and correct it.","If the extension was pulled/renamed, update the app's extension list to the successor id.","Check network/proxy: confirm the gallery query reached the real Marketplace endpoint and wasn't blocked or rewritten.","For OpenVSX-only extensions, use an OpenVSX-aware resolution path instead of the MS gallery."],"exampleFix":"// before\nawait resolveExtension('ms-python.python ')\n\n// after\nawait resolveExtension('ms-python.python')","handlingStrategy":"validation","validationCode":"const EXTENSION_ID_RE = /^[\\w.-]+\\.[\\w.-]+$/\n\nfunction isWellFormedExtensionId(id: string): boolean {\n  const t = id.trim()\n  return EXTENSION_ID_RE.test(t) && !t.includes(' ')\n}\n\nif (!isWellFormedExtensionId(id)) rejectInput('expected a publisher.extension id')","typeGuard":"function isExtensionId(id: unknown): id is string {\n  return typeof id === 'string' && /^[\\w.-]+\\.[\\w.-]+$/.test(id.trim())\n}","tryCatchPattern":"try {\n  return await resolveExtension(id)\n} catch (e) {\n  if (e instanceof Error && e.message.includes('was not found on the Marketplace')) {\n    return { skipped: id, reason: 'not-found' } // degrade to a skip entry, continue the batch\n  }\n  throw e\n}","preventionTips":["Validate the publisher.extension shape and trim input before querying the gallery.","Curate hardcoded extension lists against the live Marketplace in CI so dead ids fail builds, not users.","Remember the MS gallery and OpenVSX have different catalogs — check the right one."],"tags":["marketplace","vscode","extension","network"],"backgroundTag":null,"analyzedSha":"c896c09c42910c584c4c7d2325b58c14713ea42c","analyzedAt":"2026-08-14T17:18:01.089Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}