continuedev/continue · error · Error

${encodePackageSlug(...) or encodePackageIdentifier(blockIde

Error message

${encodePackageSlug(...) or encodePackageIdentifier(blockIdentifier)} is block listed and can not be used.

What it means

During unrollBlocks, a referenced block's identifier matched the blocklist (or failed the allowlist) per isPackageAllowed, so expansion is refused with the offending encoded slug.

Source

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

      return { section, blocks: null };
    }

    // Process all blocks in this section in parallel
    const blockPromises = assistant[section].map(
      async (unrolledBlock, index) => {
        // "uses/with" block
        if ("uses" in unrolledBlock) {
          try {
            const blockIdentifier = decodePackageIdentifier(unrolledBlock.uses);

            if (
              !isPackageAllowed(
                blockIdentifier,
                allowlistedBlocks,
                blocklistedBlocks,
              )
            ) {
              throw new Error(
                `${
                  blockIdentifier.uriType === "slug"
                    ? encodePackageSlug({
                        ownerSlug: blockIdentifier.fullSlug.ownerSlug,
                        packageSlug: blockIdentifier.fullSlug.packageSlug,
                      })
                    : encodePackageIdentifier(blockIdentifier)
                } is block listed and can not be used.`,
              );
            }

            const blockConfigYaml = await resolveBlock(
              blockIdentifier,
              unrolledBlock.with,
              registry,
            );
            const block = blockConfigYaml[section]?.[0];
            if (block) {

View on GitHub (pinned to 5522c6f44c)

Solutions

  1. Remove the blocklisted block reference from your config or substitute an allowed block
  2. If the block is legitimately needed, ask the config owner to remove it from blocklistedBlocks / add it to allowlistedBlocks
  3. Double-check the slug spelling — an unintended match can trigger the blocklist

Example fix

// before
blocks:
  - some-block: evil-owner/bad-block
# after
blocks:
  - some-block: trusted-owner/good-block
Defensive patterns

Strategy: validation

Validate before calling

import { isPackageAllowed } from '...';
const allowed = isPackageAllowed(blockIdentifier, allowlistedBlocks, blocklistedBlocks);

Try / catch

try { parseConfigYaml(yaml); } catch (e) { if (e.message.includes('block listed')) { /* swap or allow the block */ } }

Prevention

When it happens

Trigger: Config references a block whose owner/package slug appears in blocklistedBlocks, or an allowlist is configured and the block is not on it, then parse/unroll runs.

Common situations: Security/policy restriction on third-party blocks, a typo'd slug accidentally matching a blocklist pattern, or inheriting allowlist config from a stricter environment.

Related errors


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