continuedev/continue · error · Error

Block ${packageIdentifierToShorthandSlug(id)} not found

Error message

Block ${packageIdentifierToShorthandSlug(id)} not found

What it means

resolveBlock fetched content for the block identifier from the registry and got undefined, meaning no content exists for that id. The shorthand slug (owner/package or file path) is included in the message.

Source

Thrown at packages/config-yaml/src/load/unroll.ts:728

    });
  }
  // For other block types, we can directly inject the source file
  return blocks.map((block) => ({
    ...block,
    sourceFile: source,
  }));
}

export async function resolveBlock(
  id: PackageIdentifier,
  inputs: Record<string, string | undefined> | undefined,
  registry: Registry,
): Promise<AssistantUnrolled> {
  // Retrieve block raw yaml
  const rawYaml = await registry.getContent(id);

  if (rawYaml === undefined) {
    throw new Error(`Block ${packageIdentifierToShorthandSlug(id)} not found`);
  }

  // Convert any input secrets to FQSNs (they get FQSNs as if they are in the block. This is so that we know when to use models add-on / free trial secrets)
  const renderedInputs = inputsToFQSNs(inputs || {}, id);

  // Render template variables
  const templatedYaml = renderTemplateData(rawYaml, {
    inputs: renderedInputs,
    secrets: extractFQSNMap(rawYaml, [id]),
  });

  // Check for unresolved input template variables (missing required inputs)
  const unresolvedInputs = getTemplateVariables(templatedYaml).filter((v) =>
    v.startsWith("inputs."),
  );
  if (unresolvedInputs.length > 0) {
    const missingInputNames = unresolvedInputs.map((v) =>
      v.replace("inputs.", ""),

View on GitHub (pinned to 5522c6f44c)

Solutions

  1. Verify the block exists: check the slug spelling and the registry contents
  2. If it's a file URI, confirm the file exists at the resolved path
  3. Ensure you're pointed at the correct registry/environment

Example fix

// before
blocks:
  - some-block: my-owner/typo-block
# after
blocks:
  - some-block: my-owner/real-block
Defensive patterns

Strategy: validation

Validate before calling

const content = await registry.getContent(id);
if (content === undefined) throw new Error(`Unknown block ${encodePackageIdentifier(id)}`);

Try / catch

try { await resolveBlock(id, inputs, registry); } catch (e) { if (e.message.includes('not found')) { /* prompt user to fix slug/path */ } }

Prevention

When it happens

Trigger: resolveBlock(id, ...) where registry.getContent(id) returns undefined — unknown owner/package slug, or a file URI pointing at a nonexistent file with a registry that returns undefined instead of throwing.

Common situations: Typo in block slug, block deleted/renamed upstream in the registry, wrong registry configured, or a relative file path that doesn't resolve.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of continuedev/continue@5522c6f44c (2026-08-27). Data as JSON: /api/errors/3c8151cbbaa831e7. Report an issue: GitHub.