zed-industries/zed · warning · Error

Message params.text is undefined: ${JSON.stringify(message)}

Error message

Message params.text is undefined: ${JSON.stringify(message)}

What it means

github_raw_url accepts only two hosts: github.com (blob URLs) and raw.githubusercontent.com (raw file URLs). Any other host in the pasted URL is rejected with this message before parsing continues. It is a whitelist check in the skill-import input validation.

Source

Thrown at crates/prettier/src/prettier_server.js:167

async function handleMessage(message, prettier) {
  const { method, id, params } = message;
  if (method === undefined) {
    throw new Error(`Message method is undefined: ${JSON.stringify(message)}`);
  } else if (method == "initialized") {
    return;
  } else if (method === "shutdown") {
    sendResponse({ result: {} });
  } else if (method == "exit") {
    process.exit(0);
  }

  if (id === undefined) {
    throw new Error(`Message id is undefined: ${JSON.stringify(message)}`);
  }

  if (method === "prettier/format") {
    if (params === undefined || params.text === undefined) {
      throw new Error(`Message params.text is undefined: ${JSON.stringify(message)}`);
    }
    if (params.options === undefined) {
      throw new Error(`Message params.options is undefined: ${JSON.stringify(message)}`);
    }

    let resolvedConfig = {};
    if (params.options.filepath) {
      resolvedConfig = (await prettier.prettier.resolveConfig(params.options.filepath, { editorconfig: true })) || {};

      if (params.options.ignorePath) {
        const fileInfo = await prettier.prettier.getFileInfo(params.options.filepath, {
          ignorePath: params.options.ignorePath,
        });
        if (fileInfo.ignored) {
          process.stderr.write(
            `Ignoring file '${params.options.filepath}' based on rules in '${params.options.ignorePath}'\n`,
          );
          sendResponse({ id, result: { text: params.text } });

View on GitHub (pinned to f4178619ac)

Solutions

  1. Open the file inside its GitHub repository and copy the github.com blob URL
  2. For raw links, use the Raw button on the GitHub file page, which yields a raw.githubusercontent.com URL
  3. If the file is only on another forge, move or mirror it to github.com first

Example fix

# before
https://gist.github.com/acme/abc123/repo

# after
https://github.com/acme/skills/blob/main/SKILL.md
Defensive patterns

Strategy: validation

Validate before calling

let url = url::Url::parse(input.trim())?;
ensure!(
    matches!(url.host_str(), Some("github.com") | Some("raw.githubusercontent.com")),
    "Paste a GitHub .md URL"
);

Type guard

fn is_github_host(input: &str) -> bool {
    url::Url::parse(input.trim())
        .ok()
        .and_then(|u| u.host_str().map(|h| h == "github.com" || h == "raw.githubusercontent.com"))
        .unwrap_or(false)
}

Prevention

When it happens

Trigger: The URL host is neither github.com nor raw.githubusercontent.com: gist.github.com/..., gist.githubusercontent.com/..., gitlab.com/..., cdn.jsdelivr.net/..., bitbucket.org/...

Common situations: The skill file lives in a GitHub gist, on GitLab, or behind a CDN/mirror; the user pasted the repo home page of a different forge; the URL was copied from a docs site that embeds GitHub content.

Related errors


AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20). Data as JSON: /api/errors/c82d424dca69781f. Report an issue: GitHub.