{"record":{"id":"e463ed2bfa79a479","repo":"can1357/oh-my-pi","slug":"marketplace-marketplace-not-found","errorCode":null,"errorMessage":"Marketplace \"${marketplace}\" not found","messagePattern":"Marketplace \"(.+?)\" not found","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/extensibility/plugins/marketplace/manager.ts","lineNumber":220,"sourceCode":"\t\t\tresults.push(updated);\n\t\t}\n\t\treturn results;\n\t}\n\n\tasync listMarketplaces(): Promise<MarketplaceRegistryEntry[]> {\n\t\tconst reg = await readMarketplacesRegistry(this.#opts.marketplacesRegistryPath);\n\t\treturn reg.marketplaces;\n\t}\n\n\t// ── Plugin discovery ──────────────────────────────────────────────────────\n\n\tasync listAvailablePlugins(marketplace?: string): Promise<MarketplacePluginEntry[]> {\n\t\tconst reg = await readMarketplacesRegistry(this.#opts.marketplacesRegistryPath);\n\n\t\tif (marketplace !== undefined) {\n\t\t\tconst entry = reg.marketplaces.find(m => m.name === marketplace);\n\t\t\tif (!entry) {\n\t\t\t\tthrow new Error(`Marketplace \"${marketplace}\" not found`);\n\t\t\t}\n\t\t\tconst catalog = await this.#readCatalog(entry);\n\t\t\treturn catalog.plugins;\n\t\t}\n\n\t\tconst all: MarketplacePluginEntry[] = [];\n\t\tfor (const entry of reg.marketplaces) {\n\t\t\tconst catalog = await this.#readCatalog(entry);\n\t\t\tall.push(...catalog.plugins);\n\t\t}\n\t\treturn all;\n\t}\n\n\tasync getPluginInfo(name: string, marketplace: string): Promise<MarketplacePluginEntry | null> {\n\t\tconst plugins = await this.listAvailablePlugins(marketplace);\n\t\treturn plugins.find(p => p.name === name) ?? null;\n\t}\n","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/extensibility/plugins/marketplace/manager.ts#L202-L238","documentation":"listAvailablePlugins(marketplace) filters the plugin listing to a single registered marketplace; it throws this when the given marketplace name has no entry in the registry. With no argument it lists across all marketplaces and cannot throw this error.","triggerScenarios":"MarketplaceManager.listAvailablePlugins(\"some-name\") called with a name absent from the marketplaces registry — typo, wrong casing, or a marketplace that was removed or never added.","commonSituations":"Typing a marketplace name in a slash command or script with a spelling/case mismatch; querying a marketplace in a fresh checkout where only the built-in marketplace is registered; the marketplace was removed previously.","solutions":["List registered marketplaces first and pass an exact registered name (or omit the argument to list all plugins).","Add the marketplace with addMarketplace if it does not exist yet.","Fix casing/typos — matching is exact (m.name === marketplace)."],"exampleFix":"// before\nawait manager.listAvailablePlugins(\"Community\");\n// after: exact registered name, or all marketplaces\nconst plugins = await manager.listAvailablePlugins(\"community\");\n// or: await manager.listAvailablePlugins();","handlingStrategy":"validation","validationCode":"const reg = JSON.parse(await Bun.file(registryPath).text());\nif (marketplace && !reg.marketplaces.some(m => m.name === marketplace)) {\n  throw new Error(`Unknown marketplace \"${marketplace}\". Known: ${reg.marketplaces.map(m => m.name).join(\", \")}`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  const plugins = await manager.listAvailablePlugins(name);\n} catch (err) {\n  if ((err as Error).message.includes(\"not found\")) {\n    const all = await manager.listAvailablePlugins(); // fall back to all marketplaces\n  } else throw err;\n}","preventionTips":["Omit the argument to list plugins across all marketplaces when unsure of the name.","Validate user-supplied marketplace names against the registry before querying.","Use exact registered names — matching is case-sensitive."],"tags":["registry","not-found","marketplace","lookup"],"backgroundTag":"entry-not-found","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}