moeru-ai/airi · error · Error

Extension entrypoint is required for runtime \

Error message

Extension entrypoint is required for runtime \`${runtime}\`. Define \`entrypoints.<runtime>\` or \`entrypoints.default\` in the extension manifest.

What it means

resolveEntrypointFor resolves manifest.entrypoints[runtime] ?? manifest.entrypoints.default. If neither exists, there is no executable entry to load for that runtime, so it throws. This is the manifest-shape error as opposed to the compatibility error: the runtime is supported but no entrypoint path was declared.

Solutions

  1. Add entrypoints.default to the manifest pointing at the built entry file.
  2. Add an entrypoints.<runtime> key for the specific runtime being loaded.
  3. Fix key typos in the entrypoints object.
  4. Regenerate the manifest with the extension build tool so entrypoints are populated.

Example fix

// before
"entrypoints": { "node": "./dist/index.js" } // loading with runtime 'electron'
// after
"entrypoints": { "node": "./dist/index.js", "default": "./dist/index.js" }
Defensive patterns

Strategy: validation

Validate before calling

const ep = manifest.entrypoints[runtime] ?? manifest.entrypoints.default
if (!ep) throw new Error(`manifest ${manifest.id} has no entrypoint for ${runtime}`)

Try / catch

try {
  const entry = await loader.resolveEntrypointFor(manifest)
} catch (e) {
  if (e.message.includes('entrypoint is required')) flagBrokenManifest(manifest.id)
  else throw e
}

Prevention

When it happens

Trigger: resolveEntrypointFor with a manifest whose entrypoints object lacks both a key for the resolved runtime and a 'default' key.

Common situations: A manifest declaring runtimes but never filling entrypoints; an entrypoint key typo (e.g. 'electorn'); a manifest generated for a different runtime only; hand-written minimal manifests during development.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of moeru-ai/airi@438a067dde (2026-09-17). Data as JSON: /api/errors/1a82143e32348c92. Report an issue: GitHub.

Appendix: source

Thrown at packages/plugin-sdk/src/plugin-host/runtimes/node/loaders/fs.ts:64

   * Resolve a manifest entrypoint for the requested runtime.
   *
   * Resolution order:
   * 1) `entrypoints.<runtime>`
   * 2) `entrypoints.default`
   */
  resolveEntrypointFor(manifest: ExtensionManifestV2, options?: ExtensionLoadOptions) {
    const runtime = options?.runtime ?? 'electron'
    if (!manifest.engines.runtimes.includes(runtime)) {
      throw new Error(`Extension \`${manifest.id}\` does not support runtime \`${runtime}\`.`)
    }

    const root = options?.cwd ?? cwd()
    const entrypoint
      = manifest.entrypoints[runtime]
        ?? manifest.entrypoints.default

    if (!entrypoint) {
      throw new Error(''
        + `Extension entrypoint is required for runtime \`${runtime}\`. `
        + 'Define `entrypoints.<runtime>` or `entrypoints.default` in the extension manifest.',
      )
    }

    return isAbsolute(entrypoint) ? entrypoint : join(root, entrypoint)
  }

  async loadExtensionFor(manifest: ExtensionManifestV2, options?: ExtensionLoadOptions) {
    const entrypoint = this.resolveEntrypointFor(manifest, options)
    const extensionModule = await import(entrypoint)
    return coerceExtensionFromModule(extensionModule)
  }
}

View on GitHub (pinned to 438a067dde)