continuedev/continue · warning

Skipping input "${key}" with invalid value type: ${typeof va

Error message

Skipping input "${key}" with invalid value type: ${typeof value}. Expected string.

What it means

In packages/config-yaml's unroll stage, renderInputs builds a Record<string,string> of package inputs. Any input whose value is undefined, null, or not a string (number, boolean, object, array) is skipped with this warning, because templating (renderTemplateData) only operates on strings. YAML users often write numeric or boolean input values, which YAML parses as non-string scalars.

Source

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

      // Convert the rule object to the expected format
      parsedYaml = { name: rule.name, version: "1.0.0", rules: [rule] } as T;
    } catch (markdownError) {
      // If both fail, throw the original YAML error
      throw yamlError;
    }
  }
  return parsedYaml;
}

function inputsToFQSNs(
  inputs: Record<string, string | undefined>,
  blockIdentifier: PackageIdentifier,
): Record<string, string> {
  const renderedInputs: Record<string, string> = {};
  for (const [key, value] of Object.entries(inputs)) {
    // Skip undefined, null, or non-string values
    if (value === undefined || value === null || typeof value !== "string") {
      console.warn(
        `Skipping input "${key}" with invalid value type: ${typeof value}. Expected string.`,
      );
      continue;
    }

    renderedInputs[key] = renderTemplateData(value, {
      secrets: extractFQSNMap(value, [blockIdentifier]),
    });
  }
  return renderedInputs;
}

export function mergeOverrides<T extends Record<string, any>>(
  block: T,
  overrides: Partial<T>,
): T {
  for (const key in overrides) {
    if (overrides.hasOwnProperty(key)) {

View on GitHub (pinned to 5522c6f44c)

Solutions

  1. Quote the value in YAML so it parses as a string: `count: "3"` instead of `count: 3`
  2. Coerce non-string inputs to strings before passing them (String(value)) if the value is meaningful
  3. Remove inputs that are undefined/null because the key was not provided and no default exists
  4. Keep input schemas to flat string fields only; this API explicitly expects Record<string,string>

Example fix

# before
inputs:
  port: 8080
  verbose: true

# after
inputs:
  port: "8080"
  verbose: "true"
Defensive patterns

Strategy: validation

Validate before calling

const clean = Object.fromEntries(
  Object.entries(inputs).filter(
    ([, v]) => typeof v === "string" && v.length > 0,
  ),
);

Type guard

const isStringInputs = (i: unknown): i is Record<string, string> =>
  typeof i === "object" && i !== null &&
  Object.values(i).every((v) => typeof v === "string");

Prevention

When it happens

Trigger: A YAML package config defining inputs like `count: 3` or `verbose: true` (YAML scalar types, not quoted strings) fed into the unroll/renderInputs path.

Common situations: Writing numeric ports, booleans, or nested maps as package inputs in config YAML; merging JSON defaults that contain numbers; forgetting quotes around values intended as strings.

Related errors


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