{"record":{"id":"3c8151cbbaa831e7","repo":"continuedev/continue","slug":"block-packageidentifiertoshorthandslug-id-not","errorCode":null,"errorMessage":"Block ${packageIdentifierToShorthandSlug(id)} not found","messagePattern":"Block (.+?) not found","errorType":"error_code","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/config-yaml/src/load/unroll.ts","lineNumber":728,"sourceCode":"    });\n  }\n  // For other block types, we can directly inject the source file\n  return blocks.map((block) => ({\n    ...block,\n    sourceFile: source,\n  }));\n}\n\nexport async function resolveBlock(\n  id: PackageIdentifier,\n  inputs: Record<string, string | undefined> | undefined,\n  registry: Registry,\n): Promise<AssistantUnrolled> {\n  // Retrieve block raw yaml\n  const rawYaml = await registry.getContent(id);\n\n  if (rawYaml === undefined) {\n    throw new Error(`Block ${packageIdentifierToShorthandSlug(id)} not found`);\n  }\n\n  // 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)\n  const renderedInputs = inputsToFQSNs(inputs || {}, id);\n\n  // Render template variables\n  const templatedYaml = renderTemplateData(rawYaml, {\n    inputs: renderedInputs,\n    secrets: extractFQSNMap(rawYaml, [id]),\n  });\n\n  // Check for unresolved input template variables (missing required inputs)\n  const unresolvedInputs = getTemplateVariables(templatedYaml).filter((v) =>\n    v.startsWith(\"inputs.\"),\n  );\n  if (unresolvedInputs.length > 0) {\n    const missingInputNames = unresolvedInputs.map((v) =>\n      v.replace(\"inputs.\", \"\"),","sourceCodeStart":710,"sourceCodeEnd":746,"githubUrl":"https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/packages/config-yaml/src/load/unroll.ts#L710-L746","documentation":"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.","triggerScenarios":"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.","commonSituations":"Typo in block slug, block deleted/renamed upstream in the registry, wrong registry configured, or a relative file path that doesn't resolve.","solutions":["Verify the block exists: check the slug spelling and the registry contents","If it's a file URI, confirm the file exists at the resolved path","Ensure you're pointed at the correct registry/environment"],"exampleFix":"// before\nblocks:\n  - some-block: my-owner/typo-block\n# after\nblocks:\n  - some-block: my-owner/real-block","handlingStrategy":"validation","validationCode":"const content = await registry.getContent(id);\nif (content === undefined) throw new Error(`Unknown block ${encodePackageIdentifier(id)}`);","typeGuard":null,"tryCatchPattern":"try { await resolveBlock(id, inputs, registry); } catch (e) { if (e.message.includes('not found')) { /* prompt user to fix slug/path */ } }","preventionTips":["Verify slugs against the registry before referencing","For file URIs, check existence with fs.existsSync first"],"tags":["block","registry","not-found"],"backgroundTag":"resource-not-found","analyzedSha":"5522c6f44ca0ac3528b37244818fbfa39b5af470","analyzedAt":"2026-08-27T11:28:54.683Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}