{"record":{"id":"7bd6fa2ec001a55e","repo":"moeru-ai/airi","slug":"extension-manifest-id-does-not-support-runtime-runtime-fs","errorCode":null,"errorMessage":"Extension \\`${manifest.id}\\` does not support runtime \\`${runtime}\\`.","messagePattern":"Extension \\\\`(.+?)\\\\` does not support runtime \\\\`(.+?)\\\\`\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/plugin-sdk/src/plugin-host/runtimes/node/loaders/fs.ts","lineNumber":55,"sourceCode":" *\n * Expects:\n * - Entry points are valid importable module paths for the active runtime\n *\n * Returns:\n * - Filesystem-backed helpers for resolving and loading extension entrypoints\n */\nexport class FileSystemLoader {\n  /**\n   * Resolve a manifest entrypoint for the requested runtime.\n   *\n   * Resolution order:\n   * 1) `entrypoints.<runtime>`\n   * 2) `entrypoints.default`\n   */\n  resolveEntrypointFor(manifest: ExtensionManifestV2, options?: ExtensionLoadOptions) {\n    const runtime = options?.runtime ?? 'electron'\n    if (!manifest.engines.runtimes.includes(runtime)) {\n      throw new Error(`Extension \\`${manifest.id}\\` does not support runtime \\`${runtime}\\`.`)\n    }\n\n    const root = options?.cwd ?? cwd()\n    const entrypoint\n      = manifest.entrypoints[runtime]\n        ?? manifest.entrypoints.default\n\n    if (!entrypoint) {\n      throw new Error(''\n        + `Extension entrypoint is required for runtime \\`${runtime}\\`. `\n        + 'Define `entrypoints.<runtime>` or `entrypoints.default` in the extension manifest.',\n      )\n    }\n\n    return isAbsolute(entrypoint) ? entrypoint : join(root, entrypoint)\n  }\n\n  async loadExtensionFor(manifest: ExtensionManifestV2, options?: ExtensionLoadOptions) {","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/moeru-ai/airi/blob/438a067dde47aa0bdb46c2323d1fe293dc805218/packages/plugin-sdk/src/plugin-host/runtimes/node/loaders/fs.ts#L37-L73","documentation":"The node/fs loader's resolveEntrypointFor picks a runtime (options?.runtime ?? 'electron', defaulting to electron) and requires the manifest to declare it in engines.runtimes before resolving an entrypoint path. If the runtime is absent from the list, resolution is rejected — the same compatibility rule as the plugin host, applied at load time.","triggerScenarios":"Calling resolveEntrypointFor(manifest, options) where manifest.engines.runtimes excludes options.runtime (or the default 'electron').","commonSituations":"Loading an extension built for 'node' with the default electron runtime; omitting options and the manifest only lists non-electron runtimes; runtime string typos in the manifest.","solutions":["Add the target runtime to manifest.engines.runtimes.","Pass options.runtime explicitly to resolveEntrypointFor to match a declared runtime.","Fix typos in the runtimes array so it matches the PluginRuntime union.","Load a manifest variant built for the intended runtime."],"exampleFix":"// before\nresolveEntrypointFor(manifest) // defaults to 'electron'; manifest lists only ['node']\n// after\nresolveEntrypointFor(manifest, { runtime: 'node' })","handlingStrategy":"validation","validationCode":"const runtime = options?.runtime ?? 'electron'\nif (!manifest.engines.runtimes.includes(runtime))\n  return null // skip extension instead of loading","typeGuard":null,"tryCatchPattern":"try {\n  const entry = await loader.resolveEntrypointFor(manifest, { runtime: 'node' })\n} catch (e) {\n  if (e.message.includes('does not support runtime')) continueToNextExtension()\n  else throw e\n}","preventionTips":["Always pass options.runtime explicitly when loading outside the default electron host.","Validate manifests at install time so incompatible ones never reach the loader.","Keep runtimes arrays consistent between manifest variants."],"tags":["plugin-host","loader","runtime-compatibility","manifest"],"backgroundTag":"unsupported-platform","analyzedSha":"438a067dde47aa0bdb46c2323d1fe293dc805218","analyzedAt":"2026-09-17T01:14:42.644Z","contentChangedAt":"2026-09-17T01:14:42.644Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}