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
- Quote the value in YAML so it parses as a string: `count: "3"` instead of `count: 3`
- Coerce non-string inputs to strings before passing them (String(value)) if the value is meaningful
- Remove inputs that are undefined/null because the key was not provided and no default exists
- 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
- Always quote scalar input values in YAML configs
- Run a schema check on inputs before unroll: every value must be a string
- Coerce numbers/booleans with String() at the config boundary
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
- Profile ${profileId} not found
- Failed to parse config: ${e.message}
- No reranker set up
- No chat model selected
- Failed to load config
AI-assisted analysis of continuedev/continue@5522c6f44c (2026-08-27).
Data as JSON: /api/errors/2b01c7a09129adfd.
Report an issue: GitHub.